Содержание:
1. Наборы данных СКД
В системе компоновки данных (далее по тексту СКД) есть возможность использовать в качестве набора данных не только запрос, но и такие источники как объект и объединение (рисунок 1).
Рисунок 1. Наборы данных системы компоновки данных (СКД)
Определим какие наборы данных СКД и для чего необходимы:
· Набор данных запрос - содержит запрос к базе данных на языке запросов с использованием дополнительных синтаксических элементов (расширений). Вариант, который используется в 95%;
· Набор данных объект - содержит информацию о внешнем наборе данных, например: таблице значений, выборке из результата запроса, наборе записей регистров;
· Набор данных объединение - объединяет информацию из нескольких наборов данных.
Из определений наборов данных СКД видно, что они отличаются друг от друга тем, откуда получаются данные и как эти данные обрабатываются.
Останавливаться на наборе данных запрос и объект не будем. Рассмотрим варианты, когда в одном отчете схемы компоновки данных используется несколько наборов данных и как эти наборы между собой соединяются объединяются. Варианты использования нескольких наборов данных будем рассматривать в контексте следующей задачи: необходимо сформировать отчет СКД по продажам номенклатуры на каждую дату из периода с указанием цены на дату (задача из разряда срез последних на дату). Безусловно задачу можно решить запросом с соединением по максимальной дате из меньших или равных дат, но для изучения примера использования нескольких наборов данных используем СКД.
Решение задачи:
Первым шагом создадим набор данных, получающий данные продаж:
ВЫБРАТЬ
ПродажиОбороты.Период КАК Дата,
ПродажиОбороты.Контрагент КАК Контрагент,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.СтоимостьОборот КАК Стоимость
{ВЫБРАТЬ
Дата,
Контрагент.*,
Номенклатура.*,
Количество,
Стоимость}
ИЗ
РегистрНакопления.Продажи.Обороты({(&НачалоПериода)},
{(&КонецПериода)}, День, ) КАК ПродажиОбороты
{ГДЕ
ПродажиОбороты.Период,
ПродажиОбороты.Контрагент.*,
ПродажиОбороты.Номенклатура.*,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот}
Формирование отчета СКД будет иметь следующий вид (рисунок 2.)
Рисунок 2. Продажи товара за период
Зададим имя сформированному набору данных - ДанныеПродаж
Вторым шагом дополним наш отчет ценами номенклатуры на каждую дату продажи.
ВЫБРАТЬ
&Дата КАК Дата,
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
{ВЫБРАТЬ
Дата,
Номенклатура.*,
Цена}
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
&Дата,
Номенклатура = &Номенклатура
И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
{ГДЕ
(&Дата),
ЦеныНоменклатурыСрезПоследних.Номенклатура.*,
ЦеныНоменклатурыСрезПоследних.Цена}
Во втором наборе данных производим выборку цены номенклатуры из таблицы СрезПоследних регистра сведений ЦеныНоменклатуры с отбором по Дате, Номенклатуре, ТипЦены.
По условия задачи нам необходимо «склеить» эти два набора данных.
2. Связи наборов данных
Для соединения двух наборов данных перейдем на закладку «Связи наборов данных» СКД.
Рисунок 3. Закладка «Связи наборов данных» системы компоновки данных
Заполним связи наборов данных. В первой строке поле Источник связи, то есть в качестве родительского набора данных, укажем ДанныеПродаж, в поле Приемник связи, то есть в качестве зависимого набора данных, укажем ЦеныНоменклатурыНаДату.
В поле Выражение источник выберем из полей родительского набора поле Дата, а в поле Выражение приемник – поле зависимого набора данных «Дата», в поле Параметр укажем параметр Дата зависимого набора данных. Необходимо дать пояснение, если указан параметр, то СКД передает в приемник связи параметры, указанные в соединении. Значениями этих параметров будут значения соответствующих полей источника связи. Во второй строке поле Источник связи, то есть в качестве родительского набора данных, укажем ДанныеПродаж, в поле Приемник связи, то есть в качестве зависимого набора данных, укажем ЦеныНоменклатурыНаДату.
В поле Выражение Источник выберем из полей родительского набора поле Номенклатура, в поле Выражение приемник – поле зависимого набора данных «Номенклатура», в поле Параметр укажем параметр Номенклатура зависимого набора данных. Для обеих строк установим дополнительные настройки связей наборов данных:
Список параметров - алгоритм получения данных из подчиненного набора данных будет оптимизирован. Данные будут получены одним запросом.
Условие связи – поле, в котором можно задать произвольное выражение. Связь будет выполняться только в том случае, если значение выражения будет «Истина».
Начальное значение связи – используется для указания начального значения (корневого элемента), для связи набора данных с самим собой. Настройка может использоваться для создания собственной иерархии детальных записей.
Обязательная связь – если данный флаг отключен, связь будет добавлена в итоговый макет компоновки данных только в том случае, если в настройках компоновки данных используется поле из выражения источника связи.
Все связи, созданные в схеме компоновки данных, считаются Левыми внешними соединениями, то есть в отчет будут включены записи из обоих наборов данных, удовлетворяющих условию связи, Дата = Дата и Номенклатура = Номенклатура.
Рисунок 4. Схема соединения наборов данных
У ведущего набора записей будут отображаться все записи набора данных СКД, а у зависимого в зависимости от того найдена запись или нет соответственно. Результатом выполнения соединения получиться следующий отчет
3. Набор данных Объединение
Набор данных Объединение применяется в том случае если в отчет необходимо вывести все записи обоих наборов данных. Таким образом если рассматривать набор данных объединение в итоговую выборку попадут все записи первого и второго (n-го) набора записей, объединенные по группам в отчете (аналог в запросе 1С - ПОЛНОЕ СОЕДИНЕНИЕ). Примером объединения нескольких наборов данных может служить задача по формированию отчета СКД о поступление и продаже номенклатуры за период.
Рисунок 6. Отчет о поступлении и продаже номенклатуры за период
Заключение использование нескольких наборов данных в СКД дает разработчику мощный инструмент написание сложных отчетов.
Специалист компании «Кодерлайн»
Дмитрий Гречушкин