Расчет итогов при использовании нескольких наборов данных

Система компоновки позволяет выводить в результат данные из нескольких наборов. При этом в некоторые группировки могут попадать записи некоторого набора данных по нескольку раз. Однако, не смотря на то, что запись встречается в группировке несколько раз, при расчете итога каждая запись будет учтена только один раз.

Рассмотрим пример:

Есть набор данных Продажи. Поля: Номенклатура, Контрагент, СуммаОборот. Данные получаются при помощи следующего запроса:

Копировать в буфер обмена
ВЫБРАТЬ
 ПродажиОбороты.Контрагент,
 ПродажиОбороты.Номенклатура,
 ПродажиОбороты.СуммаОборот
ИЗ
 РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты

Набор данных Остатки. Поля Номенклатура, Склад, КоличествоОстаток. Данные получаются при помощи следующего запроса:

Копировать в буфер обмена
ВЫБРАТЬ
 УчетНоменклатурыОстатки.Номенклатура,
 УчетНоменклатурыОстатки.Склад,
 УчетНоменклатурыОстатки.КоличествоОстаток
ИЗ
 РегистрНакопления.УчетНоменклатуры.Остатки КАК УчетНоменклатурыОстатки

Набор данных Продажи связан с Набором данных Остатки по полю Номенклатура.

КоличествоОстаток и СуммаОборот являются ресурсами, итоги по ним рассчитываются суммированием.

Набор Продажи содержит следующие данные:

Номенклатура

Контрагент

Сумма оборот

Клавиатура LK-601 KB-2 000 PS/2

Максимус

7

Клавиатура LK-601 KB-2 000 PS/2

Автохозяйство №34

20

Клавиатура LK-601 KB-2 000 PS/2

Алекс-2002

200

Клавиатура LK-601 KB-2 000 PS/2

Магазин на ул. Алексеева

75

Клавиатура LK-601 KB-2 000 PS/2

Эльбрус

75

Итого

377

Набор данных Остатки:

Номенклатура

Склад

Количество остаток

Клавиатура LK-601 KB-2 000 PS/2

Основной склад

17

Клавиатура LK-601 KB-2 000 PS/2

Склад отдела продаж

5

Итого

22

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

Номенклатура

Контрагент

Склад

Сумма оборот

Количество остаток

Клавиатура LK-601 KB-2 000 PS/2

Максимус

Основной склад

7

17

Клавиатура LK-601 KB-2 000 PS/2

Максимус

Склад отдела продаж

7

5

Клавиатура LK-601 KB-2 000 PS/2

Автохозяйство №34

Основной склад

20

17

Клавиатура LK-601 KB-2 000 PS/2

Автохозяйство №34

Склад отдела продаж

20

5

Клавиатура LK-601 KB-2 000 PS/2

Алекс-2002

Основной склад

200

17

Клавиатура LK-601 KB-2 000 PS/2

Алекс-2002

Склад отдела продаж

200

5

Клавиатура LK-601 KB-2 000 PS/2

Магазин на ул. Алексеева

Основной склад

75

17

Клавиатура LK-601 KB-2 000 PS/2

Магазин на ул. Алексеева

Склад отдела продаж

75

5

Клавиатура LK-601 KB-2 000 PS/2

Эльбрус

Основной склад

75

17

Клавиатура LK-601 KB-2 000 PS/2

Эльбрус

Склад отдела продаж

75

5

Итого

377

22

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

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

Так, если для отчета данные будут получаться при помощи следующего запроса:

Копировать в буфер обмена
ВЫБРАТЬ
 ПродажиОбороты.Контрагент,
 ПродажиОбороты.Номенклатура,
 УчетНоменклатурыОстатки.Склад,
 ПродажиОбороты.СуммаОборот,
 УчетНоменклатурыОстатки.КоличествоОстаток
ИЗ
 РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетНоменклатуры.Остатки КАК УчетНоменклатурыОстатки
  ПО ПродажиОбороты.Номенклатура = УчетНоменклатурыОстатки.Номенклатура

То результат отчета будет выглядеть следующим образом:

Номенклатура

Контрагент

Склад

Сумма оборот

Количество остаток

Клавиатура LK-601 KB-2 000 PS/2

Максимус

Основной склад

7

17

Клавиатура LK-601 KB-2 000 PS/2

Максимус

Склад отдела продаж

7

5

Клавиатура LK-601 KB-2 000 PS/2

Автохозяйство №34

Основной склад

20

17

Клавиатура LK-601 KB-2 000 PS/2

Автохозяйство №34

Склад отдела продаж

20

5

Клавиатура LK-601 KB-2 000 PS/2

Алекс-2002

Основной склад

200

17

Клавиатура LK-601 KB-2 000 PS/2

Алекс-2002

Склад отдела продаж

200

5

Клавиатура LK-601 KB-2 000 PS/2

Магазин на ул. Алексеева

Основной склад

75

17

Клавиатура LK-601 KB-2 000 PS/2

Магазин на ул. Алексеева

Склад отдела продаж

75

5

Клавиатура LK-601 KB-2 000 PS/2

Эльбрус

Основной склад

75

17

Клавиатура LK-601 KB-2 000 PS/2

Эльбрус

Склад отдела продаж

75

5

Итого

754

110

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