Отчет «Валовая прибыль по оплаченным отгрузкам» (Обработчик) с использованием экспортной функции

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

Отметим, что данная статья содержит информацию по разработке расширения и предназначена для программистов.

Создание экспортной функции в конфигураторе

В данном примере экспортную функцию, которую потом можно будет использовать в качестве типа источника данных «Обработчик» мы разрабатываем как часть отдельного расширения в конфигураторе в качестве серверного модуля. Отметим, что данную процедуру необязательно размещать в общем модуле (можно разместить ее, например, в модуле объекта или менеджера). Однако, следует учесть, что расширение для разработки отчетов не должно быть отличным от Экстрактора.

Итак, заходим в Конфигуратор Вашей 1С по соответствующей кнопке.

Затем «Конфигурация», внутри — «Расширения конфигурации», в открывшемся окне можно добавить необходимое расширение.

В данном примере уже создано расширение, осталось зайти в модуль и прописать необходимую функцию. Здесь мы используем следующий вариант:

Функция ВаловаяПрибыльПоОплаченнымОтгрузкам(Дата) Экспорт НачалоПериода = НачалоДня(Дата); КонецПериода = КонецДня(Дата); ОтчетОбъект = Отчеты.ВаловаяПрибыльПоОплаченнымОтгрузкам.Создать(); СхемаКомпоновкиДанных = ОтчетОбъект.СхемаКомпоновкиДанных; КомпоновщикНастроекДанныхОтчета = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроекДанныхОтчета.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КомпоновщикНастроекДанныхОтчета.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); // Установка параметров ПараметрыДанных = КомпоновщикНастроекДанныхОтчета.Настройки.ПараметрыДанных.Элементы; ЭлементПериодОтчета = ПараметрыДанных.Найти("ПериодОтчета"); ЭлементПериодОтчета.Использование = Истина; ЭлементПериодОтчета.Значение = Новый СтандартныйПериод(НачалоПериода, КонецПериода); ПараметрПоказыватьПродажи = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроекДанныхОтчета, "ПоказыватьПродажи"); Если ПараметрПоказыватьПродажи <> Неопределено И ПараметрПоказыватьПродажи.Значение = Неопределено Тогда КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекДанныхОтчета, "ПоказыватьПродажи", 1); КонецЕсли; СписокТиповРасчетныхДокументов = Новый СписокЗначений; СписокТиповРасчетныхДокументов.Добавить(Тип("ДокументСсылка.АктВыполненныхРабот")); СписокТиповРасчетныхДокументов.Добавить(Тип("ДокументСсылка.ВыкупТоваровХранителем")); СписокТиповРасчетныхДокументов.Добавить(Тип("ДокументСсылка.РеализацияТоваровУслуг")); СписокТиповРасчетныхДокументов.Добавить(Тип("ДокументСсылка.ПередачаТоваровМеждуОрганизациями")); КомпоновкаДанныхКлиентСервер.УстановитьПараметр(КомпоновщикНастроекДанныхОтчета, "ТипыРасчетныхДокументов", СписокТиповРасчетныхДокументов); // Компановка и вывод КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекДанныхОтчета.ПолучитьНастройки(),,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,,, Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ТаблицаДанных = Новый ТаблицаЗначений; ПроцессорВывода.УстановитьОбъект(ТаблицаДанных); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); Возврат ТаблицаДанных; КонецФункции

С помощью данной функции мы вызываем формирование отчета «Валовая прибыль по оплаченным отгрузкам»:

ОтчетОбъект = Отчеты.ВаловаяПрибыльПоОплаченнымОтгрузкам.Создать();

У данного отчета есть параметр ПериодОтчета, куда мы передаем функцию с сегментом.

Примечание:

Преимуществом разработки функций в Конфигураторе является возможность использовать отладку (с помощью соответствующего пункта меню Конфигуратора) для проверки работоспособности написанной функции и выявления ошибок.

Создание проекта

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример

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

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

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

Дата = Параметры.Получить("Дата"); ТЗ = ГотовыеОтчеты.ВаловаяПрибыльПоОплаченнымОтгрузкам(Дата); Если Параметры.Получить("ЗапросОписанияПолей") = Истина Тогда Результат = ТЗ.Колонки; // колонки ТаблицыЗначений для получения полей при проходе через помощник Иначе Результат = ТЗ; // ТаблицаЗначений КонецЕсли;

Здесь ГотовыеОтчеты.ВаловаяПрибыльПоОплаченнымОтгрузкам(Дата) — это наша экспортная функция, которая была создана ранее в конфигураторе.

Важно!

Конструкция

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

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

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

На этапе настройки вычисляемых полей выбираем:

  • МенеджерГуид;

  • МенеджерТип;

  • ДатаВыгрузки.

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

На этапе сопоставления полей проверяем установленный флаг для сегмента. Также здесь необходимо проверить и указать типы полей, так как они могут быть распознаны некорректно (либо их можно прописать прямо в тексте обработчика). В данном случае, мы произвели следующие изменения:

  • имя «Sebestoimost» — тип «Decimal»;

  • имя «PribylPolnaya» — тип «Decimal»;

  • имя «VozvrashchennayaPribyl» — тип «Decimal»;

  • имя «PribylPolnayaVychestVozvraty» — тип «Decimal»;

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

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

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

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

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

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

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

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

    • Имя объекта — РасчетыСКлиентамиПоСрокам;

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

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

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

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

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

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

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

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

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

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

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

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

    • Режим — Остатки;

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

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

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

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