#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныйПрограммныйИнтерфейс
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
Настройки.События.ПриСозданииНаСервере = Истина;
Настройки.События.ПриЗагрузкеПользовательскихНастроекНаСервере = Истина;
КонецПроцедуры
Процедура ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт
Параметры = ЭтаФорма.Параметры;
КомпоновщикНастроекФормы = ЭтаФорма.Отчет.КомпоновщикНастроек;
Если НЕ (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка = Неопределено) Тогда
ПараметрыРасшифровки = Параметры.Расшифровка;
ПрименяемыеНастройки = КомпоновщикНастроекФормы.ФиксированныеНастройки;
Если ТипЗнч(ПараметрыРасшифровки) = Тип("ОписаниеОбработкиРасшифровкиКомпоновкиДанных") Тогда
НастройкиСКД = ПолучитьИзВременногоХранилища(ПараметрыРасшифровки.Данные).Настройки;
ТекущийПериод = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(НастройкиСКД, "ТекущийПериод").Значение;
ТипПараметраКлассификации = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(НастройкиСКД, "ТипПараметраКлассификации").Значение;
Иначе
ОтборРасшифровки = ПрименяемыеНастройки.Отбор;
Если ПараметрыРасшифровки.Свойство("Вопросы") Тогда
ПолеXYZ = Новый ПолеКомпоновкиДанных("КлассXYZ");
ПолеABC = Новый ПолеКомпоновкиДанных("КлассABC");
ГруппаОтбораНе = СоздатьГруппуОтбора(ОтборРасшифровки, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе);
ГруппаОтбораИли = СоздатьГруппуОтбора(ГруппаОтбораНе, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли);
ГруппаОтбораИ = СоздатьГруппуОтбора(ГруппаОтбораИли, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
СоздатьЭлементОтбора(ГруппаОтбораИ, ПолеABC, Перечисления.ABCКлассификация.AКласс);
ГруппаОтбораИлиXYZ = СоздатьГруппуОтбора(ГруппаОтбораИ, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли);
СоздатьЭлементОтбора(ГруппаОтбораИлиXYZ, ПолеXYZ, Перечисления.XYZКлассификация.XКласс);
СоздатьЭлементОтбора(ГруппаОтбораИлиXYZ, ПолеXYZ, Перечисления.XYZКлассификация.ZКласс);
ГруппаОтбораИ = СоздатьГруппуОтбора(ГруппаОтбораИли, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
СоздатьЭлементОтбора(ГруппаОтбораИ, ПолеABC, Перечисления.ABCКлассификация.CКласс);
СоздатьЭлементОтбора(ГруппаОтбораИ, ПолеXYZ, Перечисления.XYZКлассификация.XКласс);
СоздатьЭлементОтбора(ГруппаОтбораИли, ПолеXYZ, Перечисления.XYZКлассификация.НеКлассифицирован);
СоздатьЭлементОтбора(ГруппаОтбораИли, ПолеXYZ, Перечисления.XYZКлассификация.ПустаяСсылка());
Иначе
Для Каждого Элемент Из ПараметрыРасшифровки.Отбор Цикл
СоздатьЭлементОтбора(ОтборРасшифровки,
Новый ПолеКомпоновкиДанных(Элемент.Ключ),
Элемент.Значение);
КонецЦикла;
КонецЕсли;
ПараметрыРасшифровки.Вставить("ПрименяемыеНастройки", ПрименяемыеНастройки);
ТекущийПериод = ПараметрыРасшифровки.ТекущийПериод;
ТипПараметраКлассификации = ПараметрыРасшифровки.ТипПараметраКлассификации;
КонецЕсли;
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(ПрименяемыеНастройки, "ТекущийПериод", ТекущийПериод);
КомпоновкаДанныхКлиентСервер.УстановитьПараметр(ПрименяемыеНастройки, "ТипПараметраКлассификации", ТипПараметраКлассификации);
КонецЕсли;
КонецПроцедуры
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(ЭтаФорма, НовыеНастройкиКД) Экспорт
Отчет = ЭтаФорма.Отчет;
Параметры = ЭтаФорма.Параметры;
Если Не Параметры.Свойство("Расшифровка")
Или ТипЗнч(Параметры.Расшифровка) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
ПараметрыРасшифровки = Параметры.Расшифровка;
Настройки = Отчет.КомпоновщикНастроек.Настройки;
Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", ПараметрыРасшифровки.Заголовок);
Выбор = Настройки.Выбор.Элементы;
ПолеТипПараметра = Новый ПолеКомпоновкиДанных("ЗначениеПараметраКлассификации");
Для Каждого Элемент Из Выбор Цикл
Если Элемент.Поле = ПолеТипПараметра Тогда
Элемент.Заголовок = ПараметрыРасшифровки.ТипПараметраКлассификации;
КонецЕсли;
КонецЦикла;
Для каждого Параметр Из Настройки.ПараметрыДанных.Элементы Цикл
Параметр.Значение = Неопределено;
Параметр.Использование = ложь;
КонецЦикла;
Настройки.Отбор.Элементы.Очистить();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция СоздатьГруппуОтбора(Родитель, ТипГруппы)
ГруппаОтбора = Родитель.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппы;
ГруппаОтбора.Использование = Истина;
Возврат ГруппаОтбора;
КонецФункции
Процедура СоздатьЭлементОтбора(Родитель, Поле, Значение)
ЭлементОтбора = Родитель.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Поле;
ЭлементОтбора.ПравоеЗначение = Значение;
ЭлементОтбора.Использование = Истина;
КонецПроцедуры
#КонецОбласти
#КонецЕсли