Книга: Разработка сложных отчетов в «1С:Предприятии 8». Система компоновки данных
Назад: Неправильное заполнение роли полей в наборе данных
Дальше: Связь наборов данных по периодам

Связи наборов данных

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

Набор данных Поступление, получающий данные о поступлении номенклатуры при помощи запроса (листинг 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. Описание связи наборов данных с использованием параметра связи

Конкретный пример описания такой связи можно посмотреть во второй главе ().

Назад: Неправильное заполнение роли полей в наборе данных
Дальше: Связь наборов данных по периодам