Программное выполнение СКД и “ПользовательскиеНастройки”
Дано:
Стандартный отчёт основанный на СКД с стандартной формой сформированной конструктором.
http://screencast.com/t/3WhbQUEhaHom
Нужно при нажатии на Сформировать сформировать обычный отчет в соответствии с настройками пользователя и получить данные этого отчета в виде коллекции значений.
ВАЖНО! Форму менять нельзя.
Решение:
Используем процедуру ПриКомпоновкеРезультата
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка=Истина;
СхемаКД=ЭтотОбъект.СхемаКомпоновкиДанных; //Можно без ЭтотОбъект т.к. процедура в модуле объекта.
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Настройки=ЭтотОбъект.КомпоновщикНастроек.Настройки; //
ПользовательскиеНастройки = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки;
//МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки,, Тип(“ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений”) );
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТЗ=ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//т.к. стандартный обработчик включен и мы не меняли схему КД то отчет сформируется стандартным алгоритмом а в ТЗ будет коллекция в соответствии с настройками пользователя.
КонецПроцедуры
Проблема:
На данном этапе в “ЭтотОбъект.КомпоновщикНастроек.Настройки” еще не заполнены значения параметров указанные пользователем на форме, не указаны значения и состояние отборов указанные пользователем.
Но они есть в ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки, но КомпоновщикМакета.Выполнить требует на вход именно Настройки.
И я не как не могу понять как заставить СКД перенести настройки пользователя в настройки или иным способом передать их КомпоновщикуМакета.
Понятно что можно в цикле обойти элементы и соответственно программно внести изменения в “Настройке” но мне кажется должен быть другой способ.
Я так понял, Вам нужен метод ПолучитьНастройки()
КомпоновщикНастроекКомпоновкиДанных (DataCompositionSettingsComposer)
ПолучитьНастройки (GetSettings)
Синтаксис:
ПолучитьНастройки()
Возвращаемое значение:
Тип: НастройкиКомпоновкиДанных.
Описание:
Позволяет получить копию настроек компоновки данных.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
К возвращаемой копии применяются пользовательские настройки.
Применение фиксированных настроек:
Отбор из фиксированных настроек добавляется к отбору основных настроек;
Условное оформление добавляется к условному оформлению основных настроек;
Параметры данных, установленные в фиксированных настройках устанавливаются в основных настройках.
При наличии пересечения отбора и параметров фиксированных настроек с отбором и параметрами настроек генерируется исключение.
ПРАВИЛЬНЫЙ ОТВЕТ:
Вместо:
Настройки=ЭтотОбъект.КомпоновщикНастроек.Настройки;
Надо писать:
Настройки= КомпоновщикНастроек.ПолучитьНастройки();
also да вы все совершенно верно поняли, спасибо. Может еще кому пригодится.
В процедуре “ПриКомпоновкеРезультата” добавляю структуру с данными для “ВнешниеНаборыДанных”, а при выводе СКД “не видит” этот набор.
Подскажите, как ещё передать в УФ таблицу значений для “ВнешнийНаборДанных”?