Формирование отчета 1с программирование

Как в 1С сформировать отчет на СКД программно

В данном материале приведены примеры и кейсы программного формирования отчетов с использованием системы компоновки данных. Статья в большей степени практическая, с конкретными рецептами кода для той или иной задачи.

Пример программного формирования отчета на СКД

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

Программная установка параметров и отборов в СКД

Для того чтобы программно установить параметр или отбор в отчете СКД, дополним рассмотренный выше пример.
Важно! Чтобы без дополнительного кода применять программно заданные настройки, соответствующие элементы (конкретные параметры, или строки отбора) необходимо исключить из пользовательских настроек! В противном случае, приоритет будут иметь пользовательские настройки.

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

Как программно изменить структуру отчета СКД

Иногда возникает задача в зависимости от разных условий изменять структуру отчета – включить одну группировку и выключить другую, заменить детальные записи на группировку по каким-нибудь полям, добавить новую группировку, изменить отбор на уровне группировки и т.п.
Для решения данного класса задач используется объект Структура. Следует иметь в виду, что структура имеет древовидный характер, и в общем виде обходить ее нужно рекурсивно.

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

В случае, если нам понадобится добавить подчиненную (вложенную) группировку, нужно будет работать с коллекцией ГруппировкаПоСкладу.Структура. Принцип останется тот же – добавить при необходимости поля группировки, добавить выводимые поля. Также, на уровне конкретной группировки в структуре можно программно настроить отбор, сортировку, условное оформление и др.

Читайте также:  Системы программирования варианты ответа

Использование обработчика ПриКомпоновкеРезультата

У отчетов в 1С есть обработчик события ПриКомпоновкеРезультата. В контексте этого обработчика доступны объекты КомпоновщикНастроек и СхемаКомпоновкиДанных, если у отчета задана Основная схема компоновки данных.
Важный нюанс: данный обработчик не будет выполнен, если отчет формируется программно, как рассмотрено в примерах выше.
Начнем с простого формирования отчета, без учета пользовательских настроек:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанных")); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; Результат = Новый ТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); ДокументРезультат.Вывести(Результат); КонецПроцедуры 

Это по сути заготовка, шаблон для всех дальнейших манипуляций с отчетом. Подходы к работе с СКД в этом обработчике практически ничем не отличаются от рассмотренных выше.

Следующий распространенный вариант использования программного формирования отчета – вывод данных в таблицу значений или дерево значений. Ключевое отличие – другой тип генератора, и использование метода УстановитьОбъект вместо метода УстановитьДокумент.

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

Источник

Программное формирование отчетов в БП 3.0 на примере оборотно-сальдовой ведомости по счету

  • Снимок экрана 2021-07-14 121736.png

Пример разработан на основе обротно-сальдовой ведомости в конфигурации «Бухгалтерия предприятия, редакция 3.0».

Для программного формирования отчета разработанного на СКД нам понадобятся следующие объекты;

ОСВ = Отчеты.ОборотноСальдоваяВедомостьПоСчету.Создать();
СхемаКомпоновки =ОСВ.ПолучитьМакет("СхемаКомпоновкиДанных");

Для формирования оборотно-сальдовой ведомости необходимо получить параметры получения отчета. Их возвращает функция «ПолучитьПараметрыИсполненияОтчета(ПараметрыОтчета, МенеджерОтчета)» расположенная в модуле отчета. Для завершения настройки компоновщика настроек необходимо его передать в процедуру «ПередКомпоновкойМакета(ПараметрыОтчета, ПараметрыОтчета.СхемаКомпоновкиДанных, КомпоновщикНастроек)» расположенную в модуле менеджера отчета.

ПараметрыИсполненияОтчета = ПолучитьПараметрыИсполненияОтчета(ПараметрыОтчета, МенеджерОтчета); КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыОтчета.НастройкиКомпоновкиДанных); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПараметрыОтчета.СхемаКомпоновкиДанных)); МенеджерОтчета.ПередКомпоновкойМакета(ПараметрыОтчета, ПараметрыОтчета.СхемаКомпоновкиДанных, КомпоновщикНастроек); КомпоновщикНастроек.Восстановить();

