Разработка и Конфигурация · 11 мин
Как программно изменить цвет текста в 1С
Как программно изменить цвет текста в 1С: ЦветаСтиля, WebЦвета, RGB, условное оформление формы и табличного документа. Примеры кода и разбор ошибок.
Цвет текста в 1С меняется несколькими способами, и выбор зависит от того, где именно нужно раскрасить текст: в элементе управляемой формы, в табличном документе, в поле ввода или в строках списка по условию. Во всех случаях используется объект типа Цвет, который можно получить из стиля конфигурации, из веб-палитры или задать явно через компоненты RGB.
Главная ловушка для начинающих разработчиков — попытка присвоить цвету строку вроде «Красный» или число. Такой код либо вызовет ошибку, либо молча не сработает. Свойства ЦветТекста и ЦветФона принимают только объект Цвет, созданный конструктором Новый Цвет(...) или взятый из коллекций ЦветаСтиля и WebЦвета.
Ниже разобраны рабочие приёмы для управляемых форм, обычных форм, табличных документов и динамических списков, а также типичные ошибки и способы проверить результат.
Три источника цвета: стиль, веб-палитра и RGB
Прежде чем менять цвет, нужно получить сам объект цвета. В платформе есть три штатных способа, и у каждого своё назначение.
Первый — ЦветаСтиля. Это коллекция цветов, определённых в конфигурации и встроенном стиле платформы. Обращение выглядит так: ЦветаСтиля.ЦветОтрицательногоЧисла или ЦветаСтиля.ЦветАкцента. Плюс подхода в том, что при смене темы оформления интерфейса цвета останутся гармоничными. Минус — набор ограничен, и произвольный оттенок так не получить.
Второй — WebЦвета: предопределённая палитра веб-цветов, например WebЦвета.Красный, WebЦвета.ТемноЗеленый, WebЦвета.СветлоСерый. Это быстрый способ указать узнаваемый цвет без подбора компонентов.
Третий — конструктор Новый Цвет(Красный, Зеленый, Синий), где каждый компонент — число от 0 до 255. Например, Новый Цвет(180, 0, 0) даст тёмно-красный оттенок. Такой способ нужен, когда требуется точный корпоративный цвет или оттенок, которого нет в палитрах.
Изменение цвета текста элемента формы
Для управляемой формы цвет текста элемента задаётся через свойство ЦветТекста. Код выполняется на клиенте в модуле формы, чаще всего в обработчиках ПриСозданииНаСервере (через серверный вызов), ПриОткрытии или в реакции на действие пользователя.
&НаКлиенте
Процедура ПодсветитьПросрочку(Команда)
Элементы.ДатаОплаты.ЦветТекста = Новый Цвет(200, 0, 0);
КонецПроцедуры
Аналогично работают свойства ЦветФона и ЦветРамки. У надписей, полей ввода, кнопок и таблиц формы набор доступных свойств немного отличается, поэтому перед использованием стоит проверить в синтакс-помощнике, поддерживает ли конкретный вид элемента нужное свойство.
Для обычных форм (толстый клиент, старые конфигурации) подход тот же: у элемента управления есть свойство ЦветТекста, и оно принимает тот же объект Цвет. Разница лишь в том, что в обычных формах код исполняется непосредственно в модуле формы без разделения на клиент и сервер.
Элементы.СуммаДокумента.ЦветТекста = WebЦвета.ТемноЗеленый;
Элементы.СуммаДокумента.ЦветФона = Новый Цвет(255, 255, 220);Раскраска строк списка по условию через условное оформление
Если нужно раскрасить не один элемент, а строки динамического списка или таблицы по условию (например, просроченные документы — красным, оплаченные — зелёным), прямое присвоение ЦветТекста не подходит: у динамического списка нет доступа к отдельным строкам. Здесь применяется условное оформление формы.
Условное оформление настраивается программно через коллекцию УсловноеОформление формы. Для каждого правила задаются три части: оформляемые поля, отбор (условие) и само оформление (цвет текста или фона).
&НаСервере
Процедура УстановитьОформлениеСписка()
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Список");
Отбор = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Просрочен");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Истина;
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
КонецПроцедуры
Тот же результат можно получить без кода — через настройку условного оформления в конфигураторе или в пользовательском режиме «Ещё → Настроить список». Программный вариант нужен, когда условие вычисляется сложной логикой или должно включаться динамически.
- 1Добавьте элемент в коллекцию УсловноеОформление формы
- 2Укажите оформляемые поля (конкретные колонки или весь список)
- 3Задайте отбор: поле, вид сравнения, значение
- 4Установите параметр оформления ЦветТекста или ЦветФона
- 5Откройте форму и проверьте раскраску на тестовых данных
Цвет текста в табличном документе
Табличный документ (печатные формы, отчёты, макеты) раскрашивается через свойства области. У объекта ТабличныйДокумент и у областей есть свойства ЦветТекста и ЦветФона, которые также принимают объект Цвет.
ТабДок = Новый ТабличныйДокумент;
Область = ТабДок.Область(1, 1, 1, 1);
Область.Текст = "Итог с минусом";
Область.ЦветТекста = Новый Цвет(255, 0, 0);
Если цвет должен зависеть от данных (например, отрицательные суммы — красным), раскраску выполняют при выводе области: после ТабДок.Вывести(Макет.Область) получают нужную область и меняют её оформление. Альтернатива — задать цвет прямо в макете в конфигураторе, если он статичен.
Для отчётов на СКД раскраска по условию делается через условное оформление настроек схемы компоновки — как в коде, так и в пользовательских настройках отчёта, без единой строки программы.
Выбор подхода под задачу
Разные сценарии требуют разных механизмов, и попытка применить неподходящий приводит к мёртвому коду. Ниже — сопоставление типовых задач и инструментов.
| Задача | Инструмент | Где пишется код |
|---|---|---|
| Подсветить одно поле формы | Свойство ЦветТекста элемента | Модуль формы |
| Раскрасить строки списка по условию | Условное оформление формы | ПриСозданииНаСервере |
| Цвет в печатной форме | Свойства области табличного документа | Модуль менеджера / команда печати |
| Цвет в отчёте на СКД | Условное оформление СКД | Настройки отчёта или код |
| Цвет, зависящий от темы интерфейса | ЦветаСтиля | Любой из перечисленных |
Как выбрать подход
Типичные ошибки и ограничения
Самая частая ошибка — присвоение строки: Элементы.Поле.ЦветТекста = "Красный". Платформа либо выдаст ошибку преобразования типа, либо проигнорирует значение. Всегда создавайте объект через Новый Цвет или берите из палитр.
Вторая ошибка — попытка раскрасить строки динамического списка в цикле. У динамического списка нет программного доступа к отображаемым строкам, поэтому единственный рабочий путь — условное оформление. То же относится к таблицам, связанным с динамическим списком.
Третья группа проблем — контекст исполнения. В управляемой форме обращение к Элементы возможно и на клиенте, и на сервере, но условное оформление разумно настраивать один раз при создании формы, а не при каждом событии, иначе элементы оформления будут плодиться и конфликтовать. Также помните: прямое присвоение цвета элементу перекрывается условным оформлением, если оно настроено на тот же элемент, — приоритет у условного оформления выше.
Как проверить результат
После внедрения кода откройте форму в режиме предприятия и проверьте три вещи: цвет применился к нужному элементу, цвет не сбрасывается при обновлении данных и при смене условия (например, после оплаты просроченный документ перестал быть красным). Для условного оформления полезно временно задать яркий невозможный цвет, чтобы убедиться, что срабатывает именно ваше правило, а не другое.
Если цвет не появился, проверьте по порядку: тип присваиваемого значения (объект Цвет), имя элемента в Элементы (опечатки не вызывают ошибки, если обращение идёт к существующему, но другому элементу), наличие конфликтующего условного оформления и то, в каком событии выполняется код — до отрисовки формы присвоение может быть перезаписано.
Как проверить результат
Объект, созданный через Новый Цвет или из ЦветаСтиля/WebЦвета
Строка с именем цвета или число
Цвет виден сразу после открытия формы и после обновления данных
Цвет пропадает при перерисовке или не появляется
Один элемент оформления на одно условие, срабатывает на тестовых данных
Дубли правил в коллекции, окрашиваются лишние строки
Частые вопросы
Можно ли задать цвет шестнадцатеричным кодом, как в HTML?
Напрямую — нет, конструктор принимает три числовых компонента RGB. Шестнадцатеричный код вроде #FF8800 легко перевести вручную: FF = 255, 88 = 136, 00 = 0, то есть Новый Цвет(255, 136, 0). При необходимости напишите небольшую функцию-конвертер.
Почему цвет текста поля ввода не меняется, хотя код выполняется?
Чаще всего причина в условном оформлении формы, которое перекрывает прямое присвоение, либо в том, что код выполняется в событии, после которого форма перерисовывается с настройками по умолчанию. Проверьте коллекцию УсловноеОформление и перенесите присвоение в более позднее событие.
Как вернуть цвет по умолчанию?
Присвойте свойству значение из ЦветаСтиля, соответствующее стандартному оформлению (например, ЦветаСтиля.ЦветТекстаПоля), или создайте объект Новый Цвет() без параметров — автоцвет, который интерпретируется как цвет по умолчанию текущего стиля.
Работает ли Новый Цвет на сервере и в фоновом задании?
Да, объект Цвет доступен в любом контексте, включая сервер и фоновые задания. Ограничение касается не цвета, а элементов формы: обращаться к Элементы можно только в модуле формы. Табличные документы можно окрашивать полностью на сервере.
Как раскрасить только часть текста в одной строке?
Для ячеек табличного документа и полей формы это невозможно — цвет применяется ко всему содержимому. Частичное форматирование доступно в форматированном документе и форматированной строке (объект ФорматированнаяСтрока), где каждому фрагменту задаётся свой цвет.
Что важно запомнить
Цвет текста в 1С — это всегда объект Цвет: Новый Цвет(R,G,B), ЦветаСтиля или WebЦвета. Одиночные элементы красятся свойством ЦветТекста, строки списков — условным оформлением, печатные формы — свойствами областей табличного документа. Строковые имена цветов не работают, а условное оформление имеет приоритет над прямым присвоением.