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