#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Список = Элементы.ТипПараметраКлассификации.СписокВыбора;
Если ПолучитьФункциональнуюОпцию("ИспользоватьABCXYZКлассификациюПартнеровПоВаловойПрибыли") Тогда
Список.Добавить(Перечисления.ТипыПараметровКлассификации.ВаловаяПрибыль);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьABCXYZКлассификациюПартнеровПоВыручке") Тогда
Список.Добавить(Перечисления.ТипыПараметровКлассификации.Выручка);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьABCXYZКлассификациюПартнеровПоКоличествуПродаж") Тогда
Список.Добавить(Перечисления.ТипыПараметровКлассификации.Количество);
КонецЕсли;
Если Список.Количество() = 0 Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
"ru = 'Не включено использование ни одного типа ABC и XYZ классификации партнеров.'"));
Отказ = Истина;
Возврат;
КонецЕсли;
ТипПараметраКлассификации = Список.Получить(0).Значение;
Элементы.ТипПараметраКлассификации.ТолькоПросмотр = (Список.Количество() <= 1);
АнализНаДату = ТекущаяДатаСеанса();
ТекстОшибки = "";
УстановитьПериоды(ТекстОшибки);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если ДатаПредыдущегоСреза >= ДатаТекущегоСреза Тогда
ТекстСообщения = НСтр("ru='Дата предыдущего среза должна быть меньше даты текущего среза.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"ДатаПредыдущегоСреза");
Отказ = Истина;
Иначе
Если Не ЗначениеЗаполнено(ДатаСреза(ДатаПредыдущегоСреза)) Тогда
ТекстСообщения = НСтр("ru='Среза на %Дата% не существует.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Дата%", Формат(ДатаПредыдущегоСреза, "ДЛФ=ДД"));
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"ДатаПредыдущегоСреза");
Отказ = Истина;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТипПараметраКлассификации) Тогда
Отказ = Истина;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Необходимо указать тип параметра классификации'"),,"ТипПараметраКлассификации");
КонецЕсли;
Если Не ЗначениеЗаполнено(ДатаТекущегоСреза) Тогда
Отказ = Истина;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Не заполнена дата текущего среза. Данное значение заполняется автоматически при выборе даты анализа, ближайшими значением периода расчета ABC и XYZ классификации.'"),,"ДатаТекущегоСреза");
КонецЕсли;
Если Не ЗначениеЗаполнено(ДатаПредыдущегоСреза) Тогда
Отказ = Истина;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru='Не заполнена дата предыдущего среза.'"),,"ДатаПредыдущегоСреза");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ДатаПредыдущегоСрезаПриИзменении(Элемент)
ОчиститьСообщения();
ПроверитьЗаполнение();
КонецПроцедуры
&НаКлиенте
Процедура АнализНаДатуПриИзменении(Элемент)
ТекстОшибки = "";
УстановитьПериоды(ТекстОшибки);
Если ТекстОшибки <> "" Тогда
ОчиститьСообщения();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,,"АнализНаДату");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Расшифровка.Вставить("ТекущийПериод", ДатаТекущегоСреза);
Расшифровка.Вставить("ПрошлыйПериод", ДатаПредыдущегоСреза);
Расшифровка.Вставить("ТипПараметраКлассификации", ТипПараметраКлассификации);
ПользовательскиеНастройки = ПолучитьПользовательскиеНастройкиОтчетаРасшифровки(Расшифровка.ИмяРасшифровки);
ОткрытьФорму(
Расшифровка.ИмяРасшифровки,
Новый Структура("СформироватьПриОткрытии, Расшифровка, ПользовательскиеНастройки", Истина, Расшифровка, ПользовательскиеНастройки),
ЭтаФорма, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура СформироватьОтчет(Команда)
ОчиститьСообщения();
Если ПроверитьЗаполнение() Тогда
ВывестиМатрицы();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервереБезКонтекста
Функция ПолучитьПользовательскиеНастройкиОтчетаРасшифровки(ИмяФормыОтчета)
Если ИмяФормыОтчета = "Отчет.ИзменениеABCXYZРаспределенияКлиентов.Форма" Тогда
Схема = Отчеты.ИзменениеABCXYZРаспределенияКлиентов.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Иначе
Схема = Отчеты.ABCXYZРаспределениеКлиентов.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КонецЕсли;
Источник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Источник);
ПользовательскиеНастройки = Компоновщик.ПользовательскиеНастройки;
Возврат ПользовательскиеНастройки;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьИмяПараметра(ЗначениеКласса)
Если ЗначениеКласса = Перечисления.ABCКлассификация.AКласс Тогда
ИмяПараметра = "A";
ИначеЕсли ЗначениеКласса = Перечисления.ABCКлассификация.BКласс Тогда
ИмяПараметра = "B";
ИначеЕсли ЗначениеКласса = Перечисления.ABCКлассификация.CКласс Тогда
ИмяПараметра = "C";
ИначеЕсли ЗначениеКласса = Перечисления.ABCКлассификация.НеКлассифицирован Тогда
ИмяПараметра = "_";
ИначеЕсли ЗначениеКласса = Перечисления.ABCКлассификация.ПустаяСсылка() Тогда
ИмяПараметра = "P";
ИначеЕсли ЗначениеКласса = Перечисления.XYZКлассификация.XКласс Тогда
ИмяПараметра = "X";
ИначеЕсли ЗначениеКласса = Перечисления.XYZКлассификация.YКласс Тогда
ИмяПараметра = "Y";
ИначеЕсли ЗначениеКласса = Перечисления.XYZКлассификация.ZКласс Тогда
ИмяПараметра = "Z";
ИначеЕсли ЗначениеКласса = Перечисления.XYZКлассификация.НеКлассифицирован Тогда
ИмяПараметра = "L";
ИначеЕсли ЗначениеКласса = Перечисления.XYZКлассификация.ПустаяСсылка() Тогда
ИмяПараметра = "P";
КонецЕсли;
Возврат ИмяПараметра;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьОписаниеКласса(ЗначениеКласса)
Если ЗначениеКласса = Перечисления.ABCКлассификация.ПустаяСсылка() Тогда
Возврат НСтр("ru='потенциальный клиент(ABC)'");
ИначеЕсли ЗначениеКласса = Перечисления.ABCКлассификация.НеКлассифицирован Тогда
Возврат НСтр("ru='потерянный клиент(ABC)'");
ИначеЕсли ЗначениеКласса = Перечисления.XYZКлассификация.ПустаяСсылка() Тогда
Возврат НСтр("ru='потенциальный клиент(XYZ)'");
ИначеЕсли ЗначениеКласса = Перечисления.XYZКлассификация.НеКлассифицирован Тогда
Возврат НСтр("ru='потерянный клиент(XYZ)'");
Иначе
Возврат Строка(ЗначениеКласса);
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Процедура ЗаполнитьПараметры(Параметр1, Параметр2, КоличествоКлиентов, Область)
ТипПараметра1 = ТипЗнч(Параметр1);
Изменения = (ТипПараметра1 = ТипЗнч(Параметр2));
ИмяПараметра = ПолучитьИмяПараметра(Параметр1) + ПолучитьИмяПараметра(Параметр2);
ИмяПараметраРасшифровки = ?(Изменения, "m", "d");
ИмяПараметраРасшифровки = ИмяПараметраРасшифровки + ИмяПараметра;
Попытка
Область.Параметры[ИмяПараметра] = КоличествоКлиентов;
Исключение
Возврат;
КонецПопытки;
Если Изменения Тогда
ИмяРасшифровки = "Отчет.ИзменениеABCXYZРаспределенияКлиентов.Форма";
Если ТипПараметра1 = Тип("ПеречислениеСсылка.ABCКлассификация") Тогда
ПоляОтбора = Новый Структура("ПрошлыйABC, ТекущийABC", Параметр1, Параметр2);
ЗаголовокСписка = НСтр("ru='Перешли из %Параметр1% в %Параметр2%'");
Иначе
ПоляОтбора = Новый Структура("ПрошлыйXYZ, ТекущийXYZ", Параметр1, Параметр2);
ЗаголовокСписка = НСтр("ru='Перешли из %Параметр1% в %Параметр2%'");
КонецЕсли;
Иначе
ИмяРасшифровки = "Отчет.ABCXYZРаспределениеКлиентов.Форма";
ПоляОтбора = Новый Структура("КлассABC, КлассXYZ", Параметр1, Параметр2);
ЗаголовокСписка = НСтр("ru='Отнесены к %Параметр1%, %Параметр2%'");
КонецЕсли;
ЗаголовокСписка = СтрЗаменить(ЗаголовокСписка, "%Параметр1%", ПолучитьОписаниеКласса(Параметр1));
ЗаголовокСписка = СтрЗаменить(ЗаголовокСписка, "%Параметр2%", ПолучитьОписаниеКласса(Параметр2));
Попытка
Область.Параметры[ИмяПараметраРасшифровки] = Новый Структура(
"ИмяРасшифровки, Заголовок, Отбор", ИмяРасшифровки, ЗаголовокСписка, ПоляОтбора);
Исключение
Возврат;
КонецПопытки;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДатаСреза(РабочаяДата)
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| МАКСИМУМ(ABCXYZКлассификацияКлиентовСрезПоследних.Период) КАК Период
|ИЗ
| РегистрСведений.ABCXYZКлассификацияКлиентов.СрезПоследних(&ДатаСреза, ) КАК ABCXYZКлассификацияКлиентовСрезПоследних");
Запрос.УстановитьПараметр("ДатаСреза", РабочаяДата - 1);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Возврат Выборка.Период;
КонецФункции
&НаСервере
Процедура УстановитьПериоды(ТекстОшибки)
ПериодКлассификации = ОбщегоНазначенияУТКлиентСервер.РасширенныйПериод(
АнализНаДату, Константы.ПериодABCКлассификацииПартнеров.Получить(), -Константы.КоличествоПериодовABCКлассификацииПартнеров.Получить());
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 2
| ABCXYZКлассификацияКлиентов.Период КАК Период
|ИЗ
| РегистрСведений.ABCXYZКлассификацияКлиентов КАК ABCXYZКлассификацияКлиентов
|ГДЕ
| ABCXYZКлассификацияКлиентов.Период <= &АнализНаДату
|
|УПОРЯДОЧИТЬ ПО
| Период УБЫВ");
Запрос.УстановитьПараметр("АнализНаДату", АнализНаДату);
Выборка = Запрос.Выполнить();
Если Не Выборка.Пустой() Тогда
Выборка = Выборка.Выбрать();
Выборка.Следующий();
ДатаТекущегоСреза = Выборка.Период;
Если Выборка.Следующий() Тогда
ДатаПредыдущегоСреза = Выборка.Период;
Иначе
ТекстОшибки = НСтр("ru='На %Дата% отсутствует предыдущий срез.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Дата%", Формат(АнализНаДату, "ДЛФ=ДД"));
ДатаПредыдущегоСреза = '00010101';
КонецЕсли;
Если ЗначениеЗаполнено(ТипПараметраКлассификации) Тогда
ВывестиМатрицы();
КонецЕсли;
Иначе
ТекстОшибки = НСтр("ru='На %Дата% классификация отсутствует.'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Дата%", Формат(АнализНаДату, "ДЛФ=ДД"));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВывестиМатрицы()
Вопросы = 0;
Макет = Отчеты.АнализКлиентскойБазыBCG.ПолучитьМакет("Матрицы");
ОбластьМатриц = Макет.ПолучитьОбласть("Матрицы");
ОбластьИзменений = Макет.ПолучитьОбласть("Изменения");
ПотенциальныхКлиентов = 0 ;
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ABCXYZКлассификацияКлиентовСрезПоследних.Партнер КАК Партнер,
| ABCXYZКлассификацияКлиентовСрезПоследних.Класс КАК Класс
|ПОМЕСТИТЬ ТекущийABC
|ИЗ
| РегистрСведений.ABCXYZКлассификацияКлиентов.СрезПоследних(&ТекущийПериод, ) КАК ABCXYZКлассификацияКлиентовСрезПоследних
|ГДЕ
| ABCXYZКлассификацияКлиентовСрезПоследних.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.ABC)
| И ABCXYZКлассификацияКлиентовСрезПоследних.ТипПараметраКлассификации = &ТипПараметраКлассификации
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ABCXYZКлассификацияКлиентовСрезПоследних.Партнер КАК Партнер,
| ABCXYZКлассификацияКлиентовСрезПоследних.Класс КАК Класс
|ПОМЕСТИТЬ ПрошлыйABC
|ИЗ
| РегистрСведений.ABCXYZКлассификацияКлиентов.СрезПоследних(&ПрошлыйПериод, ) КАК ABCXYZКлассификацияКлиентовСрезПоследних
|ГДЕ
| ABCXYZКлассификацияКлиентовСрезПоследних.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.ABC)
| И ABCXYZКлассификацияКлиентовСрезПоследних.ТипПараметраКлассификации = &ТипПараметраКлассификации
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ABCXYZКлассификацияКлиентовСрезПоследних.Партнер КАК Партнер,
| ABCXYZКлассификацияКлиентовСрезПоследних.Класс КАК Класс
|ПОМЕСТИТЬ ТекущийXYZ
|ИЗ
| РегистрСведений.ABCXYZКлассификацияКлиентов.СрезПоследних(&ТекущийПериод, ) КАК ABCXYZКлассификацияКлиентовСрезПоследних
|ГДЕ
| ABCXYZКлассификацияКлиентовСрезПоследних.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.XYZ)
| И ABCXYZКлассификацияКлиентовСрезПоследних.ТипПараметраКлассификации = &ТипПараметраКлассификации
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ABCXYZКлассификацияКлиентовСрезПоследних.Партнер КАК Партнер,
| ABCXYZКлассификацияКлиентовСрезПоследних.Класс КАК Класс
|ПОМЕСТИТЬ ПрошлыйXYZ
|ИЗ
| РегистрСведений.ABCXYZКлассификацияКлиентов.СрезПоследних(&ПрошлыйПериод, ) КАК ABCXYZКлассификацияКлиентовСрезПоследних
|ГДЕ
| ABCXYZКлассификацияКлиентовСрезПоследних.ТипКлассификации = ЗНАЧЕНИЕ(Перечисление.ТипыКлассификации.XYZ)
| И ABCXYZКлассификацияКлиентовСрезПоследних.ТипПараметраКлассификации = &ТипПараметраКлассификации
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Партнеры.Ссылка КАК Партнер
|ПОМЕСТИТЬ КлассифицированныеПартнеры
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.Ссылка В
| (ВЫБРАТЬ
| ПрошлыйABC.Партнер
| ИЗ
| ПрошлыйABC КАК ПрошлыйABC
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ПрошлыйXYZ.Партнер
| ИЗ
| ПрошлыйXYZ КАК ПрошлыйXYZ
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТекущийABC.Партнер
| ИЗ
| ТекущийABC КАК ТекущийABC
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ТекущийXYZ.Партнер
| ИЗ
| ТекущийXYZ КАК ТекущийXYZ)
| И (НЕ Партнеры.ПометкаУдаления) И (НЕ Партнеры.Предопределенный)
|;
|
|
|ВЫБРАТЬ
| ЕСТЬNULL(ТекущийXYZ.Класс, ЗНАЧЕНИЕ(Перечисление.XYZКлассификация.ПустаяСсылка)) КАК ТекущийXYZ,
| ЕСТЬNULL(ТекущийABC.Класс, ЗНАЧЕНИЕ(Перечисление.ABCКлассификация.ПустаяСсылка)) КАК ТекущийABC,
| ЕСТЬNULL(ПрошлыйXYZ.Класс, ЗНАЧЕНИЕ(Перечисление.XYZКлассификация.ПустаяСсылка)) КАК ПрошлыйXYZ,
| ЕСТЬNULL(ПрошлыйABC.Класс, ЗНАЧЕНИЕ(Перечисление.ABCКлассификация.ПустаяСсылка)) КАК ПрошлыйABC,
| КлассифицированныеПартнеры.Партнер КАК Партнер
|ИЗ
| КлассифицированныеПартнеры КАК КлассифицированныеПартнеры
| ЛЕВОЕ СОЕДИНЕНИЕ ПрошлыйABC КАК ПрошлыйABC
| ПО КлассифицированныеПартнеры.Партнер = ПрошлыйABC.Партнер
| ЛЕВОЕ СОЕДИНЕНИЕ ТекущийABC КАК ТекущийABC
| ПО КлассифицированныеПартнеры.Партнер = ТекущийABC.Партнер
| ЛЕВОЕ СОЕДИНЕНИЕ ПрошлыйXYZ КАК ПрошлыйXYZ
| ПО КлассифицированныеПартнеры.Партнер = ПрошлыйXYZ.Партнер
| ЛЕВОЕ СОЕДИНЕНИЕ ТекущийXYZ КАК ТекущийXYZ
| ПО КлассифицированныеПартнеры.Партнер = ТекущийXYZ.Партнер
|ГДЕ
| (НЕ КлассифицированныеПартнеры.Партнер.ПометкаУдаления)
|ИТОГИ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Партнер)
|ПО
| ТекущийXYZ,
| ТекущийABC,
| ПрошлыйXYZ,
| ПрошлыйABC");
Запрос.УстановитьПараметр("ТекущийПериод", ДатаТекущегоСреза);
Запрос.УстановитьПараметр("ПрошлыйПериод", ДатаПредыдущегоСреза);
Запрос.УстановитьПараметр("ТипПараметраКлассификации", ТипПараметраКлассификации);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаТекущийXYZ = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока ВыборкаТекущийXYZ.Следующий() Цикл
Если ВыборкаТекущийXYZ.ТекущийXYZ = Перечисления.XYZКлассификация.НеКлассифицирован Тогда
ОбластьМатриц.Параметры.Потерянные = ВыборкаТекущийXYZ.Партнер;
ИмяРасшифровки = "Отчет.ABCXYZРаспределениеКлиентов.Форма";
ЗаголовокСписка = НСтр("ru='Потерянные клиенты'");
ПоляОтбора = Новый Структура("КлассXYZ", Перечисления.XYZКлассификация.НеКлассифицирован);
ОбластьМатриц.Параметры.dПотерянные = Новый Структура(
"ИмяРасшифровки, Заголовок, Отбор", ИмяРасшифровки, ЗаголовокСписка, ПоляОтбора);
ИначеЕсли ВыборкаТекущийXYZ.ТекущийXYZ = Перечисления.XYZКлассификация.ПустаяСсылка() Тогда
ОбластьМатриц.Параметры.Потенциальные = ВыборкаТекущийXYZ.Партнер;
ПотенциальныхКлиентов = ВыборкаТекущийXYZ.Партнер;
ИмяРасшифровки = "Отчет.ABCXYZРаспределениеКлиентов.Форма";
ЗаголовокСписка = НСтр("ru='Потенциальные клиенты'");
ПоляОтбора = Новый Структура("КлассXYZ", Перечисления.XYZКлассификация.ПустаяСсылка());
ОбластьМатриц.Параметры.dПотенциальные = Новый Структура(
"ИмяРасшифровки, Заголовок, Отбор", ИмяРасшифровки, ЗаголовокСписка, ПоляОтбора);
Иначе
ВыборкаТекущийABC = ВыборкаТекущийXYZ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока ВыборкаТекущийABC.Следующий() Цикл
ЗаполнитьПараметры(
ВыборкаТекущийABC.ТекущийABC, ВыборкаТекущийABC.ТекущийXYZ,
ВыборкаТекущийABC.Партнер, ОбластьМатриц);
Если Не((ВыборкаТекущийABC.ТекущийABC = Перечисления.ABCКлассификация.AКласс
И ВыборкаТекущийABC.ТекущийXYZ = Перечисления.XYZКлассификация.XКласс)
Или
(ВыборкаТекущийABC.ТекущийABC = Перечисления.ABCКлассификация.AКласс
И ВыборкаТекущийABC.ТекущийXYZ = Перечисления.XYZКлассификация.ZКласс)
Или
(ВыборкаТекущийABC.ТекущийABC = Перечисления.ABCКлассификация.CКласс
И ВыборкаТекущийABC.ТекущийXYZ = Перечисления.XYZКлассификация.XКласс)) Тогда
Вопросы = Вопросы + ВыборкаТекущийABC.Партнер;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ДатаПредыдущегоСреза <> '00010101' Тогда
ВыборкаПрошлыйXYZ = ВыборкаТекущийXYZ.Выбрать(
ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "ПрошлыйXYZ");
Пока ВыборкаПрошлыйXYZ.Следующий() Цикл
Если Не ЗначениеЗаполнено(ВыборкаПрошлыйXYZ.ТекущийXYZ) Тогда
Продолжить;
КонецЕсли;
ЗаполнитьПараметры(
?(ЗначениеЗаполнено(ВыборкаПрошлыйXYZ.ПрошлыйXYZ),
ВыборкаПрошлыйXYZ.ПрошлыйXYZ, Перечисления.XYZКлассификация.ПустаяСсылка()
),
?(ЗначениеЗаполнено(ВыборкаПрошлыйXYZ.ТекущийXYZ),
ВыборкаПрошлыйXYZ.ТекущийXYZ, Перечисления.XYZКлассификация.ПустаяСсылка()
),
ВыборкаПрошлыйXYZ.Партнер, ОбластьИзменений);
КонецЦикла;
КонецЕсли;
ОбластьМатриц.Параметры.Вопросы = Вопросы;
ИмяРасшифровки = "Отчет.ABCXYZРаспределениеКлиентов.Форма";
ОбластьМатриц.Параметры.dВопросы = Новый Структура(
"ИмяРасшифровки, Заголовок, Вопросы",
ИмяРасшифровки, НСтр("ru='Отнесены к категории BCG ""вопросы""'"), Истина);
КонецЦикла;
Результат.Очистить();
Результат.Вывести(ОбластьМатриц);
Если ПотенциальныхКлиентов = 0 Тогда
Результат.УдалитьОбласть(Результат.Области.Потенциальные, ТипСмещенияТабличногоДокумента.ПоВертикали);
КонецЕсли;
Если ДатаПредыдущегоСреза <> '00010101' Тогда
ВыборкаТекущийABC = РезультатЗапроса.Выбрать(
ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "ТекущийABC");
Пока ВыборкаТекущийABC.Следующий() Цикл
Если Не ЗначениеЗаполнено(ВыборкаТекущийABC.ТекущийABC) Тогда
Продолжить;
КонецЕсли;
ВыборкаПрошлыйABC = ВыборкаТекущийABC.Выбрать(
ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "ПрошлыйABC");
Пока ВыборкаПрошлыйABC.Следующий() Цикл
ЗаполнитьПараметры(
?(ЗначениеЗаполнено(ВыборкаПрошлыйABC.ПрошлыйABC),
ВыборкаПрошлыйABC.ПрошлыйABC,
Перечисления.ABCКлассификация.ПустаяСсылка()
),
?(ЗначениеЗаполнено(ВыборкаПрошлыйABC.ТекущийABC),
ВыборкаПрошлыйABC.ТекущийABC,
Перечисления.ABCКлассификация.ПустаяСсылка()
),
ВыборкаПрошлыйABC.Партнер, ОбластьИзменений);
КонецЦикла;
КонецЦикла;
Результат.Вывести(ОбластьИзменений);
КонецЕсли;
КонецПроцедуры
#КонецОбласти