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

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

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

Разберем несколько подходов к решению этой задачи: от программной компоновки отчета в поле табличного документа до открытия готовой формы отчета с переданными параметрами.

Способ 1. Программное формирование отчета в поле табличного документа

Рассмотрим вариант, когда результат работы СКД необходимо вывести непосредственно в реквизит формы документа или в отдельную форму с элементом типа ТабличныйДокумент.

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

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

Проанализируем пример кода, который получает схему СКД отчета, заполняет необходимые параметры и производит вывод в поле формы:


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

// Создаем объект отчета для работы с компоновщиком настроек
мОтчет = Отчеты._ФинансовоеИсполнениеДоговора.Создать();
НастройкаСКД = мОтчет.КомпоновщикНастроек.Настройки;

// Заполняем параметр данных (например, ссылку на документ)
НастройкаСКД.ПараметрыДанных.Элементы[0].Использование = Истина;
НастройкаСКД.ПараметрыДанных.Элементы[0].Значение = Объект.Ссылка;

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

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

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

Способ 2. Открытие формы отчета с передачей отборов

Если требуется открыть стандартную форму отчета и передать туда значение отбора (например, текущего физического лица, контрагента или документа), проанализируем следующий подход. Здесь мы обращаемся к КомпоновщикНастроек формы отчета и динамически добавляем новый элемент в коллекцию Отбор.

Посмотрим на пример установки отбора при открытии формы отчета:


// Получаем форму отчета
Форма = Отчеты.РасчетныеЛисткиОрганизаций.ПолучитьФорму();
Форма.Открыть();

// Обращаемся к настройкам компоновщика отчета
КомпоновщикНастроек = Форма.ОтчетОбъект.КомпоновщикНастроек;
Настройки = КомпоновщикНастроек.Настройки;

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

// Обновляем отчет для отображения актуальных данных
Форма.ОбновитьОтчет();

Особенности работы в управляемых формах (Тонкий клиент)

Выясним важные технические нюансы при работе в управляемом приложении:

  1. Разделение контекста: Объекты СКД, такие как СхемаКомпоновкиДанных и ПроцессорКомпоновкиДанных, недоступны на тонком клиенте. Все операции по ручной сборке отчета должны выполняться строго на сервере (в процедурах с директивой &НаСервере или &НаСервереБезКонтекста).
  2. Использование встроенных параметров формы: В управляемом приложении не обязательно вручную компоновать отчет на сервере, чтобы открыть его в новом окне. Достаточно использовать метод ОткрытьФорму() и передать структуру параметров:
    1. СформироватьПриОткрытии (тип Булево) — автоматически запускает расчет отчета при открытии окна.
    2. Отбор (тип Структура) — содержит имена полей и их значения для быстрой фильтрации.
    3. КлючВарианта — указывает конкретный вариант отчета для загрузки.

Использование механизмов БСП для подключения отчетов

В типовых конфигурациях на базе Библиотеки Стандартных Подсистем (БСП) разработчикам рекомендуется избегать доработки кода форм документов напрямую. Для вызова отчетов из документов предусмотрены штатные механизмы:

  1. Подсистема «Печать»: Отчет на СКД можно зарегистрировать в модуле менеджера документа через процедуру ПриОпределенииКомандПечати. Команда формирования отчета автоматически появится в меню кнопки «Печать».
  2. Дополнительные отчеты и обработки: Отчет на СКД можно оформить как внешний отчет и подключить его к документу через справочник дополнительных обработок в режиме «1С:Предприятие», не меняя конфигурацию.
← На главную