Запросы и сегментирование

Запросы и сегментирование

В данной статье разобран процесс построения запроса вручную так, чтобы его параметры соответствовали параметрам сегментирования.

Запрос должен выбирать не весь набор данных, а данные одного конкретного сегмента – какого именно, задаётся параметрами сегментирования.

Важно! Запрос должен возвращать данные одного конкретного сегмента.

При сегментировании Экстрактор:

  1. Создаёт очередь выгрузки, в которую сохраняются записи по каждому отдельному сегменту (в каждой строке очереди – конкретные значения параметров сегмента).

  2. Перебирает очередь и для каждого сегмента выполняет запрос.

Пример 1. Запрос с одним параметром периода

В данном примере мы будем использовать тип источника данных «Запрос»:

request.png

Воспользуемся уже готовым текстом запроса. Вставим его в соответствующее окно.

ВЫБРАТЬ ВыручкаИСебестоимостьПродаж.Регистратор КАК Регистратор, ВыручкаИСебестоимостьПродаж.Период КАК Период, СУММА(ВыручкаИСебестоимостьПродаж.Количество) КАК Количество, СУММА(ВыручкаИСебестоимостьПродаж.СуммаВыручки) КАК СуммаВыручки, ВыручкаИСебестоимостьПродаж.АналитикаУчетаНоменклатуры.Номенклатура КАК АналитикаУчетаНоменклатурыНоменклатура ИЗ РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ВыручкаИСебестоимостьПродаж ГДЕ ВыручкаИСебестоимостьПродаж.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ) СГРУППИРОВАТЬ ПО ВыручкаИСебестоимостьПродаж.Регистратор, ВыручкаИСебестоимостьПродаж.Период, ВыручкаИСебестоимостьПродаж.АналитикаУчетаНоменклатуры.Номенклатура
request-text.png

В данном случае, мы будем сегментировать выгрузку параметру: Период с разделением по дням регистра накопления Выручка и себестоимость продаж. Для этого будем передавать параметр &Дата.

ВыручкаИСебестоимостьПродаж.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)

Данная конструкция является условием, в котором:

  • НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА — это атрибуты функций;

  • &Дата — это переменная;

  • День — фракция до которой будет округляться, соответственно.

Условие задается во вкладке «Условие» Конструктора запроса:

condition.png

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

На следующем этапе проверяется набор данных, здесь ничего менять не требуется.

no-changes.png

Пропускаем этап настройки вычисляемых полей, затем выбираем подключение, создаем таблицу, даем ей название.

На этапе сопоставления полей проверяем, чтобы для поля «Параметр.Дата» был установлен флаг «Сегмент».

checkbox.png

Следующий этап снова пропускаем.

Задаем наименование проекту.

name.png

Теперь настроим обработчики. Настройки строки проекта открываются щелчком по кнопке с шестеренкой:

settings-button.png

Настройка обработчика формирования очереди для первичной выгрузки

  • Активируйте переключатель «Обработчик:»;

  • выберите вид обработчика «Предопределённый обработчик»;

  • выберите «Инициализация очереди выгрузки по периоду»;

  • укажите параметры: Вид объекта — РегистрыНакопления, Имя объекта — ВыручкаИСебестоимостьПродаж, Поле даты — Период, Имя параметра — Дата, Периодичность — День.

Для вида объекта «Документы» необходимо указывать дату как «Дата», а не как «Период».

handler2.png

Настройка обработчика формирования очереди при изменении объектов

  • Установите флаг «Вкл.»;

  • выберите вид объекта «РегистрыНакопления», имя объекта «ВыручкаИСебестоимостьПродаж»;

  • выберите обработчик «Регистрация изменений по периоду»;

  • укажите параметры:

    • Поле даты — Период;

    • Имя параметра — Дата;

    • Режим — Стандартный;

    • Периодичность — День.

      handler-parameters.png

       

Сохраняем настройки строки проекта, нажав кнопку Применить и закрыть и последовательно нажимаем кнопки Записать, Сформировать очередь и Выполнить проект, чтобы начать выгрузку проекта.

save.png

Пример 2. Сегментирование виртуальной таблицы «Обороты» с фиксированным параметром

Задача: выгрузить обороты регистра «Выручка и себестоимость продаж» с точностью до Регистратора, с помесячным сегментированием, только для записей одного определённого склада.

Сегмент – по параметру Месяц(Периода). Параметры запроса:

  • &Дата – параметр сегментирования (передаётся из обработчика);

  • &ПСклад – фиксированный параметр (указывается на вкладке «Параметры»).

Вместо обычных параметров &НачалоПериода и &КонецПериода используйте один параметр &Дата с функциями НачалоПериода(&Дата, Месяц) и КонецПериода(&Дата, Месяц).

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

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

ex2.png

Зададим конкретное значение для Склада на закладке «Параметры», нажав кнопку «Далее».
Здесь видно, что указан и наш параметр сегментирования: «Дата». Его значение будет задаваться программно и браться будет из очереди выгрузки:

segmentation-parameter.png

Пройдя по конструктору до этапа сопоставления полей задаем наш параметр сегментирования, проставив напротив него флаг:

date-flag.png

Настройка обработчика формирования очереди для первичной выгрузки

Выберите обработчик Инициализация очереди выгрузки по периоду и укажите параметры аналогично примеру 1, установив периодичность «Месяц».

by-period.png

Пример 3. Сегментирование виртуальной таблицы «Остатки»

Задача: выгрузить остатки на конец каждого месяца. Сегмент – по параметру Месяц(ДатаОстатка). Особенность: так как поля ДатаОстатка в виртуальных таблицах нет, параметр сегментирования &ДатаОстатка выводится как расчётное поле.

Здесь &ДатаОстатка – это одновременно и имя параметра, и расчётное поле выборки.

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

Расчётное поле КОНЕЦПЕРИОДА(&ДатаОстатка, МЕСЯЦ) КАК ДатаОстатка для каждого сегмента принимает своё значение – это позволяет видеть динамику остатков (на конец каждого месяца).

Наш параметр сегментирования появится во вкладке «Параметры» на следующем этапе конструктора. Убедимся в этом:

image-20260525-121224.png

Пройдя по конструктору до этапа сопоставления полей задаем наш параметр сегментирования, проставив напротив него флаг:

flag.png

Настройка обработчика формирования очереди для первичной выгрузки

Выберите обработчик «Инициализация очереди выгрузки по периоду» и укажите параметры:

  • Поле даты — ДатаОстатка (параметр виртуальной таблицы);

  • Периодичность — Месяц.

image-20260525-122115.png

Теперь осталось записать проект, сформируем очередь и выполним проект.

Для сегментирования по дате вместо обычных параметров НачалоПериода и КонецПериода используйте один параметр &Дата с функциями НачалоПериода(&Дата, [Периодичность]) и КонецПериода(&Дата, [Периодичность]).

Нужна дополнительная помощь?

Обратитесь в службу поддержки Visiology.