---
title: Программно открыть отчтет с параметрами и отборами
slug: общие-скд-и-отчеты/программно-открыть-отчтет-с-параметрами-и-отборами
---

```bsl
#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ОткрытьОтчетАнализНоменклатурыПоПлануЗакупок(Команда)

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

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

    // Устанавливаем отборы
    Если ЗначениеЗаполнено(Объект.Назначение) Тогда
        ГруппаНаправлений =
ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(Объект.Назначение,
"НаправлениеДеятельности.Родитель");
        УстановитьПользовательскийОтборСКД(КомпоновщикНастроек,
"ГруппаНаправлений", ГруппаНаправлений);
    КонецЕсли;

    ТекДанн = Элементы.ТоварыПоПериодам.ТекущиеДанные;
    Если ТекДанн <> Неопределено Тогда
        УстановитьПользовательскийОтборСКД(КомпоновщикНастроек,
"Номенклатура", ТекДанн.Номенклатура);
    КонецЕсли;

    // Открываем форму
    ПараметрыФормы = Новый Структура();
    ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
    ПараметрыФормы.Вставить("КлючВарианта", "Основной");
    ПараметрыФормы.Вставить("ПользовательскиеНастройки",
КомпоновщикНастроек.ПользовательскиеНастройки);

    ОткрытьФорму("Отчет.АнализНоменклатурыПоПлануЗакупок.Форма",
ПараметрыФормы, ЭтотОбъект);

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

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

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

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

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

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

    КонецЕсли;

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

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

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

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

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

        Если Элем.ЛевоеЗначение = ПолеКД Тогда
            ЭлементОтбора = Элемент;
            Прервать;
        КонецЕсли;

    КонецЦикла;

    Если ЭлементОтбора = Неопределено Тогда
        Возврат;
    КонецЕсли;

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

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

    КонецЕсли;

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


#КонецОбласти 
```