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

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

Как программно изменить цвет текста в 1С

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

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

Главная ловушка для начинающих разработчиков — попытка присвоить цвету строку вроде «Красный» или число. Такой код либо вызовет ошибку, либо молча не сработает. Свойства ЦветТекста и ЦветФона принимают только объект Цвет, созданный конструктором Новый Цвет(...) или взятый из коллекций ЦветаСтиля и WebЦвета.

Ниже разобраны рабочие приёмы для управляемых форм, обычных форм, табличных документов и динамических списков, а также типичные ошибки и способы проверить результат.

Три источника цвета: стиль, веб-палитра и RGB

Прежде чем менять цвет, нужно получить сам объект цвета. В платформе есть три штатных способа, и у каждого своё назначение.

Первый — ЦветаСтиля. Это коллекция цветов, определённых в конфигурации и встроенном стиле платформы. Обращение выглядит так: ЦветаСтиля.ЦветОтрицательногоЧисла или ЦветаСтиля.ЦветАкцента. Плюс подхода в том, что при смене темы оформления интерфейса цвета останутся гармоничными. Минус — набор ограничен, и произвольный оттенок так не получить.

Второй — WebЦвета: предопределённая палитра веб-цветов, например WebЦвета.Красный, WebЦвета.ТемноЗеленый, WebЦвета.СветлоСерый. Это быстрый способ указать узнаваемый цвет без подбора компонентов.

Третий — конструктор Новый Цвет(Красный, Зеленый, Синий), где каждый компонент — число от 0 до 255. Например, Новый Цвет(180, 0, 0) даст тёмно-красный оттенок. Такой способ нужен, когда требуется точный корпоративный цвет или оттенок, которого нет в палитрах.

Изменение цвета текста элемента формы

Для управляемой формы цвет текста элемента задаётся через свойство ЦветТекста. Код выполняется на клиенте в модуле формы, чаще всего в обработчиках ПриСозданииНаСервере (через серверный вызов), ПриОткрытии или в реакции на действие пользователя.

&НаКлиенте

Процедура ПодсветитьПросрочку(Команда)

Элементы.ДатаОплаты.ЦветТекста = Новый Цвет(200, 0, 0);

КонецПроцедуры

Аналогично работают свойства ЦветФона и ЦветРамки. У надписей, полей ввода, кнопок и таблиц формы набор доступных свойств немного отличается, поэтому перед использованием стоит проверить в синтакс-помощнике, поддерживает ли конкретный вид элемента нужное свойство.

Для обычных форм (толстый клиент, старые конфигурации) подход тот же: у элемента управления есть свойство ЦветТекста, и оно принимает тот же объект Цвет. Разница лишь в том, что в обычных формах код исполняется непосредственно в модуле формы без разделения на клиент и сервер.

bsl
Элементы.СуммаДокумента.ЦветТекста = WebЦвета.ТемноЗеленый;
Элементы.СуммаДокумента.ЦветФона = Новый Цвет(255, 255, 220);

Раскраска строк списка по условию через условное оформление

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

Условное оформление настраивается программно через коллекцию УсловноеОформление формы. Для каждого правила задаются три части: оформляемые поля, отбор (условие) и само оформление (цвет текста или фона).

&НаСервере

Процедура УстановитьОформлениеСписка()

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

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

ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Список");

Отбор = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Просрочен");

Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

Отбор.ПравоеЗначение = Истина;

ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);

КонецПроцедуры

Тот же результат можно получить без кода — через настройку условного оформления в конфигураторе или в пользовательском режиме «Ещё → Настроить список». Программный вариант нужен, когда условие вычисляется сложной логикой или должно включаться динамически.

Порядок настройки условного оформления
  1. 1
    Добавьте элемент в коллекцию УсловноеОформление формы
  2. 2
    Укажите оформляемые поля (конкретные колонки или весь список)
  3. 3
    Задайте отбор: поле, вид сравнения, значение
  4. 4
    Установите параметр оформления ЦветТекста или ЦветФона
  5. 5
    Откройте форму и проверьте раскраску на тестовых данных

Цвет текста в табличном документе

Табличный документ (печатные формы, отчёты, макеты) раскрашивается через свойства области. У объекта ТабличныйДокумент и у областей есть свойства ЦветТекста и ЦветФона, которые также принимают объект Цвет.

ТабДок = Новый ТабличныйДокумент;

Область = ТабДок.Область(1, 1, 1, 1);

Область.Текст = "Итог с минусом";

Область.ЦветТекста = Новый Цвет(255, 0, 0);

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

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

Выбор подхода под задачу

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

