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