При разработке отчетов часто требуется получить информацию из нескольких наборов данных. При этом между ними нужно установить связь. Пусть для анализа информации о движении номенклатуры в схеме компоновки данных создано два набора.
Набор данных Поступление, получающий данные о поступлении номенклатуры при помощи запроса (листинг 3.19).
Листинг 3.19. Текст запроса
ВЫБРАТЬ
ПриходнаяНакладнаяПереченьНоменклатуры.Номенклатура,
ПриходнаяНакладнаяПереченьНоменклатуры.Количество КАК Поступило,
ПриходнаяНакладнаяПереченьНоменклатуры.Сумма КАК СуммаПоступления
ИЗ
Документ.ПриходнаяНакладная.ПереченьНоменклатуры КАК
ПриходнаяНакладнаяПереченьНоменклатуры
Набор данных Расход, получающий данные о расходе номенклатуры при помощи запроса (листинг 3.20).
Листинг 3.20. Текст запроса
ВЫБРАТЬ
РасходнаяНакладнаяПереченьНоменклатуры.Номенклатура,
РасходнаяНакладнаяПереченьНоменклатуры.Количество КАК Продано,
ПриходнаяНакладнаяПереченьНоменклатуры.Сумма КАК СуммаПродажи
ИЗ
Документ.РасходнаяНакладная.ПереченьНоменклатуры КАК
РасходнаяНакладнаяПереченьНоменклатуры
В схеме компоновки данных на закладке Связи наборов данных добавим связь между наборами данных и опишем ее. В качестве источника связи укажем набор данных Поступление, в качестве приемника – набор данных Расход. В качестве выражения источника укажем поле Номенклатура, в качестве выражения приемника – Номенклатура (рис. 3.85).
Рис. 3.85. Описание связи наборов данных
При описании связей между наборами данных существует ряд особенностей:
Продемонстрируем на примере, как изменится результат отчета в зависимости от того, какой набор выбран родительским, а какой – зависимым.
При описании связи наборов данных набор Поступление указан в качестве родительского набора. Поэтому в результате отражены все поступления номенклатуры, и только та номенклатура из набора Расход, которая есть в наборе Поступление (рис. 3.86).
Рис. 3.86. Результат отчета
Теперь укажем набор данных Расход в качестве родительского набора (рис. 3.87).
Рис. 3.87. Описание связи наборов данных
В результате отражены все записи о расходе номенклатуры и только та номенклатура из набора Поступление, которая есть в наборе Расход (рис. 3.88).
Рис. 3.88. Результат отчета
Создадим отбор на уровне всего отчета на поле зависимого набора Поступление (рис. 3.89).
Рис. 3.89. Отбор отчета по полю зависимого набора данных
В результате в отчет попадут только связанные по полю Номенклатура записи из обоих наборов данных, то есть тип связи будет Внутренним соединением (рис. 3.90).
Рис. 3.90. Результат отчета
С точки зрения эффективности исполнения отчета лучше получать в дочернем наборе сразу только те записи, которые удовлетворяют условию связи наборов данных. Для этого нужно указать в запросе дочернего набора параметр связи и использовать его в схеме компоновки при описании связи. Иначе в дочернем наборе будет получено много лишних записей, которые затем будут откидываться как не удовлетворяющие условию связи (рис. 3.91).
Рис. 3.91. Описание связи наборов данных с использованием параметра связи
Конкретный пример описания такой связи можно посмотреть во второй главе ().