Как добавить иерархию в справочник ЗначенияСвойствОбъектов и заставить ее работать корректно

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В типовой конфигурации «Управление торговлей 10.3» (УТ 10.3) справочник ЗначенияСвойствОбъектов по умолчанию является линейным. Однако при активном использовании дополнительных свойств и категорий возникает потребность в структурировании этих данных. На первый взгляд задача кажется тривиальной: достаточно включить флаг иерархии в конфигураторе. Но на практике разработчики сталкиваются с тем, что стандартная навигация в форме списка перестает работать, а настройки метаданных сбрасываются. Разберем пошагово, как решить эти проблемы и почему они возникают.

Причина некорректного поведения навигации в форме списка

Одной из самых частых проблем после включения иерархии является ситуация, когда при двойном клике на группу вместо перехода «внутрь» открывается форма редактирования этой самой группы. Это сбивает с толку, так как в других справочниках (например, в «Номенклатуре») все работает корректно. Проанализируем ситуацию: почему форма выбора работает правильно, а форма списка — нет, даже если используется один и тот же объект метаданных?

Главный нюанс: Справочник ЗначенияСвойствОбъектов является подчиненным. Его владельцем выступает План видов характеристик ДополнительныеРеквизитыИСведения (в зависимости от релиза). В системе 1С работа с иерархией в подчиненных справочниках имеет свои особенности. Если в форме списка не установлен жесткий отбор по конкретному владельцу, платформа не может однозначно определить контекст иерархии, и иерархический просмотр блокируется, превращая группы в обычные элементы.

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

Настройка свойств табличного поля формы

Если отбор по владельцу установлен, но переход в группы все равно не происходит, нам необходимо проверить настройки самого элемента управления на форме. Рассмотрим свойства табличного поля (обычно это СправочникСписок):

  1. Проверим свойство «Изменять текущего родителя». В палитре свойств, в разделе «Использование», этот флаг должен быть обязательно установлен. Именно он отвечает за то, будет ли двойной клик или нажатие клавиши Enter изменять корень отображаемого списка.
  2. Проанализируем режим просмотра. Если программно или в настройках установлено отображение «Список» вместо «Иерархический список» или «Дерево», группы будут вести себя как рядовые элементы. Проверить это можно в коде формы: ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;
  3. Убедимся, что на событии Выбор (или ПередНачаломИзменения) табличного поля нет переопределения стандартной логики. Если в коде прописано СтандартнаяОбработка = Ложь, то переход в группу будет заблокирован программно.

Почему сбрасываются настройки иерархии в Конфигураторе

Довольно часто встречается странное поведение: программист устанавливает в свойствах справочника «Вид иерархии: Иерархия групп и элементов» и флаг «Размещать группы сверху», сохраняет конфигурацию, но после повторного открытия окна свойств настройки возвращаются к значению «Без иерархии». Рассмотрим причины этого явления.

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

Рекомендуемый алгоритм действий для фиксации настроек:

  1. Снимите справочник с поддержки (если это необходимо для редактирования).
  2. Измените любой другой параметр (например, временно увеличьте длину наименования на 1 символ).
  3. Установите настройки иерархии.
  4. Нажмите кнопку «Обновить конфигурацию базы данных» (F7) до закрытия окна свойств справочника.
  5. Если настройки все равно сбрасываются, выполните «Тестирование и исправление» с флагом «Проверка логической целостности конфигурации».

Программная обработка перехода по группам

Иногда требуется более тонкая настройка поведения формы. Рассмотрим пример кода, который принудительно устанавливает иерархический режим и проверяет наличие владельца при открытии формы:


Процедура ПриОткрытии()
    
    // Проверим, выбран ли владелец (Свойство)
    Если СправочникСписок.Отбор.Владелец.Значение.Пустая() Тогда
        // Если владелец не выбран, иерархия не будет работать корректно
        ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
        Предупреждение("Для просмотра иерархии необходимо выбрать свойство (владельца).");
    Иначе
        // Включаем иерархический режим
        ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;
        ЭлементыФормы.СправочникСписок.ИзменятьТекущегоРодителя = Истина;
    КонецЕсли;
    
КонецПроцедуры

Риски и последствия внедрения иерархии

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

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

← На главную