Всем привет!

Пользователь запускает отчет. жмет "Сформировать", после чего мне нужно получить программно его текущий вариант отчета, где(в модуле объекта, на форме отчета) и как можно это сделать?
---
посмотрите в справке про КлючТекущегоВарианта.
---
Да. вот так получилось:

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

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

    Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("КлючВарианта", ЭтотОбъект.КлючТекущегоВарианта);

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

    КонецПроцедуры
```
---
Конфигурация на БСП. Добавил эту процедуру в модуль объекта отчета, но останова в ней нет ни при формировании, ни при открытии формы отчета.
---
Либо версия БСП сильно старая, либо отладка не работает.
---
2.2.2.37. Только если я просто добавил эту функцию в модуль отчета - откуда она должна вызываться? И параметры брать. Поэтому, скорее всего, отладчик туда и не заходит.
---
2.2.2.37. Видимо, действительно версия старая. Процедуру вызывает сама подсистема отчетов при открытии отчета и перед его выполнением. Также есть возможность "подписаться" на некоторые события типовой Формы отчета.
---
В общем, обобщая всё, сделал рабочий код, открывается с сохраненными вариантами настроек

```1c
    &НаКлиенте
    // Путь = "D:\ВашОтчет.erf"
    Процедура КомандаОткрытьВнешнийОтчет(Путь)

    ОписаниеОповещения = Новый ОписаниеОповещения("ПоместитьФайлВХранилищеЗавершениеОтчет", ЭтотОбъект);
    НачатьПомещениеФайла(ОписаниеОповещения, , Путь, Ложь);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПоместитьФайлВХранилищеЗавершениеОтчет(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

    РезЗапроса = ПодключитьВнешнийОтчетНаСервереОтчет(Адрес);
    ИмяОтчета = РезЗапроса.ИмяОтчета;
    КлючВарианта = РезЗапроса.ВариантОтчета;
    ПараметрыОткрытия = Новый Структура("КлючВарианта", КлючВарианта);
    Уникальность ="ВнешнийОтчет." + ИмяОтчета;
    ОткрытьФорму("ВнешнийОтчет." + ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность)

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

    &НаСервере
    Функция ПодключитьВнешнийОтчетНаСервереОтчет(АдресХранилища)

    результат = Новый Структура;
    ИмяОтчета = ВнешниеОтчеты.Подключить(АдресХранилища);
    ВариантыОтчета = ХранилищеВариантовОтчетов.ПолучитьСписок("Отчет."+ИмяОтчета);
    КлючОбъекта = "ВнешнийОтчет."+ИмяОтчета+"/КлючТекущегоВарианта";
    ВариантОтчета = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, ");
    Мт = ВариантыОтчета.НайтиПоЗначению(ВариантОтчета);
    Если МТ <> Неопределено Тогда
    ВариантОтчета = МТ.Представление;
    КонецЕсли;
    результат.Вставить("ИмяОтчета",ИмяОтчета);
    результат.Вставить("ВариантОтчета",ВариантОтчета);

    Возврат Результат;
    КонецФункции

    &НаСервереБезКонтекста
    Функция ПолучитьПользовательскиеНастройки(ВнешнийОтчетОбработкаДляОткрытияСсылка);

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