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