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

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

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

Основные этапы программного вывода отчета

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

  1. Получение схемы компоновки данных: Обращаемся к объекту метаданных или макету.
  2. Инициализация настроек: Загружаем пользовательские или стандартные настройки.
  3. Компоновка макета: Формируем макет, который будет понятен процессору вывода.
  4. Инициализация процессора компоновки: Подготавливаем данные на основе макета и внешних наборов данных (если они есть).
  5. Вывод результата: Передаем данные в ТабличныйДокумент или иной приемник.

Рассмотрим подробнее каждый из этих этапов на практическом примере.

Шаг 1. Подготовка объектов и получение схемы

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


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

// Получаем настройки (из параметров отчета или стандартные)
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

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

Шаг 2. Формирование макета компоновки

Этот этап преобразует декларативную схему и настройки в конкретный план выполнения запросов к базе данных. Здесь используется объект КомпоновщикМакетаКомпоновкиДанных. Выясним причину его использования: он учитывает особенности конкретной версии платформы и доступные функции языка запросов.


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

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

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

Шаг 3. Инициализация процессора компоновки

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


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

Важный момент: если ваш отчет использует внешние наборы данных (например, ТаблицаЗначений, сформированная программно), их необходимо передать вторым параметром в метод Инициализировать в виде соответствия.

Шаг 4. Вывод данных в табличный документ

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


// Очищаем табличный документ перед выводом
Результат = Новый ТабличныйДокумент;
Результат.Очистить();

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

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

Метод Вывести выполняет полный цикл формирования. Однако, если отчет очень большой, рекомендуется использовать итерационный подход с помощью методов НачатьВывод, ВывестиЭлемент и ЗакончитьВывод. Это позволит, например, выводить индикатор прогресса или прерывать процесс при необходимости.

Работа с параметрами и отборами

Рассмотрим ситуацию, когда перед формированием нужно программно установить значение параметра. Разберем по шагам, как это сделать через КомпоновщикНастроек:


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

Аналогично можно работать с отборами. Используя ЭлементыОтбора, мы можем программно добавить новое условие, указав левое значение (поле компоновки), вид сравнения и правое значение.

Практические советы по оптимизации

При программном формировании отчетов следует учитывать несколько нюансов:

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

← На главную