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