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