Всем доброго времени суток!
А можно мне задать вопрос по отборам в отчетах на СКД.
Пытаюсь из расширения запустить отчет конфигурации БП 3.0 "Движения товаров". Передаю туда отбор по номенклатуре:

```1c
    Номенклатура = ТекущиеДанные.Ссылка;
    //структура отбора

    Отбор = Новый Структура("Номенклатура", Номенклатура);
    Отбор.Вставить("НачалоПериода", НачалоМесяца(ТекущаяДата()));
    Отбор.Вставить("КонецПериода", ТекущаяДата());
    ПараметрыФормы = Новый Структура("СформироватьПриОткрытии, Отбор", Истина, Отбор);
    ФормаОтчета = ПолучитьФорму("Отчет.ДвижениеТоваров.ФормаОбъекта", ПараметрыФормы);
    НовыеПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
    ФормаОтчета.Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеПользовательскиеНастройки);
    ОткрытьФорму(ФормаОтчета);
```

Выдает ошибку:

```1c
    Невозможно применить фиксированные настройки. Совпадают значения параметра.
    {Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(667)}: ПараметрыОтчета.НастройкиКомпоновкиДанных = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
    {Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(925)}: ПараметрыОтчета = ПодготовитьПараметрыОтчетаНаСервере();
    {Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(733)}: БухгалтерскиеОтчеты.ЗаписатьОперациюБизнесСтатистики(ЭтотОбъект, "СформироватьОтчет", НастройкиОтчетаДляСтатистики());
    {Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(875)}: РезультатВыполнения = СформироватьОтчетНаСервере();
    {Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(511)}: ЗапуститьФормированиеОтчета();

    по причине:
    Невозможно применить фиксированные настройки. Совпадают значения параметра
```

Прошу помощи!!!
---
Для этого не нужно устанавливать отбор в параметрах формы, нужно установить значение отбора в настройках отчёта.
Настройки получаются через компоновщик. Попробуй так, должно работать:

```1c
    ЭлементыОтбора = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы;
    ПолеНоменклатура = Новый ПолеКомпоновкиДанных("Номенклатура");
    Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
    Если ЭлементОтбора.ЛевоеЗначение = ПолеНоменклатура Тогда
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Номенклатура;
    Прервать;
    КонецЕсли;
    КонецЦикла;
```
---
Всем доброго времени суток!
В результате поисков нашел универсальную схему открытия типового (из конфигурации) отчета в 1С: БП 3.0, подходит для большинства отчетов конфигурации. Вот код:

```1c
    &НаКлиенте
    Процедура ОтчетДвиженияНоменклатуры(Команда)

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

    КонецЕсли;

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

    &НаКлиенте
    Процедура ОткрытьОтчет(Отчет, ГруппировкаОтчета = Неопределено, Отборы = Неопределено, Показатели = Неопределено, КлючВарианта = Неопределено, НачалоПериода = Неопределено, КонецПериода = Неопределено)

    ПользовательскиеНастройки = ПользовательскиеНастройкиДляРасшифровки(НачалоПериода, КонецПериода);
    ДополнительныеСвойства = ПользовательскиеНастройки.ДополнительныеСвойства;

    Если ГруппировкаОтчета <> Неопределено И ТипЗнч(ГруппировкаОтчета) = Тип("Массив") Тогда
    ДополнительныеСвойства.Вставить("Группировка", ГруппировкаОтчета);
    КонецЕсли;

    Если ТипЗнч(Отборы) = Тип("Массив") Тогда

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

    КонецЕсли;

    Если ТипЗнч(Показатели) = Тип("Массив") Тогда

    Для Каждого Показатель Из Показатели Цикл
    ДополнительныеСвойства.Вставить(Показатель, Истина);
    КонецЦикла;

    КонецЕсли;

    Если КлючВарианта <> Неопределено Тогда
    ДополнительныеСвойства.Вставить("КлючВарианта", КлючВарианта);
    КонецЕсли;

    ПараметрыОтчета = Новый Структура;
    ПараметрыОтчета.Вставить("РежимРасшифровки" , Истина);
    ПараметрыОтчета.Вставить("ВидРасшифровки" , 2);
    ПараметрыОтчета.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);

    ОткрытьФорму(Отчет, ПараметрыОтчета, ЭтотОбъект, Истина);

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

Всем удачи.
---
а что происходит в ПриЗагрузкеВариантаОтчета и в ПриЗагрузкеПользовательскихНастроек ?
---
Происходит "склейка" Пользовательских" и "Фиксированных" настроек отчета. Как раз наличие в двух настройках одинакового параметра и вызывает данную ошибку. Хочу очистить параметры отбора в Фиксированных настройках, или-же передать Отбор в "Фиксированные".
---
Фиксированные настройки - настройки, предопределённые разработчиком. Они имеют приоритет перед настройками СКД и пользовательскими. В СКД отчёта есть фиксированные настройки, а ты пытаешься установить значение какой-то из них в пользовательских настройках. Либо нужно убрать пересекающуюся настройку из отбора, либо передать в форму фиксированные настройки:

```1c
    фиксНастройки = Новый НастройкиКомпоновкиДанных;
    ....
    Установка значений настроек
    ....
    ПараметрыФормы.Вставить("ФиксированныеНастройки", фиксНастройки);
