Открыть отчет СКД с передачей параметров и отборами

ChOP 227 3 8 7
// Открывает отчет на СКД с передачей параметров и отборов
//
// Параметры:
//  ЭтаФорма					 - ФормаКлиентскогоПриложения - Форма клиентского приложения 
//  ФормаОтчета					 - Строка - Путь к форме отчета, например: "Отчет.ТестовыйОтчёт.Форма" 
//  Параметры					 - Структура - Ключ- имя параметра, значение- присваиваемое значение
//  Отборы						 - Массив структур - Структура вида: Новый Структура("ИмяОтбора, Значение, ВидСравнения", ИмяОтбора, Значение, ВидСравнения) 
//  СформироватьПриОткрытии		 - Булево - Признак формировании отчета при открытии 
//  КлючВарианта				 - Строка - Ключ варианта отчета, который следует открыть
//  ПользовательскиеНастройки	 - Пользовательские настройки отчета - КомпоновщикНастроек.ПользовательскиеНастройки 
//
Процедура КомандаОткрытьОтчётСОтбором(ЭтаФорма, ФормаОтчета, Параметры = Неопределено, Отборы = Неопределено,
	          СформироватьПриОткрытии = Истина, КлючВарианта = Неопределено, ПользовательскиеНастройки = Неопределено) Экспорт
		
	ФормаОтчёта = ПолучитьФорму(ФормаОтчета);
	КомпоновщикНастроек = ФормаОтчёта.Отчет.КомпоновщикНастроек;
	
	Для Каждого Парам Из Параметры Цикл 
		УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, Парам.Ключ, Парам.Значение);	
	КонецЦикла;	
	
	Для Каждого Отбор Из Отборы Цикл 
		УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, Отбор.ИмяОтбора, Отбор.Значение, Отбор.ВидСравнения);	
	КонецЦикла;
	
	ПараметрыФормы = Новый Структура();
	ПараметрыФормы.Вставить("СформироватьПриОткрытии", СформироватьПриОткрытии);
	Если КлючВарианта <> Неопределено Тогда
		ПараметрыФормы.Вставить("КлючВарианта", КлючВарианта);		
	КонецЕсли;  
	ПараметрыФормы.Вставить("ПользовательскиеНастройки", ?(ПользовательскиеНастройки <> Неопределено, ПользовательскиеНастройки,
																									  КомпоновщикНастроек.ПользовательскиеНастройки)); 
	
	ОткрытьФорму(ФормаОтчета, ПараметрыФормы, ЭтаФорма);
	
КонецПроцедуры

Процедура УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, ИмяПараметра, Значение)
	
	Перем ПараметрДанных, Настройки, ПользовательскиеНастройки, ПользовательскийПараметр;
	
	Настройки = КомпоновщикНастроек.Настройки;
	
	ПараметрДанных = Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
	
	Если ЗначениеЗаполнено(ПараметрДанных.ИдентификаторПользовательскойНастройки) Тогда
		
		ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
		ПользовательскийПараметр = ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки);
		ПользовательскийПараметр.Использование = Истина;
		ПользовательскийПараметр.Значение = Значение;

	КонецЕсли;
	
КонецПроцедуры

Процедура УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, ИмяОтбора, Значение, ВидСравнения = Неопределено)
	
	Перем	ПолеКД, Элем, ЭлементОтбора, Настройки, 
			ПользовательскиеНастройки, ПользовательскийОтбор;
	
	Настройки = КомпоновщикНастроек.Настройки;
	
	ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);
	
	Для Каждого Элем Из Настройки.Отбор.Элементы Цикл
		
		Если Элем.ЛевоеЗначение = ПолеКД Тогда
			ЭлементОтбора = Элем;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Если ЭлементОтбора = Неопределено Тогда
		Возврат;		
	КонецЕсли;		
	
	Если ЗначениеЗаполнено(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
		
		ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
 		ПользовательскийОтбор = ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
		ПользовательскийОтбор.Использование = (Значение <> Неопределено);
		ПользовательскийОтбор.ВидСравнения = ?(ВидСравнения <> Неопределено, ВидСравнения, ВидСравненияКомпоновкиДанных.Равно); 
		ПользовательскийОтбор.ПравоеЗначение  = Значение;

	КонецЕсли;

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

См. также

Передача параметров и отбора в общую форму отчета

Запуск отчета из документа, передача ссылки в параметр отчета

СоздатьСтруктуруПараметраОтбора (БСП)

ОткрытьОтчетПоПроблемамИзОбработкиОбновления (БСП)

Открыть форму выбора с отбором (УФ)

ПараметрыФормыОтправкиSMS (БСП)

СКД передача таблицы в качетсве параметра в запрос

ОткрытьФайлБезРасширенияПередачаФайла (БСП)

ПараметрыОтбораСкрываемыхДанных (БСП)

Модератору