Перейти к основному содержимому

Иерархический справочник

«1С:Шина» предоставляет возможность создавать иерархический справочник.

Чтобы указать, что справочник является иерархическим, задайте его свойству Иерархический значение Истина.

Описание иерархического справочника «Подразделения»
ВидЭлемента: Справочник
ОбластьВидимости: ВПодсистеме
Ид: a0d13c34-3697-4ca0-9156-2fea699a31dc
Имя: Подразделения
Иерархический: Истина
Интерфейс:
ВключатьВАвтоИнтерфейс: Истина
Реквизиты:
-
Имя: Наименование

На автоматические формы объекта и списка такого справочника добавляется поле Родитель. Динамический список начинает работать в иерархическом режиме:

Форма списка иерархического справочника «Подразделения»

Для иерархических справочников:

Реквизит «Родитель»

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

  • этот реквизит удаляется и заменяется на системный;
  • начинают действовать следующие требования:
    • отсутствие свойств реквизита Ид и Тип,
    • отсутствие каких-либо ограничений типа.

Реквизит «Владелец»

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

примечание

Проверка значения поля Владелец отключена в контексте загрузки (РежимЗагрузкиДанных = Истина).

Дополнительные иерархии

Для справочников можно указать дополнительные иерархии, состоящие из двух типов:

  • тип элементов — тип основного справочника,
  • тип групп — тип родительского справочника.

Иерархическую связь можно установить только по полю, которое имеет значение типа РодительскийСправочник.Ссылка?.

примечание

Если справочник иерархический, то его иерархия автоматически включается в дополнительную.

Чтобы добавить дополнительную иерархию в среде разработки, выберите нужный справочник и нажмите на значок плюса рядом с пунктом Дополнительные иерархии.

Добавление дополнительной иерархии в среде разработки

В свойствах дополнительной иерархии укажите имя и поле родителя.

Свойства дополнительной иерархии

Дополнительных иерархий в справочнике может быть несколько. Чтобы указать, какую из них необходимо использовать по умолчанию, используйте свойство справочника ИерархияПоУмолчанию.

Пример справочника с дополнительными иерархиями

Справочник Подразделения — иерархический справочник, содержащий подразделения компании.

Пример YAML-файла справочника «Подразделения»
ВидЭлемента: Справочник
ОбластьВидимости: ВПодсистеме
Ид: a0d13c34-3697-4ca0-9156-2fea699a31dc
Имя: Подразделения
Иерархический: Истина
Интерфейс:
ВключатьВАвтоИнтерфейс: Истина
Реквизиты:
-
Имя: Наименование

Справочник Должности — справочник, содержащий информацию о должностях сотрудников.

Пример YAML-файла справочника «Должности»
ВидЭлемента: Справочник
ОбластьВидимости: ВПодсистеме
Ид: 8fe68800-1919-4e2c-8f23-04c41ccd7590
Имя: Должности
Интерфейс:
ВключатьВАвтоИнтерфейс: Истина
Реквизиты:
-
Имя: Наименование

Справочник Сотрудники — иерархический справочник с информацией о сотрудниках компании. Для каждого сотрудника определены подразделение и должность. Для справочника заданы две дополнительные иерархии: по подразделениям и по должностям.

Пример YAML-файла справочника «Сотрудники»
ВидЭлемента: Справочник
ОбластьВидимости: ВПодсистеме
Ид: 809d8fb4-53b1-4257-b010-8829aac92df6
Имя: Сотрудники
Иерархический: Истина
ИерархияПоУмолчанию: СотрудникиПоПодразделениям
ДополнительныеИерархии:
-
Ид: fa5adcd4-975a-4ce8-9287-2d8aa5f94bea
Имя: СотрудникиПоПодразделениям
ПолеРодителя: Подразделение
-
Ид: 17096907-9e5f-4086-a58f-71c702913ce4
Имя: СотрудникиПоДолжностям
ПолеРодителя: Должность
Интерфейс:
ВключатьВАвтоИнтерфейс: Истина
Реквизиты:
-
Имя: Наименование
-
Ид: 22c11da4-e475-480d-bb15-193b29553555
Имя: Подразделение
Тип: Подразделения.Ссылка?
-
Ид: 8f108cda-74a4-44f5-9d68-16393d5d6d46
Имя: Должность
Тип: Должности.Ссылка?

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

Чтобы добавить запись в справочник дополнительной иерархии, выберите его с помощью команды Добавить.

Добавление записи в иерархический справочник

Откроется форма объекта выбранного справочника.

Форма объекта справочника дополнительной иерархии

Настройка фильтров в иерархическом справочнике

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

Таблицы языка запросов с информацией об иерархических связях

Для иерархических справочников и дополнительных иерархий порождаются следующие таблицы языка запросов:

  • ИмяСправочника.Иерархия — таблица для иерархического справочника с информацией о связях;
  • ИмяСправочника.Иерархия.Циклы — таблица для иерархического справочника с информацией о циклах;
  • ИмяСправочника.ИмяИерархии — таблица для дополнительной иерархии с информацией о связях;
  • ИмяСправочника.ИмяИерархии.Циклы — таблица для дополнительной иерархии с информацией о циклах.

Подробнее о таблицах, порождаемых в языке запросов для справочников с иерархией

примечание

Таблицы иерархий не содержат данных, требующих защиты с помощью контроля доступа. Они доступны всем для чтения.

Примеры получения данных с помощью языка запросов

Получение всех родительских элементов
ВЫБРАТЬ
Подразделения.Ссылка,
Подразделения.Код,
Подразделения.Наименование
ИЗ
Подразделения как Подразделения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Подразделения.Иерархия КАК ТаблицаИерархии
ПО Подразделения.Ссылка == ТаблицаИерархии.Родитель И ТаблицаИерархии.Ребенок == %Ребенок
Получение всех дочерних элементов в определенной иерархии
ВЫБРАТЬ
Ссылка,
Код,
Наименование
ИЗ
Сотрудники
ГДЕ
Ссылка В ИЕРАРХИИ Сотрудники.Подразделения (%Подразделение)
Получение уровня элемента в иерархии
ВЫБРАТЬ
Подразделения.Ссылка,
Подразделения.Код,
Подразделения.Наименование,
Подразделения.Уровень
ИЗ
Подразделения КАК Подразделения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Подразделения.Иерархия КАК ТаблицаИерархии
ПО Подразделения.Ссылка == ТаблицаИерархии.Ребенок