#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Классификация.РазделКлассификации КАК Склад,
| Классификация.Характеристика КАК Характеристика,
| МАКСИМУМ(ВЫБОР
| КОГДА Классификация.ТипПараметраКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыПараметровКлассификации.Выручка)
| И Классификация.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.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";
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецОбласти