При построении иерархии система компоновки данных позволяет выводить один элемент в нескольких родительских записях.
Например, в конфигурации созданы два справочника: Филиалы и Сотрудники. В справочнике Сотрудники имеются записи: «Алексеева Дарья», «Соколов Андрей», «Ильин Сергей». В справочнике Филиалы имеются записи: «Основной» и «Дополнительный».
В конфигурации создан регистр сведений МестаРаботы с измерениями Филиал типа СправочникСсылка.Филиалы и Сотрудник типа СправочникСсылка.Сотрудники. Регистр заполнен следующими записями (рис. 3.66).
Рис. 3.66. Регистр сведений «Места работы»
Создадим отчет Места работы. В схеме компоновки данных отчета создадим набор данных Филиалы, получающий список филиалов при помощи запроса (листинг 3.8).
Листинг 3.8. Текст запроса
ВЫБРАТЬ
Филиалы.Ссылка как Филиал
ИЗ
Справочник.Филиалы как Филиалы
Для построения иерархии создадим набор данных Иерархия (листинг 3.9).
Листинг 3.9. Текст запроса
ВЫБРАТЬ
МестаРаботы.Филиал,
МестаРаботы.Сотрудник
ИЗ
РегистрСведений.МестаРаботы как МестаРаботы
ГДЕ
МестаРаботы.Филиал В(&Филиал)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Сотрудники.Ссылка,
NULL
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Ссылка В(&Филиал)
Первое объединение запроса выбирает сотрудников, работающих в филиалах. Вторая часть запроса выбирает сотрудников, так как иерархический набор должен содержать и сами иерархические записи.
Опишем связи между наборами данных. В качестве источника связи укажем набор данных Филиалы, в качестве приемника – набор данных Иерархия. Выражение-источник – поле Филиал, выражение-приемник – поле Филиал. Параметром связи укажем поле Филиал и укажем, что возможен список параметров.
Опишем иерархическую связь набора к самому себе. В качестве выражения источника укажем поле Сотрудник, а в качестве выражения приемника – Филиал. Параметром связи укажем поле Филиал и укажем возможность списка параметров (рис. 3.67).
Рис. 3.67. Установка связей наборов данных для построения иерархии
ВНИМАНИЕ
В иерархическом наборе данных поле, с которым осуществляется связь основного набора, должно называться так же, как и в основном наборе. Так, в приведенном выше примере, в иерархическом наборе данных связуемое поле должно иметь имя Филиал.
На закладке Настройки в структуру отчета добавим группировку по полю Филиал с типом Иерархия (рис. 3.68).
Рис. 3.68. Настройка иерархической группировки
Выполним отчет. В результате филиал Основной будет выведен для двух сотрудников (рис. 3.69).
Рис. 3.69. Результат отчета