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



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

//

// Параметры:

// ЭтаФорма - ФормаКлиентскогоПриложения - Форма клиентского приложения

// ФормаОтчета - Строка - Путь к форме отчета, например: "Отчет.ТестовыйОтчёт.Форма"

// Параметры - Структура - Ключ- имя параметра, значение- присваиваемое значение

// Отборы - Массив структур - Структура вида: Новый Структура("ИмяОтбора, Значение, ВидСравнения", ИмяОтбора, Значение, ВидСравнения)

// СформироватьПриОткрытии - Булево - Признак формировании отчета при открытии

// КлючВарианта - Строка - Ключ варианта отчета, который следует открыть

// ПользовательскиеНастройки - Пользовательские настройки отчета - КомпоновщикНастроек.ПользовательскиеНастройки

//

Процедура КомандаОткрытьОтчётСОтбором(ЭтаФорма, ФормаОтчета, Параметры = Неопределено, Отборы = Неопределено,

СформироватьПриОткрытии = Истина, КлючВарианта = Неопределено, ПользовательскиеНастройки = Неопределено) Экспорт



ФормаОтчёта = ПолучитьФорму(ФормаОтчета);

КомпоновщикНастроек = ФормаОтчёта.Отчет.КомпоновщикНастроек;



Для Каждого Парам Из Параметры Цикл

УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, Парам.Ключ, Парам.Значение);

КонецЦикла;



Для Каждого Отбор Из Отборы Цикл

УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, Отбор.ИмяОтбора, Отбор.Значение, Отбор.ВидСравнения);

КонецЦикла;



ПараметрыФормы = Новый Структура();

ПараметрыФормы.Вставить("СформироватьПриОткрытии", СформироватьПриОткрытии);

Если КлючВарианта <> Неопределено Тогда

ПараметрыФормы.Вставить("КлючВарианта", КлючВарианта);

КонецЕсли;

ПараметрыФормы.Вставить("ПользовательскиеНастройки", ?(ПользовательскиеНастройки <> Неопределено, ПользовательскиеНастройки,

КомпоновщикНастроек.ПользовательскиеНастройки));



ОткрытьФорму(ФормаОтчета, ПараметрыФормы, ЭтаФорма);



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



Процедура УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, ИмяПараметра, Значение)



Перем ПараметрДанных, Настройки, ПользовательскиеНастройки, ПользовательскийПараметр;



Настройки = КомпоновщикНастроек.Настройки;



ПараметрДанных = Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);



Если ЗначениеЗаполнено(ПараметрДанных.ИдентификаторПользовательскойНастройки) Тогда



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

ПользовательскийПараметр = ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки);

ПользовательскийПараметр.Использование = Истина;

ПользовательскийПараметр.Значение = Значение;



КонецЕсли;



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



Процедура УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, ИмяОтбора, Значение, ВидСравнения = Неопределено)



Перем ПолеКД, Элем, ЭлементОтбора, Настройки,

ПользовательскиеНастройки, ПользовательскийОтбор;



Настройки = КомпоновщикНастроек.Настройки;



ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);



Для Каждого Элем Из Настройки.Отбор.Элементы Цикл



Если Элем.ЛевоеЗначение = ПолеКД Тогда

ЭлементОтбора = Элем;

Прервать;

КонецЕсли;

КонецЦикла;



Если ЭлементОтбора = Неопределено Тогда

Возврат;

КонецЕсли;



Если ЗначениеЗаполнено(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда



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

ПользовательскийОтбор = ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);

ПользовательскийОтбор.Использование = (Значение <> Неопределено);

ПользовательскийОтбор.ВидСравнения = ?(ВидСравнения <> Неопределено, ВидСравнения, ВидСравненияКомпоновкиДанных.Равно);

ПользовательскийОтбор.ПравоеЗначение = Значение;



КонецЕсли;



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





✍️ @odin1C_rus