Система компоновки данных позволяет выводить в отчет данные из нескольких наборов. При этом в некоторые группировки могут попадать записи некоторого набора данных по нескольку раз. Однако в случае использования связанных наборов данных при расчете итога каждая запись будет учтена только один раз. Если отчет получен с использованием связи двух таблиц в запросе, общий итог будет содержать суммы по всем строкам, что неверно.
Для примера рассмотрим вывод отчета с использованием двух связанных наборов данных.
Создадим набор данных, получающий остатки номенклатуры при помощи запроса (листинг 3.25).
Листинг 3.25. Текст запроса
ВЫБРАТЬ
ОстаткиНоменклатурыОстатки.Номенклатура,
ОстаткиНоменклатурыОстатки.Склад,
ОстаткиНоменклатурыОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
Укажем ресурс отчета – КоличествоОстаток. Создадим в настройках отчета группировку Детальные записи и выберем поля: Номенклатура, Склад, КоличествоОстаток (рис. 3.94).
Рис. 3.94. Настройки отчета
В режиме 1С:Предприятие создадим в отчете отбор (рис. 3.95).
Рис. 3.95. Настройка отбора
Выполним отчет (рис. 3.96).
Рис. 3.96. Результат отчета
Создадим набор данных, получающий продажи номенклатуры при помощи запроса (листинг 3.26).
Листинг 3.26. Текст запроса
ВЫБРАТЬ
ПродажиОбороты.Контрагент,
ПродажиОбороты.Номенклатура,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
Укажем ресурсы отчета – КоличествоОборот и СтоимостьОборот. Создадим в настройках отчета группировку Детальные записи и выберем поля: Номенклатура, Контрагент, КоличествоОборот, СтоимостьОборот (рис. 3.97).
Рис. 3.97. Настройки отчета
Выполним отчет с таким же (рис. 3.95) отбором (рис. 3.98).
Рис. 3.98. Результат отчета
Свяжем два указанных выше набора данных по полю Номенклатура (рис. 3.99).
Рис. 3.99. Связь наборов данных
Укажем ресурсы отчета – КоличествоОстаток, КоличествоОборот и СтоимостьОборот. Создадим в настройках отчета группировку Детальные записи и выберем поля: Номенклатура, Контрагент, Склад, КоличествоОстаток, КоличествоОборот, СтоимостьОборот (рис. 3.100).
Рис. 3.100. Настройки отчета
Выполним отчет с таким же (рис. 3.95) отбором (рис. 3.101).
Рис. 3.101. Результат отчета
Мы видим, что за счет соединения записи из обоих наборов данных выводятся в результат по нескольку раз. Однако общий итог по таблице рассчитан правильно за счет того, что в расчете итогов каждая запись участвует только один раз.
Получим теперь такой же отчет с использованием связи двух таблиц в запросе (листинг 3.27).
Листинг 3.27. Текст запроса
ВЫБРАТЬ
ОстаткиНоменклатурыОстатки.Номенклатура,
ОстаткиНоменклатурыОстатки.Склад,
ОстаткиНоменклатурыОстатки.КоличествоОстаток,
ПродажиОбороты.Контрагент,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ПО ОстаткиНоменклатурыОстатки.Номенклатура = ПродажиОбороты.Номенклатура
Создадим такие же ресурсы и настройки отчета, как и в предыдущем случае (см. рис. 3.100). Выполним отчет с таким же (рис. 3.95) отбором (рис. 3.102).
Рис. 3.102. Результат отчета
Мы видим, что итоговые значения содержат суммы по всем строкам. В данном случае – это неверный результат.