Разработка и Конфигурация · 11 мин
Как в 1С получить цвет из стиля
Как в 1С получить цвет из стиля: работа с ЦветаСтиля, БиблиотекаЦветовСтиля, элементами стиля в конфигураторе, примеры кода и типичные ошибки разработчиков.
В 1С:Предприятии цвета оформления форм не задаются произвольными значениями RGB напрямую в коде типовых решений — они берутся из стиля конфигурации. Стиль гарантирует, что интерфейс выглядит единообразно и корректно отображается при смене темы оформления. Разработчику, который хочет подсветить строку таблицы, окрасить надпись или задать фон поля, нужно уметь обращаться к элементам стиля программно.
Основной инструмент для этого — глобальный контекст ЦветаСтиля, который предоставляет доступ ко всем цветам, определённым в конфигурации и в системном стиле платформы. Дополнительно существует объект БиблиотекаЦветовСтиля, позволяющий обращаться к цветам по строковому имени, что удобно при хранении имён цветов в настройках или реквизитах.
Ниже разобраны способы получения цвета из стиля, различия между подходами, работа с элементами стиля в конфигураторе и типичные ошибки, которые приводят к тому, что нужный цвет «не находится».
Что такое стиль и элементы стиля в 1С
Стиль в конфигурации 1С — это совокупность элементов оформления: цветов, шрифтов, линий и картинок. Они хранятся в ветке «Общие → Стили» дерева конфигурации. Типовые конфигурации обычно используют один основной стиль, унаследованный от системного, но разработчик может добавлять собственные элементы стиля.
Каждый элемент стиля имеет имя, вид (цвет, шрифт, линия) и значение. Именно по имени к элементу обращаются из встроенного языка. Платформа автоматически включает в стиль набор системных цветов — например, ЦветФонаФормы, ЦветТекстаФормы, ЦветАкцента, — которые доступны даже в пустой конфигурации.
Важно понимать: элемент стиля и его значение — не одно и то же. Когда вы обращаетесь к ЦветаСтиля.ИмяЭлемента, платформа возвращает объект типа Цвет, то есть уже конкретное значение, готовое к присвоению свойствам оформления.
Получение цвета через ЦветаСтиля
Самый распространённый способ — обращение к свойству глобального контекста ЦветаСтиля. Имя свойства совпадает с именем элемента стиля. Код выглядит так:
// Получаем системный цвет фона формы
НужныйЦвет = ЦветаСтиля.ЦветФонаФормы;
// Применяем к элементу формы
Элементы.ДекорацияПредупреждение.ЦветФона = ЦветаСтиля.ЦветФонаКнопки;
Элементы.НадписьОшибка.ЦветТекста = ЦветаСтиля.ЦветОтрицательногоЧисла;
Обращение через точку работает только если элемент стиля с таким именем существует в конфигурации или в системном стиле. Если имени нет, платформа при выполнении выдаст ошибку «Поле объекта не обнаружено». Поэтому перед использованием собственного элемента стиля убедитесь, что он добавлен в конфигурацию и конфигурация базы данных обновлена.
Типовые конфигурации на БСП (Библиотека стандартных подсистем) добавляют свои элементы стиля — например, ЦветТекстаНекорректногоКонтрагента или ГиперссылкаЦвет. Их можно использовать так же, как системные, если ваша конфигурация включает соответствующие подсистемы.
Получение цвета по имени через БиблиотекаЦветовСтиля
Когда имя цвета заранее неизвестно — например, оно хранится в реквизите справочника, в настройках пользователя или приходит из внешнего источника, — обращение через точку не подходит. Для этого служит объект БиблиотекаЦветовСтиля, который работает как коллекция с доступом по строковому ключу:
ИмяЦвета = "ЦветАкцента"; // может прийти из настроек
НужныйЦвет = БиблиотекаЦветовСтиля[ИмяЦвета];
Если НужныйЦвет = Неопределено Тогда
// Элемента стиля с таким именем нет — задаём цвет по умолчанию
НужныйЦвет = Новый Цвет(255, 0, 0);
КонецЕсли;
Ключевое отличие от ЦветаСтиля: при отсутствии элемента с указанным именем индексация возвращает Неопределено, а не вызывает исключение. Это позволяет безопасно работать с пользовательскими настройками и проверять корректность введённого имени.
Проверить, существует ли элемент, можно и без обращения к значению — перебором коллекции или попыткой получения с последующей проверкой на Неопределено. Второй вариант проще и быстрее.
Два способа получения цвета
Короткий и читаемый синтаксис. Подходит, когда имя известно на этапе разработки. При отсутствии элемента вызывает ошибку выполнения.
Имя передаётся строкой, можно брать из данных. При отсутствии элемента возвращает Неопределено — требуется проверка. Чуть менее наглядно в коде.
Как найти нужный элемент стиля в конфигураторе
Прежде чем писать код, нужно узнать точное имя элемента стиля. Откройте конфигуратор и перейдите в ветку «Конфигурация → Общие → Стили». Двойной щелчок по стилю открывает палитру элементов, сгруппированных по назначению: цвета формы, цвета полей, цвета таблиц и так далее.
Быстрый способ подобрать подходящий цвет — посмотреть, какой элемент стиля использует похожий типовой объект. Например, откройте любую типовую форму, выделите нужный элемент и посмотрите значение его свойства «ЦветФона» или «ЦветТекста» в палитре свойств: там будет указано имя элемента стиля через точку после слова «Стиль».
- 1Откройте в конфигураторе ветку Общие → Стили и найдите подходящий элемент по назначению
- 2Запомните или скопируйте точное имя элемента стиля
- 3В модуле формы получите цвет: ЦветаСтиля.ИмяЭлемента или БиблиотекаЦветовСтиля["ИмяЭлемента"]
- 4Присвойте цвет свойству ЦветФона или ЦветТекста нужного элемента формы
- 5Обновите конфигурацию базы данных и проверьте отображение в режиме Предприятие
- 6Проверьте, как цвет выглядит при смене варианта интерфейса (такси / обычный), если конфигурация поддерживает оба
Применение цвета в условном оформлении и динамических списках
Подсветка строк таблиц и динамических списков обычно выполняется не прямым присваиванием свойствам, а через условное оформление. Цвет из стиля там указывается в поле «Оформление» — в конфигураторе это делается выбором из выпадающего списка элементов стиля, программно — присваиванием значения параметру оформления:
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
// ... настройка отбора и полей ...
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(
"ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла);
Преимущество условного оформления перед прямым окрашиванием — декларативность: правило срабатывает автоматически при изменении данных списка, не требуя обработчиков на каждое обновление. Для динамических списков это практически единственный корректный способ раскраски.
Если условное оформление задаётся в форме в конфигураторе, цвет выбирается через диалог, где доступна вкладка «Стиль» — там перечислены все элементы, и видно их фактический вид.
Создание собственного элемента стиля
Если системных и типовых цветов не хватает, добавьте собственный элемент. В конфигураторе откройте стиль, нажмите «Добавить элемент стиля», выберите вид «Цвет», задайте имя (оно должно быть уникальным и осмысленным, например ЦветФонаПросроченногоЗаказа) и укажите значение.
После обновления конфигурации базы данных элемент становится доступен и через ЦветаСтиля, и через БиблиотекаЦветовСтиля. Главное преимущество перед жёстким Новый Цвет(r, g, b) в коде — возможность централизованно изменить оформление без переписывания модулей.
Ограничения и частые проблемы
Объект Цвет в 1С не сериализуется в хранилище значений в виде, удобном для прямого восстановления, и не имеет строкового представления RGB «из коробки». Если нужно передать цвет между сеансами или системами, передавайте имя элемента стиля либо три числовые компоненты.
В клиент-серверном режиме обращение к ЦветаСтиля доступно и на клиенте, и на сервере, но присваивать цвет свойствам элементов формы имеет смысл только там, где форма существует — то есть на клиенте или в серверных процедурах формы.
Ещё одна ловушка — различие палитр в разных вариантах интерфейса. Системные цвета адаптируются под интерфейс «Такси», поэтому один и тот же элемент стиля может выглядеть иначе в разных версиях платформы. Это нормальное поведение, а не ошибка.
Как проверить результат
Цвет соответствует выбранному элементу стиля и меняется при смене его значения в конфигураторе
Цвет не применился или остался прежним после изменения стиля — вероятно, задано жёсткое значение RGB
При корректном имени возвращается объект типа Цвет, при неверном — Неопределено с отработкой ветки по умолчанию
Необработанное Неопределено приводит к сбросу оформления или ошибке
Строки окрашиваются автоматически при изменении данных без дополнительных обработчиков
Раскраска появляется только после ручного обновления — правило задано не в условном оформлении
Что важно запомнить
Цвет из стиля получают через ЦветаСтиля.ИмяЭлемента (когда имя известно) или БиблиотекаЦветовСтиля[Имя] (когда имя хранится строкой, с проверкой на Неопределено). Собственные элементы добавляются в конфигураторе в ветке Стили и требуют обновления конфигурации БД. Для списков используйте условное оформление, а не прямое окрашивание.
Частые вопросы
Можно ли получить значение RGB цвета из стиля?
У объекта Цвет доступны свойства красной, зелёной и синей составляющих (Красный, Зеленый, Синий) для абсолютных цветов. Однако для системных и автоцветов эти компоненты могут быть недоступны или иметь специальные значения, поэтому надёжнее оперировать самим объектом Цвет, а не разбирать его на составляющие.
Чем ЦветаСтиля отличается от WebЦвета и WindowsЦвета?
ЦветаСтиля ссылается на элементы стиля конфигурации и адаптируется под тему оформления. WebЦвета и WindowsЦвета — фиксированные палитры с заранее заданными оттенками, не зависящими от стиля. Для прикладного интерфейса предпочтителен стиль.
Почему после добавления элемента стиля код выдаёт «Поле объекта не обнаружено»?
Чаще всего конфигурация базы данных не обновлена: элемент существует в конфигураторе, но ещё не перенесён в рабочую базу. Выполните обновление конфигурации БД (F7) и перезапустите сеанс. Также проверьте точность имени — оно чувствительно к опечаткам.
Можно ли сохранить цвет стиля в реквизит объекта?
Напрямую тип Цвет в реквизитах базы не хранится. Сохраняйте имя элемента стиля строкой и восстанавливайте цвет через БиблиотекаЦветовСтиля, либо храните три числовые компоненты RGB и создавайте цвет конструктором Новый Цвет.
Как раскрасить строки динамического списка по условию?
Используйте условное оформление списка: добавьте элемент, задайте отбор по полю данных, укажите оформляемые поля и в параметре ЦветФона или ЦветТекста установите значение из ЦветаСтиля. Правило будет срабатывать автоматически при обновлении данных.
Работает ли обращение к стилю на мобильной платформе?
Да, ЦветаСтиля и БиблиотекаЦветовСтиля доступны на мобильной платформе, но набор системных элементов стиля и их внешний вид могут отличаться от настольного клиента. Проверяйте оформление непосредственно на целевом устройстве.