Выручка и себестоимость продаж (PG-запрос с 2 параметрами и партицированием)
Рассмотрим пример выгрузки PostgreSQL-запроса с двумя параметрами на базе “Выручки и себестоимости продаж”. В данном случае у нас будет использоваться партицирование без сегментирования.
Подробнее об партицировании и сегментировании и их отличии можно прочитать в следующих статьях:
Также, важное отличие этого примера в том, что в нем используется собственный обработчик.
Об обработчиках можно прочитать в статье «Обработчики».
Итак:
1. Открываем Экстрактор 1С и нажимаем кнопку «Проекты».
2. Нажимаем “Создать“ в верхней панели интерфейса списка проектов.
3. Теперь выбираем тип источника данных, в нашем случае — это “Запрос“. Затем нажимаем “Далее“.
4. Нажимаем кнопку «Конструктор…» в открывшемся окне.
Теперь необходимо сконструировать запрос. В данном случае в списке «База данных» выбираем «РегистрыНакопления», а внутри находим «ВыручкаИСебестоимостьПродажОбороты». Сразу настроим параметры виртуальной таблицы «ВыручкаИСебестоимостьПродажОбороты», для этого выбираем ее и нажимаем кнопку «Параметры виртуальной таблицы».
В открывшейся форме, указываем:
НачалоПериода —
НАЧАЛОПЕРИОДА(&ПарамДата, МЕСЯЦ)КонецПериода —
КОНЕЦПЕРИОДА(&ПарамДата, МЕСЯЦ)Периодичность — Регистратор
А также указываем следующее условие:
ВЫБОР КОГДА Склад <= "Я" ТОГДА "" ИНАЧЕ ПОДСТРОКА(ЕСТЬNULL(Склад.Наименование, ""), 1, 10) КОНЕЦ = &ПарамСклад
В запросе выбирается 10 символов от наименования склада, т.к. при физическом партицировании в PostgreSQL есть ограничения. Партиция — это физически таблица в базе данных и у нее есть Имя, которое состоит из имени таблицы и имени партиции и длина этого имени ограничена.
Нажимаем “ОК“. Далее в списке “Таблицы“ добавляем нужные нам поля для выборки.
Теперь заходим во вкладку “Объединения/Псевдонимы“. Здесь мы дадим более короткие наименования — псевдонимы нашим полям таблицы.
Снова нажимаем “ОК“.
У нас получился следующий текст запроса:
ВЫБРАТЬ ВыручкаИСебестоимостьПродажОбороты.ЗаказКлиента КАК ЗаказКлиента, ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Партнер КАК Партнер, ВыручкаИСебестоимостьПродажОбороты.Партия КАК Партия, ВыручкаИСебестоимостьПродажОбороты.Склад КАК Склад, ВыручкаИСебестоимостьПродажОбороты.Договор КАК Договор, ВыручкаИСебестоимостьПродажОбороты.Менеджер КАК Менеджер, ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Организация КАК Организация, ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура, ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика, ВыручкаИСебестоимостьПродажОбороты.Период КАК Период, ВыручкаИСебестоимостьПродажОбороты.Регистратор КАК Регистратор, ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК Количество, ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот КАК Выручка, ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиБезНДСОборот КАК ВыручкаБезНДС, ВыручкаИСебестоимостьПродажОбороты.СтоимостьОборот КАК Себестоимость, ВыручкаИСебестоимостьПродажОбороты.СтоимостьБезНДСОборот КАК СебестоимостьБезНДС, ВыручкаИСебестоимостьПродажОбороты.ДопРасходыОборот КАК ДопРасходы, ВыручкаИСебестоимостьПродажОбороты.ДопРасходыБезНДСОборот КАК ДопРасходыБезНДС, ВыручкаИСебестоимостьПродажОбороты.ТрудозатратыОборот КАК Трудозатраты, ВыручкаИСебестоимостьПродажОбороты.РасходыНаПродажуСНДСОборот КАК РасходыНаПродажуСНДС ИЗ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты( НАЧАЛОПЕРИОДА(&ПарамДата, МЕСЯЦ), КОНЕЦПЕРИОДА(&ПарамДата, МЕСЯЦ), Регистратор, ВЫБОР КОГДА Склад <= "Я" ТОГДА "" ИНАЧЕ ПОДСТРОКА(ЕстьNULL(Склад.Наименование,""), 1, 10) КОНЕЦ = &ПарамСклад) КАК ВыручкаИСебестоимостьПродажОбороты
Нажимаем “Далее“.
5. Проверяем, чтобы все поля были выделены, ничего не меняем, и нажимаем “Далее“.
Нажимаем “Далее“.
6. Пропускаем следующий шаг с дополнительной настройкой исходных данных и нажимаем “Далее“.
7. Выбираем нужное подключение или создаем новое, снова нажимаем “Далее“.
8. Создаем новую таблицу, назовем ее “Тест_Выручка“, нажимаем “Далее“.
9. В сопоставлении полей убираем флаги в колонке “Поле сегмента“ для использующихся в данном проекте параметров.
Данный пример демонстрирует исключительно физическое партицирование, поэтому здесь мы убираем флаги для сегментирования.
10. Теперь перейдем к расширенным настройкам таблицы.
Здесь мы добавляем в поля партиции с нашими параметрами. Нажимаем кнопку “Добавить“ и выбираем из выпадающего списка “ПараметрПарамДата“ и затем, таким же образом добавляем и “ПараметрПарамСклад“.
В итоге, у нас добавлено два параметра, нажимаем “Далее“.
Снова “Далее“, таблица успешно создана.
11. После создания таблицы даем наименование проекту в соответствующем поле.
В данном проекте используется собственный обработчик формирования очереди для первичной/полной выгрузки данных, поэтому создадим его здесь.
Для этого заходим в настройки строки проекта, нажав значок , выбираем “Обработчик формирования очереди для первичной/полной выгрузки данных“, активируем переключатель “Обработчик:“, выбираем “Обработчик“.
В качестве способа обновления необходимо установить “Перезапись партиции“.
Теперь переходим к созданию собственного обработчика.
Подробнее о создании собственного обработчика можно почитать в статье “Обработчики“.
Полную инструкцию по созданию собственного обработчика Вы найдете в статье “Как написать собственный обработчик и сохранить его в справочнике?“
В выпадающем списке для добавления обработчика нажимаем “+“.
Теперь указываем наименование обработчика в соответствующем поле, проверяем, что у нас выбран правильный тип обработчика. Далее указываем параметры в поле “Параметры“, в нашем случае имена параметров “Дата начала выгрузки“ и “Дата окончания выгрузки“, тип для каждого параметра указываем “Дата“.
заполняем поле “Алгоритм“ кодом обработчика написанном на языке 1С и нажимаем “Записать и закрыть“.
//-----------------------------ПАРАМЕТРЫ-------------------------------------------------------------------------------- // параметры процедуры мы можем задать просто напрямую в обработчике, как этот ИмяПараметраПериод = "ПарамДата"; //как в запросе источнике ИмяПараметраСклад = "ПарамСклад"; //как в запросе источнике //или как это значение: его мы задали в настройках параметров обработчика, поэтому просто получаем его оттуда ДатаНачалаВыгрузки = Параметры.Получить("Дата начала выгрузки"); ДатаОкончанияВыгрузки=Дата(2024,8,30); Если НЕ ЗначениеЗаполнено(ДатаОкончанияВыгрузки) Тогда ДатаОкончанияВыгрузки = КонецМесяца(ТекущаяДата()); КонецЕсли; //---------------------------------------------------------------------------------------------------------------------- Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | НачалоПериода(ВыручкаИСебестоимостьПродаж.Период,МЕСЯЦ) КАК НачалоПериода, | (ВЫБОР | КОГДА Склад<= ""Я"" ТОГДА """" | ИНАЧЕ ПОДСТРОКА(ЕстьNull(Склад.Наименование,""""), 1, 10) | КОНЕЦ) КАК Склад |ИЗ | РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ВыручкаИСебестоимостьПродаж |ГДЕ | ВыручкаИСебестоимостьПродаж.Период МЕЖДУ &ДатаНачалаВыгрузки И &ДатаОкончанияВыгрузки | |СГРУППИРОВАТЬ ПО | НачалоПериода(ВыручкаИСебестоимостьПродаж.Период,МЕСЯЦ), | (ВЫБОР | КОГДА Склад<= ""Я"" ТОГДА """" | ИНАЧЕ ПОДСТРОКА(ЕстьNull(Склад.Наименование,""""), 1, 10) | КОНЕЦ) "; Запрос.УстановитьПараметр("ДатаНачалаВыгрузки",ДатаНачалаВыгрузки); Запрос.УстановитьПараметр("ДатаОкончанияВыгрузки",ДатаОкончанияВыгрузки); Выборка = Запрос.Выполнить().Выбрать(); ФорматнаяСтрока = "ДФ='yyyyMM'"; //форматная строка для партицирования по месяцам Пока Выборка.Следующий() Цикл НачалоПериода = Выборка.НачалоПериода; Склад = Выборка.Склад; //функция преобразуем дату к формату нужного представления в зависимости от используемой периодичности. У нас это месяц НачалоПериодаЧисло = Экс_ClickHouse.ПреобразоватьДатуВЧисло(НачалоПериода, "МЕСЯЦ"); //Создадим запись в очереди ЭлементОчереди = Очередь.Добавить(); //заполним параметры записи ЭлементОчереди.Параметры = Новый Структура(ИмяПараметраПериод + ", " + ИмяПараметраСклад, НачалоПериода, Склад); //заполним партицию ЭлементОчереди.Партиция = Новый Массив; ЭлементОчереди.Партиция.Добавить(НачалоПериодаЧисло); ЭлементОчереди.Партиция.Добавить(Склад); КонецЦикла;
В окне настройки строки проекта нажимаем “Сохранить“ и “Применить и закрыть“.
12. Теперь последовательно нажимаем “Записать“, “Сформировать очередь“ и “Выполнить проект“.