Система компоновки данных позволяет выводить в отчет иерархические детальные записи. В данной статье описываются особенности работы с данным механизмом.
При выводе в результат детальных записей система анализирует наличие у выводимого набора данных связи к самому себе. В случае если такая связь обнаружена, система рекурсивно выполняет связь для получения вложенных записей.
Рассмотрим пример. В примере будем выдавать в отчет иерархический справочник номенклатуры.
Запрос набора данных для получения номенклатуры будет выглядеть так:
Копировать в буфер обменаВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Родитель,
Номенклатура.Код,
Номенклатура.Наименование,
Номенклатура.ЭтоГруппа
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель В(&Родители)
При помощи данного запроса будут получаться записи с указанным родителем. Если параметр Родитель будет содержать пустую ссылку, то будут получены записи, у которых родителей нет, т.е. корневые записи.
Набор данных с указанным запросом назовем Номенклатура.
Для обеспечения вывода иерархии опишем связь набора данных Номенклатура к самому себе.
В качестве выражения - источника будем использовать значение поля Ссылка.
В качестве выражения - приемника буем использовать значение поля Родитель.
Таким образом, для каждой записи набора данных в наборе данных будут искаться записи, у которых поле Родитель имеет значение поля Ссылка родительской записи.
Т.к. запрос получает данные с фильтрацией по родителю, в связи укажем параметр связи "Родитель". Таким образом, при получении дочерних записей система будет передавать значения поля Ссылка дочернему запросу через этот параметр. Т.к. параметр Родитель используется в конструкции языка запроса В, то в качестве значения параметра система может передавать не одно, а сразу несколько значений. Чтобы система это делала, укажем в связи признак "Список параметров".
Справочник Номенклатура имеет иерархию групп и элементов. При этом дочерние записи могут существовать только у групп. Поэтому, для того, чтобы система не осуществляла поиск дочерних записей не у групповых записей, укажем в связи условие связи: "ЭтоГруппа". Таким образом, система будет выполнять запросы для получения дочерних записей только для тех записей, у которых значение поля ЭтоГруппа имеет значение Истина, т.е. только для групп.
Последнее, что нам нужно сделать, это указать, с какого значения система должна начинать получать иерархические записи. Делается это при помощи свойства связи "Начальное значение связи". Нам нужно, чтобы на первом уровне отчета выдавались записи, у которых родитель отсутствует. Поэтому в качестве начального значения связи укажем выражение "Значение(Справочник.Номенклатура.ПустаяСсылка)" (без кавычек). Таким образом, при первом получении данных из набора данных система будет получать записи, у которых значение поля Родитель равно пустой ссылке, т.е. корневые записи.
На следующем рисунке показана полностью заполненная связь в конструкторе схемы:
Для вывода в результат такого набора данных достаточно вывести в результат детальные записи с нужными полями.
Для этого добавим в настройки детальные записи (группировку без полей группировки) и выберем поля, которые мы хотели бы видеть в результате:
Результат такого отчета будет выглядеть следующим образом:
Код | Наименование |
0000001 | Мониторы |
0000021 | Монитор 15' LG Studioworks 575N |
0000022 | Монитор 17' Philips 107S20 |
0000023 | Монитор 19' Hitachi CM715ET |
0000024 | Монитор LCD 22' M8537ZM/A |
0000002 | Системные блоки и комплектующие |
0000036 | Сист. блок Hewlett-Packard Brio BA410 |
0000037 | Сист. блок Hewlett-Packard Vectra VL420 |
0000038 | Сист. блок IBM NetVista A22p |
0000039 | Сист. блок IBM NetVista M41 |
0000003 | Принтеры |
0000030 | Лазерный принтер Canon LBP-810 |
0000031 | Лазерный принтер 5250197-203 Minolta-QMS |
0000032 | Лазерный принтер HP LaserJet 2200 |
0000004 | Мыши |
0000025 | Мышь 2-кноп A4Tech PS/2 |
0000026 | Мышь OK-720 Mouse A4Tech PS/2 |
0000027 | Мышь Ice Mouse MUS-2 |
0000028 | Мышь LOGITECH M-S48 PS/2 |
0000029 | Мышь GENIUS "EASY" (3 кнопки), |
0000005 | Клавиатуры |
0000018 | Клавиатура Apple Pro Keyboards |
0000020 | Клавиатура LK-601 KB-2000 PS/2 |
0000006 | Программное обеспечение |
0000045 | Windows |
0000009 | Windows XP Home Edition Russian CD |
0000010 | Windows XP Home Edition Russian UPG CD |
0000011 | Windows XP Professional Russian CD |
0000012 | 1С:Бухгалтерия 7.7 Базовая версия |
0000013 | 1С:Бухгалтерия 7.7 Стандартная версия |
0000014 | 1С:Бухгалтерия ПРОФ версия 7.7 |
0000015 | 1С:Аспект 7.7 |
0000016 | 1С:Торговля и Склад 7.7 Проф |
0000007 | Услуги |
0000041 | Доставка |
0000042 | Инсталляция ПО |
0000043 | Консультации по настройке ОС Windiws |
0000044 | Консультации по настройке 1С |
0000033 | Ноутбуки |
0000034 | Ноутбук Rover Computers Navigator KT7 |
0000035 | Ноутбук Rover Computers Explorer |
0000046 | Телефоны |
0000047 | Телефон Vega 700 |
0000048 | Телефон Vega 300 |
0000051 | Телефон Siemens SL45 |
0000052 | Телефон LG W7200 |
0000049 | Копировальные аппараты |
0000050 | Копировальный аппарат Omega |