К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как в 1С получить цвет из стиля

Как в 1С получить цвет из стиля: работа с ЦветаСтиля, БиблиотекаЦветовСтиля, элементами стиля в конфигураторе, примеры кода и типичные ошибки разработчиков.

В 1С:Предприятии цвета оформления форм не задаются произвольными значениями RGB напрямую в коде типовых решений — они берутся из стиля конфигурации. Стиль гарантирует, что интерфейс выглядит единообразно и корректно отображается при смене темы оформления. Разработчику, который хочет подсветить строку таблицы, окрасить надпись или задать фон поля, нужно уметь обращаться к элементам стиля программно.

Основной инструмент для этого — глобальный контекст ЦветаСтиля, который предоставляет доступ ко всем цветам, определённым в конфигурации и в системном стиле платформы. Дополнительно существует объект БиблиотекаЦветовСтиля, позволяющий обращаться к цветам по строковому имени, что удобно при хранении имён цветов в настройках или реквизитах.

Ниже разобраны способы получения цвета из стиля, различия между подходами, работа с элементами стиля в конфигураторе и типичные ошибки, которые приводят к тому, что нужный цвет «не находится».

Что такое стиль и элементы стиля в 1С

Стиль в конфигурации 1С — это совокупность элементов оформления: цветов, шрифтов, линий и картинок. Они хранятся в ветке «Общие → Стили» дерева конфигурации. Типовые конфигурации обычно используют один основной стиль, унаследованный от системного, но разработчик может добавлять собственные элементы стиля.

Каждый элемент стиля имеет имя, вид (цвет, шрифт, линия) и значение. Именно по имени к элементу обращаются из встроенного языка. Платформа автоматически включает в стиль набор системных цветов — например, ЦветФонаФормы, ЦветТекстаФормы, ЦветАкцента, — которые доступны даже в пустой конфигурации.

Важно понимать: элемент стиля и его значение — не одно и то же. Когда вы обращаетесь к ЦветаСтиля.ИмяЭлемента, платформа возвращает объект типа Цвет, то есть уже конкретное значение, готовое к присвоению свойствам оформления.

Получение цвета через ЦветаСтиля

Самый распространённый способ — обращение к свойству глобального контекста ЦветаСтиля. Имя свойства совпадает с именем элемента стиля. Код выглядит так:

// Получаем системный цвет фона формы

НужныйЦвет = ЦветаСтиля.ЦветФонаФормы;

// Применяем к элементу формы

Элементы.ДекорацияПредупреждение.ЦветФона = ЦветаСтиля.ЦветФонаКнопки;

Элементы.НадписьОшибка.ЦветТекста = ЦветаСтиля.ЦветОтрицательногоЧисла;

Обращение через точку работает только если элемент стиля с таким именем существует в конфигурации или в системном стиле. Если имени нет, платформа при выполнении выдаст ошибку «Поле объекта не обнаружено». Поэтому перед использованием собственного элемента стиля убедитесь, что он добавлен в конфигурацию и конфигурация базы данных обновлена.

Типовые конфигурации на БСП (Библиотека стандартных подсистем) добавляют свои элементы стиля — например, ЦветТекстаНекорректногоКонтрагента или ГиперссылкаЦвет. Их можно использовать так же, как системные, если ваша конфигурация включает соответствующие подсистемы.

Получение цвета по имени через БиблиотекаЦветовСтиля

Когда имя цвета заранее неизвестно — например, оно хранится в реквизите справочника, в настройках пользователя или приходит из внешнего источника, — обращение через точку не подходит. Для этого служит объект БиблиотекаЦветовСтиля, который работает как коллекция с доступом по строковому ключу:

ИмяЦвета = "ЦветАкцента"; // может прийти из настроек

НужныйЦвет = БиблиотекаЦветовСтиля[ИмяЦвета];

Если НужныйЦвет = Неопределено Тогда

// Элемента стиля с таким именем нет — задаём цвет по умолчанию

НужныйЦвет = Новый Цвет(255, 0, 0);

КонецЕсли;

