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

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

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

Почему параметры не передаются автоматически?

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

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

Способ 1: Использование структуры «Отборы»

Самый простой и эффективный способ для передачи отборов — использование предопределенного ключа структуры параметров. Если вы передадите в форму структуру с ключом Отборы, типовая форма отчета (особенно в типовых конфигурациях на базе БСП) автоматически попытается наложить их на настройки компоновки.

Рассмотрим пример кода для вызова из любого места системы:


СписокНоменклатуры = Новый СписокЗначений;
СписокНоменклатуры.Добавить(Объект.Ном1);
СписокНоменклатуры.Добавить(Объект.Ном2);

ПараметрыОткрытия = Новый Структура;
// Используем ключ "Отборы", чтобы форма сама обработала их
Отборы = Новый Структура("Номенклатура", СписокНоменклатуры);
ПараметрыОткрытия.Вставить("Отборы", Отборы);

ОткрытьФорму("Отчет.ОтчетПоОст.Форма", ПараметрыОткрытия);

Способ 2: Работа с пользовательскими настройками в модуле формы

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

Разберем, как это реализовать по шагам:

  1. Создайте свою форму отчета, если вы еще этого не сделали.
  2. В модуле формы добавьте обработчик события ПриЗагрузкеПользовательскихНастроекНаСервере.
  3. Внутри обработчика получите доступ к КомпоновщикНастроек.ПользовательскиеНастройки и установите необходимые значения.

&НаСервере
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки)
    // Получаем значение из переданных параметров формы
    ЗначениеДляПередачи = ЭтотОбъект.Параметры.МойПараметр;
    
    // Находим нужный элемент в настройках
    Для Каждого Элемент Из Настройки.Элементы Цикл
        Если ТипЗнч(Элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
            Если Строка(Элемент.Параметр) = "МойПараметрСКД" Тогда
                Элемент.Значение = ЗначениеДляПередачи;
                Элемент.Использование = Истина;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Важные рекомендации для разработчиков

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

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

← На главную