ABC/XYZ классификация номенклатуры / ABC/XYZ классификация / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда
	
		Возврат;
	
	КонецЕсли;
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Классификация.РазделКлассификации КАК Склад,
	|	Классификация.Характеристика КАК Характеристика,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА Классификация.ТипПараметраКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыПараметровКлассификации.Выручка)
	|					И Классификация.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.ABC)
	|				ТОГДА Классификация.Класс
	|			ИНАЧЕ НЕОПРЕДЕЛЕНО
	|		КОНЕЦ) КАК ABCКлассВыручка,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА Классификация.ТипПараметраКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыПараметровКлассификации.Выручка)
	|					И Классификация.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.XYZ)
	|				ТОГДА Классификация.Класс
	|			ИНАЧЕ НЕОПРЕДЕЛЕНО
	|		КОНЕЦ) КАК XYZКлассВыручка,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА Классификация.ТипПараметраКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыПараметровКлассификации.ВаловаяПрибыль)
	|					И Классификация.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.ABC)
	|				ТОГДА Классификация.Класс
	|			ИНАЧЕ НЕОПРЕДЕЛЕНО
	|		КОНЕЦ) КАК ABCКлассВаловаяПрибыль,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА Классификация.ТипПараметраКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыПараметровКлассификации.ВаловаяПрибыль)
	|					И Классификация.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.XYZ)
	|				ТОГДА Классификация.Класс
	|			ИНАЧЕ НЕОПРЕДЕЛЕНО
	|		КОНЕЦ) КАК XYZКлассВаловаяПрибыль,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА Классификация.ТипПараметраКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыПараметровКлассификации.Количество)
	|					И Классификация.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.ABC)
	|				ТОГДА Классификация.Класс
	|			ИНАЧЕ НЕОПРЕДЕЛЕНО
	|		КОНЕЦ) КАК ABCКлассКоличество,
	|	МАКСИМУМ(ВЫБОР
	|			КОГДА Классификация.ТипПараметраКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыПараметровКлассификации.Количество)
	|					И Классификация.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.XYZ)
	|				ТОГДА Классификация.Класс
	|			ИНАЧЕ НЕОПРЕДЕЛЕНО
	|		КОНЕЦ) КАК XYZКлассКоличество
	|ИЗ
	|	РегистрСведений.ABCXYZКлассификацияНоменклатуры.СрезПоследних(
	|			,
	|			Номенклатура = &Номенклатура
	|				И (РазделКлассификации = НЕОПРЕДЕЛЕНО
	|					ИЛИ ТИПЗНАЧЕНИЯ(РазделКлассификации) = ТИП(Справочник.Склады)
	|						И РазделКлассификации <> ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))) КАК Классификация
	|
	|СГРУППИРОВАТЬ ПО
	|	Классификация.РазделКлассификации,
	|	Классификация.Характеристика
	|
	|УПОРЯДОЧИТЬ ПО
	|	Склад,
	|	Характеристика
	|ИТОГИ ПО
	|	Склад");
	
	Запрос.УстановитьПараметр("Номенклатура", Параметры.Номенклатура);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если НЕ РезультатЗапроса.Пустой() Тогда
		
		ABCXYZКлассификацияСклады = ABCXYZКлассификация.ПолучитьЭлементы();
		
		ВыборкаСклад = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Пока ВыборкаСклад.Следующий() Цикл
			
			ABCXYZКлассификацияСклад = ABCXYZКлассификацияСклады.Добавить();
			ABCXYZКлассификацияСклад.Склад = ВыборкаСклад.Склад;
			
			ABCXYZКлассификацияХарактеристики = ABCXYZКлассификацияСклад.ПолучитьЭлементы();
			
			ВыборкаХарактеристика = ВыборкаСклад.Выбрать();
			
			ДобавлятьХарактеристики = Истина;
			
			Пока ВыборкаХарактеристика.Следующий() Цикл
				
				Если ВыборкаХарактеристика.Количество() = 1 И ВыборкаХарактеристика.Характеристика.Пустая() Тогда
					
					ДобавлятьХарактеристики = Ложь;
					
				КонецЕсли;
				
				Если ДобавлятьХарактеристики Тогда
					
					ABCXYZКлассификацияХарактеристика = ABCXYZКлассификацияХарактеристики.Добавить();
					ABCXYZКлассификацияХарактеристика.Склад = ВыборкаХарактеристика.Характеристика;
					
					ABCXYZКлассификацияКласс = ABCXYZКлассификацияХарактеристика;
					
				Иначе
					
					ABCXYZКлассификацияКласс = ABCXYZКлассификацияСклад;
					
				КонецЕсли;
				
				ABCXYZКлассификацияКласс.Выручка = ПредставлениеКласса(ВыборкаХарактеристика.ABCКлассВыручка, ВыборкаХарактеристика.XYZКлассВыручка);
				ABCXYZКлассификацияКласс.ВаловаяПрибыль = ПредставлениеКласса(ВыборкаХарактеристика.ABCКлассВаловаяПрибыль, ВыборкаХарактеристика.XYZКлассВаловаяПрибыль);
				ABCXYZКлассификацияКласс.Количество = ПредставлениеКласса(ВыборкаХарактеристика.ABCКлассКоличество, ВыборкаХарактеристика.XYZКлассКоличество);
				
			КонецЦикла;
			
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ABCXYZКлассификацияСклад.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ABCXYZКлассификация.Склад");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'По всем складам'"));

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

#Область Прочее

&НаСервере
Функция ПредставлениеКласса(ABCКласс, XYZКласс)
	
	Результат = "";
	
	Если ABCКласс = Перечисления.ABCКлассификация.AКласс Тогда
		
		Результат = "A";
		
	ИначеЕсли ABCКласс = Перечисления.ABCКлассификация.BКласс Тогда
		
		Результат = "B";
		
	ИначеЕсли ABCКласс = Перечисления.ABCКлассификация.CКласс ИЛИ ABCКласс = Перечисления.ABCКлассификация.НеКлассифицирован Тогда
		
		Результат = "C";
		
	КонецЕсли;
	
	Если XYZКласс = Перечисления.XYZКлассификация.XКласс Тогда
		
		Результат = Результат + "X";
		
	ИначеЕсли XYZКласс = Перечисления.XYZКлассификация.YКласс Тогда
		
		Результат = Результат + "Y";
		
	ИначеЕсли XYZКласс = Перечисления.XYZКлассификация.ZКласс ИЛИ XYZКласс = Перечисления.XYZКлассификация.НеКлассифицирован Тогда
		
		Результат = Результат + "Z";
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

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

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