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

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

Как раскрасить строки таблицы значений в 1С

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

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

Условное оформление позволяет задать правило: если значение в колонке удовлетворяет условию (например, сумма отрицательная, количество равно нулю, статус «Отменён»), то строка или отдельная ячейка получает заданный цвет фона, цвет текста или шрифт. Правила можно создать в конфигураторе на этапе разработки формы или добавить программно в коде модуля формы — второй вариант нужен, когда условия и цвета зависят от настроек пользователя или вычисляются динамически.

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

Как устроено окрашивание таблиц в управляемой форме

В управляемом приложении любая таблица на форме — это элемент формы, связанный с реквизитом типа «ТаблицаЗначений» или «ДинамическийСписок». Внешний вид строк определяет условное оформление — коллекция правил, доступная через свойство формы УсловноеОформление. Каждое правило состоит из трёх частей: отбора (когда применять), оформления (что менять) и списка оформляемых полей (где применять).

Ключевой момент: условие проверяется по данным строки, а не по представлению. Это значит, что в отборе можно ссылаться на любую колонку таблицы значений, даже если она не выведена на форму. Например, можно хранить служебную колонку «ПризнакОшибки», не показывать её пользователю и раскрашивать строки по её значению.

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

Настройка условного оформления в конфигураторе

Способ без программирования подходит, когда условия и цвета фиксированы и известны на этапе разработки. Все действия выполняются в редакторе формы.

Порядок настройки в конфигураторе
  1. 1
    Откройте форму в конфигураторе и в дереве элементов выделите корневой элемент «Форма»
  2. 2
    В палитре свойств найдите свойство «УсловноеОформление» и откройте его
  3. 3
    Добавьте новый элемент оформления
  4. 4
    На закладке «Оформление» задайте параметр, например «Цвет фона», и выберите цвет
  5. 5
    На закладке «Условие» добавьте элемент отбора: поле, вид сравнения, значение (например, Сумма Меньше 0)
  6. 6
    На закладке «Оформляемые поля» добавьте поля таблицы, к которым применяется правило
  7. 7
    Сохраните форму и проверьте результат в режиме предприятия

Чтобы раскрасить строку целиком, в «Оформляемые поля» нужно добавить все видимые колонки таблицы. Если добавить только одну колонку, окрасится только она — это частая причина вопроса «почему красится одна ячейка вместо строки».

В условии доступны стандартные виды сравнения: равно, не равно, больше, меньше, в списке, содержит, заполнено и другие. Несколько условий внутри одного элемента отбора объединяются по «И». Если нужно «ИЛИ», создаются отдельные элементы отбора с группой «ГруппаИли» — в конфигураторе это делается кнопкой группировки условий.

Программное окрашивание строк таблицы значений

Программный вариант нужен, когда цвет или условие зависят от настроек, хранящихся в базе, или когда правила создаются динамически. Код обычно размещают в обработчике ПриСозданииНаСервере формы, чтобы оформление было готово до первого отображения.

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

// Условие: сумма отрицательная

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

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

ЭлементОтбора.ЛевоеЗначение =

Новый ПолеКомпоновкиДанных("Товары.Сумма");

ЭлементОтбора.ВидСравнения =

ВидСравненияКомпоновкиДанных.Меньше;

ЭлементОтбора.ПравоеЗначение = 0;

ЭлементОтбора.Использование = Истина;

// Оформление: красный фон

ЭлементОформления.Оформление.УстановитьЗначениеПараметра(

"ЦветФона", WebЦвета.СветлоРозовый);

// Область действия: все колонки таблицы

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

ПолеОформления.Поле =

Новый ПолеКомпоновкиДанных("Товары");

ПолеОформления.Использование = Истина;

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

Обратите внимание на путь в ЛевоеЗначение: «Товары.Сумма» — это имя реквизита формы (таблицы значений) и имя колонки. Если реквизит называется иначе, путь должен совпадать точно, иначе правило молча не сработает — платформа не выдаст ошибку.

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

Раскраска отдельных ячеек и по служебной колонке

Красим только одну колонку

Если нужно подсветить не всю строку, а конкретную ячейку (например, только колонку «Количество» при нулевом остатке), в поля оформления добавляется не таблица целиком, а конкретная колонка:

ПолеОформления.Поле =

Новый ПолеКомпоновкиДанных("ТоварыКоличество");

Здесь «ТоварыКоличество» — имя элемента формы (поля колонки), а не путь к данным. Имена элементов можно посмотреть в дереве элементов формы в конфигураторе.

Окраска по скрытой служебной колонке

Удобный приём для сложной логики: при заполнении таблицы значений программно вычислять признак и записывать его в служебную колонку, например «СостояниеСтроки» со значениями 0, 1, 2. Колонку на форму не выводят, а в условном оформлении создают три правила — по одному на каждое значение со своим цветом.

Приём со служебной колонкой заметно упрощает поддержку: вся бизнес-логика «какого цвета строка» собрана в одном месте заполнения таблицы, а правила оформления остаются тривиальными сравнениями с константой.
ПЗ
Практическое замечание

Этот подход особенно выигрывает, когда условие сложное — например, зависит от сравнения нескольких полей, остатков на складе или данных других таблиц. Выразить такое условие отбором компоновки данных бывает невозможно или громоздко.

