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

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Разбор механики оформляемых полей

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

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

Важный нюанс: иногда выбор всей таблицы (например, элемента формы Список) в качестве оформляемого поля не дает того же эффекта, что и пустой список. Рекомендуется именно очищать список полей для достижения эффекта «всей строки».

Влияние свойства Основная таблица

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

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

Если ваша задача позволяет отказаться от основной таблицы (например, вам не нужны стандартные команды удаления/создания в этом списке), это может стать решением. Однако чаще всего нужно сохранить основную таблицу. В таком случае проверьте соответствие имен полей в условии оформления и имен полей в запросе.

Проблема подмены элементов при поиске

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

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

  1. Настраивайте условное оформление не через свойства Элемента формы (Таблицы), а через свойства Реквизита формы (Динамического списка). Для этого в окне настроек УО формы убедитесь, что вы ссылаетесь на поля компоновки данных самого списка.
  2. Убедитесь, что поля, по которым проверяется условие, включены в запрос динамического списка.
  3. Проверьте свойство Использовать всегда для полей, участвующих в условии. Если поле не отображается на форме и у него не стоит этот флаг, система может исключить его из выборки в целях оптимизации, и условие просто не сработает.

Оформление при использовании ПриПолученииДанныхНаСервере

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

Важно понимать: событие ПриПолученииДанныхНаСервере отрабатывает ПОСЛЕ того, как динамический список запросил данные из БД, но ДО того, как они будут окончательно отрисованы. Если вы пытаетесь использовать результаты расчетов из этой процедуры в Условном Оформлении формы, это может вызвать конфликт приоритетов.

Для корректной работы рекомендуется:

Пример программного добавления условия в ПриСозданииНаСервере, который гарантирует раскраску всей строки:


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

// Задаем оформление: цвет фона
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ВажнаяНадпись);

// Задаем условие: поле "ВНаличии" равно Ложь
ЭлементУсловия = ЭлементУО.Условие.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ВНаличии");
ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементУсловия.ПравоеЗначение = Ложь;

// Поля оставляем ПУСТЫМИ, чтобы красилась вся строка
// ЭлементУО.Поля.Элементы.Очистить(); 

Иерархия и группы: почему они красятся иначе?

Выясним, почему для групп строк оформление часто срабатывает «само собой» на всю ширину. Это связано с тем, что в режиме Иерархического списка или Дерева строка группы в 1С часто является служебным объектом. Если условие оформления (например, проверка на некий статус) для группы возвращает истину (или значение по умолчанию), платформа применяет оформление ко всей строке группы просто потому, что у группы часто нет разделения по колонкам в том понимании, которое есть у элементов (данные группы часто выводятся в одну «главную» колонку).

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

Итоговый алгоритм решения

Чтобы гарантированно раскрасить всю строку элемента динамического списка, выполните следующие действия:

  1. Откройте настройки Условного оформления (либо в свойствах формы, либо в настройках самого динамического списка).
  2. В списке Оформляемые поля удалите все записи. Если там пусто — 1С понимает это как команду «оформлять все поля строки».
  3. В Условии проверьте, что вы обращаетесь к полям через путь Объект.ИмяПоля или просто ИмяПоля (в зависимости от того, где настраивается УО), и эти поля реально присутствуют в выборке запроса.
  4. Если вы используете динамический список с Основной таблицей, убедитесь, что ключевые поля запроса (ссылка, код) не подменяются в процессе выполнения запроса.
  5. Если используется программная установка оформления, проверьте, не перезатирается ли она в процедурах ПередЗагрузкойДанныхИзНастроекНаСервере или подобных.

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

← На главную