Ключевое отличие от ЦветаСтиля: при отсутствии элемента с указанным именем индексация возвращает Неопределено, а не вызывает исключение. Это позволяет безопасно работать с пользовательскими настройками и проверять корректность введённого имени.

Проверить, существует ли элемент, можно и без обращения к значению — перебором коллекции или попыткой получения с последующей проверкой на Неопределено. Второй вариант проще и быстрее.

Два способа получения цвета

ЦветаСтиля.ИмяЭлемента

Короткий и читаемый синтаксис. Подходит, когда имя известно на этапе разработки. При отсутствии элемента вызывает ошибку выполнения.

БиблиотекаЦветовСтиля[Имя]

Имя передаётся строкой, можно брать из данных. При отсутствии элемента возвращает Неопределено — требуется проверка. Чуть менее наглядно в коде.

Как найти нужный элемент стиля в конфигураторе

Прежде чем писать код, нужно узнать точное имя элемента стиля. Откройте конфигуратор и перейдите в ветку «Конфигурация → Общие → Стили». Двойной щелчок по стилю открывает палитру элементов, сгруппированных по назначению: цвета формы, цвета полей, цвета таблиц и так далее.

Быстрый способ подобрать подходящий цвет — посмотреть, какой элемент стиля использует похожий типовой объект. Например, откройте любую типовую форму, выделите нужный элемент и посмотрите значение его свойства «ЦветФона» или «ЦветТекста» в палитре свойств: там будет указано имя элемента стиля через точку после слова «Стиль».

Как подобрать и применить цвет из стиля
  1. 1
    Откройте в конфигураторе ветку Общие → Стили и найдите подходящий элемент по назначению
  2. 2
    Запомните или скопируйте точное имя элемента стиля
  3. 3
    В модуле формы получите цвет: ЦветаСтиля.ИмяЭлемента или БиблиотекаЦветовСтиля["ИмяЭлемента"]
  4. 4
    Присвойте цвет свойству ЦветФона или ЦветТекста нужного элемента формы
  5. 5
    Обновите конфигурацию базы данных и проверьте отображение в режиме Предприятие
  6. 6
    Проверьте, как цвет выглядит при смене варианта интерфейса (такси / обычный), если конфигурация поддерживает оба

Применение цвета в условном оформлении и динамических списках

Подсветка строк таблиц и динамических списков обычно выполняется не прямым присваиванием свойствам, а через условное оформление. Цвет из стиля там указывается в поле «Оформление» — в конфигураторе это делается выбором из выпадающего списка элементов стиля, программно — присваиванием значения параметру оформления:

ЭлементОформления = УсловноеОформление.Элементы.Добавить();

// ... настройка отбора и полей ...

