Работа с иерархическими структурами в 1С:Предприятии иногда преподносит сюрпризы, особенно когда речь заходит о подчиненных справочниках в режиме обычного приложения. Типичная ситуация: программист включает иерархию в метаданных, бухгалтеры создают «папочки», но при попытке войти в группу открывается форма редактирования самой группы, а элементы визуально остаются в общем списке. Разберем детально, почему это происходит и как восстановить нормальную работу интерфейса.
Когда мы работаем со справочником в обычном приложении, список может находиться в двух состояниях: иерархический просмотр (дерево) и плоский список. Если иерархический просмотр отключен, любая группа (папка) воспринимается платформой как обычная строка данных. Именно поэтому двойной клик по ней не «проваливается» внутрь, а открывает форму элемента. Перетаскивание (Drag-and-Drop) также блокируется, так как в плоском списке нет четкой структуры вложенности, понятной интерфейсу.
В подчиненных справочниках ситуация осложняется. Если в форме списка установлен жесткий отбор по владельцу, платформа 1С часто блокирует кнопку иерархического просмотра на панели инструментов, делая ее неактивной. Выясним, как обойти эти ограничения и заставить иерархию работать корректно.
Прежде чем приступать к коду, нам необходимо убедиться, что структура справочника в Конфигураторе позволяет использовать иерархию совместно с подчинением. Проверим следующие настройки:
Иерархический справочник должен быть установлен.Вид иерархии. Для создания полноценных папок должен быть выбран тип Иерархия групп и элементов.Использование подчинения обязательно должно быть выбрано значение Группам и элементам. Если там указано только Элементам, иерархия внутри владельца будет работать некорректно или будет полностью заблокирована.Рассмотрим ситуацию, когда в интерфейсе кнопка «Иерархический просмотр» отображается серой и нажать ее невозможно. Это стандартное поведение для некоторых версий платформы при работе с подчиненными справочниками. Мы можем «заставить» список отображаться правильно, прописав команду принудительно. Для этого в модуле формы списка найдем процедуру ПриОткрытии и добавим следующий код:
Процедура ПриОткрытии()
// Устанавливаем режим иерархии принудительно для табличного поля
ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;
КонецПроцедуры
Использование этого метода позволяет обойти визуальную блокировку кнопки в командной панели. Теперь при открытии формы справочник сразу будет представлен в виде дерева, и двойной клик по группе начнет выполнять навигацию, а не открытие формы.
Если справочник изначально был «плоским», а затем в него добавили иерархию, старые элементы остаются «сиротами» в корне справочника. Рассмотрим, как правильно перенести их в группы. Важно понимать, что для платформы перенос элемента в группу — это изменение его реквизита Родитель.
Проанализируем ситуацию с подчинением: в подчиненном справочнике у каждой создаваемой ГРУППЫ также должен быть заполнен реквизит Владелец. Если вы создали группу, не указав владельца, а затем открыли список с фильтром по конкретному контрагенту (владельцу), вы просто не увидите эту группу или не сможете поместить в нее элементы.
Для массового исправления данных рекомендуем воспользоваться встроенной обработкой «Групповая обработка справочников и документов» или специализированными инструментами (например, упомянутой в теме ФормаАдминистратора). Нам нужно выполнить два действия:
Владелец.Родитель, выбрав нужную группу.В практике работы с обычными формами встречается редкий баг: если форма списка была создана до того, как в метаданных справочника включили иерархию, внутренние механизмы привязки элементов управления могут работать некорректно. Если программная установка ИерархическийПросмотр = Истина не помогает, разберем радикальный, но эффективный способ:
Посмотрим, почему элементы могут не перетаскиваться мышкой, даже если иерархия включена. В системе 1С интерактивное перемещение в группы блокируется в следующих случаях:
Тестирование и исправление целостность ссылок базы данных. Если реквизит Родитель поврежден, интерактивные действия могут быть недоступны.Таким образом, для исправления ситуации нам необходимо последовательно проверить метаданные, программно включить режим просмотра и убедиться в корректности заполнения реквизитов Родитель и Владелец у всех записей справочника.