Остатки товаров на складах (Объект) с использованием двух параметров партицирования (составная партиция)

Создание проекта и первичная выгрузка

Задача : первичная выгрузка данных должна включать выгрузку остатков по всем периодам (месяцам) и складам (наименованиям складов).

Создание проекта

  • Создадим новый проект и выберем источник данных “Объект”

  • Выберем 2 параметра партицирования:

  • Вот они наши параметры партицирования на закладке “Параметры”:

  • Выберем нужные поля для выгрузки на закладке “Поля”:

  • пройдем по мастеру до самого конца и на последнем этапе настроим партиции, выбрав “Изменить/Посмотреть”:

  • у нас должна настроиться выгрузка с партицированием. Зайдем в настройки строки проекта и убедимся в этом, нажав на

    Обработчик формирования очереди выгрузки.

  • Прежде чем приступить непосредственно к выгрузке - настроим обработчик формирования очереди. А вернее напишем его. Для этого зайдем в настройки строки проекта, нажав на

Согласно нашей задаче обработчик должен выглядеть так:

Скрипт обработчика инициализации
Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад, | ТоварыНаСкладахОстаткиИОбороты.Период КАК Период |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Месяц, , ) КАК ТоварыНаСкладахОстаткиИОбороты | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстаткиИОбороты.Склад, | ТоварыНаСкладахОстаткиИОбороты.Период | |УПОРЯДОЧИТЬ ПО | Период, | Склад"; Выборка = Запрос.Выполнить().Выбрать(); ФорматнаяСтрока = "ДФ='yyyyMM'"; Пока Выборка.Следующий() Цикл Период = Выборка.Период; Склад = Выборка.Склад; Партиции = Новый Массив; Партиции.Добавить(ГОД(Период) * 100 + МЕСЯЦ(Период) * 1); Партиции.Добавить(нрег(Склад.Наименование)); ЭлементОчереди = Очередь.Добавить(); ЭлементОчереди.Параметры = Новый Структура("Дата,Наименование", Выборка.Период,Выборка.Склад.Наименование); ЭлементОчереди.Партиция = Партиции; КонецЦикла;
  • получим вот такую очередь:

  • И выполним проект. В этот момент будут выгружены остатки за каждую отдельную партицию (месяц-наименование склада) в нескольких параллельных потоках. Первичная выгрузка данных завершена.

Регистрация изменений

Перейдем к настройке обработчика для регистрации изменений. У нас способ обновления “перезапись партиции”, поэтому нам можно настроить регистрацию изменений.

  • перейдем в настройку строки проекта, выбрав строку и нажав на

  • создадим обработчик и включим его:

Листинг обработчика формирования очереди при изменении объектов
ТЗ = Источник.Выгрузить(, "Период,Склад"); ТЗ.Свернуть("Период,Склад"); ТЗ.Колонки.Добавить("Партиция"); ДатаНачалаВыгрузки = ТЗ[0]["Период"]; //смотрим, по какому периоду(периодам) прошло изменение Склад = ТЗ[0]["Склад"]; //смотрим, по какому складу(складам) прошло изменение Если ЗначениеЗаполнено(Склад) Тогда СкладНаименование= Склад.Наименование; Иначе СкладНаименование =""; КонецЕсли; ТекущаяДата = ТекущаяДата(); ФорматнаяСтрока = "ДФ='yyyyMM'"; //форматная строка для периодичности по месяцам ТекПериод = ДатаНачалаВыгрузки; Пока ТекПериод <= ТекущаяДата Цикл Партиции = Новый Массив; Партиции.Добавить(ГОД(ТекПериод) * 100 + МЕСЯЦ(ТекПериод) * 1); Партиции.Добавить(нрег(СкладНаименование)); ЭлементОчереди = Очередь.Добавить(); ЭлементОчереди.Параметры = Новый Структура("Дата,Наименование", НачалоМесяца(ТекПериод),СкладНаименование); ЭлементОчереди.Партиция = Партиции; //берем следуюший период пока не дойдем до текущей даты ТекПериод = ДобавитьМесяц(ТекПериод, 1); КонецЦикла;