Открытие отчета на СКД с заданым отбором

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

  1. Можно сформировать "табличный документ" на сервере и открыть его на клиенте
    &НаКлиенте
    Процедура ОткрытьОтчетПоБонусам(Команда)
    	Таб = ОтчетПоБонусамСервер();
    	Таб.Показать("Бонусы "+Строка(Объект.Ссылка));
    КонецПроцедуры
    
    &НаСервере
    Функция ОтчетПоБонусамСервер()
    	тОтчет = Отчеты.ОтчетПоБонусам.Создать();
    	
    	НастройкиКД = тОтчет.КомпоновщикНастроек.ПолучитьНастройки();
    	
    	ПолеВладелецКарты = тОтчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("ВладелецКарты"); //поле отбора присутствует в СКД
    	
    	НовыйОтбор = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    	НовыйОтбор.ЛевоеЗначение = ПолеВладелецКарты.Поле;
    	НовыйОтбор.ПравоеЗначение = Объект.Ссылка;
    	НовыйОтбор.Использование = Истина;
    	
    	тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);
    	тРезультат = Новый ТабличныйДокумент;
    	тОтчет.СкомпоноватьРезультат(тРезультат);	
    	Возврат тРезультат;
    КонецФункции​
  2.  Второй вариант открытие на экране непосредственно формы отчета, с настроенными отборами:
    &НаКлиенте
    Процедура ОткрытьОтчетПоБонусам(Команда)	
    	СтрПараметры = Новый Структура;
    	СтрПараметры.Вставить("ПериодОтчета", Новый СтандартныйПериод(ДобавитьМесяц(ТекущаяДата(), -12), КонецДня(ТекущаяДата())));
    	
    	ПользовательскиеНастройки = УстановитьПользовательскиеНастройкиОтчета("ОтчетПоБонусам", СтрПараметры);
    	
    	Отбор = Новый Структура;
    	Отбор.Вставить("ВладелецКарты", Объект.Ссылка);
    	
    	ПараметрыФормы = Новый Структура("Отбор,ПользовательскиеНастройки, СформироватьПриОткрытии", Отбор, ПользовательскиеНастройки, Истина);
    	
    	ОткрытьФорму("Отчет.ОтчетПоБонусам.Форма.ФормаОтчета", ПараметрыФормы); 
    КонецПроцедуры
    
    
    &НаСервере
    Функция УстановитьПользовательскиеНастройкиОтчета(ТипОтчета,СтруктураПараметров)
        СтруктураНастроек = Новый Структура;
        ОтчетОбъект = Отчеты[ТипОтчета].Создать();
        
        ПользовательскиеНастройки = ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки;
        Для Каждого ЭлПараметр  Из СтруктураПараметров Цикл
            Для Каждого ПараметрСКД Из ПользовательскиеНастройки.Элементы Цикл
                Если ТипЗнч(ПараметрСКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда  
                    Если строка(ПараметрСКД.Параметр) = ЭлПараметр.Ключ Тогда 
                        ПараметрСКД.Значение = ЭлПараметр.Значение;
                        ПараметрСКД.Использование = Истина;
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;    
        КонецЦикла;
            
        Возврат ПользовательскиеНастройки;
    КонецФункции​
Добавить комментарий