ЗадачаИнструментГде пишется код
Подсветить одно поле формыСвойство ЦветТекста элементаМодуль формы
Раскрасить строки списка по условиюУсловное оформление формыПриСозданииНаСервере
Цвет в печатной формеСвойства области табличного документаМодуль менеджера / команда печати
Цвет в отчёте на СКДУсловное оформление СКДНастройки отчёта или код
Цвет, зависящий от темы интерфейсаЦветаСтиляЛюбой из перечисленных
Маршрут решения

Как выбрать подход

Нужно выделить один элемент на формеПрисвойте Элементы.ИмяЭлемента.ЦветТекста объект Цвет
Цвет зависит от данных строки спискаИспользуйте условное оформление формы с отбором
Красится печатная формаМеняйте ЦветТекста области табличного документа при выводе
Цвет должен соответствовать теме интерфейсаБерите значение из ЦветаСтиля вместо жёсткого RGB

Типичные ошибки и ограничения

Самая частая ошибка — присвоение строки: Элементы.Поле.ЦветТекста = "Красный". Платформа либо выдаст ошибку преобразования типа, либо проигнорирует значение. Всегда создавайте объект через Новый Цвет или берите из палитр.

Вторая ошибка — попытка раскрасить строки динамического списка в цикле. У динамического списка нет программного доступа к отображаемым строкам, поэтому единственный рабочий путь — условное оформление. То же относится к таблицам, связанным с динамическим списком.

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

Типичные ошибки
01
Присвоение строки вместо объекта Цвет — ошибка типа или отсутствие эффекта
02
Попытка перекрасить строки динамического списка в цикле — нет доступа к строкам, нужно условное оформление
03
Добавление элементов условного оформления при каждом событии — дублирование правил и падение производительности
04
Игнорирование приоритета условного оформления над прямым присвоением ЦветТекста
05
Выход компонентов RGB за диапазон 0–255 — ошибка выполнения

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

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

Если цвет не появился, проверьте по порядку: тип присваиваемого значения (объект Цвет), имя элемента в Элементы (опечатки не вызывают ошибки, если обращение идёт к существующему, но другому элементу), наличие конфликтующего условного оформления и то, в каком событии выполняется код — до отрисовки формы присвоение может быть перезаписано.

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

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

Тип значения
Норма

Объект, созданный через Новый Цвет или из ЦветаСтиля/WebЦвета

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

Строка с именем цвета или число

Применение к элементу
Норма

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

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

Цвет пропадает при перерисовке или не появляется

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

Один элемент оформления на одно условие, срабатывает на тестовых данных

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

Дубли правил в коллекции, окрашиваются лишние строки

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

Можно ли задать цвет шестнадцатеричным кодом, как в HTML?

Напрямую — нет, конструктор принимает три числовых компонента RGB. Шестнадцатеричный код вроде #FF8800 легко перевести вручную: FF = 255, 88 = 136, 00 = 0, то есть Новый Цвет(255, 136, 0). При необходимости напишите небольшую функцию-конвертер.

Почему цвет текста поля ввода не меняется, хотя код выполняется?

Чаще всего причина в условном оформлении формы, которое перекрывает прямое присвоение, либо в том, что код выполняется в событии, после которого форма перерисовывается с настройками по умолчанию. Проверьте коллекцию УсловноеОформление и перенесите присвоение в более позднее событие.

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

Присвойте свойству значение из ЦветаСтиля, соответствующее стандартному оформлению (например, ЦветаСтиля.ЦветТекстаПоля), или создайте объект Новый Цвет() без параметров — автоцвет, который интерпретируется как цвет по умолчанию текущего стиля.

Работает ли Новый Цвет на сервере и в фоновом задании?

Да, объект Цвет доступен в любом контексте, включая сервер и фоновые задания. Ограничение касается не цвета, а элементов формы: обращаться к Элементы можно только в модуле формы. Табличные документы можно окрашивать полностью на сервере.

Как раскрасить только часть текста в одной строке?

Для ячеек табличного документа и полей формы это невозможно — цвет применяется ко всему содержимому. Частичное форматирование доступно в форматированном документе и форматированной строке (объект ФорматированнаяСтрока), где каждому фрагменту задаётся свой цвет.

Итог

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

Цвет текста в 1С — это всегда объект Цвет: Новый Цвет(R,G,B), ЦветаСтиля или WebЦвета. Одиночные элементы красятся свойством ЦветТекста, строки списков — условным оформлением, печатные формы — свойствами областей табличного документа. Строковые имена цветов не работают, а условное оформление имеет приоритет над прямым присвоением.