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