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