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