Выпуск продукции. Обороты (Обработчик)
Пример протестирован на версии 3.9.1.51 Экстрактора 1С.
Итак, заходим в раздел «Проекты» Экстрактора 1С, нажимаем «Создать».

Выбираем тип источника данных «Обработчик».

В открывшемся окне задаем название и добавляем источник-обработчик.

Теперь необходимо заполнить созданный обработчик. Указываем его наименование [1] и тип (в нашем случае, это «Источник данных») [2].
В поле «Описание» [3] указываем необходимое описание. По умолчанию в Экстракторе 1С используется следующее описание:
Данный тип обработчика является источником данных.
Назначение: формирование данных
Параметры обработчика:
"СтруктураПроекта" - это структура из реквизитов проекта.
"СтрокаПроекта" - это структура из реквизитов текущей строки проекта.
"Результат" - в этой переменной возвращается результат.
"Параметры" - параметры обработчика, тип соответствие.
"ТекстОшибки" - значение этого параметра возвращается из обработчика и, если он не пустой, будет записан в лог и приведет к остановке выгрузки проекта
Результат возвращается в переменной "Результат".
Если есть параметр "ЗапросОписанияПолей" со значением Истина, то обработчик должен вернуть список полей со свойствами "Имя" и "ТипЗначения",
иначе обработчик должен вернуть один из типов: "Запрос", "РезультатЗапроса", "ВыборкаИзРезультатаЗапроса", "ТаблицаЗначений".
В случае возврата типа "Запрос", параметры дополняются из очереди автоматически.
Пример
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ 1 КАК Ид, ""Группа"" КАК Наименование, Истина КАК ЭтоГруппа |ОБЪЕДИНИТЬ |ВЫБРАТЬ 2, ""Элемент"", Ложь"; Если Параметры.Получить("ЗапросОписанияПолей") = Истина Тогда РезультатЗапроса = Запрос.Выполнить(); Результат = РезультатЗапроса.Колонки; Иначе // можно вернуть любой из вариантов ниже //Результат = Запрос; // Запрос //Результат = Запрос.Выполнить(); // РезультатЗапроса //Результат = Запрос.Выполнить().Выбрать(); // ВыборкаИзРезультатаЗапроса Результат = Запрос.Выполнить().Выгрузить(); // ТаблицаЗначений КонецЕсли;
Добавим параметр сегментирования в поле «Параметры» [4], как правило, мы используем параметр «Дата». Вы можете установить флаг «Обязательность», если параметр обязательный.
Далее указываем «Алгоритм» — текст обработчика на языке программирования 1С [5]. Вы можете воспользоваться текстом обработчика предоставленным ниже:
Дата = Параметры.Получить("Дата"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВыпускПродукцииОбороты.Регистратор КАК Регистратор, | ВыпускПродукцииОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура, | ВыпускПродукцииОбороты.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика, | СУММА(ВыпускПродукцииОбороты.КоличествоОборот) КАК Количество |ИЗ | РегистрНакопления.ВыпускПродукции.Обороты(НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ), КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), Регистратор, ) КАК ВыпускПродукцииОбороты | |СГРУППИРОВАТЬ ПО | ВыпускПродукцииОбороты.Регистратор, | ВыпускПродукцииОбороты.АналитикаУчетаНоменклатуры.Номенклатура, | ВыпускПродукцииОбороты.АналитикаУчетаНоменклатуры.Характеристика"; Запрос.УстановитьПараметр("Дата", Дата); ТЗ = Запрос.Выполнить().Выгрузить(); Если Параметры.Получить("ЗапросОписанияПолей") = Истина Тогда Результат = ТЗ.Колонки; // колонки ТаблицыЗначений для получения полей при проходе через помощник Иначе Результат = ТЗ; // ТаблицаЗначений КонецЕсли;
Разберем его подробнее. Параметр получаем через конструкцию Дата = Параметры.Получить("Дата"), затем пишем код на языке 1С, который будет получать таблицу значений:
ТЗ = Запрос.Выполнить().Выгрузить()
Отметим, что можно просто использовать синтаксис (как в данном примере), либо вызвать экспортную функцию, предварительно разработанную в Конфигураторе (подробнее об этом варианте в статье).
Конструкция
Если Параметры.Получить("ЗапросОписанияПолей") = Истина Тогда Результат = ТЗ.Колонки; Иначе Результат = ТЗ
Является технической, но необходимой для Экстрактора. Без нее при проходе через Конструктор проекта будут получены только колонки для того, чтобы получить таблицу значений.
При необходимости, можно указать комментарий для обработчика [6].

После настройки обработчика нажимаем «Записать и закрыть».
Переходим к этапу настройки вычисляемых полей. Здесь добавим еще «РегистраторТип».

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

Этап расширенных настроек пропускаем и завершаем создание проекта.
Затем даем имя проекту и переходим в «Настройки строки проекта».

Теперь настроим обработчик формирования очереди для первичной/полной выгрузки данных:
активируем переключатель «Обработчик:»;
выбираем вид «Предопределенный обработчик»;
выбираем сам обработчик «Инициализация очереди выгрузки по периоду»;
переходим к настройке параметров обработчика, здесь указываем:
Вид объекта — РегистрыНакопления;
Имя объекта — ВыпускПродукции;
Поле даты — Период;
Имя параметра — Дата;
Периодичность — День.

Переходим к настройке обработчика формирования очереди при изменении объектов:
устанавливаем флаг «Вкл.»;
указываем вид объекта: «РегистрыНакопления»;
указываем имя объекта: «ВыпускПродукции»;
выбираем вид «Предопределенный обработчик»;
выбираем сам обработчик «Регистрация изменений по периоду»;
переходим к настройке параметров обработчика, здесь указываем:
Поле даты — Период;
Имя параметра — Дата;
Режим — Стандартный;
Периодичность — День.
Затем нажимаем «Применить и закрыть».

Теперь осталось выполнить выгрузку: нажимаем поочередно кнопки «Записать», «Сформировать очередь» и «Выполнить проект».

В итоге получаем следующую выгрузку:
