В некоторых отчетах требуется получать данные из нескольких наборов, при этом связь между наборами данных требуется выполнять по периодам. Рассмотрим эту возможность на примере отчета ОстаткиИПродажиТоваров (). Допустим, требуется выдать в отчет данные по остаткам товаров на складах по месяцам и выдать объем продаж по каждому товару за каждый месяц.
Для реализации такого отчета в схеме компоновки данных создано два набора данных:
Для того чтобы получить остатки товаров по периодам, используется виртуальная таблица регистра накопления ОстаткиНоменклатуры.ОстаткиИОбороты. Набор данных Остатки можно получить с помощью следующего запроса (листинг 3.21).
Листинг 3.21. Текст запроса набора данных «Остатки»
ВЫБРАТЬ
ОстаткиНоменклатурыОстаткиИОбороты.Период,
ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура,
ОстаткиНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток,
ОстаткиНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты(, , Месяц, , )
КАК ОстаткиНоменклатурыОстаткиИОбороты
Продажи за период можно получить при помощи виртуальной таблицы регистра накопления Продажи.Обороты. Для получения набора данных Продажи можно использовать следующий запрос (листинг 3.22).
Листинг 3.22. Текст запроса набора данных «Продажи»
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
ПродажиОбороты.КоличествоОборот
ИЗ
РегистрНакопления.Продажи.Обороты(
&НачалоПериодаПродаж, &КонецПериодаПродаж, , ) КАК ПродажиОбороты
Так как система компоновки данных позволяет выполнять связь между наборами данных только по их полям, необходимо обеспечить в обоих наборах данных поля начала и конца периода. Для этого тексты запросов для получения наборов данных изменены следующим образом (листинги 3.23, 3.24).
Листинг 3.23. Текст запроса набора данных «Остатки»
ВЫБРАТЬ
ОстаткиНоменклатурыОстаткиИОбороты.Период КАК НачалоПериода,
КОНЕЦПЕРИОДА(ОстаткиНоменклатурыОстаткиИОбороты.Период, МЕСЯЦ)
КАК КонецПериода,
ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура,
ОстаткиНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток КАК
НачальныйОстаток
ОстаткиНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток КАК
КонечныйОстаток
ИЗ
РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты(, , Месяц, , )
КАК ОстаткиНоменклатурыОстаткиИОбороты
Листинг 3.24. Текст запроса набора данных «Продажи»
ВЫБРАТЬ
&НачалоПериодаПродаж КАК НачалоПериода,
&КонецПериодаПродаж КАК КонецПериода,
ПродажиОбороты.Номенклатура,
ПродажиОбороты.КоличествоОборот КАК Количество
{ВЫБРАТЬ
НачалоПериода,
КонецПериода,
Номенклатура.*,
Количество}
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродаж, &КонецПериодаПродаж, ,
{(Контрагент).*, (Номенклатура).*}) КАК ПродажиОбороты
В тексте данного запроса используется расширение языка запросов для системы компоновки данных – часть запроса, заключенная в фигурные скобки. В конструкции {ВЫБРАТЬ…} указывается список доступных полей набора данных, а в параметрах виртуальной таблицы {(Контрагент).*, (Номенклатура).*} указывается список полей, по которым на результат запроса можно наложить условие, то есть перечисляются поля, которые будут доступны в настройках отбора схемы компоновки данных.
Теперь нужно обеспечить связь наборов данных Остатки и Продажи по номенклатуре и полям периодов. На закладке Связи наборов данных создаются три связи между наборами Остатки и Продажи.
Сначала наборы данных связываются по полю Номенклатура. Затем (во второй и третьей строке) для указания связи по полям-периодам в полях Выражение источник и Выражение приемник указывается поле НачалоПериода/КонецПериода. В поле Параметр из списка параметров выбирается параметр НачалоПериодаПродаж/КонецПериодаПродаж зависимого набора данных, в котором будет храниться значение связи (рис. 3.92).
Рис. 3.92. Описание связи наборов данных
Из описания связей видно, что для записей набора данных Остатки будут получаться записи набора данных Продажи для нужного периода и нужных товаров. При этом значения полей НачалоПериода и КонецПериода набора данных Остатки будут использоваться в качестве значений параметров виртуальной таблицы Продажи.Обороты.
В результате отчет, сформированный за период 01.12.2011–31.01.2012, будет иметь вид (рис. 3.93).
Рис. 3.93. Результат отчета