Разработка и Конфигурация · 12 мин
Как раскрасить строки таблицы значений в 1С
Как раскрасить строки таблицы значений в 1С через условное оформление формы: настройка в конфигураторе и программно, примеры кода, типичные ошибки и FAQ.
Раскрасить строки таблицы значений в 1С напрямую, как в Excel, нельзя: таблица значений — это объект данных, а не элемент интерфейса, и у неё нет свойств цвета. Цвет задаётся визуальному представлению таблицы — элементу формы, связанному с этой таблицей значений. Для этого используется механизм условного оформления формы, который работает и в управляемых, и (через аналогичный механизм) в обычных формах.
Условное оформление позволяет задать правило: если значение в колонке удовлетворяет условию (например, сумма отрицательная, количество равно нулю, статус «Отменён»), то строка или отдельная ячейка получает заданный цвет фона, цвет текста или шрифт. Правила можно создать в конфигураторе на этапе разработки формы или добавить программно в коде модуля формы — второй вариант нужен, когда условия и цвета зависят от настроек пользователя или вычисляются динамически.
Ниже разобраны оба подхода на практических примерах: настройка условного оформления в конфигураторе, программное добавление правил через свойство УсловноеОформление формы, раскраска отдельных ячеек, типичные ошибки и способы проверить, почему оформление не сработало.
Как устроено окрашивание таблиц в управляемой форме
В управляемом приложении любая таблица на форме — это элемент формы, связанный с реквизитом типа «ТаблицаЗначений» или «ДинамическийСписок». Внешний вид строк определяет условное оформление — коллекция правил, доступная через свойство формы УсловноеОформление. Каждое правило состоит из трёх частей: отбора (когда применять), оформления (что менять) и списка оформляемых полей (где применять).
Ключевой момент: условие проверяется по данным строки, а не по представлению. Это значит, что в отборе можно ссылаться на любую колонку таблицы значений, даже если она не выведена на форму. Например, можно хранить служебную колонку «ПризнакОшибки», не показывать её пользователю и раскрашивать строки по её значению.
Если таблица построена на динамическом списке (например, список документов), у неё есть собственное условное оформление в настройках списка — оно применяется в дополнение к оформлению формы. Для таблицы значений такой отдельной настройки нет, работает только оформление формы.
Настройка условного оформления в конфигураторе
Способ без программирования подходит, когда условия и цвета фиксированы и известны на этапе разработки. Все действия выполняются в редакторе формы.
- 1Откройте форму в конфигураторе и в дереве элементов выделите корневой элемент «Форма»
- 2В палитре свойств найдите свойство «УсловноеОформление» и откройте его
- 3Добавьте новый элемент оформления
- 4На закладке «Оформление» задайте параметр, например «Цвет фона», и выберите цвет
- 5На закладке «Условие» добавьте элемент отбора: поле, вид сравнения, значение (например, Сумма Меньше 0)
- 6На закладке «Оформляемые поля» добавьте поля таблицы, к которым применяется правило
- 7Сохраните форму и проверьте результат в режиме предприятия
Чтобы раскрасить строку целиком, в «Оформляемые поля» нужно добавить все видимые колонки таблицы. Если добавить только одну колонку, окрасится только она — это частая причина вопроса «почему красится одна ячейка вместо строки».
В условии доступны стандартные виды сравнения: равно, не равно, больше, меньше, в списке, содержит, заполнено и другие. Несколько условий внутри одного элемента отбора объединяются по «И». Если нужно «ИЛИ», создаются отдельные элементы отбора с группой «ГруппаИли» — в конфигураторе это делается кнопкой группировки условий.
Программное окрашивание строк таблицы значений
Программный вариант нужен, когда цвет или условие зависят от настроек, хранящихся в базе, или когда правила создаются динамически. Код обычно размещают в обработчике ПриСозданииНаСервере формы, чтобы оформление было готово до первого отображения.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
// Условие: сумма отрицательная
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(
Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение =
Новый ПолеКомпоновкиДанных("Товары.Сумма");
ЭлементОтбора.ВидСравнения =
ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = 0;
ЭлементОтбора.Использование = Истина;
// Оформление: красный фон
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(
"ЦветФона", WebЦвета.СветлоРозовый);
// Область действия: все колонки таблицы
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле =
Новый ПолеКомпоновкиДанных("Товары");
ПолеОформления.Использование = Истина;
КонецПроцедуры
Обратите внимание на путь в ЛевоеЗначение: «Товары.Сумма» — это имя реквизита формы (таблицы значений) и имя колонки. Если реквизит называется иначе, путь должен совпадать точно, иначе правило молча не сработает — платформа не выдаст ошибку.
Для нескольких правил добавляется несколько элементов в коллекцию УсловноеОформление.Элементы. Порядок элементов имеет значение: при конфликте (два правила задают разный цвет фона одной ячейке) приоритет имеет правило, расположенное ниже в списке.
Раскраска отдельных ячеек и по служебной колонке
Красим только одну колонку
Если нужно подсветить не всю строку, а конкретную ячейку (например, только колонку «Количество» при нулевом остатке), в поля оформления добавляется не таблица целиком, а конкретная колонка:
ПолеОформления.Поле =
Новый ПолеКомпоновкиДанных("ТоварыКоличество");
Здесь «ТоварыКоличество» — имя элемента формы (поля колонки), а не путь к данным. Имена элементов можно посмотреть в дереве элементов формы в конфигураторе.
Окраска по скрытой служебной колонке
Удобный приём для сложной логики: при заполнении таблицы значений программно вычислять признак и записывать его в служебную колонку, например «СостояниеСтроки» со значениями 0, 1, 2. Колонку на форму не выводят, а в условном оформлении создают три правила — по одному на каждое значение со своим цветом.
Приём со служебной колонкой заметно упрощает поддержку: вся бизнес-логика «какого цвета строка» собрана в одном месте заполнения таблицы, а правила оформления остаются тривиальными сравнениями с константой.
Этот подход особенно выигрывает, когда условие сложное — например, зависит от сравнения нескольких полей, остатков на складе или данных других таблиц. Выразить такое условие отбором компоновки данных бывает невозможно или громоздко.
Окрашивание в обычных формах и в табличном документе
В обычных формах (толстый клиент, старые конфигурации) механизм другой: там используется обработчик события табличного поля ПриВыводеСтроки, в котором через параметр ОформлениеСтроки задаётся цвет фона и текста:
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки.Сумма < 0 Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.СветлоРозовый;
КонецЕсли;
КонецПроцедуры
Если под «раскраской таблицы значений» на самом деле имеется в виду вывод в табличный документ (печатную форму или отчёт через ТабличныйДокумент), то цвет задаётся напрямую области ячеек: Область.ЦветФона = ... при выводе строк в цикле. Это третий, независимый сценарий, не связанный с условным оформлением.
Способы окрашивания строк
Подходит для постоянных правил; не требует кода; не подходит, если условия зависят от настроек в базе
Гибкость и динамика; требует кода в модуле формы и аккуратности с путями к полям
Лучший вариант для сложной логики; требует добавления колонки и её заполнения
Только для обычного приложения; в управляемых формах не работает
Типичные ошибки и как их найти
Самая частая проблема — правило создано, но строки не красятся. Причины почти всегда одни и те же: неверный путь в отборе (имя реквизита или колонки не совпадает), не заполнен список оформляемых полей, забыто Использование = Истина у отбора или поля, либо правило перекрыто другим элементом оформления ниже по списку.
Как проверить результат
Совпадает с именем реквизита формы и колонки, например Товары.Сумма
Имя с опечаткой или без префикса таблицы — правило не работает
Добавлена таблица целиком или нужные колонки, Использование = Истина
Список полей пуст — цвет не применяется
Более важные правила расположены ниже в списке
Общее правило ниже частного и перекрывает его
Оформление создаётся в ПриСозданииНаСервере
Код на клиенте или после вывода данных — правила не применяются
Быстрый способ локализовать проблему: временно убрать условие отбора, оставив только оформление и поля. Если таблица покрасилась полностью — проблема в условии (путь, тип, вид сравнения). Если нет — проблема в полях оформления или в месте выполнения кода.
Ограничения и рекомендации по производительности
Условное оформление проверяется платформой для каждой видимой строки, поэтому десятки правил на больших таблицах могут замедлять отрисовку формы. Практическая рекомендация: держать число правил разумным (обычно до 5–10 на таблицу), объединять однотипные условия через группу «ИЛИ» в одном элементе вместо нескольких отдельных элементов.
Ещё одно ограничение: условное оформление не умеет сравнивать два поля строки между собой напрямую (например, «Цена больше МаксЦена») — в отборе справа должна быть константа. Такие сравнения выносят в служебную колонку, вычисляемую при заполнении таблицы.
Как выбрать подход
Что важно запомнить
Таблица значений красится не сама, а через условное оформление формы: отбор (условие) + оформление (цвет) + оформляемые поля. Правила задаются в конфигураторе или программно в ПриСозданииНаСервере. Для сложных условий используйте служебную колонку. Большинство проблем — неверный путь к полю или пустой список оформляемых полей.
Частые вопросы
Почему условное оформление не срабатывает, хотя правило создано?
Чаще всего не совпадает путь к полю в отборе (должно быть «ИмяТаблицы.ИмяКолонки»), не заполнен список оформляемых полей или у элементов отбора/полей не установлено «Использование = Истина». Также проверьте, не перекрывает ли правило другой элемент оформления, расположенный ниже в списке.
Как раскрасить всю строку, а не одну ячейку?
В оформляемые поля добавьте саму таблицу (например, поле «Товары») — тогда правило применится ко всем её колонкам. Либо перечислите все видимые колонки по одной. Если указана только одна колонка, окрасится исключительно она.
Можно ли сравнить в условии два поля одной строки?
Напрямую в отборе условного оформления — нет: справа от вида сравнения указывается константа. Обходной путь — добавить в таблицу значений служебную колонку, вычислить в ней результат сравнения при заполнении и настроить оформление по её значению.
Где размещать программный код создания оформления?
В серверном обработчике ПриСозданииНаСервере модуля формы — тогда правила готовы до первого отображения таблицы. Создание элементов оформления на клиенте нежелательно: коллекция условного оформления относится к серверной части формы.
Работает ли этот способ для динамического списка?
Да, условное оформление формы применяется и к таблицам на динамических списках. Кроме того, у самого динамического списка есть собственное условное оформление в его настройках — оно суммируется с оформлением формы, что иногда становится причиной неожиданного результата.
Как задать цвет текста или жирный шрифт, а не фон?
Через те же параметры оформления: «ЦветТекста» для цвета шрифта и «Шрифт» для начертания (например, новый Шрифт с признаком жирности). В конфигураторе эти параметры выбираются на закладке «Оформление» элемента условного оформления, программно — через УстановитьЗначениеПараметра.