Как отобразить динамический список в виде дерева в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто перед разработчиками встает задача представить данные в интерфейсе 1С в виде иерархического дерева, даже если они хранятся в динамическом списке. Рассмотрим, как реализовать такую структуру программно, используя возможности КомпоновщикНастроек, и разберем нюансы, возникающие при настройке группировок.

Подготовка динамического списка для работы в режиме дерева

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

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

Программная настройка группировок

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


СтруктураСписка = ЗаявкиТорговых.КомпоновщикНастроек.Настройки.Структура;
ГруппировкаСписка = СтруктураСписка.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ЭлементГруппировки = ГруппировкаСписка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("Менеджер");

Элементы.ЗаявкиТорговых.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
ЗаявкиТорговых.КомпоновщикНастроек.ЗагрузитьНастройки(ЗаявкиТорговых.КомпоновщикНастроек.Настройки);

В данном примере мы манипулируем объектом СтруктураСписка. Добавляя ГруппировкуКомпоновкиДанных, мы заставляем систему СКД сгруппировать записи по заданному полю Менеджер (или любому другому, например, Ссылка).

Решение проблемы дублирования и иерархии

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

Чтобы избежать этой ошибки и сделать дерево корректным, необходимо:

  1. Проверить Основную Таблицу: Если она задана, СКД ожидает уникальности каждой строки. Попробуйте убрать основную таблицу и построить запрос через Объединение (UNION ALL) в самом динамическом списке.
  2. Использовать КлючСтроки: Если необходимо отобразить детализированные данные в дереве, привяжите отображение к уникальному идентификатору строки, используя комбинацию полей (например, Ссылка + НомерСтроки). Это позволит системе однозначно идентифицировать каждую запись вложенного уровня.

Очистка повторяющихся данных в строках

После настройки дерева вы можете заметить, что значение группировочного поля повторяется во всех дочерних строках. Чтобы сделать интерфейс чище и профессиональнее, воспользуемся Условным оформлением:

Важные советы по производительности

Работа с деревом в динамическом списке создает дополнительную нагрузку на сервер. Помните о следующих правилах:

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

← На главную