К статье
Практический материал

Разработка и Конфигурация · 9 мин

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

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

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

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

Когда динамический список можно вывести деревом

Штатный механизм отображения дерева привязан к свойству справочника «Вид иерархии». Если справочник неиерархический, пункт «Дерево» в настройках списка будет недоступен или не даст результата. Для справочников с иерархией групп и элементов в дереве сначала отображаются папки, внутри них — элементы; для иерархии элементов каждый элемент может иметь подчинённые элементы.

Второе условие — запрос динамического списка. Если включён режим произвольного запроса с соединениями нескольких таблиц, группировками или итогами, построение дерева по полю «Ссылка» становится невозможным, потому что платформа не может однозначно определить родителя каждой строки. Чем проще запрос, тем надёжнее работает дерево.

Настройка отображения дерева через конфигуратор

Самый простой способ — настроить отображение в конфигураторе, не прибегая к коду. Откройте форму списка справочника, выделите элемент формы, связанный с динамическим списком (обычно таблица «Список»), и в палитре свойств найдите свойство «Отображение». Установите значение «Дерево».

Дополнительно проверьте свойство «Родитель» у реквизита списка: платформа строит дерево по стандартному реквизиту «Родитель» основной таблицы. Если в произвольном запросе поле родителя переименовано или отсутствует в выборке, дерево не построится. Убедитесь, что в запросе явно выбраны поля «Ссылка» и «Родитель».

Порядок настройки в конфигураторе
  1. 1
    Откройте форму списка справочника в конфигураторе
  2. 2
    Выделите таблицу формы, связанную с динамическим списком
  3. 3
    В палитре свойств установите «Отображение» = «Дерево»
  4. 4
    Проверьте, что в запросе списка выбраны поля Ссылка и Родитель
  5. 5
    Сохраните форму и откройте её в режиме 1С:Предприятие
  6. 6
    Разверните узлы дерева и убедитесь, что элементы лежат в своих группах

Настройка дерева программно и через пользовательские настройки

Отображение можно переключить и в режиме предприятия через настройку списка: «Ещё» → «Настроить список» → «Вид списка» → «Дерево». Этот способ удобен, когда разные пользователи хотят разные представления одних и тех же данных без изменения конфигурации.

Программно отображение задаётся через свойство элемента формы. Например, в обработчике «ПриСозданииНаСервере» можно установить нужный режим в зависимости от условий:

Элементы.Список.Отображение = ОтображениеТаблицы.Дерево;

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

Ограничения и типичные проблемы

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

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

Типичные ошибки
01
Включение «Дерево» для произвольного запроса с соединениями — иерархия не строится или дублируются строки
02
Отсутствие поля Родитель в выборке запроса — дерево превращается в плоский список
03
Отбор по конкретному родителю вместе с видом «Дерево» — пользователь видит обрезанную структуру
04
Ожидание дерева от неиерархического справочника — у такого справочника нет реквизита Родитель
05
Игнорирование пользовательских настроек списка — заданное в конфигураторе отображение перекрывается

Альтернатива: дерево значений для произвольных иерархий

Когда данные не являются иерархическим справочником — например, нужно показать документы, сгруппированные по контрагентам, или товары по произвольным категориям из запроса, — динамический список не подходит. В этом случае используют реквизит формы типа «ДеревоЗначений» и заполняют его программно.

Типовой подход: выполнить запрос с итогами по группировкам или с обходом по иерархии, затем обойти результат и добавить строки в дерево значений. Минус решения — потеря возможностей динамического списка: автоматических отборов, динамического считывания данных и стандартных команд навигации. Плюс — полный контроль над структурой.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Ссылка,

| Номенклатура.Родитель КАК Родитель

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ИТОГИ ПО

| Номенклатура.Ссылка ИЕРАРХИЯ";

Сравнение подходов

Динамический список + вид «Дерево»

Подходит для иерархических справочников. Сохраняются отборы, поиск, динамическое чтение. Ограничение — простой запрос по одной таблице.

Дерево значений на форме

Подходит для любой иерархии из произвольного запроса. Требует ручного заполнения и обновления, теряются штатные отборы динамического списка.

Пользовательская настройка списка

Подходит, когда вид нужно менять без доработки конфигурации. Ограничение — те же требования к основной таблице и иерархии.

Как проверить результат

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

Отдельно проверьте работу на больших объёмах: откройте форму под учётной записью с реальными данными и оцените время открытия и разворачивания узлов. Если форма открывается дольше нескольких секунд, рассмотрите ограничение выборки или отказ от развёрнутого по умолчанию дерева.

Контрольные точки

Как проверить результат

Структура дерева
Норма

Группы содержат свои элементы, вложенность соответствует данным

Тревожный признак

Элементы дублируются или лежат не в своих группах

Работа отбора
Норма

При отборе видны найденные элементы с родительскими узлами

Тревожный признак

После отбора дерево пустое или обрезанное

Скорость открытия формы
Норма

Форма открывается за приемлемое время, узлы разворачиваются без зависаний

Тревожный признак

Заметные паузы при открытии и разворачивании

Повторный вход
Норма

Вид «Дерево» сохраняется при следующем открытии

Тревожный признак

Список сбрасывается в плоский вид из-за пользовательских настроек

Частые вопросы

Почему пункт «Дерево» недоступен в настройках списка?

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

Можно ли построить дерево по произвольному полю, а не по родителю?

Штатный механизм динамического списка строит иерархию только по паре «Ссылка–Родитель» основной таблицы. Для иерархии по произвольному полю используйте дерево значений с программным заполнением либо группировки в отчёте на СКД.

Дерево показывает элементы без групп, в чём причина?

Проверьте отбор списка: если установлен отбор, исключающий группы (например, «ЭтоГруппа = Ложь»), узлы-папки не выводятся. Также убедитесь, что в запросе выбрано поле «Родитель» и не задан отбор по конкретному родителю.

Как отобразить деревом список документов?

Документы не имеют встроенной иерархии, поэтому динамический список документов деревом не отображается. Варианты: дерево значений с группировкой по нужному измерению (контрагент, организация, период) или отчёт на СКД с группировками.

Почему после настройки дерево снова становится списком?

Пользовательские настройки динамического списка сохраняются в хранилище настроек и имеют приоритет. Откройте «Ещё» → «Настроить список», установите вид «Дерево» и сохраните, либо сбросьте настройки к стандартным через «Установить стандартные настройки».

Влияет ли вид «Дерево» на производительность?

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

Итог

Что важно запомнить

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