```1c
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

    //Выбор варианта отчета
    Вариант = СхемаКомпоновкиДанных.ВариантыНастроек.СводныйОтчетПоПродажам;
    Для Каждого Элемент ИЗ Вариант.Настройки.Отбор.Элементы Цикл
    Настройки.Отбор.Элементы.

    КонецЦикла;
    Настройки = Вариант.СводныйОтчетПоПродажам;

    //---
```

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

    Если ЭтоГлавныйМенеджер() Тогда
    КлючВарианта = "ВариантДляГлавногоМенеджера";
    Иначе
    КлючВарианта = "ВариантДляМенеджера";
    КонецЕсли;

    КонецПроцедуры
```
 Сами же варианты сделать недоступными для всех пользователей. В итоге можно вообще забыть про копирование настроек, параметров и прочее.
Здесь на форуме много специалистов по СКД, возможно они посоветуют более оптимальный вариант.
---
Хотел в цикле перебрать элементы как-нибудь. Можно обойти рекурсивно текущие отборы и добавить их в отборы варианта:
```1c
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

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

    НастройкиВарианта = СхемаКомпоновкиДанных.ВариантыНастроек.СводныйОтчетПоПродажам.Настройки;
    СкопироватьОтборыРекурсивно(НастройкиВарианта.Отбор, Настройки.Отбор);

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиВарианта, ДанныеРасшифровки);

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

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

    Процедура СкопироватьОтборыРекурсивно(Приемник, Источник)

    Для Каждого Элемент Из Источник.Элементы Цикл

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

    КонецЦикла;

    КонецПроцедуры
```
---
Хотел в цикле перебрать элементы как-нибудь. Можно обойти рекурсивно текущие отборы и добавить их в отборы варианта:
```1c
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

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

    НастройкиВарианта = СхемаКомпоновкиДанных.ВариантыНастроек.СводныйОтчетПоПродажам.Настройки;
    СкопироватьОтборыРекурсивно(НастройкиВарианта.Отбор, Настройки.Отбор);

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиВарианта, ДанныеРасшифровки);

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

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

    Процедура СкопироватьОтборыРекурсивно(Приемник, Источник)

    Для Каждого Элемент Из Источник.Элементы Цикл

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

    КонецЦикла;

    КонецПроцедуры
```
---
Спасибо. Решил что просто очистить Вариант.Отбор.Элементы и записать все из Настройки.Отбор - хорошая идея. Жаль сразу не додумался
---
А как можно периоды при формировании отчета так же передавать?
У меня есть 2 периода
1: с 01.01.2020 по текущий день 2020-го
2: с 01.01.2021 по текущий день 2021-го
Сделано чтобы каждый раз отчет подтягивал при открытии текущий день. А вот если пользователь изменил период то при формировании он соответственно не изменяется и формирует до текущего дня. Уже 2 дня мучаюсь)
---
Это Параметры СКД? Наверно, так же – обходить параметры в текущих настройках и заполнять их в настройках варианта.
---
Я, если честно не могу понять куда их в настройках варианта заполнять. В этом вся проблема собственно. Я сейчас нашел какую-то статью, надеюсь прочитаю, пойму
---
Попробуйте так:
```1c
    Для Каждого ПараметрДанных Из Настройки.ПараметрыДанных.Элементы Цикл
    Если ПараметрДанных.Использование Тогда
    НастройкиВарианта.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрДанных.Параметр, ПараметрДанных.Значение);
    КонецЕсли;
    КонецЦикла;
```
---
Для Каждого ПараметрДанных Из Настройки.ПараметрыДанных.Элементы Цикл
    Если ПараметрДанных.Использование Тогда
        НастройкиВарианта.ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрДанных.Параметр, ПараметрДанных.Значение);
    КонецЕсли;
КонецЦикла;

А как при открытии этой формы задать периоды? Когда делаю форму и в при открытии прописываю. Ломается кнопка настроек. Я уже совсем потерялся в этой задаче. Кручу, верчу и так и эдак и все никак)
---
А почему вообще возникла такая задача - программно подменять вариант отчета?
---
Есть менеджеры. Есть главные менеджеры.

Менеджер должен видеть отчет по такой структуре:

Организация --> Контрагент --> Номенклатура + отбор по текущему пользователю(текущему менеджеру)

Главный менеджер должен видеть отчет по немного иной структуре:

Организация --> Контрагент.ОтветственныйМенеджер ---> Контрагент ---> Номенклатура (Без отбора)

Только что нашел такой код для установки периода, сейчас пробую:

```1c
    Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт

    Настройки.События.ПриЗагрузкеПользовательскихНастроекНаСервере = Истина;

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

    Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД) Экспорт

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

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

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

Если знаете как можно избежать создания двух вариантов расскажите пожалуйста) У главных менеджеров если что, полные права
---
Ключ варианта вроде бы можно сразу переопределить в ОпределитьНастройкиФормы, еще до открытия стандартной формы отчета:
```1c
    Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт

    Если ЭтоГлавныйМенеджер() Тогда
    КлючВарианта = "ВариантДляГлавногоМенеджера";
    Иначе
    КлючВарианта = "ВариантДляМенеджера";
    КонецЕсли;

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

    Если ЭтоГлавныйМенеджер() Тогда
        КлючВарианта = "ВариантДляГлавногоМенеджера";
    Иначе
        КлючВарианта = "ВариантДляМенеджера";
    КонецЕсли;

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

Я в шоке. Столько гуглил и не мог этого найти! Я Ради этого такой бред писал с перекидыванием параметров. То в одном период не работал в другом варианте отборы не работали.Спасибо!
---
```1c
    //сохраняем настройки
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

    //выбираем вариант отчета
    Вариант = СхемаКомпоновкиДанных.ВариантыНастроек.СводныйОтчетПоПродажам;

    //загружаем настройки
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки );
```
---
Он и отборы и параметры и сортировки и все скопирует?
---
//сохраняем настройки
Настройки = КомпоновщикНастроек.ПолучитьНастройки();

//выбираем вариант отчета
Вариант = СхемаКомпоновкиДанных.ВариантыНастроек.СводныйОтчетПоПродажам;

//загружаем настройки
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки );

А где собственно мы указываем вариант отчета для настроек? В данном примере Вы просто выбрали настройки. В переменную записали вариант отчета. И полученные настройки обратно без изменений загрузили.
---
Если они в варианте описаны. А если вы хотите ещё пользовательские настройки, то их тоже сначала нужно сохранить, например:
 ПользовательскиеНастройки = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки;
---
Если они в варианте описаны.

В том то и дело, что они не описаны)
Нужно как-то сохранять отбор при выборе варианта.
---
А если вы хотите ещё пользовательские настройки

Пользовательские настройки - это настройки которые пользователь например сам установил - через Отбор в расширенных настройках отчета?
---
Которые на форме отчета
---
то что Вам и надо получается?
---
Я не уверен. Но из просто Отбора точно нужны)
---
Нужно из
Вариант.Настройки.Отбор.Элементы
передать всю структуру в
Настройки.Отбор.Элементы