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