15.02.2011
В некоторых отчетах требуется получать данные из нескольких наборов, при этом связь между наборами данных требуется выполнять по периодам. В данной статье описывается, каким образом можно сделать такой отчет при помощи системы компоновки данных.
Допустим, нам требуется выдать в отчет данные по остаткам товаров на складах по месяцам и для каждого месяца для каждого товара выдать объем продаж по товарам за этот период.
Для реализации такого отчета создадим два набора данных:
1. Набор данных с остатками по периодам.
2. Набор данных с продажами товаров за период.
Для того чтобы получить остатки по товарам по периодам, воспользуемся виртуальной таблицей ОстаткиИОбороты регистра накопления:
Копировать в буфер обменаВЫБРАТЬ
ТоварныеЗапасыОстаткиИОбороты.Период КАК НачалоПериода,
ТоварныеЗапасыОстаткиИОбороты.Товар,
ТоварныеЗапасыОстаткиИОбороты.КоличествоНачальныйОстаток
ИЗ
РегистрНакопления.ТоварныеЗапасы.ОстаткиИОбороты(, , Месяц, , ) КАК ТоварныеЗапасыОстаткиИОбороты
Продажи за период можно получить при помощи виртуальной таблицы Обороты регистра накопления:
Копировать в буфер обменаВЫБРАТЬ
ПродажиОбороты.Товар,
ПродажиОбороты.КоличествоОборот
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродаж, &КонецПериодаПродаж, , ) КАК ПродажиОбороты
Так как система компоновки данных позволяет выполнять связь между наборами данных только по их полям, нам нужно обеспечить в обоих наборах данных поля начала и конца периода. Для этого переделаем запросы наборов данных следующим образом:
Набор данных остатков:
Копировать в буфер обменаВЫБРАТЬ
ТоварныеЗапасыОстаткиИОбороты.Период КАК НачалоПериода,
КОНЕЦПЕРИОДА(ТоварныеЗапасыОстаткиИОбороты.Период, МЕСЯЦ) КАК КонецПериода,
ТоварныеЗапасыОстаткиИОбороты.Товар,
ТоварныеЗапасыОстаткиИОбороты.КоличествоНачальныйОстаток
ИЗ
РегистрНакопления.ТоварныеЗапасы.ОстаткиИОбороты(, , Месяц, , ) КАК ТоварныеЗапасыОстаткиИОбороты
Набор данных продаж:
Копировать в буфер обменаВЫБРАТЬ
&НачалоПериодаПродаж КАК НачалоПериода,
&КонецПериодаПродаж КАК КонецПериода,
ПродажиОбороты.Товар,
ПродажиОбороты.КоличествоОборот
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродаж, &КонецПериодаПродаж, , ) КАК ПродажиОбороты
Теперь мы имеем возможность связать эти наборы данных друг с другом по полям - периодам.
Из описания связей видно, что для записей набора данных Остатки будут получаться записи набора данных ПродажиЗаПериод для нужного периода и нужных товаров. При этом значения полей НачалоПериода и КонецПериода набора данных Остатки будет использоваться в качестве значений параметров виртуальной таблицы Обороты.