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