Почему не применяются параметры СКД при программной установке в управляемых формах?

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

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

Разбор причин проблемы

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

Решение проблемы через событие ПриКомпоновкеРезультата

Чтобы гарантированно «продавить» свои значения параметров и сделать их независимыми от того, что настроил пользователь или что подгрузила БСП, необходимо перенести логику установки параметров в событие ПриКомпоновкеРезультата. Это событие происходит непосредственно перед тем, как СКД начнет строить отчет, и именно на этом этапе у вас есть возможность окончательно скорректировать настройки.

Рассмотрим пошагово, как реализовать принудительную установку параметров:

  1. В модуле отчета найдите или создайте процедуру ПриКомпоновкеРезультата.
  2. В этой процедуре получите доступ к текущим настройкам через КомпоновщикНастроек.
  3. Установите необходимые значения параметров, используя метод УстановитьЗначениеПараметра.
  4. Обязательно активируйте использование параметра, установив свойство Использование в значение Истина.

Пример реализации программного кода:


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

КонецПроцедуры

Важные рекомендации

Использование этого подхода позволит вам добиться предсказуемого поведения отчета, независимо от того, какие настройки были сохранены в информационной базе ранее.

← На главную