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

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

Как раскрасить строки табличной части в управляемых формах 1С

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

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

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

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

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

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

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

Платформа пересчитывает оформление автоматически при изменении данных, поэтому правило «подсветить строку, где количество больше остатка» будет работать и в момент открытия документа, и при каждом редактировании строки пользователем. Писать обработчики ПриИзменении ради самой раскраски не требуется.

Способ 1: настройка в конфигураторе без кода

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

В редакторе добавьте новый элемент и заполните три вкладки. На вкладке «Оформление» установите, например, «Цвет фона» — красный или светло-жёлтый. На вкладке «Условие» добавьте элемент отбора: левое значение — поле «Объект.Товары.Отменено», вид сравнения — «Равно», правое значение — «Истина». На вкладке «Оформляемые поля» перечислите все колонки таблицы, которые должны окраситься: Номенклатура, Количество, Цена, Сумма и так далее.

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

Настройка в конфигураторе
  1. 1
    Откройте форму в конфигураторе и выделите таблицу табличной части
  2. 2
    В палитре свойств откройте «УсловноеОформление» и добавьте элемент
  3. 3
    На вкладке «Оформление» задайте цвет фона или цвет текста
  4. 4
    На вкладке «Условие» добавьте отбор по полю данных табличной части
  5. 5
    На вкладке «Оформляемые поля» перечислите все колонки таблицы
  6. 6
    Сохраните форму и проверьте раскраску в режиме предприятия

Способ 2: программное добавление правил из модуля формы

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

&НаСервере

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

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

// Оформление — цвет фона

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

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

// Условие — строка отменена

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

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

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

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

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

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

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

// Оформляемые поля — все колонки таблицы

Для Каждого Колонка Из Элементы.Товары.ПодчиненныеЭлементы Цикл

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

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

Новый ПолеКомпоновкиДанных(Колонка.Имя);

КонецЦикла;

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

Обратите внимание на три момента в коде. Во-первых, путь к данным в отборе указывается с точками — «Объект.Товары.Отменено», то есть от корня реквизита формы. Во-вторых, в оформляемых полях используются имена элементов формы (колонок таблицы), а не пути к данным. В-третьих, цикл по ПодчиненныеЭлементы таблицы избавляет от ручного перечисления колонок — при добавлении новой колонки в форму она раскрасится автоматически.

Если таблица содержит группы колонок, цикл по подчинённым элементам нужно сделать рекурсивным: у группы колонок есть свои подчинённые элементы, и её имя в оформляемые поля добавлять не следует.

Как задать сложные и динамические условия

Несколько условий внутри одного правила по умолчанию объединяются по «И». Если нужно «ИЛИ» — например, подсветить строку, где товар отменён или количество равно нулю, — добавьте в отбор группу элементов с типом группировки «ГруппаИли» и поместите оба условия в неё. В конфигураторе это делается кнопкой «Сгруппировать условия», программно — добавлением элемента типа ГруппаЭлементовОтбораКомпоновкиДанных.

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

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

Где настраивать оформление

В конфигураторе

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

Программно в модуле формы

Условия зависят от настроек, прав много колонок. Гибче, но требует аккуратности с дублями правил.

Условное оформление динамического списка

Таблица построена на динамическом списке (журналы, подбор). Настраивается у реквизита списка, а не у формы.

Проверка результата и типичные ошибки

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

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

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

Типичные ошибки
01
Не заполнены оформляемые поля — правило существует, но ничего не красит
02
В отборе указано имя колонки формы вместо пути к данным «Объект.Товары.Поле» — условие никогда не срабатывает
03
Правила добавляются в обработчике, который вызывается многократно — коллекция зарастает дублями
04
Новое правило проигрывает типовому правилу конфигурации из-за порядка в коллекции
05
Цвет задан через ЦветФона у строки, но ожидалась раскраска всей таблицы — оформлены не все колонки
Контрольные точки

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

Открытие формы с готовыми данными
Норма

Строки, удовлетворяющие условию, окрашены сразу

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

Окраска появляется только после редактирования строки — проверьте путь к данным в отборе

Изменение контрольного поля
Норма

Цвет строки меняется сразу после ввода значения

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

Цвет не меняется — условие не срабатывает, проверьте вид сравнения и тип значения

Полнота окраски строки
Норма

Окрашены все видимые колонки строки

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

Окрашена часть колонок — дополните список оформляемых полей

Ограничения и альтернативные подходы

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

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

Для таблиц на основе динамического списка вычисляемые поля добавляются через поля компоновки самого списка, а условное оформление настраивается в его коллекции УсловноеОформление — синтаксис тот же, но пути к полям начинаются от полей запроса, а не от «Объект.».

Итог

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

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

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

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

Добавьте в список оформляемых полей правила все видимые колонки таблицы. Программно это удобно сделать циклом по подчинённым элементам таблицы формы, включая вложенные группы колонок. Пропущенные колонки останутся с фоном по умолчанию.

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

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

Можно ли раскрасить строки по условию, которого нет в данных табличной части?

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

Как задать условие «ИЛИ» между двумя проверками?

Сгруппируйте условия: в конфигураторе — кнопкой группировки с типом «Или», программно — добавлением элемента типа ГруппаЭлементовОтбораКомпоновкиДанных с ТипГруппы равным ГруппаИли, и разместите оба условия внутри этой группы.

Как раскрасить строки в форме типовой конфигурации, не снимая её с поддержки?

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

Работает ли этот подход для динамических списков и журналов документов?

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