Как программно передать параметр в отчет на СКД

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

При разработке отчетов на базе системы компоновки данных (СКД) часто возникает задача передать в схему параметры, рассчитанные или полученные динамически в кодовой части программы: данные из временного хранилища, массивы значений, списки ссылок или вычисленные периоды. Разберем по шагам, как правильно передавать параметры в СКД программным путем через модуль отчета.

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

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

Рассмотрим пример кода, в котором выполняется инициализация параметров и вывод результата:


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

Разберем логику работы этого метода:

  1. Флаг СтандартнаяОбработка = Ложь предотвращает автоматическое формирование отчета платформой.
  2. Метод КомпоновщикНастроек.ПолучитьНастройки() возвращает рабочий экземпляр настроек с учетом пользовательских корректировок.
  3. Метод УстановитьЗначениеПараметра коллекции ПараметрыДанных находит параметр по имени, задает ему значение и автоматически выставляет признак Использование = Истина.
  4. Сформированный макет передается в ПроцессорКомпоновки, а затем выводится через ПроцессорВывода в ДокументРезультат.

Способ 2. Установка параметров без отключения стандартной обработки

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

Посмотрим на пример упрощенного кода:


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

Способ 3. Использование стандартных библиотечных модулей БСП

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

Рассмотрим пример вызова функции общего модуля:


БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметр(Отчет.КомпоновщикНастроек.Настройки, "НачалоПериода", Отчет.НачалоПериода);

Важные особенности при работе с параметрами СКД

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

  1. Приоритет пользовательских настроек: если параметр выведен в форму отчета (включен в состав пользовательских настроек), значение, установленное только в КомпоновщикНастроек.Настройки, может быть перезаписано значением из КомпоновщикНастроек.ПользовательскиеНастройки при компоновке. В этом случае значение следует устанавливать также в коллекции пользовательских настроек или исключить параметр из состава пользовательских в схеме.
  2. Передача массивов и списков: если в запросе СКД используется условие вида ГДЕ Поле В (&Параметр1), в параметр можно передавать массив или список значений. СКД автоматически преобразует его для условия В.
  3. Время жизни временного хранилища: если данные помещаются во временное хранилище на клиенте перед формированием отчета, обязательно передавайте уникальный идентификатор формы отчета при вызове ПоместитьВоВременноеХранилище, чтобы адрес оставался валидным на момент вызова серверной процедуры компоновки.
← На главную