Далее полученные настройки компоновщика используем для компоновки макета.

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Макет = КомпоновщикМакета.Выполнить(ПараметрыОтчета.СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки());

На основе полученного макета компоновки данных компонуем и выводим данные отчета.

ПроцессорКомпоновкиОСКД = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиОСКД.Инициализировать(Макет);
ПроцессорВыводаОСКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВыводаОСКД.УстановитьДокумент(Результат); ПроцессорВыводаОСКД.Вывести(ПроцессорКомпоновкиОСКД); Реквизит1.Вывести(Результат);

Настройки отчета используемые для формирования отчета представляют собой структуру включающие следующие значения типа «ЗначениеКлюч»

 ПараметрыОтчета.Вставить("ВключатьОбособленныеПодразделения", Ложь); ПараметрыОтчета.Вставить("ВыводитьЗаголовок" , Истина); ПараметрыОтчета.Вставить("ВыводитьПодвал" , Ложь); ПараметрыОтчета.Вставить("ВыделятьОтрицательные" , Истина); ПараметрыОтчета.Вставить("Группировка" , Группировка1); ПараметрыОтчета.Вставить("ДанныеРасшифровки" , ""); ПараметрыОтчета.Вставить("ДополнительныеПоля" , Новый ТаблицаЗначений); ПараметрыОтчета.Вставить("ИдентификаторОтчета" , "ОборотноСальдоваяВедомостьПоСчету"); ПараметрыОтчета.Вставить("КонецПериода" , КонецКвартала(ДобавитьМесяц(ТекущаяДата(),-1))); ПараметрыОтчета.Вставить("МакетОформления" , "ОформлениеОтчетовЗеленый"); ПараметрыОтчета.Вставить("НаборПоказателей" , НаборПоказателей); ПараметрыОтчета.Вставить("НастройкиКомпоновкиДанных" , СхемаКомпоновки.НастройкиПоУмолчанию); ПараметрыОтчета.Вставить("НачалоПериода" , НачалоКвартала(ДобавитьМесяц(ТекущаяДата(),-1))); ПараметрыОтчета.Вставить("Организация" , БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("ОсновнаяОрганизация",ПараметрыСеанса.ТекущийПользователь)); ПараметрыОтчета.Вставить("ОтветственноеЛицо" , Перечисления.ОтветственныеЛицаОрганизаций.ОтветственныйЗаБухгалтерскиеРегистры); ПараметрыОтчета.Вставить("Периодичность" , 0); ПараметрыОтчета.Вставить("ПоСубсчетам" , Ложь); ПараметрыОтчета.Вставить("ПоказательБУ" , Истина); ПараметрыОтчета.Вставить("ПоказательВР" , Ложь); ПараметрыОтчета.Вставить("ПоказательВалютнаяСумма" , Ложь); ПараметрыОтчета.Вставить("ПоказательКоличество" , Ложь); ПараметрыОтчета.Вставить("ПоказательКонтроль" , Ложь); ПараметрыОтчета.Вставить("ПоказательНУ" , Ложь); ПараметрыОтчета.Вставить("ПоказательПР" , Ложь); ПараметрыОтчета.Вставить("ПоказательСверкаНУ" , Ложь); ПараметрыОтчета.Вставить("РазвернутоеСальдо" , Истина); ПараметрыОтчета.Вставить("РазмещениеДополнительныхПолей" , 0); ПараметрыОтчета.Вставить("РежимРасшифровки" , Ложь); ПараметрыОтчета.Вставить("СхемаКомпоновкиДанных" , СхемаКомпоновки); ПараметрыОтчета.Вставить("Счет" , Счет); ПараметрыОтчета.Вставить("УменьшенныйАвтоотступ" , Ложь); 

Рабочий код примера размещен в прикрепленной обработке. На форме обработки размещен реквизит «табличный документ» и команда заполнения которая выводит в реквизит оборотно-сальдовую ведомость согласно установленным параметрам. Результат обработки в дальнейшем можно использовать в своих целях.

Обработка тестировалась на конфигурации Бухгалтерия предприятия, редакция 3.0 (3.0.94.17), версия платформы 8.3.17.1851.

Источник

Оцените статью