Как правильно выбрать иерархию справочника в 1С:Предприятие?

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

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

Понимание типов иерархии в конфигураторе

В платформе 1С существует два основных типа иерархии, которые определяются на этапе проектирования справочника в Конфигураторе и не могут быть изменены динамически для уже созданного объекта:

  1. Иерархия групп и элементов: Это строгая, классическая структура. Вся база данных справочника делится на два типа записей: «группы» (папки) и «элементы» (данные). Платформа накладывает жесткое ограничение: Родителем элемента может быть только группа. Это обеспечивает высокую производительность запросов и логическую чистоту данных.
  2. Иерархия элементов: В данном случае все объекты справочника равноправны. Любой элемент может выступать Родителем для любого другого элемента. Здесь нет понятия «папка» как технического объекта, что позволяет создавать бесконечно вложенные цепочки связей.

Когда и что выбирать?

Рассмотрим ситуации, в которых стоит отдать предпочтение тому или иному типу:

Реализация специфических требований пользователей

Часто пользователи просят визуализировать иерархию элементов как дерево с «папками», даже если используется плоская структура (иерархия элементов). Рассмотрим способы решения этой задачи:

1. Использование логического признака

Вы можете добавить в справочник дополнительный реквизит, например, ЭтоГруппа (булево). При выводе списка на форму (особенно при использовании ДереваЗначений) вы можете настроить УсловноеОформление или использовать событие ПриПолученииДанных, чтобы динамически подменять иконку строки на изображение папки в зависимости от значения этого реквизита.

2. Использование Дерева Значений

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


// Пример логики заполнения дерева
Для Каждого Строка Из Выборка Цикл
    НоваяСтрока = Дерево.Строки.Добавить();
    НоваяСтрока.Наименование = Строка.Наименование;
    Если Строка.ЭтоГруппа Тогда
        НоваяСтрока.КартинкаСтроки = БиблиотекаКартинок.Папка;
    Иначе
        НоваяСтрока.КартинкаСтроки = БиблиотекаКартинок.Элемент;
    КонецЕсли;
КонецЦикла;

Особенности работы с иерархией в запросах

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


ВЫБРАТЬ
    Спр.Ссылка
ИЗ
    Справочник.ВашСправочник КАК Спр
ГДЕ
    Спр.Ссылка В ИЕРАРХИЯ(&Родитель)

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

← На главную