```
---
Хотелось-бы передать Отбор в виде Пользовательских настроек, чтоб пользователь (если это ему понадобиться) зашел в "Показать настройки" снял галку отбора и получил полный отчет.
Как получить и очистить Фиксированные настройки? Надеюсь это действие на период текущего сеанса работы с Отчетом.
---
Для этого не нужно устанавливать отбор в параметрах формы, нужно установить значение отбора в настройках отчёта.
Настройки получаются через компоновщик. Попробуй так, должно работать:

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

```1c
    Номенклатура = ТекущиеДанные.Ссылка;
    ПараметрыФормы = Новый Структура("СформироватьПриОткрытии", Истина);
    ФормаОтчета = ПолучитьФорму("Отчет.ДвижениеТоваров.ФормаОбъекта", ПараметрыФормы);
    ФормаОтчета.НастройкиОтчета.ФормироватьСразу = Истина;

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

    НастройкиКомпоновки.Отбор.Элементы.Очистить();
    Отбор = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Отбор.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;
    Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
    Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    Отбор.ПравоеЗначение = Номенклатура;
    Отбор.Использование = Истина;
```

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

```1c
    &НаКлиенте
    Процедура ОтчетДвиженияНоменклатуры(Команда)

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

    КонецЕсли;

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

    &НаКлиенте
    Процедура ОткрытьОтчет(Отчет, ГруппировкаОтчета = Неопределено, Отборы = Неопределено, Показатели = Неопределено, КлючВарианта = Неопределено, НачалоПериода = Неопределено, КонецПериода = Неопределено)

    ПользовательскиеНастройки = ПользовательскиеНастройкиДляРасшифровки(НачалоПериода, КонецПериода);
    ДополнительныеСвойства = ПользовательскиеНастройки.ДополнительныеСвойства;

    Если ГруппировкаОтчета <> Неопределено И ТипЗнч(ГруппировкаОтчета) = Тип("Массив") Тогда
    ДополнительныеСвойства.Вставить("Группировка", ГруппировкаОтчета);
    КонецЕсли;

    Если ТипЗнч(Отборы) = Тип("Массив") Тогда

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

    КонецЕсли;

    Если ТипЗнч(Показатели) = Тип("Массив") Тогда

    Для Каждого Показатель Из Показатели Цикл
    ДополнительныеСвойства.Вставить(Показатель, Истина);
    КонецЦикла;

    КонецЕсли;

    Если КлючВарианта <> Неопределено Тогда
    ДополнительныеСвойства.Вставить("КлючВарианта", КлючВарианта);
    КонецЕсли;

    ПараметрыОтчета = Новый Структура;
    ПараметрыОтчета.Вставить("РежимРасшифровки" , Истина);
    ПараметрыОтчета.Вставить("ВидРасшифровки" , 2);
    ПараметрыОтчета.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);

    ОткрытьФорму(Отчет, ПараметрыОтчета, ЭтотОбъект, Истина);

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

Всем удачи.
---
А что такое ОткрытьОтчет()???
---
Доброго дня! Разверните программный код.