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