Выпуск продукции. Обороты (Обработчик)

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

Пример протестирован на версии 3.9.1.51 Экстрактора 1С.

Итак, заходим в раздел «Проекты» Экстрактора 1С, нажимаем «Создать».

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

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

Теперь необходимо заполнить созданный обработчик. Указываем его наименование [1] и тип (в нашем случае, это «Источник данных») [2].

В поле «Описание» [3] указываем необходимое описание. По умолчанию в Экстракторе 1С используется следующее описание:

Данный тип обработчика является источником данных.

Назначение: формирование данных

Параметры обработчика:

"СтруктураПроекта" - это структура из реквизитов проекта.

"СтрокаПроекта" - это структура из реквизитов текущей строки проекта.

"Результат" - в этой переменной возвращается результат.

"Параметры" - параметры обработчика, тип соответствие.

"ТекстОшибки" - значение этого параметра возвращается из обработчика и, если он не пустой, будет записан в лог и приведет к остановке выгрузки проекта

Результат возвращается в переменной "Результат".

Если есть параметр "ЗапросОписанияПолей" со значением Истина, то обработчик должен вернуть список полей со свойствами "Имя" и "ТипЗначения",

иначе обработчик должен вернуть один из типов: "Запрос", "РезультатЗапроса", "ВыборкаИзРезультатаЗапроса", "ТаблицаЗначений".

В случае возврата типа "Запрос", параметры дополняются из очереди автоматически.

Пример

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ 1 КАК Ид, ""Группа"" КАК Наименование, Истина КАК ЭтоГруппа |ОБЪЕДИНИТЬ |ВЫБРАТЬ 2, ""Элемент"", Ложь"; Если Параметры.Получить("ЗапросОписанияПолей") = Истина Тогда РезультатЗапроса = Запрос.Выполнить(); Результат = РезультатЗапроса.Колонки; Иначе // можно вернуть любой из вариантов ниже //Результат = Запрос; // Запрос //Результат = Запрос.Выполнить(); // РезультатЗапроса //Результат = Запрос.Выполнить().Выбрать(); // ВыборкаИзРезультатаЗапроса Результат = Запрос.Выполнить().Выгрузить(); // ТаблицаЗначений КонецЕсли;

Добавим параметр сегментирования в поле «Параметры» [4], как правило, мы используем параметр «Дата». Вы можете установить флаг «Обязательность», если параметр обязательный.

Далее указываем «Алгоритм» — текст обработчика на языке программирования 1С [5]. Вы можете воспользоваться текстом обработчика предоставленным ниже:

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

Разберем его подробнее. Параметр получаем через конструкцию Дата = Параметры.Получить("Дата"), затем пишем код на языке 1С, который будет получать таблицу значений:

ТЗ = Запрос.Выполнить().Выгрузить()

Отметим, что можно просто использовать синтаксис (как в данном примере), либо вызвать экспортную функцию, предварительно разработанную в Конфигураторе (подробнее об этом варианте в статье).

Важно!

Конструкция

Если Параметры.Получить("ЗапросОписанияПолей") = Истина Тогда Результат = ТЗ.Колонки; Иначе Результат = ТЗ

Является технической, но необходимой для Экстрактора. Без нее при проходе через Конструктор проекта будут получены только колонки для того, чтобы получить таблицу значений.

При необходимости, можно указать комментарий для обработчика [6].

После настройки обработчика нажимаем «Записать и закрыть».

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

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

На этапе сопоставления полей проверяем установленный флаг для сегмента.

Этап расширенных настроек пропускаем и завершаем создание проекта.

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

Теперь настроим обработчик формирования очереди для первичной/полной выгрузки данных:

  • активируем переключатель «Обработчик:»;

  • выбираем вид «Предопределенный обработчик»;

  • выбираем сам обработчик «Инициализация очереди выгрузки по периоду»;

  • переходим к настройке параметров обработчика, здесь указываем:

    • Вид объекта — РегистрыНакопления;

    • Имя объекта — ВыпускПродукции;

    • Поле даты — Период;

    • Имя параметра — Дата;

    • Периодичность — День.

Переходим к настройке обработчика формирования очереди при изменении объектов:

  • устанавливаем флаг «Вкл.»;

  • указываем вид объекта: «РегистрыНакопления»;

  • указываем имя объекта: «ВыпускПродукции»;

  • выбираем вид «Предопределенный обработчик»;

  • выбираем сам обработчик «Регистрация изменений по периоду»;

  • переходим к настройке параметров обработчика, здесь указываем:

    • Поле даты — Период;

    • Имя параметра — Дата;

    • Режим — Стандартный;

    • Периодичность — День.

Затем нажимаем «Применить и закрыть».

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

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