#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ПолучениеЗначенийНеобходимыхФО();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ВерсияНастроек <> ТекущаяВерсияНастроек() Тогда
ЗаполнитьДеревоНаборовДанных();
ВерсияНастроек = ТекущаяВерсияНастроек();
Иначе
УстановитьВидимостьПоказателейВЗависимостиОтФО();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
Настройки = Новый Структура;
Настройки.Вставить("НастройкиОтбора",Отчет.КомпоновщикНастроек.ПолучитьНастройки());
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Отчет.СравнительныйАнализПоказателейРаботыМенеджеров", "ФормаОтчета", Настройки);
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеВариантаНаСервере(Настройки)
СхемаДляОтбораПользователей = Отчеты.СравнительныйАнализПоказателейРаботыМенеджеров.ПолучитьМакет("СхемаДляОтбораПользователей");
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаДляОтбораПользователей,УникальныйИдентификатор);
Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
ЗначениеНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Отчет.СравнительныйАнализПоказателейРаботыМенеджеров", "ФормаОтчета");
Если ЗначениеНастроек <> Неопределено
И ЗначениеНастроек.Свойство("НастройкиОтбора")
И ЗначениеНастроек.НастройкиОтбора <> Неопределено Тогда
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ЗначениеНастроек.НастройкиОтбора);
Отчет.КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Сформировать(Команда)
Отказ = ОтборыИНастройкиЗаполненыНеправильно();
Если Не Отказ Тогда
СформироватьОтчет();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Настройки(Команда)
ПараметрыДляФормыНастроек = СтруктураФормыНастроек();
Результат = Неопределено;
ОткрытьФорму("Отчет.СравнительныйАнализПоказателейРаботыМенеджеров.Форма.ВыборНастроек",ПараметрыДляФормыНастроек,ЭтаФорма,,,, Новый ОписаниеОповещения("НастройкиЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура НастройкиЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
ВыводитьДиаграммы = Результат.ВыводитьДиаграммы;
ВыводитьЛегенду = Результат.ВыводитьЛегенду;
ВыводитьТаблицы = Результат.ВыводитьТаблицы;
ПроцентнаяСтавка = Результат.ПроцентнаяСтавка;
Отчет.КомпоновщикНастроек = Результат.НастройкиКомпоновки;
ОбработатьРезультатНаСервере(Результат.Показатели);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Функция СтруктураПараметрыФормированияОтчета()
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("ДополнительныйПериодДляАнализа",ДополнительныйПериодДляАнализа);
СтруктураПараметров.Вставить("ПериодФормированияОтчета",ПериодФормированияОтчета);
СтруктураПараметров.Вставить("ПроцентнаяСтавка",ПроцентнаяСтавка);
СтруктураПараметров.Вставить("ВыводитьДиаграммы",ВыводитьДиаграммы);
СтруктураПараметров.Вставить("ВыводитьЛегенду",ВыводитьЛегенду);
СтруктураПараметров.Вставить("ВыводитьТаблицы",ВыводитьТаблицы);
СтруктураПараметров.Вставить("ДеревоНаборовДанных",ВременноеХранилищеНастроекНаСервере());
Возврат СтруктураПараметров;
КонецФункции
&НаСервере
Процедура ПолучениеЗначенийНеобходимыхФО()
ФиксироватьПретензииКлиентов = ПолучитьФункциональнуюОпцию("ФиксироватьПретензии");
ИспользоватьВзаимодействия = ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент");
ФиксироватьПервичныйИнтерес = ПолучитьФункциональнуюОпцию("ФиксироватьПервичныйИнтерес");
ИспользоватьСделкиСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьСделкиСКлиентами");
ИспользоватьРучныеСкидкиВПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах");
ИспользуетсяКлассификацияПартнеров = ПолучитьФункциональнуюОпцию("ИспользоватьABCXYZКлассификациюПартнеровПоВаловойПрибыли")
Или ПолучитьФункциональнуюОпцию("ИспользоватьABCXYZКлассификациюПартнеровПоВыручке")
Или ПолучитьФункциональнуюОпцию("ИспользоватьABCXYZКлассификациюПартнеровПоКоличествуПродаж");
ЕстьПраваНаВзаимодействия = ПравоДоступа("Чтение",Метаданные.Документы.Встреча)
И ПравоДоступа("Чтение",Метаданные.Документы.ТелефонныйЗвонок)
И ПравоДоступа("Чтение",Метаданные.Документы.ЭлектронноеПисьмоВходящее)
И ПравоДоступа("Чтение",Метаданные.Документы.ЭлектронноеПисьмоИсходящее)
КонецПроцедуры
&НаКлиенте
Функция ТекущаяВерсияНастроек()
Возврат 1;
КонецФункции
&НаСервере
Процедура СформироватьОтчет()
ТаблицаОтчета.Очистить();
ОбъектОтчет = РеквизитФормыВЗначение("Отчет");
ОбъектОтчет.СформироватьОтчет(ТаблицаОтчета,СтруктураПараметрыФормированияОтчета());
КонецПроцедуры
&НаКлиенте
Функция ОтборыИНастройкиЗаполненыНеправильно()
Отказ = Ложь;
ОчиститьСообщения();
Если (ПериодФормированияОтчета.ДатаНачала = Дата(1,1,1) Или ПериодФормированияОтчета.ДатаОкончания = Дата(1,1,1))
И (ДополнительныйПериодДляАнализа = "ПредыдущийПериод" Или ДополнительныйПериодДляАнализа = "ПрошлыйГод") Тогда
ТекстСообщения = НСтр("ru='В случае, когда используется дополнительный период для анализа, у основного периода должны быть указаны дата начала и дата конца.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"ПериодФормированияОтчета",,Отказ);
КонецЕсли;
Если НЕ ВыводитьДиаграммы И НЕ ВыводитьТаблицы Тогда
ТекстСообщения = НСтр("ru='В настройках формирования отчета, на закладке ""Прочее"", необходимо выбрать хотя бы один из следующих режимов вывода - таблицы или диаграммы.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"ВыводитьДиаграммы",,Отказ);
КонецЕсли;
Если ПроцентнаяСтавка = 0 Тогда
ТекстСообщения = НСтр("ru='В настройках формирования отчета, на закладке ""Прочее"", необходимо указать процентную ставку для расчета финансовых потерь.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,"ПроцентнаяСтавка",,Отказ);
КонецЕсли;
Возврат Отказ;
КонецФункции
&НаСервере
Процедура ОбработатьРезультатНаСервере(АдресДереваПоказатели)
ЗначениеВДанныеФормы(ПолучитьИзВременногоХранилища(АдресДереваПоказатели),ДеревоНастроек);
КонецПроцедуры
&НаСервере
Функция ВременноеХранилищеНастроекНаСервере()
Возврат ПоместитьВоВременноеХранилище(РеквизитФормыВЗначение("ДеревоНастроек"),УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ЗаполнитьДеревоНаборовДанных()
ДеревоНастроек.ПолучитьЭлементы().Очистить();
ДобавленнаяСтрока = НовыйЭлементДерева(ДеревоНастроек,"ПродажиПрибыльВыручка",НСтр("ru = 'Продажи, прибыль, выручка'"),Истина);
НовыйЭлементДерева(ДобавленнаяСтрока,"Продажи",НСтр("ru='Продажи'"),Истина);
НовыйЭлементДерева(ДобавленнаяСтрока,"Прибыль",НСтр("ru='Прибыль'"),Истина);
НовыйЭлементДерева(ДобавленнаяСтрока,"ПоступлениеДС",НСтр("ru='Поступление денежных средств'"),Истина);
НовыйЭлементДерева(ДобавленнаяСтрока,"ПоступлениеДС_МинусСебестоимость",НСтр("ru='Выручка (по оплате) минус себестоимость (по отгрузке)'"),Истина);
ДобавленнаяСтрока = НовыйЭлементДерева(ДеревоНастроек,"СоблюдениеУсловийПродаж",НСтр("ru = 'Соблюдение условий продаж'"),Истина);
НовыйЭлементДерева(ДобавленнаяСтрока,"ПотериПросроченнаяДебиторка",НСтр("ru='Потери в результате превышения сроков погашения дебиторской задолженности'"),Истина);
НовыйЭлементДерева(ДобавленнаяСтрока,"ПредоставленныеРучныеСкидки",НСтр("ru='Предоставленные ручные скидки'"),ИспользоватьРучныеСкидкиВПродажах);
ДобавленнаяСтрока = НовыйЭлементДерева(ДеревоНастроек,"ЭффективностьРаботы",НСтр("ru = 'Эффективность работы'"),ИспользоватьСделкиСКлиентами ИЛИ ИспользоватьВзаимодействия);
НовыйЭлементДерева(ДобавленнаяСтрока,"ЭффективностьВеденияСделок",НСтр("ru='Эффективность ведения сделок'"),ИспользоватьСделкиСКлиентами);
НовыйЭлементДерева(ДобавленнаяСтрока,"ЭффективностьВзаимодействий",НСтр("ru='Эффективность взаимодействий'"),ИспользоватьВзаимодействия И ИспользоватьСделкиСКлиентами);
НовыйЭлементДерева(ДобавленнаяСтрока,"ПродажиНаОднуСделку",НСтр("ru='Продажи на одну сделку'"),ИспользоватьСделкиСКлиентами);
НовыйЭлементДерева(ДобавленнаяСтрока,"ПродажиНаОдноВзаимодействие",НСтр("ru='Продажи на одно взаимодействие'"),ИспользоватьВзаимодействия);
ДобавленнаяСтрока = НовыйЭлементДерева(ДеревоНастроек,"ПричиныПотерь",НСтр("ru = 'Причины потерь'"),ИспользоватьСделкиСКлиентами ИЛИ ФиксироватьПервичныйИнтерес);
НовыйЭлементДерева(ДобавленнаяСтрока,"ОсновныеЭтапыПотерь",НСтр("ru='Основные этапы потерь'"),ИспользоватьСделкиСКлиентами);
НовыйЭлементДерева(ДобавленнаяСтрока,"ПричиныПроигрышаСделок",НСтр("ru='Причины проигрыша сделок'"),ИспользоватьСделкиСКлиентами);
НовыйЭлементДерева(ДобавленнаяСтрока,"НеудовлетворениеПервичногоСпроса",НСтр("ru='Причины неудовлетворения первичного спроса'"),ФиксироватьПервичныйИнтерес);
ДобавленнаяСтрока = НовыйЭлементДерева(ДеревоНастроек,"ПривлечениеУдержаниеКлиентов",НСтр("ru = 'Привлечение и удержание клиентов'"),ИспользуетсяКлассификацияПартнеров);
НовыйЭлементДерева(ДобавленнаяСтрока,"ДинамикаКлиентскойБазы",НСтр("ru='Динамика клиентской базы'"),ИспользуетсяКлассификацияПартнеров);
НовыйЭлементДерева(ДобавленнаяСтрока,"ПродажиНовымКлиентам",НСтр("ru='Продажи новым клиентам'"),ИспользуетсяКлассификацияПартнеров);
ДобавленнаяСтрока = НовыйЭлементДерева(ДеревоНастроек,"ПоддержкаЛояльностиКлиентов",НСтр("ru = 'Поддержка лояльности клиентов'"),ФиксироватьПретензииКлиентов);
НовыйЭлементДерева(ДобавленнаяСтрока,"ВозникшиеПретензииКлиентов",НСтр("ru='Возникшие претензии клиентов'"),ФиксироватьПретензииКлиентов);
НовыйЭлементДерева(ДобавленнаяСтрока,"ПричиныВозникновенияПретензий",НСтр("ru='Причины возникновения претензий клиентов'"),ФиксироватьПретензииКлиентов);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВидимостьПоказателейВЗависимостиОтФО()
СтрокаПредоставленныеРучныеСкидки = ДеревоНастроек.ПолучитьЭлементы()[1].ПолучитьЭлементы()[1];
СтрокаЭффективностьРаботы = ДеревоНастроек.ПолучитьЭлементы()[2];
СтрокаЭффективностьВеденияСделок = ДеревоНастроек.ПолучитьЭлементы()[2].ПолучитьЭлементы()[0];
СтрокаЭффективностьВзаимодействий = ДеревоНастроек.ПолучитьЭлементы()[2].ПолучитьЭлементы()[1];
СтрокаПродажиНаОднуСделку = ДеревоНастроек.ПолучитьЭлементы()[2].ПолучитьЭлементы()[2];
СтрокаПродажиНаОдноВзаимодействие = ДеревоНастроек.ПолучитьЭлементы()[2].ПолучитьЭлементы()[3];
СтрокаПричиныПотерь = ДеревоНастроек.ПолучитьЭлементы()[3];
СтрокаОсновныеЭтапыПотерь = ДеревоНастроек.ПолучитьЭлементы()[3].ПолучитьЭлементы()[0];
СтрокаПричиныПроигрышаСделок = ДеревоНастроек.ПолучитьЭлементы()[3].ПолучитьЭлементы()[1];
СтрокаНеудовлетворениеПервичногоСпроса = ДеревоНастроек.ПолучитьЭлементы()[3].ПолучитьЭлементы()[2];
СтрокаПривлечениеУдержаниеКлиентов = ДеревоНастроек.ПолучитьЭлементы()[4];
СтрокаДинамикаКлиентскойБазы = ДеревоНастроек.ПолучитьЭлементы()[4].ПолучитьЭлементы()[0];
СтрокаПродажиНовымКлиентам = ДеревоНастроек.ПолучитьЭлементы()[4].ПолучитьЭлементы()[1];
СтрокаПоддержкаЛояльностиКлиентов = ДеревоНастроек.ПолучитьЭлементы()[5];
СтрокаВозникшиеПретензииКлиентов = ДеревоНастроек.ПолучитьЭлементы()[5].ПолучитьЭлементы()[0];
СтрокаПричиныВозникновенияПретензий = ДеревоНастроек.ПолучитьЭлементы()[5].ПолучитьЭлементы()[1];
СтрокаПредоставленныеРучныеСкидки.ДоступностьСогласноФО = ИспользоватьРучныеСкидкиВПродажах;
СтрокаЭффективностьРаботы.ДоступностьСогласноФО = (ИспользоватьСделкиСКлиентами ИЛИ ИспользоватьВзаимодействия);
СтрокаЭффективностьВеденияСделок.ДоступностьСогласноФО = ИспользоватьСделкиСКлиентами;
СтрокаЭффективностьВзаимодействий.ДоступностьСогласноФО = (ИспользоватьСделкиСКлиентами И ИспользоватьВзаимодействия И ЕстьПраваНаВзаимодействия);
СтрокаПродажиНаОднуСделку.ДоступностьСогласноФО = ИспользоватьСделкиСКлиентами;
СтрокаПродажиНаОдноВзаимодействие.ДоступностьСогласноФО = ИспользоватьВзаимодействия И ЕстьПраваНаВзаимодействия;
СтрокаПричиныПотерь.ДоступностьСогласноФО = (ИспользоватьСделкиСКлиентами ИЛИ ФиксироватьПервичныйИнтерес);
СтрокаОсновныеЭтапыПотерь.ДоступностьСогласноФО = ИспользоватьСделкиСКлиентами;
СтрокаПричиныПроигрышаСделок.ДоступностьСогласноФО = ИспользоватьСделкиСКлиентами;
СтрокаНеудовлетворениеПервичногоСпроса.ДоступностьСогласноФО = ФиксироватьПервичныйИнтерес;
СтрокаПривлечениеУдержаниеКлиентов.ДоступностьСогласноФО = ИспользуетсяКлассификацияПартнеров;
СтрокаДинамикаКлиентскойБазы.ДоступностьСогласноФО = ИспользуетсяКлассификацияПартнеров;
СтрокаПродажиНовымКлиентам.ДоступностьСогласноФО = ИспользуетсяКлассификацияПартнеров;
СтрокаПоддержкаЛояльностиКлиентов.ДоступностьСогласноФО = ФиксироватьПретензииКлиентов;
СтрокаВозникшиеПретензииКлиентов.ДоступностьСогласноФО = ФиксироватьПретензииКлиентов;
СтрокаПричиныВозникновенияПретензий.ДоступностьСогласноФО = ФиксироватьПретензииКлиентов;
Если НЕ ИспользоватьРучныеСкидкиВПродажах Тогда
СтрокаПредоставленныеРучныеСкидки.Включать = Ложь;
КонецЕсли;
Если НЕ (ИспользоватьСделкиСКлиентами ИЛИ ИспользоватьВзаимодействия) Тогда
СтрокаЭффективностьРаботы.Включать = 0;
КонецЕсли;
Если НЕ (ИспользоватьСделкиСКлиентами И ИспользоватьВзаимодействия) ИЛИ (НЕ ЕстьПраваНаВзаимодействия) Тогда
СтрокаЭффективностьВзаимодействий.Включать = Ложь;
КонецЕсли;
Если НЕ ИспользоватьСделкиСКлиентами Тогда
СтрокаЭффективностьВеденияСделок.Включать = Ложь;
СтрокаПродажиНаОднуСделку.Включать = Ложь;
СтрокаОсновныеЭтапыПотерь.Включать = Ложь;
СтрокаПричиныПроигрышаСделок.Включать = Ложь;
СтрокаПричиныПроигрышаСделок.Включать = Ложь;
КонецЕсли;
Если НЕ ИспользоватьВзаимодействия ИЛИ (НЕ ЕстьПраваНаВзаимодействия) Тогда
СтрокаПродажиНаОдноВзаимодействие.Включать = Ложь;
КонецЕсли;
Если НЕ (ИспользоватьСделкиСКлиентами ИЛИ ФиксироватьПервичныйИнтерес) Тогда
СтрокаНеудовлетворениеПервичногоСпроса.Включать = 0;
КонецЕсли;
Если НЕ ФиксироватьПервичныйИнтерес Тогда
СтрокаПричиныПотерь.Включать = 0;
КонецЕсли;
Если НЕ ФиксироватьПретензииКлиентов Тогда
СтрокаПоддержкаЛояльностиКлиентов.Включать = Ложь;
СтрокаВозникшиеПретензииКлиентов.Включать = Ложь;
СтрокаПричиныВозникновенияПретензий.Включать = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция НовыйЭлементДерева(Родитель,Имя,Наименование,ДоступностьПоФО)
НоваяСтрока = Родитель.ПолучитьЭлементы().Добавить();
НоваяСтрока.Имя = Имя;
НоваяСтрока.Наименование = Наименование;
НоваяСтрока.Включать = ДоступностьПоФО;
НоваяСтрока.ДоступностьСогласноФО = ДоступностьПоФО;
Возврат НоваяСтрока;
КонецФункции
&НаСервере
Функция СтруктураФормыНастроек()
ПараметрыДляФормыНастроек = Новый Структура();
ПараметрыДляФормыНастроек.Вставить("ДеревоНастроек",ВременноеХранилищеНастроекНаСервере());
ПараметрыДляФормыНастроек.Вставить("ВыводитьДиаграммы",ВыводитьДиаграммы);
ПараметрыДляФормыНастроек.Вставить("ВыводитьТаблицы",ВыводитьТаблицы);
ПараметрыДляФормыНастроек.Вставить("ВыводитьЛегенду",ВыводитьЛегенду);
ПараметрыДляФормыНастроек.Вставить("ПроцентнаяСтавка",ПроцентнаяСтавка);
ПараметрыДляФормыНастроек.Вставить("НастройкаКомпоновки",Отчет.КомпоновщикНастроек);
ПараметрыДляФормыНастроек.Вставить("УИД_ВызывающейФормы",УникальныйИдентификатор);
Возврат ПараметрыДляФормыНастроек;
КонецФункции
#КонецОбласти