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