ЭлементОформления.Оформление.УстановитьЗначениеПараметра(

"ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла);

Преимущество условного оформления перед прямым окрашиванием — декларативность: правило срабатывает автоматически при изменении данных списка, не требуя обработчиков на каждое обновление. Для динамических списков это практически единственный корректный способ раскраски.

Если условное оформление задаётся в форме в конфигураторе, цвет выбирается через диалог, где доступна вкладка «Стиль» — там перечислены все элементы, и видно их фактический вид.

Создание собственного элемента стиля

Если системных и типовых цветов не хватает, добавьте собственный элемент. В конфигураторе откройте стиль, нажмите «Добавить элемент стиля», выберите вид «Цвет», задайте имя (оно должно быть уникальным и осмысленным, например ЦветФонаПросроченногоЗаказа) и укажите значение.

После обновления конфигурации базы данных элемент становится доступен и через ЦветаСтиля, и через БиблиотекаЦветовСтиля. Главное преимущество перед жёстким Новый Цвет(r, g, b) в коде — возможность централизованно изменить оформление без переписывания модулей.

Типичные ошибки при работе с цветами стиля
01
Обращение к ЦветаСтиля.ИмяЭлемента до обновления конфигурации БД — элемент ещё не существует в информационной базе, возникает ошибка выполнения
02
Хранение цвета в реквизите как объекта Цвет — тип Цвет нельзя сохранить в базу напрямую; храните имя элемента стиля строкой или компоненты RGB
03
Использование произвольных RGB-цветов вместо стиля — при смене темы оформления такие элементы выбиваются из общего вида
04
Отсутствие проверки на Неопределено при чтении через БиблиотекаЦветовСтиля — при опечатке в имени цвет молча не применяется

Ограничения и частые проблемы

Объект Цвет в 1С не сериализуется в хранилище значений в виде, удобном для прямого восстановления, и не имеет строкового представления RGB «из коробки». Если нужно передать цвет между сеансами или системами, передавайте имя элемента стиля либо три числовые компоненты.

В клиент-серверном режиме обращение к ЦветаСтиля доступно и на клиенте, и на сервере, но присваивать цвет свойствам элементов формы имеет смысл только там, где форма существует — то есть на клиенте или в серверных процедурах формы.

Ещё одна ловушка — различие палитр в разных вариантах интерфейса. Системные цвета адаптируются под интерфейс «Такси», поэтому один и тот же элемент стиля может выглядеть иначе в разных версиях платформы. Это нормальное поведение, а не ошибка.

Контрольные точки

Как проверить результат

Отображение элемента формы
Норма

Цвет соответствует выбранному элементу стиля и меняется при смене его значения в конфигураторе

Тревожный признак

Цвет не применился или остался прежним после изменения стиля — вероятно, задано жёсткое значение RGB

Код с БиблиотекаЦветовСтиля
Норма

При корректном имени возвращается объект типа Цвет, при неверном — Неопределено с отработкой ветки по умолчанию

Тревожный признак

Необработанное Неопределено приводит к сбросу оформления или ошибке

Условное оформление списка
Норма

Строки окрашиваются автоматически при изменении данных без дополнительных обработчиков

Тревожный признак

Раскраска появляется только после ручного обновления — правило задано не в условном оформлении

Итог

Что важно запомнить

Цвет из стиля получают через ЦветаСтиля.ИмяЭлемента (когда имя известно) или БиблиотекаЦветовСтиля[Имя] (когда имя хранится строкой, с проверкой на Неопределено). Собственные элементы добавляются в конфигураторе в ветке Стили и требуют обновления конфигурации БД. Для списков используйте условное оформление, а не прямое окрашивание.

Частые вопросы

Можно ли получить значение RGB цвета из стиля?

У объекта Цвет доступны свойства красной, зелёной и синей составляющих (Красный, Зеленый, Синий) для абсолютных цветов. Однако для системных и автоцветов эти компоненты могут быть недоступны или иметь специальные значения, поэтому надёжнее оперировать самим объектом Цвет, а не разбирать его на составляющие.

Чем ЦветаСтиля отличается от WebЦвета и WindowsЦвета?

ЦветаСтиля ссылается на элементы стиля конфигурации и адаптируется под тему оформления. WebЦвета и WindowsЦвета — фиксированные палитры с заранее заданными оттенками, не зависящими от стиля. Для прикладного интерфейса предпочтителен стиль.

Почему после добавления элемента стиля код выдаёт «Поле объекта не обнаружено»?

Чаще всего конфигурация базы данных не обновлена: элемент существует в конфигураторе, но ещё не перенесён в рабочую базу. Выполните обновление конфигурации БД (F7) и перезапустите сеанс. Также проверьте точность имени — оно чувствительно к опечаткам.

Можно ли сохранить цвет стиля в реквизит объекта?

Напрямую тип Цвет в реквизитах базы не хранится. Сохраняйте имя элемента стиля строкой и восстанавливайте цвет через БиблиотекаЦветовСтиля, либо храните три числовые компоненты RGB и создавайте цвет конструктором Новый Цвет.

Как раскрасить строки динамического списка по условию?

Используйте условное оформление списка: добавьте элемент, задайте отбор по полю данных, укажите оформляемые поля и в параметре ЦветФона или ЦветТекста установите значение из ЦветаСтиля. Правило будет срабатывать автоматически при обновлении данных.

Работает ли обращение к стилю на мобильной платформе?

Да, ЦветаСтиля и БиблиотекаЦветовСтиля доступны на мобильной платформе, но набор системных элементов стиля и их внешний вид могут отличаться от настольного клиента. Проверяйте оформление непосредственно на целевом устройстве.