ABC/XYZ - распределение клиентов / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныйПрограммныйИнтерфейс

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

// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы.
//
// Параметры:
//   ЭтаФорма             - ФормаКлиентскогоПриложения - Форма отчета.
//   Отказ                - Булево - передается из параметров обработчика "как есть".
//   СтандартнаяОбработка - Булево - передается из параметров обработчика "как есть".
//
// См. также:
//   "ФормаКлиентскогоПриложения.ПриСозданииНаСервере" в синтакс-помощнике.
//
Процедура ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт
	Параметры = ЭтаФорма.Параметры;
	
	КомпоновщикНастроекФормы = ЭтаФорма.Отчет.КомпоновщикНастроек;
	
	Если НЕ (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка = Неопределено) Тогда
		ПараметрыРасшифровки = Параметры.Расшифровка;
		ПрименяемыеНастройки = КомпоновщикНастроекФормы.ФиксированныеНастройки;
		
		Если ТипЗнч(ПараметрыРасшифровки) = Тип("ОписаниеОбработкиРасшифровкиКомпоновкиДанных") Тогда
			НастройкиСКД  = ПолучитьИзВременногоХранилища(ПараметрыРасшифровки.Данные).Настройки;
			ТекущийПериод = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(НастройкиСКД, "ТекущийПериод").Значение;
			ТипПараметраКлассификации = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(НастройкиСКД, "ТипПараметраКлассификации").Значение;
		Иначе
			// Установить отбор
			ОтборРасшифровки = ПрименяемыеНастройки.Отбор;
			Если ПараметрыРасшифровки.Свойство("Вопросы") Тогда
				Поле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Классификация.ПустаяСсылка());
			Иначе
				Для Каждого Элемент Из ПараметрыРасшифровки.Отбор Цикл
					СоздатьЭлементОтбора(ОтборРасшифровки, 
						Новый ПолеКомпоновкиДанных(Элемент.Ключ), 
						Элемент.Значение);
				КонецЦикла;
			КонецЕсли;
			ПараметрыРасшифровки.Вставить("ПрименяемыеНастройки", ПрименяемыеНастройки);
			
			ТекущийПериод             = ПараметрыРасшифровки.ТекущийПериод;
			ТипПараметраКлассификации = ПараметрыРасшифровки.ТипПараметраКлассификации;
		КонецЕсли;
		
		// Установить параметры данных
		КомпоновкаДанныхКлиентСервер.УстановитьПараметр(ПрименяемыеНастройки, "ТекущийПериод", ТекущийПериод);
		КомпоновкаДанныхКлиентСервер.УстановитьПараметр(ПрименяемыеНастройки, "ТипПараметраКлассификации", ТипПараметраКлассификации);
		
	КонецЕсли;
КонецПроцедуры

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

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

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

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

#КонецОбласти

#КонецЕсли

Связанные материалы