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