Справочники и Данные · 9 мин
Как сделать справочник иерархическим в 1С
Пошаговая инструкция, как сделать справочник иерархическим в 1С 8.3: виды иерархии, настройка в конфигураторе, программный доступ к родителю и типичные ошибки.
Иерархический справочник в 1С нужен, когда элементы номенклатуры, контрагентов или подразделений логично объединить в группы — например, «Товары → Бытовая техника → Холодильники». Без иерархии список превращается в плоский перечень, в котором сложно искать данные и строить отчёты по группам.
Настройка выполняется в конфигураторе буквально в несколько кликов: у объекта «Справочник» есть свойство «Иерархический», а вид иерархии определяет, могут ли группы содержать данные или служат только папками. Ниже разберём оба варианта, порядок настройки, работу с родителем в коде и типичные ошибки.
Материал ориентирован на платформу 1С:Предприятие 8.3 и подходит как для доработки собственной конфигурации, так и для понимания устройства типовых решений.
Что такое иерархия справочника и когда она нужна
Иерархия — это связь «родитель–потомок» между элементами справочника. У каждого элемента появляется системный реквизит Родитель, ссылающийся на другой элемент того же справочника. На основе этих связей платформа строит дерево в форме списка и позволяет выбирать в запросах всех потомков группы оператором «В ИЕРАРХИИ».
Иерархия оправдана, когда данных много и их нужно группировать: номенклатура по товарным категориям, статьи затрат по видам расходов, контрагенты по регионам или холдингам. Если записей немного и группировка не нужна, иерархия только усложнит ввод данных — пользователю придётся каждый раз выбирать группу.
Виды иерархии: «Список и группы» и «Элементы и группы»
Платформа поддерживает два вида иерархии, и выбор между ними принципиален, потому что менять его после ввода данных бывает неудобно.
Иерархия групп и элементов (список и группы) — классический вариант, как в справочнике «Номенклатура» типовых конфигураций. Справочник делится на группы (папки) и элементы. Группа не может хранить прикладные данные как полноценная позиция: её назначение — объединять элементы. Элемент всегда лежит внутри группы или в корне.
Иерархия элементов — любой элемент может быть родителем другого элемента. Отдельного типа «группа» нет. Так устроен, например, справочник подразделений: каждое подразделение — полноценный объект с данными, и при этом оно может содержать дочерние подразделения.
Сравнение видов иерархии
Подходит для номенклатуры, товаров, статей. Папки только группируют. Ограничение: нельзя хранить данные в группе и использовать её как обычный элемент в документах.
Подходит для подразделений, сотрудников по структуре, контрагентов-холдингов. Любой элемент может иметь потомков и при этом участвовать в документах. Ограничение: нет визуального отличия папок, дерево может стать избыточно глубоким.
Пошаговая настройка иерархии в конфигураторе
Настройка выполняется в конфигураторе и требует монопольного доступа при обновлении конфигурации базы данных, если в базе уже есть пользователи.
- 1Откройте конфигуратор и найдите нужный объект в ветке «Справочники».
- 2Откройте палитру свойств объекта (правый клик → Свойства).
- 3Установите свойство «Иерархический» в значение «Да».
- 4Ниже выберите «Вид иерархии»: «Список и группы» или «Элементы и группы».
- 5При необходимости задайте «Ограничение количества уровней» (0 — без ограничений).
- 6Обновите конфигурацию базы данных (F7) и согласитесь на реструктуризацию.
- 7Откройте справочник в режиме 1С:Предприятие и проверьте, что появилась кнопка создания группы и дерево в форме списка.
После обновления у справочника появляется реквизит «Родитель», а в форме списка — древовидное представление и поле «Группа» при создании элемента. Стандартные формы платформа генерирует автоматически, дорабатывать их обычно не требуется.
Если справочник уже содержит данные, реструктуризация пройдёт безболезненно: существующие элементы получат пустого родителя и окажутся в корне. Дальше их можно вручную распределить по группам перетаскиванием или через обработку.
Работа с родителем в коде и запросах
Во встроенном языке родитель доступен как обычное свойство объекта. При программном создании элемента достаточно присвоить ссылку на группу:
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Холодильник АТ-120";
НовыйЭлемент.Родитель = ГруппаБытоваяТехника; // ссылка на группу
НовыйЭлемент.Записать();
Для создания группы используется метод СоздатьГруппу() вместо СоздатьЭлемент() — он доступен только при виде иерархии «Список и группы».
В запросах ключевой инструмент — оператор В ИЕРАРХИИ, который выбирает элементы группы со всеми вложенными уровнями:
ВЫБРАТЬ Ссылка, Наименование
ИЗ Справочник.Номенклатура
ГДЕ Ссылка В ИЕРАРХИИ(&Группа)
Ограничение уровней и производительность
Свойство «Ограничение количества уровней» задаёт максимальную глубину дерева. Значение 0 снимает ограничение. На практике глубину стоит ограничивать осознанно: дерево из 8–10 уровней неудобно пользователю и замедляет выбор из иерархических списков.
Для большинства задач достаточно 2–4 уровней: например, «Товары → Категория → Подкатегория». Если бизнес-структура глубже, стоит пересмотреть аналитику — возможно, часть уровней правильнее вынести в отдельный справочник или в дополнительные реквизиты.
Запросы с «В ИЕРАРХИИ» на больших справочниках (сотни тысяч элементов) выполняются заметно дольше обычного сравнения по родителю. Если нужны только прямые потомки группы, сравнение Родитель = &Группа работает быстрее.
Перед массовым переносом элементов по группам удобно сначала создать всю структуру папок, а затем переносить элементы пакетной обработкой через установку реквизита «Родитель». Ручное перетаскивание оправдано только для десятков позиций, не для тысяч.
Типичные ошибки и как их избежать
Проверка результата после настройки
Как проверить результат
Отображается дерево групп, есть кнопка создания группы, элементы раскрываются по папкам
Список по-прежнему плоский, кнопки группы нет — свойство «Иерархический» не включено или конфигурация не обновлена
В карточке элемента доступно поле «Группа» / «Родитель»
Поля родителя нет — проверьте вид иерархии и права пользователя
Возвращаются элементы группы со всех вложенных уровней
Возвращаются только прямые потомки или пустой результат — проверьте, что передана именно ссылка на группу
Дополнительно стоит открыть несколько типовых отчётов или документов, где используется справочник, и убедиться, что выбор значения работает корректно: при виде «Список и группы» в документах обычно скрывают группы от выбора, чтобы пользователь не подставил папку вместо элемента.
FAQ
Можно ли сделать иерархическим уже заполненный справочник?
Да. Включите свойство «Иерархический» и обновите конфигурацию — существующие элементы окажутся в корне без родителя. Затем распределите их по группам вручную или обработкой. Данные при этом не теряются.
Чем группа отличается от элемента?
Отличие есть только при виде иерархии «Список и группы»: группа — это папка для объединения элементов, она не предназначена для использования в документах как полноценное значение. При виде «Элементы и группы» отдельных групп нет — любой элемент может быть родителем.
Как программно проверить, входит ли элемент в группу с учётом вложенности?
Самый надёжный способ — запрос с оператором «В ИЕРАРХИИ». Альтернатива в коде — метод ПроверитьПринадлежностьЭлементу или цикл по цепочке родителей через свойство «Родитель», но цикл медленнее и требует защиты от зацикливания.
Почему в документе можно выбрать группу, хотя нужна только позиция?
По умолчанию поле ввода показывает и группы, и элементы. В свойствах поля ввода установите «Выбор групп и элементов» в значение «Элементы» — тогда группы будут недоступны для выбора, но останутся видны для навигации по дереву.
Что будет, если удалить группу с элементами?
При пометке на удаление группы платформа помечает и все вложенные элементы. При интерактивном удалении будет выдано предупреждение. Восстановить данные после физического удаления невозможно, поэтому перед чисткой структуры делайте архивную копию.
Сколько уровней иерархии поддерживает платформа?
Ограничение задаётся в свойствах справочника; значение 0 означает отсутствие ограничений со стороны настройки. Практический предел определяется удобством работы и скоростью запросов — глубокие деревья неудобны пользователям и замедляют операции «В ИЕРАРХИИ».
Что важно запомнить
Иерархия включается одним свойством в конфигураторе, но ключевое решение — выбор вида: «Список и группы» для каталогов с папками, «Элементы и группы» для структур, где родитель тоже хранит данные. В коде используйте реквизит «Родитель», в запросах — «В ИЕРАРХИИ», а перед сменой вида иерархии в рабочей базе обязательно делайте резервную копию.