#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры.РеквизитыДляЗаполнения, , "Периодичность");
Периодичность = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Владелец, "Периодичность");
ПрогнозПоНеделям = (Периодичность = Перечисления.Периодичность.Неделя);
Если ТипПлана = Перечисления.ТипыПланов.ПланПродажПоКатегориям Тогда
ТекстВариантыПрогнозированияПоКатегориям = НСтр("ru = 'Выбранный вариант определяет, в каком виде данные прогнозов будут выводиться для анализа:
| %1 Только по категориям - данные выводятся по категориям.
| %1 С разбивкой по товарам - данные выводятся по товарам.'");
ТекстВариантыПрогнозированияПоКатегориям = СтрШаблон(ТекстВариантыПрогнозированияПоКатегориям, Символ(8226));
Элементы.ДекорацияВариантПрогнозированияПоКатегориям.Подсказка = ТекстВариантыПрогнозированияПоКатегориям;
КонецЕсли;
ПересчитатьДанныеЗависимыеОтНачалаПрогнозирования(Ложь);
ПересчитатьДатуПоследнейПродажи();
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Не ПустаяСтрока(ИдентификаторЗаданияОбновитьДатуПродажи) Тогда
ПодключитьОбработчикОжидания("Подключаемый_ОбновитьДатуПродажиНаКлиенте", 1, Истина);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура НачалоПрогнозированияПриИзменении(Элемент)
ОчиститьСообщения();
ПересчитатьДанныеЗависимыеОтНачалаПрогнозирования();
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура ДеньНеделиНачалаПрогнозаПриИзменении(Элемент)
ОчиститьСообщения();
ПроверитьСоответствиеНачалаПрогнозированияСДнемНедели(Ложь);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Ок(Команда)
СписокРеквизитовДляРедактирования = СервисПрогнозированияПереопределяемыйКлиентСервер.РеквизитыВидаПланаДляСервисаПрогнозирования();
ПараметрыФормыРедактирования = Новый Структура(СписокРеквизитовДляРедактирования);
ЗаполнитьЗначенияСвойств(ПараметрыФормыРедактирования, ЭтотОбъект);
Закрыть(ПараметрыФормыРедактирования);
КонецПроцедуры
&НаКлиенте
Процедура Отмена(Команда)
Закрыть();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьВидимостьДоступность()
Элементы.ДеньНеделиНачалаПрогноза.Видимость = ПрогнозПоНеделям;
Элементы.ГруппаНадписьУстановленыДатыЗапретаИзменений.Видимость = ЕстьЗапретИзмененияДанных;
Элементы.ГруппаВариантПрогнозированияПоКатегориям.Видимость = ТипПлана = Перечисления.ТипыПланов.ПланПродажПоКатегориям;
КонецПроцедуры
&НаСервере
Процедура ПересчитатьДанныеЗависимыеОтНачалаПрогнозирования(ПроверятьДеньНедели = Истина)
Если ПрогнозПоНеделям
И ПроверятьДеньНедели Тогда
ПроверитьСоответствиеНачалаПрогнозированияСДнемНедели(Истина);
КонецЕсли;
ДанныеДляПроверки = ДатыЗапретаИзменения.ШаблонДанныхДляПроверки();
НоваяСтрока = ДанныеДляПроверки.Добавить();
НоваяСтрока.Дата = НачалоДня(НачалоПрогнозирования);
НоваяСтрока.Раздел = "Планирование";
НоваяСтрока.Объект = Владелец;
ОписаниеДанных = Новый Структура("НоваяВерсия, Данные", Ложь, "");
ЕстьЗапретИзмененияДанных = Ложь;
ОписаниеОшибки = "";
Если ДатыЗапретаИзменения.НайденЗапретИзмененияДанных(ДанныеДляПроверки, ОписаниеДанных, ОписаниеОшибки) Тогда
ЕстьЗапретИзмененияДанных = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьДатуПродажиНаКлиенте()
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбновитьДатуПродажиОповещение", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатФоновогоЗадания, ОповещениеОЗавершении, ПараметрыОжидания);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьДатуПродажиОповещение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Статус = "Ошибка" Тогда
СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Результат.ИнформацияОбОшибке);
Возврат;
КонецЕсли;
Если Результат.Статус = "Выполнено" Тогда
ИдентификаторЗаданияОбновитьДатуПродажи = "";
ПоследняяИзвестнаяПродажа = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
Элементы.ПоследняяИзвестнаяПродажаИдетВычисление.Видимость = Ложь;
Элементы.ПоследняяИзвестнаяПродажа.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПересчитатьДатуПоследнейПродажи()
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ПараметрыВыполнения.ОжидатьЗавершение = 0;
РезультатФоновогоЗадания = ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения,
"СервисПрогнозированияПереопределяемый.ПоследняяИзвестнаяДатаПродажи");
Если РезультатФоновогоЗадания.Статус = "Выполняется" Тогда
ИдентификаторЗаданияОбновитьДатуПродажи = РезультатФоновогоЗадания.ИдентификаторЗадания;
ИначеЕсли РезультатФоновогоЗадания.Статус = "Выполнено" Тогда
ИдентификаторЗаданияОбновитьДатуПродажи = "";
ПоследняяИзвестнаяПродажа = ПолучитьИзВременногоХранилища(РезультатФоновогоЗадания.АдресРезультата);
Элементы.ПоследняяИзвестнаяПродажаИдетВычисление.Видимость = Ложь;
Элементы.ПоследняяИзвестнаяПродажа.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьСоответствиеНачалаПрогнозированияСДнемНедели(ПроверкаПоДатеНачалаПрогнозирования)
НомерДняНедели = СервисПрогнозирования.НомерДняНеделиНачалаПрогноза(ДеньНеделиНачалаПрогноза);
Если ПроверкаПоДатеНачалаПрогнозирования Тогда
РазницаДеньНедели = ДеньНедели(НачалоПрогнозирования) - НомерДняНедели;
Если РазницаДеньНедели <> 0 Тогда
ДеньНеделиИсходный = ДеньНеделиНачалаПрогноза;
ДеньНеделиНачалаПрогноза = СервисПрогнозирования.ДеньНеделиПоНомеру(НомерДняНедели + РазницаДеньНедели);
ТекстСообщения = НСтр("ru = 'Скорректирован день недели с ""%1"" на ""%2"" по дате начала прогнозирования %3'");
ТекстСообщения = СтрШаблон(ТекстСообщения,
ДеньНеделиИсходный, ДеньНеделиНачалаПрогноза, Формат(НачалоПрогнозирования, "ДЛФ=D"));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,,"ДеньНеделиНачалаПрогноза");
КонецЕсли;
Иначе
РазницаДеньНедели = (ДеньНедели(НачалоПрогнозирования) - НомерДняНедели) * -1;
Если РазницаДеньНедели <> 0 Тогда
НачалоПрогнозированияДоИзменения = НачалоПрогнозирования;
НачалоПрогнозирования = НачалоПрогнозирования + (86400 * РазницаДеньНедели);
ТекстСообщения = НСтр("ru = 'Сдвинута дата начала прогнозирования с %1 на %2 по дню недели ""%3""'");
ТекстСообщения = СтрШаблон(ТекстСообщения,
Формат(НачалоПрогнозированияДоИзменения, "ДЛФ=D"), Формат(НачалоПрогнозирования, "ДЛФ=D"), ДеньНеделиНачалаПрогноза);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,,"НачалоПрогнозирования");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти