Отчет «Валовая прибыль по оплаченным отгрузкам» (Обработчик) с использованием экспортной функции
Отметим, что данная статья содержит информацию по разработке расширения и предназначена для программистов.
Создание экспортной функции в конфигураторе
В данном примере экспортную функцию, которую потом можно будет использовать в качестве типа источника данных «Обработчик» мы разрабатываем как часть отдельного расширения в конфигураторе в качестве серверного модуля. Отметим, что данную процедуру необязательно размещать в общем модуле (можно разместить ее, например, в модуле объекта или менеджера). Однако, следует учесть, что расширение для разработки отчетов не должно быть отличным от Экстрактора.
Итак, заходим в Конфигуратор Вашей 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»;

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

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

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

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

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