#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ПолноеИмя = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя();
ИспользоватьКлассификациюПоВыручке = Константы.ИспользоватьABCXYZКлассификациюПартнеровПоВыручке.Получить();
ИспользоватьКлассификациюПоВаловойПрибыли = Константы.ИспользоватьABCXYZКлассификациюПартнеровПоВаловойПрибыли.Получить();
ИспользоватьКлассификациюПоКоличествуПродаж = Константы.ИспользоватьABCXYZКлассификациюПартнеровПоКоличествуПродаж.Получить();
ПериодABCКлассификации = Константы.ПериодABCКлассификацииПартнеров.Получить();
КоличествоПериодовABCКлассификации = Константы.КоличествоПериодовABCКлассификацииПартнеров.Получить();
ПериодXYZКлассификации = Константы.ПериодXYZКлассификацииПартнеров.Получить();
КоличествоПериодовXYZКлассификации = Константы.КоличествоПериодовXYZКлассификацииПартнеров.Получить();
ПодпериодXYZКлассификации = Константы.ПодпериодXYZКлассификацииПартнеров.Получить();
ЦветПоясняющийТекст = ЦветаСтиля.ПоясняющийТекст;
ЦветПоясняющийОшибкуТекст = ЦветаСтиля.ПоясняющийОшибкуТекст;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Элементы.СтраницыВозможности.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
ОбновитьОтображениеФормы();
ОбновитьОписания();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ДекорацияПолныеЧастоИспользуемыеВозможностиНажатие(Элемент)
ПолныеВозможности = НЕ ПолныеВозможности;
ОбновитьОтображениеФормы();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ВыполнитьABCXYZКлассификациюЧастоИспользуемыеВозможности(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.Классификация.КлассификацияКлиентов.Команда.ВыполнитьABCXYZКлассификациюЧастоИспользуемыеВозможности");
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполняется ABC/XYZ классификация...'"), БиблиотекаКартинок.Информация32);
ВыполнитьABCXYZКлассификациюНаСервере();
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполнена ABC/XYZ классификация!'"), БиблиотекаКартинок.Информация32);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьABCКлассификациюПолныеВозможности(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.Классификация.КлассификацияКлиентов.Команда.ВыполнитьABCКлассификациюПолныеВозможности");
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполняется ABC классификация...'"), БиблиотекаКартинок.Информация32);
ВыполнитьABCКлассификациюНаСервере();
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполнена ABC классификация!'"), БиблиотекаКартинок.Информация32);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьXYZКлассификациюПолныеВозможности(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.Классификация.КлассификацияКлиентов.Команда.ВыполнитьXYZКлассификациюПолныеВозможности");
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполняется XYZ классификация...'"), БиблиотекаКартинок.Информация32);
ВыполнитьXYZКлассификациюНаСервере();
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполнена XYZ классификация!'"), БиблиотекаКартинок.Информация32);
КонецПроцедуры
&НаКлиенте
Процедура НастройкаABCXYZКлассификацияПолныеВозможности(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.Классификация.КлассификацияКлиентов.Команда.НастройкаABCXYZКлассификацияПолныеВозможности");
КодВозврата = Неопределено;
ОткрытьФорму(ПолноеИмя + ".Форма.НастройкаПараметровКлассификацииКлиентов",,,,,, Новый ОписаниеОповещения("НастройкаABCXYZКлассификацияПолныеВозможностиЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура НастройкаABCXYZКлассификацияПолныеВозможностиЗавершение(Результат, ДополнительныеПараметры) Экспорт
КодВозврата = Результат;
Если ТипЗнч(КодВозврата) = Тип("Структура") Тогда
ИспользоватьКлассификациюПоВыручке = КодВозврата.ИспользоватьКлассификациюПоВыручке;
ИспользоватьКлассификациюПоВаловойПрибыли = КодВозврата.ИспользоватьКлассификациюПоВаловойПрибыли;
ИспользоватьКлассификациюПоКоличествуПродаж = КодВозврата.ИспользоватьКлассификациюПоКоличествуПродаж;
ПериодABCКлассификации = КодВозврата.ПериодABCКлассификации;
КоличествоПериодовABCКлассификации = КодВозврата.КоличествоПериодовABCКлассификации;
ПериодXYZКлассификации = КодВозврата.ПериодXYZКлассификации;
КоличествоПериодовXYZКлассификации = КодВозврата.КоличествоПериодовXYZКлассификации;
ПодпериодXYZКлассификации = КодВозврата.ПодпериодXYZКлассификации;
ОбновитьОтображениеФормы();
ОбновитьОписания();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьABCКлассификациюПолныеВозможности(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.Классификация.КлассификацияКлиентов.Команда.ОчиститьABCКлассификациюПолныеВозможности");
КодВозврата = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("ОчиститьABCКлассификациюПолныеВозможностиЗавершение", ЭтотОбъект), НСтр("ru = 'Вся информация об ABC классификации клиентов будет очищена. Продолжить?'"), РежимДиалогаВопрос.ОКОтмена);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьABCКлассификациюПолныеВозможностиЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
КодВозврата = РезультатВопроса;
Если КодВозврата = КодВозвратаДиалога.ОК Тогда
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполняется очистка ABC классификации...'"), БиблиотекаКартинок.Информация32);
ОчиститьABCКлассификациюНаСервере();
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполнена очистка ABC классификации!'"), БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьXYZКлассификациюПолныеВозможности(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.Классификация.КлассификацияКлиентов.Команда.ОчиститьXYZКлассификациюПолныеВозможности");
КодВозврата = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("ОчиститьXYZКлассификациюПолныеВозможностиЗавершение", ЭтотОбъект), НСтр("ru = 'Вся информация об XYZ классификации клиентов будет очищена. Продолжить?'"), РежимДиалогаВопрос.ОКОтмена);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьXYZКлассификациюПолныеВозможностиЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
КодВозврата = РезультатВопроса;
Если КодВозврата = КодВозвратаДиалога.ОК Тогда
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполняется очистка XYZ классификации...'"), БиблиотекаКартинок.Информация32);
ОчиститьXYZКлассификациюНаСервере();
ПоказатьОповещениеПользователя(НСтр("ru = 'Классификация клиентов'"),, НСтр("ru = 'Выполнена очистка XYZ классификации!'"), БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Прочее
&НаКлиенте
Процедура ОбновитьОписания()
ABCОписаниеЧастоИспользуемыеВозможности = СтрШаблон(НСтр("ru = 'ABC классификация по данным за период: %1.'"),
ОбеспечениеКлиентСервер.ОписаниеНастройки(ПериодABCКлассификации, КоличествоПериодовABCКлассификации));
XYZОписаниеЧастоИспользуемыеВозможности = СтрШаблон(НСтр("ru = 'XYZ классификация по данным за период: %1.'"),
ОбеспечениеКлиентСервер.ОписаниеНастройки(ПериодXYZКлассификации, КоличествоПериодовXYZКлассификации, ПодпериодXYZКлассификации));
ABCОписаниеПолныеВозможности = СтрШаблон(НСтр("ru = 'ABC классификация за все периоды по данным за период: %1.'"),
ОбеспечениеКлиентСервер.ОписаниеНастройки(ПериодABCКлассификации, КоличествоПериодовABCКлассификации));
XYZОписаниеПолныеВозможности = СтрШаблон(НСтр("ru = 'XYZ классификация за все периоды по данным за период: %1.'"),
ОбеспечениеКлиентСервер.ОписаниеНастройки(ПериодXYZКлассификации, КоличествоПериодовXYZКлассификации, ПодпериодXYZКлассификации));
Если ИспользоватьКлассификациюПоВыручке
ИЛИ ИспользоватьКлассификациюПоВаловойПрибыли
ИЛИ ИспользоватьКлассификациюПоКоличествуПродаж Тогда
Элементы.ДекорацияABCXYZКлассификацияОписаниеЧастоИспользуемыеВозможности.Заголовок =
ABCОписаниеЧастоИспользуемыеВозможности + " " + XYZОписаниеЧастоИспользуемыеВозможности;
Элементы.ДекорацияABCXYZКлассификацияОписаниеЧастоИспользуемыеВозможности.ЦветТекста = ЦветПоясняющийТекст;
Иначе
Элементы.ДекорацияABCXYZКлассификацияОписаниеЧастоИспользуемыеВозможности.Заголовок =
НСтр("ru = 'Перейдите к полным возможностям и в настройке установите параметры, по которым необходимо выполнять классификацию.'");
Элементы.ДекорацияABCXYZКлассификацияОписаниеЧастоИспользуемыеВозможности.ЦветТекста = ЦветПоясняющийОшибкуТекст;
КонецЕсли;
Если ИспользоватьКлассификациюПоВыручке
ИЛИ ИспользоватьКлассификациюПоВаловойПрибыли
ИЛИ ИспользоватьКлассификациюПоКоличествуПродаж Тогда
Элементы.ДекорацияABCКлассификацияОписаниеПолныеВозможности.Заголовок = ABCОписаниеПолныеВозможности;
Элементы.ДекорацияXYZКлассификацияОписаниеПолныеВозможности.Заголовок = XYZОписаниеПолныеВозможности;
Элементы.ДекорацияABCКлассификацияОписаниеПолныеВозможности.ЦветТекста = ЦветПоясняющийТекст;
Элементы.ДекорацияXYZКлассификацияОписаниеПолныеВозможности.ЦветТекста = ЦветПоясняющийТекст;
Иначе
Элементы.ДекорацияABCКлассификацияОписаниеПолныеВозможности.Заголовок = НСтр("ru = 'Перейдите к настройке и установите параметры, по которым необходимо выполнять классификацию.'");
Элементы.ДекорацияXYZКлассификацияОписаниеПолныеВозможности.Заголовок = НСтр("ru = 'Перейдите к настройке и установите параметры, по которым необходимо выполнять классификацию.'");
Элементы.ДекорацияABCКлассификацияОписаниеПолныеВозможности.ЦветТекста = ЦветПоясняющийОшибкуТекст;
Элементы.ДекорацияXYZКлассификацияОписаниеПолныеВозможности.ЦветТекста = ЦветПоясняющийОшибкуТекст;
КонецЕсли;
Элементы.ДекорацияОчиститьABCКлассификацияОписаниеПолныеВозможности.Заголовок = НСтр("ru = 'Очистить ABC классификацию за все периоды.'");
Элементы.ДекорацияОчиститьXYZКлассификацияОписаниеПолныеВозможности.Заголовок = НСтр("ru = 'Очистить XYZ классификацию за все периоды.'");
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьОтображениеФормы()
Если ПолныеВозможности Тогда
Элементы.СтраницыВозможности.ТекущаяСтраница = Элементы.СтраницаПолныеВозможности;
Заголовок = НСтр("ru = 'Классификация клиентов - полные возможности'");
Элементы.ДекорацияПолныеЧастоИспользуемыеВозможности.Заголовок = НСтр("ru = 'Часто используемые возможности'");
Элементы.ВыполнитьABCКлассификациюПолныеВозможности.Доступность = ИспользоватьКлассификациюПоВыручке
ИЛИ ИспользоватьКлассификациюПоВаловойПрибыли
ИЛИ ИспользоватьКлассификациюПоКоличествуПродаж;
Элементы.ВыполнитьXYZКлассификациюПолныеВозможности.Доступность = ИспользоватьКлассификациюПоВыручке
ИЛИ ИспользоватьКлассификациюПоВаловойПрибыли
ИЛИ ИспользоватьКлассификациюПоКоличествуПродаж;
Иначе
Элементы.СтраницыВозможности.ТекущаяСтраница = Элементы.СтраницаЧастоИспользуемыеВозможности;
Заголовок = НСтр("ru = 'Классификация клиентов - часто используемые возможности'");
Элементы.ДекорацияПолныеЧастоИспользуемыеВозможности.Заголовок = НСтр("ru = 'Полные возможности'");
Элементы.ВыполнитьABCXYZКлассификациюЧастоИспользуемыеВозможности.Доступность = ИспользоватьКлассификациюПоВыручке
ИЛИ ИспользоватьКлассификациюПоВаловойПрибыли
ИЛИ ИспользоватьКлассификациюПоКоличествуПродаж;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьABCXYZКлассификациюНаСервере()
Классификация.ВыполнитьABCКлассификациюПартнеров();
Классификация.ВыполнитьXYZКлассификациюПартнеров();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьABCКлассификациюНаСервере()
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| ВыручкаИСебестоимостьПродаж.Период КАК Период
|ИЗ
| РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ВыручкаИСебестоимостьПродаж
|
|УПОРЯДОЧИТЬ ПО
| Период");
РезультатЗапроса = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ДатаКлассификации = ОбщегоНазначенияУТКлиентСервер.РасширенныйПериод(Выборка.Период, ПериодABCКлассификации, 0).ДатаОкончания + 1;
МаксимальнаяДатаКлассификации = ОбщегоНазначенияУТКлиентСервер.РасширенныйПериод(ТекущаяДатаСеанса(), ПериодABCКлассификации, -1).ДатаОкончания + 1;
Пока ДатаКлассификации <= МаксимальнаяДатаКлассификации Цикл
Классификация.ВыполнитьABCКлассификациюПартнеров(ДатаКлассификации);
ДатаКлассификации = ОбщегоНазначенияУТКлиентСервер.РассчитатьДатуОкончанияПериода(ДатаКлассификации, ПериодABCКлассификации, 1) + 1;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьXYZКлассификациюНаСервере()
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| ВыручкаИСебестоимостьПродаж.Период КАК Период
|ИЗ
| РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ВыручкаИСебестоимостьПродаж
|
|УПОРЯДОЧИТЬ ПО
| Период");
РезультатЗапроса = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
Если РезультатЗапроса.Пустой() Тогда
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ДатаКлассификации = ОбщегоНазначенияУТКлиентСервер.РасширенныйПериод(Выборка.Период, ПериодXYZКлассификации, 0).ДатаОкончания + 1;
МаксимальнаяДатаКлассификации = ОбщегоНазначенияУТКлиентСервер.РасширенныйПериод(ТекущаяДатаСеанса(), ПериодXYZКлассификации, -1).ДатаОкончания + 1;
Пока ДатаКлассификации <= МаксимальнаяДатаКлассификации Цикл
Классификация.ВыполнитьXYZКлассификациюПартнеров(ДатаКлассификации);
ДатаКлассификации = ОбщегоНазначенияУТКлиентСервер.РассчитатьДатуОкончанияПериода(ДатаКлассификации, ПериодXYZКлассификации, 1) + 1;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОчиститьABCКлассификациюНаСервере()
РегистрыСведений.ABCXYZКлассификацияКлиентов.ОчиститьABCКлассификацию();
КонецПроцедуры
&НаСервере
Процедура ОчиститьXYZКлассификациюНаСервере()
РегистрыСведений.ABCXYZКлассификацияКлиентов.ОчиститьXYZКлассификацию();
КонецПроцедуры
#КонецОбласти
#КонецОбласти