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