Как программно вызвать отчет с выбором пользовательской настройки и постановкой значений в настройку?

Версия для печатиPDF-версия
Имеется отчет.  Расположен в Отчеты/ Продажи/ Анализ заказов / Анализ заказов покупателя.
К нему написано несколько пользовательских настроек.
 
Возникла необходимость, вызывать данный отчет кнопкой из разных мест (по смыслу) с определенной настройкой и подстановкой данных из открытой формы документа.
 
Пытаюсь реализовать.
Для того, чтобы не испортить оригинал Отчета, копирую его в конфигурации и называю:
АнализЗаказовПокупателейЭкс
 
Чтобы передать настройки из оригинала в копию, использую сохранение настройки в файил.
Для этого создаю в форме оригинала и копии кнопки и назначаю им код:

Процедура КнопкаЭкспорт(Элемент)

    Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Заголовок="Сохранение настроек построителя отчета в файл";
    Диалог.Каталог=КаталогВременныхФайлов();
    Диалог.Расширение="set";
    Диалог.Фильтр="Настройки посторителя отчета (*.set)|*.set";
    Если Диалог.Выбрать() Тогда
        ЗначениеВФайл(Диалог.ПолноеИмяФайла, ПостроительОтчета.ПолучитьНастройки());
    КонецЕсли;

КонецПроцедуры
И соответственно:

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

	АнализЗаказовПокупателейЭкс = Отчеты.АнализЗаказовПокупателейЭкс.Создать();
	АнализЗаказаФорма = АнализЗаказовПокупателейЭкс.ПолучитьФорму();
	АнализЗаказаФорма.ПолеВвода2 = Ссылка;
	АнализЗаказаФорма.Открыть();
Форма отчета отлично открывается, значение в реквизиты: Реквизит1 и ПолеВвода2 передается и приравниваются.
 
Сам отчет работает (вручную).
А далее изыскания по Яндексу не принесли плодов.
У отчета несколько настроеки как прораммно запустить Отчет, с выбранной настройкой не нашел.
Все что находил – упорно не работало.
 
И вторая задача, на которой споткнулся:
В форме отчета имеется кнопка Настройка. Где в закладке Отбор необходимо выбрать ЗаказПокупателя.
Пролазил код, все что понял, это то, что эти настройки связаны с уиверсальным отчетом, а вот как назначить отбору ЗаказПокупателя Ссылку или прировнять из реквизита ( Реквизит1 или ПолеВвода2) так и не разобрался.
 
Помогите, пожалуйста, если это возможно.
 
 
 
 
С пользовательскими настройками – не так страшно, на худой конец, можно «расклонировать» Отчет по количеству настроек и запускать кнопками – по необходимости.
А вот с ЗаказомПокупателя сложнее…
Нашел, что представление Настройки сидит в данном механизме:

        УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ЗаказПокупателя", "Заказ");
Но как ни старался – подставить значения не смог. 
 

Пробую вызывать отчет так:


	АнализЗаказовПокупателейЭкс = Отчеты.АнализЗаказовПокупателейЭкс.Создать();
	  
		  
	АнализЗаказовПокупателейЭкс.УстановитьНачальныеНастройки();

	АнализЗаказовПокупателейЭкс.УниверсальныйОтчет.ОчиститьНастройкиПостроителя();

	
	АнализЗаказовПокупателейЭкс.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("ЗаказПокупателя");
	
	ЭлементОтбора = АнализЗаказовПокупателейЭкс.УниверсальныйОтчет.ПостроительОтчета.Отбор["ЗаказПокупателя"];
	
	ЭлементОтбора.Использование = Истина;
	ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
	ЭлементОтбора.Значение = Ссылка;

	АнализЗаказаФорма = АнализЗаказовПокупателейЭкс.ПолучитьФорму();
	АнализЗаказаФорма.Открыть();
	АнализЗаказаФорма.ОбновитьОтчет();

Всеравно отчет формируется по заказу выбранному в настройках пользователя.

А если сначала открыть форму, а потом уже установить значение отбора?

Только что попробовал, ничего не получилось.

Очевидно, что у меня нет ни капли инфо как это сделать...(((


	АнализЗаказовПокупателейЭкс = Отчеты.АнализЗаказовПокупателейЭкс.Создать();

	АнализЗаказаФорма = АнализЗаказовПокупателейЭкс.ПолучитьФорму();
	АнализЗаказаФорма.ПолеВвода2 = Ссылка;
	АнализЗаказаФорма.Открыть();

Т.е. Сылка на Документ у меня в форме отчета уже есть, а вот как по ней сделать отбор ума не приложу.

Немного не то. Попробуйте вот так:

	АнализЗаказаФорма = АнализЗаказовПокупателейЭкс.ПолучитьФорму();
	АнализЗаказаФорма.Открыть();

	ЭлементОтбора = АнализЗаказовПокупателейЭкс.УниверсальныйОтчет.ПостроительОтчета.Отбор["ЗаказПокупателя"];
	ЭлементОтбора.Использование = Истина;
	ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
	ЭлементОтбора.Значение = Ссылка;

	АнализЗаказаФорма.ОбновитьОтчет();

Заработало.

Огромнейшее СПАСИБО!!!!

 

Только я все же в некотором культурном шоке...

Схожие комбинации кода я проходил мимо...

По логике, после открытия формы: АнализЗаказаФорма.Открыть();

Дальнейшие действия должны "разворачиваться" в форме Отчета...

Однако, в данном примереэто не так!

Можете, в двух словах, старому маразматику пояснить, как это?

 

 

Дело в том, что во многих типовых конфигурациях на обычных формах в отчётах на основе универсального отчёта (в УТ 10.3 это практически все) инициализация настроек происходит при открытии формы отчёта. Соответственно, чтобы переопределить настройки по умолчанию, нужно сначала открыть форму, а потом уже задать собственные настройки.

Мудрено.

Хорошо, что это редкий случай.

Еще раз Спасибо!