Выручка и себестоимость продаж (Запрос) с партицированием

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

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

Подробнее об партицировании и сегментировании и их отличии можно прочитать в следующих статьях:

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

Примечание

Об обработчиках можно прочитать в статье «Обработчики».

Итак:

1. Открываем Экстрактор 1С и нажимаем кнопку “Проекты“.

2. Нажимаем “Создать“ в верхней панели интерфейса списка проектов.

3. Теперь выбираем тип источника данных, в нашем случае — это “Запрос“. Затем нажимаем “Далее“.

4. Нажимаем кнопку “Конструктор…“ в открывшемся окне.

Теперь необходимо сконструировать запрос. В данном случае в списке “База данных“ выбираем “РегистрыНакопления“, а внутри находим “ВыручкаИСебестоимостьПродажОбороты“. Сразу настроим параметры виртуальной таблицы “ВыручкаИСебестоимостьПродажОбороты”, для этого выбираем ее и нажимаем кнопку “Параметры виртуальной таблицы“.

В открывшейся форме, указываем:

  • НачалоПериода — НАЧАЛОПЕРИОДА(&ПарамДата, МЕСЯЦ)

  • КонецПериода — КОНЕЦПЕРИОДА(&ПарамДата, МЕСЯЦ)

  • Периодичность — Регистратор

А также указываем следующее условие:

Склад = &ПарамСклад

Нажимаем “ОК“. Далее в списке “Таблицы“ выбираем нужные нам данные.

Теперь заходим во вкладку “Объединения/Псевдонимы“. Здесь мы дадим более короткие наименования — псевдонимы нашим полям таблицы.

Снова нажимаем “ОК“.

У нас получился следующий текст запроса:

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

Нажимаем “Далее“.

5. Проверяем, чтобы все поля были выделены, ничего не меняем, и нажимаем “Далее“.

Нажимаем “Далее“.

6. Пропускаем следующий шаг с дополнительной настройкой исходных данных и нажимаем “Далее“.

7. Выбираем нужное подключение или создаем новое, снова нажимаем “Далее“.

8. Создаем новую таблицу, назовем ее “ТестВыручка_Clickhouse_280325“, нажимаем “Далее“.

9. В сопоставлении полей убираем флаги в колонке “Поле сегмента“ для использующихся в этом проекте параметров.

Примечание

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

10. Теперь перейдем к расширенным настройкам таблицы.

Здесь выбираем способ определения партиции “Декларативный“ и добавляем поля источника. Для этого нажимаем кнопку “Добавить“ и выбираем из выпадающего списка “Период“, для него из выпадающего списка в колонке “Функция” выбираем “Месяц“, и затем, таким же образом добавляем и “Склад“.

В итоге, у нас в партиции добавлено два поля, нажимаем “Далее“.

Снова “Далее“, таблица успешно создана.

11. После создания таблицы даем наименование проекту в соответствующем поле.

Далее заходим в настройки строки проекта, нажав значок .

В разделе “Основное” указываем:

  • Способ выгрузки: “Блоками“;

  • Способ обновления: “Перезапись партиции“.

Также устанавливаем флаг “Значение партиции инициализируется из очереди“.

В данном проекте используется собственный обработчик формирования очереди для первичной/полной выгрузки данных, поэтому создадим его здесь. Итак, выбираем “Обработчик формирования очереди для первичной/полной выгрузки данных“, активируем переключатель “Обработчик:“, выбираем “Обработчик“.

Теперь переходим к созданию собственного обработчика.

Примечание

Подробнее о создании собственного обработчика можно почитать в статье “Обработчики“.

Полную инструкцию по созданию собственного обработчика Вы найдете в статье “Как написать собственный обработчик и сохранить его в справочнике?“

В выпадающем списке для добавления обработчика нажимаем “+“.

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

Заполняем поле “Алгоритм“ кодом обработчика написанном на языке 1С и нажимаем “Записать и закрыть“.

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

В окне настройки строки проекта нажимаем “Сохранить“ и “Применить и закрыть“.

12. Теперь последовательно нажимаем “Записать“, “Сформировать очередь“ и “Выполнить проект“.