Программное выполнение СКД и “ПользовательскиеНастройки”

Дано:

Стандартный отчёт основанный на СКД с стандартной формой сформированной конструктором.

http://screencast.com/t/3WhbQUEhaHom

Нужно при нажатии на Сформировать сформировать обычный отчет в соответствии с настройками пользователя и получить данные этого отчета в виде коллекции значений. 

ВАЖНО! Форму менять нельзя.

Решение:

Используем процедуру ПриКомпоновкеРезультата

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка=Истина;

СхемаКД=ЭтотОбъект.СхемаКомпоновкиДанных; //Можно без ЭтотОбъект т.к. процедура в модуле объекта.

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

Настройки=ЭтотОбъект.КомпоновщикНастроек.Настройки; //
ПользовательскиеНастройки = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки;

//МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки,, Тип(“ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений”) );

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТЗ=ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

//т.к. стандартный обработчик включен и мы не меняли схему КД то отчет сформируется стандартным алгоритмом а в ТЗ будет коллекция в соответствии с настройками пользователя.

КонецПроцедуры

Проблема:

На данном этапе в “ЭтотОбъект.КомпоновщикНастроек.Настройки” еще не заполнены значения параметров указанные пользователем на форме, не указаны значения и состояние отборов указанные пользователем.

Но они есть в ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки, но  КомпоновщикМакета.Выполнить требует на вход именно Настройки.

И я не как не могу понять как заставить СКД перенести настройки пользователя в настройки или иным способом передать их КомпоновщикуМакета.

Понятно что можно в цикле обойти элементы и соответственно программно внести изменения в “Настройке” но мне кажется должен быть другой способ.

 

 

Подписаться
Уведомить о
guest
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
also
10 лет назад

Я так понял, Вам нужен метод ПолучитьНастройки()
КомпоновщикНастроекКомпоновкиДанных (DataCompositionSettingsComposer)
ПолучитьНастройки (GetSettings)
Синтаксис:
ПолучитьНастройки()
Возвращаемое значение:
Тип: НастройкиКомпоновкиДанных.
Описание:
Позволяет получить копию настроек компоновки данных.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
К возвращаемой копии применяются пользовательские настройки.
Применение фиксированных настроек:
Отбор из фиксированных настроек добавляется к отбору основных настроек;
Условное оформление добавляется к условному оформлению основных настроек;
Параметры данных, установленные в фиксированных настройках устанавливаются в основных настройках.
При наличии пересечения отбора и параметров фиксированных настроек с отбором и параметрами настроек генерируется исключение.

VVi3ardツ
VVi3ardツ
10 лет назад

ПРАВИЛЬНЫЙ ОТВЕТ:
Вместо:
Настройки=ЭтотОбъект.КомпоновщикНастроек.Настройки;
Надо писать:
Настройки= КомпоновщикНастроек.ПолучитьНастройки();

VVi3ardツ
VVi3ardツ
10 лет назад

also да вы все совершенно верно поняли, спасибо. Может еще кому пригодится.

tlrd
tlrd
10 лет назад

В процедуре “ПриКомпоновкеРезультата” добавляю структуру с данными для “ВнешниеНаборыДанных”, а при выводе СКД “не видит” этот набор.
Подскажите, как ещё передать в УФ таблицу значений для “ВнешнийНаборДанных”?