15.02.2011

Связь наборов данных по периодам

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

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

Для реализации такого отчета создадим два набора данных:

1. Набор данных с остатками по периодам.

2. Набор данных с продажами товаров за период.

Для того чтобы получить остатки по товарам по периодам, воспользуемся виртуальной таблицей ОстаткиИОбороты регистра накопления:

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

Продажи за период можно получить при помощи виртуальной таблицы Обороты регистра накопления:

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

Так как система компоновки данных позволяет выполнять связь между наборами данных только по их полям, нам нужно обеспечить в обоих наборах данных поля начала и конца периода. Для этого переделаем запросы наборов данных следующим образом:

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

Копировать в буфер обмена
ВЫБРАТЬ
 ТоварныеЗапасыОстаткиИОбороты.Период КАК НачалоПериода,
 КОНЕЦПЕРИОДА(ТоварныеЗапасыОстаткиИОбороты.Период, МЕСЯЦ) КАК КонецПериода,
 ТоварныеЗапасыОстаткиИОбороты.Товар,
 ТоварныеЗапасыОстаткиИОбороты.КоличествоНачальныйОстаток
ИЗ
 РегистрНакопления.ТоварныеЗапасы.ОстаткиИОбороты(, , Месяц, , ) КАК ТоварныеЗапасыОстаткиИОбороты

Набор данных продаж:

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

Теперь мы имеем возможность связать эти наборы данных друг с другом по полям - периодам.

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