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