Окрашивание в обычных формах и в табличном документе

В обычных формах (толстый клиент, старые конфигурации) механизм другой: там используется обработчик события табличного поля ПриВыводеСтроки, в котором через параметр ОформлениеСтроки задаётся цвет фона и текста:

Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Если ДанныеСтроки.Сумма < 0 Тогда

ОформлениеСтроки.ЦветФона = WebЦвета.СветлоРозовый;

КонецЕсли;

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

Если под «раскраской таблицы значений» на самом деле имеется в виду вывод в табличный документ (печатную форму или отчёт через ТабличныйДокумент), то цвет задаётся напрямую области ячеек: Область.ЦветФона = ... при выводе строк в цикле. Это третий, независимый сценарий, не связанный с условным оформлением.

Способы окрашивания строк

Условное оформление в конфигураторе

Подходит для постоянных правил; не требует кода; не подходит, если условия зависят от настроек в базе

Программное условное оформление

Гибкость и динамика; требует кода в модуле формы и аккуратности с путями к полям

Служебная колонка + простые правила

Лучший вариант для сложной логики; требует добавления колонки и её заполнения

ПриВыводеСтроки (обычные формы)

Только для обычного приложения; в управляемых формах не работает

Типичные ошибки и как их найти

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

Типичные ошибки
01
Указан в отборе путь «Сумма» вместо «Товары.Сумма» — правило молча не срабатывает
02
Не добавлены оформляемые поля — оформление применяется «в никуда»
03
Ожидается вся строка, а в полях указана одна колонка — красится только ячейка
04
Правило добавлено в ПриОткрытии на клиенте — коллекция условного оформления недоступна или изменения теряются
05
Два правила задают разный цвет фона одним полям — срабатывает только нижнее по списку
06
Сравнение строки с числом или несовпадение типов в отборе — условие никогда не истинно
Контрольные точки

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

Путь в отборе
Норма

Совпадает с именем реквизита формы и колонки, например Товары.Сумма

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

Имя с опечаткой или без префикса таблицы — правило не работает

Оформляемые поля
Норма

Добавлена таблица целиком или нужные колонки, Использование = Истина

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

Список полей пуст — цвет не применяется

Порядок правил
Норма

Более важные правила расположены ниже в списке

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

Общее правило ниже частного и перекрывает его

Место кода
Норма

Оформление создаётся в ПриСозданииНаСервере

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

Код на клиенте или после вывода данных — правила не применяются

Быстрый способ локализовать проблему: временно убрать условие отбора, оставив только оформление и поля. Если таблица покрасилась полностью — проблема в условии (путь, тип, вид сравнения). Если нет — проблема в полях оформления или в месте выполнения кода.

Ограничения и рекомендации по производительности

Условное оформление проверяется платформой для каждой видимой строки, поэтому десятки правил на больших таблицах могут замедлять отрисовку формы. Практическая рекомендация: держать число правил разумным (обычно до 5–10 на таблицу), объединять однотипные условия через группу «ИЛИ» в одном элементе вместо нескольких отдельных элементов.

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

Маршрут решения

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

Условие простое и постоянное (Сумма < 0, Статус = Отменён)Настройте условное оформление в конфигураторе без кода
Цвета или условия зависят от настроек пользователяСоздавайте правила программно в ПриСозданииНаСервере
Условие сложное или сравнивает два поля строкиДобавьте служебную колонку с признаком и оформляйте по ней
Форма обычная (толстый клиент)Используйте обработчик ПриВыводеСтроки табличного поля
Нужно раскрасить печатную формуЗадавайте ЦветФона областям табличного документа при выводе
Итог

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

Таблица значений красится не сама, а через условное оформление формы: отбор (условие) + оформление (цвет) + оформляемые поля. Правила задаются в конфигураторе или программно в ПриСозданииНаСервере. Для сложных условий используйте служебную колонку. Большинство проблем — неверный путь к полю или пустой список оформляемых полей.

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

Почему условное оформление не срабатывает, хотя правило создано?

Чаще всего не совпадает путь к полю в отборе (должно быть «ИмяТаблицы.ИмяКолонки»), не заполнен список оформляемых полей или у элементов отбора/полей не установлено «Использование = Истина». Также проверьте, не перекрывает ли правило другой элемент оформления, расположенный ниже в списке.

Как раскрасить всю строку, а не одну ячейку?

В оформляемые поля добавьте саму таблицу (например, поле «Товары») — тогда правило применится ко всем её колонкам. Либо перечислите все видимые колонки по одной. Если указана только одна колонка, окрасится исключительно она.

Можно ли сравнить в условии два поля одной строки?

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

Где размещать программный код создания оформления?

В серверном обработчике ПриСозданииНаСервере модуля формы — тогда правила готовы до первого отображения таблицы. Создание элементов оформления на клиенте нежелательно: коллекция условного оформления относится к серверной части формы.

Работает ли этот способ для динамического списка?

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

Как задать цвет текста или жирный шрифт, а не фон?

Через те же параметры оформления: «ЦветТекста» для цвета шрифта и «Шрифт» для начертания (например, новый Шрифт с признаком жирности). В конфигураторе эти параметры выбираются на закладке «Оформление» элемента условного оформления, программно — через УстановитьЗначениеПараметра.