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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Основные этапы программного формирования отчета

Для того чтобы программно получить результат работы схемы компоновки данных, нам необходимо последовательно задействовать несколько объектов платформы. Процесс можно сравнить с конвейерной лентой, где каждый объект выполняет свою строго определенную роль. Проанализируем эти этапы:

  1. Получение схемы компоновки данных: извлечение самого макета СхемаКомпоновкиДанных.
  2. Работа с настройками: использование КомпоновщикНастроек для установки параметров и отборов.
  3. Компоновка макета: создание МакетКомпоновки с помощью КомпоновщикМакета.
  4. Выполнение компоновки: запуск процесса получения данных через ПроцессорКомпоновкиДанных.
  5. Вывод результата: использование ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент (или в коллекцию значений).

Шаг 1: Подготовка схемы и настроек

Рассмотрим ситуацию, когда отчет уже существует в конфигурации. Нам нужно получить его схему. Проанализируем код получения схемы и инициализации настроек:


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

// Получаем настройки по умолчанию или из настроек текущего объекта
Настройки = СхемаСКД.НастройкиПоУмолчанию;

// Если нужно использовать настройки пользователя с формы:
// Настройки = КомпоновщикНастроек.ПолучитьНастройки();

Важно понимать, что НастройкиПоУмолчанию — это те настройки, которые вы задали в конфигураторе на закладке «Настройки» схемы СКД. Если отчет вызывается из модуля формы, мы можем взять текущие настройки компоновщика формы.

Шаг 2: Программная установка параметров и отборов

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


// Установка значения параметра "Период"
ПараметрПериод = Настройки.ПараметрыДанных.Элементы.Найти("Период");
Если ПараметрПериод <> Неопределено Тогда
    ПараметрПериод.Значение = Новый СтандартныйПериод(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
    ПараметрПериод.Использование = Истина;
КонецЕсли;

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

Обратите внимание на использование объекта ПолеКомпоновкиДанных. Это критически важный момент: при программной работе с отборами мы не можем просто передать строку, нам нужно обернуть имя поля в специальный тип данных платформы.

Шаг 3: Генерация макета компоновки

Выясним причину, по которой нельзя сразу вывести данные. Перед выводом платформа должна подготовить «инструкцию» для процессора — макет компоновки. На этом этапе 1С сопоставляет настройки со схемой, учитывает доступные права и функциональные опции. Для этого используется КомпоновщикМакета.


КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

// Генерация макета
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаСКД, Настройки, ДанныеРасшифровки);

Объект ДанныеРасшифровки (тип ДанныеРасшифровкиКомпоновкиДанных) необходим, если вы планируете выводить результат в табличный документ на форме и хотите, чтобы по двойному клику открывались документы или справочники.

Шаг 4: Инициализация процессора компоновки и вывод

Теперь перейдем к самому процессу получения данных. ПроцессорКомпоновкиДанных отвечает за выполнение запросов к базе данных и расчет итогов. После этого ПроцессорВывода сформирует визуальное представление (табличный документ).

Проанализируем финальный блок кода:


// Инициализируем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

// Готовим табличный документ для результата
ТабДок = Новый ТабличныйДокумент;

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

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// Теперь ТабДок содержит готовый отчет. 
// Его можно показать пользователю или сохранить в файл:
// ТабДок.Записать("C:\Reports\Report.pdf", ТипФайлаТабличногоДокумента.PDF);

Особенности вывода в коллекцию значений

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

Посмотрим на пример:


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

// Теперь в ТаблицаРезультат лежат данные отчета

Полезные советы и нюансы

При работе с программным выводом СКД следует учитывать несколько важных моментов:

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

← На главную