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