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