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