Почему не устанавливается иерархический режим просмотра списка и как это исправить

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

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

Анализ программной установки свойств отображения

Рассмотрим типичную попытку установить иерархию через код. Часто разработчики пытаются принудительно задать вид списка в обработчиках ПриСозданииНаСервере или ПриОткрытии. Проанализируем следующий пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Установка параметров запроса
    Список.Параметры.УстановитьЗначениеПараметра("Владелец", Параметры.Владелец);
    
    // Попытка установить вид "Дерево"
    Элементы.Список.Отображение = ОтображениеТаблицы.Дерево;
КонецПроцедуры

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

Проверка настроек динамического списка: Основная таблица

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

Разберем алгоритм проверки настроек в конфигураторе:

  1. Откроем форму, на которой расположен список.
  2. Перейдем к реквизиту формы с типом ДинамическийСписок.
  3. В окне свойств найдем поле Основная таблица.
  4. Убедимся, что там выбран конкретный справочник (например, Справочник.Ячейки), а не оставлено пустое значение.

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

Особенности иерархии в запросах динамического списка

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

  1. Наличие поля связи: В списке полей запроса должно присутствовать поле Родитель (для иерархии групп и элементов) или связи, определяющие подчинение.
  2. Отсутствие агрегатных функций и группировок: Если в тексте запроса используются инструкции СГРУППИРОВАТЬ ПО или ИТОГИ ПО, стандартная иерархия справочника отключается. Платформа не может одновременно строить дерево на основе метаданных справочника и на основе итогов запроса.
  3. Использование основной таблицы: Как уже упоминалось, в настройках динамического списка (не в тексте запроса, а в свойствах объекта) должна быть указана таблица, из которой система «подтянет» настройки иерархии.

Влияние отборов по владельцу

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

Выясним причину: когда мы ограничиваем список конкретным владельцем, платформа ожидает, что иерархия будет строиться внутри этого контекста. Если отбор установлен некорректно (например, через параметры запроса в секции ГДЕ, а не через механизм Отбор динамического списка), система может «потерять» понимание структуры иерархии.

Рекомендуется устанавливать отбор следующим образом:


&НаСервере
Процедура УстановитьОтборПоВладельцу(ЗначениеВладельца)
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = ЗначениеВладельца;
    ЭлементОтбора.Использование = Истина;
КонецПроцедуры

Использование стандартного механизма отборов компоновки данных позволяет платформе корректно обрабатывать иерархические связи элементов.

Проблемы при использовании расширений конфигурации

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

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

  1. Проверьте свойства заимствованного справочника: Убедитесь, что в расширении у объекта установлена галочка Иерархический. Иногда при заимствовании только формы свойства самого объекта не копируются полностью.
  2. Обновите форму в расширении: Попробуйте удалить заимствованную форму из расширения и добавить её заново. Это принудительно обновит все связи и свойства элементов управления.
  3. Режим совместимости: Проверьте, чтобы режим совместимости расширения совпадал с режимом совместимости основной конфигурации. Различия в версиях платформы могут приводить к игнорированию свойств ОтображениеТаблицы.

Пользовательские настройки и кэш формы

Иногда причина кроется не в коде, а в сохраненных настройках пользователя. Платформа 1С запоминает последний выбранный режим просмотра для каждой формы. Если пользователь (или разработчик в процессе тестирования) один раз переключил вид на «Список», это состояние может сохраниться в хранилище настроек.

Чтобы исключить этот фактор, попробуйте:

Итоги и рекомендации

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

  1. Указать Основную таблицу в свойствах динамического списка.
  2. Убедиться, что в запросе (если он произвольный) выбраны поля Родитель и нет конфликтующих группировок ИТОГИ.
  3. Проверить, что справочник в метаданных (включая расширение) помечен как иерархический.

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

← На главную