Как передать реквизит в функцию формирования отчета 1С?

Рейтинг: 0Ответов: 1Опубликовано: 18.01.2023

Мне надо сделать отчет, в котором будет пользователь базы и все его роли из профилей доступа. Для этого в форме, перед формированием отчета, нужно указать пользователя. Я добавил реквизит ссылки из справочника пользователей и теперь при нажатии на поле, появляется список пользователей.

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

Вот форма

И вот код, который вызывается при нажатии на Сформировать

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

&НаКлиенте
Процедура СформироватьМакет(Команда)
    
    ТабДокумент                         = СформироватьМакетНаСервере();    
    КоллекцияПечатныхФорм               = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("Макет");
    ПечатнаяФорма                       = УправлениеПечатьюКлиент.ОписаниеПечатнойФормы(КоллекцияПечатныхФорм, "Макет");
    ПечатнаяФорма.СинонимМакета         = "Макет";
    ПечатнаяФорма.ТабличныйДокумент     = ТабДокумент;
    ПечатнаяФорма.ИмяФайлаПечатнойФормы = "Макет";
    
    ОбластиОбъектов = Новый СписокЗначений;
    УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбластиОбъектов);
    
КонецПроцедуры

И на сколько проще будет сделать то же самое, но с СКД?

Ответы

▲ 1Принят

// На второй строчке у тебя это уже делается:

ОтчетОбъект = РеквизитФормыВЗначение("Отчет");

// Этим же способом можем получить любой реквизит формы

Пользователи = РеквизитФормыВЗначение("Пользователи");