Настройка поддержания запасов / Настройка параметров расчета среднедневного потребления / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	ПериодРасчета                 = Константы.ПериодРасчетаТоварныхОграничений.Получить();
	КоличествоПериодовРасчета     = Константы.КоличествоПериодовРасчетаТоварныхОграничений.Получить();
	ВариантУчетаСезонныхКолебаний = Константы.ВариантУчетаСезонныхКолебаний.Получить();
	
	НастроитьФормуПоПравамИФункциональнымОпциям();
	УстановитьБлокировкуПоСезоннымКоэффицентам();
	
	УстановитьЗаголовкиПодсказок(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_НаборКонстант"
		И (Источник = "ИспользоватьСезонныеКоэффициенты" Или Источник = "ИспользоватьТоварныеКатегории")Тогда
		
		НастроитьФормуПоПравамИФункциональнымОпциям();
		УстановитьЗаголовкиПодсказок(ЭтаФорма);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ПериодРасчетаТоварныхОграниченийПриИзменении(Элемент)
	
	ЭтоГод = ПериодРасчета = ПредопределенноеЗначение("Перечисление.Периодичность.Год");
	Если ЭтоГод Или ПредыдущийПериодРасчетаБылГод Тогда
		УстановитьБлокировкуПоСезоннымКоэффицентам();
	КонецЕсли;
	
	УстановитьЗаголовкиПодсказок(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура КоличествоПериодовРасчетаТоварныхОграниченийПриИзменении(Элемент)
	УстановитьЗаголовкиПодсказок(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура НеУчитыватьПриИзменении(Элемент)
	УстановитьЗаголовкиПодсказок(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура ПоСезоннымКоэффициентамПриИзменении(Элемент)
	УстановитьЗаголовкиПодсказок(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура ПоАналогичномуПериодуПрошлогоГодаПриИзменении(Элемент)
	УстановитьЗаголовкиПодсказок(ЭтаФорма);
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура OK(Команда)
	
	Если ПроверитьЗаполнение() Тогда
		
		СохранитьПараметры();
		
		КодВозврата = Новый Структура;
		КодВозврата.Вставить("ПериодРасчетаТоварныхОграничений", ПериодРасчета);
		КодВозврата.Вставить("КоличествоПериодовРасчетаТоварныхОграничений", КоличествоПериодовРасчета);
		КодВозврата.Вставить("ВариантУчетаСезонныхКолебаний", ВариантУчетаСезонныхКолебаний);
		
		Оповестить("ЗакрытиеФормы", , ЭтаФорма);
		Закрыть(КодВозврата);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура НастроитьФормуПоПравамИФункциональнымОпциям()
	
	ИспользоватьСезонныеКоэффициенты = ПолучитьФункциональнуюОпцию("ИспользоватьСезонныеКоэффициенты");
	Элементы.ПоСезоннымКоэффициентам.Доступность                   = ИспользоватьСезонныеКоэффициенты
		И ПериодРасчета <> Перечисления.Периодичность.Год;
	Элементы.КомментарийДоступностиСезонныхКоэффициентов.Видимость = Не ИспользоватьСезонныеКоэффициенты;
	
	ИспользоватьТоварныеКатегории = ПолучитьФункциональнуюОпцию("ИспользоватьТоварныеКатегории");
	Элементы.ПоАналогичномуПериодуПрошлогоГода.Доступность = ИспользоватьТоварныеКатегории;
	Элементы.КомментарийДоступностиАППГ.Видимость          = Не ИспользоватьТоварныеКатегории;
	
	ДоступныСезонныеКоэффициенты = ИспользоватьСезонныеКоэффициенты
		И ПравоДоступа("Просмотр", Метаданные.РегистрыСведений.СезонныеКоэффициенты);
	
	// Скроем от пользователя некорректный вариант
	Если (ВариантУчетаСезонныхКолебаний = Перечисления.УчетСезонныхКолебаний.ПоСезоннымКоэффициентам
		И Не ИспользоватьСезонныеКоэффициенты)
		Или (ВариантУчетаСезонныхКолебаний = Перечисления.УчетСезонныхКолебаний.ПоАналогичномуПериодуПрошлогоГода
		И Не ИспользоватьТоварныеКатегории) Тогда
		ВариантУчетаСезонныхКолебаний = Перечисления.УчетСезонныхКолебаний.НеУчитывать;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьЗаголовкиПодсказок(Форма)
	
	Если Форма.ПериодРасчета = ПредопределенноеЗначение("Перечисление.Периодичность.День") Тогда
		ТекущийПериод     = НСтр("ru = 'текущий день'");
		АналогичныйПериод = НСтр("ru = 'аналогичный текущему день прошлого года'");
	ИначеЕсли Форма.ПериодРасчета = ПредопределенноеЗначение("Перечисление.Периодичность.Неделя") Тогда
		ТекущийПериод     = НСтр("ru = 'текущая неделя'");
		АналогичныйПериод = НСтр("ru = 'аналогичная текущей неделя прошлого года'");
	ИначеЕсли Форма.ПериодРасчета = ПредопределенноеЗначение("Перечисление.Периодичность.Декада") Тогда
		ТекущийПериод     = НСтр("ru = 'текущая декада'");
		АналогичныйПериод = НСтр("ru = 'аналогичная текущей декада прошлого года'");
	ИначеЕсли Форма.ПериодРасчета = ПредопределенноеЗначение("Перечисление.Периодичность.Месяц") Тогда
		ТекущийПериод     = НСтр("ru = 'текущий месяц'");
		АналогичныйПериод = НСтр("ru = 'аналогичный текущему месяц прошлого года'");
	ИначеЕсли Форма.ПериодРасчета = ПредопределенноеЗначение("Перечисление.Периодичность.Квартал") Тогда
		ТекущийПериод     = НСтр("ru = 'текущий квартал'");
		АналогичныйПериод = НСтр("ru = 'аналогичный текущему квартал прошлого года'");
	ИначеЕсли Форма.ПериодРасчета = ПредопределенноеЗначение("Перечисление.Периодичность.Полугодие") Тогда
		ТекущийПериод     = НСтр("ru = 'текущее полугодие'");
		АналогичныйПериод = НСтр("ru = 'аналогичное текущему полугодие прошлого года'");
	ИначеЕсли Форма.ПериодРасчета = ПредопределенноеЗначение("Перечисление.Периодичность.Год") Тогда
		ТекущийПериод     = НСтр("ru = 'текущий год'");
		АналогичныйПериод = НСтр("ru = 'прошлый год'");
	Иначе
		ТекущийПериод     = НСтр("ru = '<период не указан>'");
		АналогичныйПериод = НСтр("ru = '<период не указан>'");
	КонецЕсли;
	
	ПредыдущийПериод = ОбеспечениеКлиентСервер.ОписаниеНастройки(Форма.ПериодРасчета, Форма.КоличествоПериодовРасчета);
	
	Форма.ПодсказкаПериодДействияРасчета = СтрШаблон(НСтр("ru = 'Период действия расчета: %1.'"), ТекущийПериод);
	
	РасчетСреднедневного = НСтр("ru = 'Среднедневное потребление расчитывается по данным за период: %1.'");
	
	Если Форма.ВариантУчетаСезонныхКолебаний = ПредопределенноеЗначение("Перечисление.УчетСезонныхКолебаний.ПоАналогичномуПериодуПрошлогоГода") Тогда
		Коррекция = НСтр("ru = 'Среднедневное потребление корректируется согласно динамике потребления соответствующей товарной категории. Динамика потребления по товарной категории формируется по данным за %1 и за аналогичный период относительно прошлого года.'");
		
		Форма.ПодсказкаРасчетСреднедневногоПотребления = Новый ФорматированнаяСтрока(
			СтрШаблон(РасчетСреднедневного, АналогичныйПериод), Символы.ПС, СтрШаблон(Коррекция, ПредыдущийПериод));
	ИначеЕсли Форма.ВариантУчетаСезонныхКолебаний = ПредопределенноеЗначение("Перечисление.УчетСезонныхКолебаний.ПоСезоннымКоэффициентам") Тогда
		СсылкаНаФорму = ?(Форма.ДоступныСезонныеКоэффициенты, "e1cib/command/РегистрСведений.СезонныеКоэффициенты.Команда.СезонныеКоэффициенты", "");
		Коррекция = Новый ФорматированнаяСтрока(
			НСтр("ru = 'Среднедневное потребление корректируется согласно'"),
			" ",
			Новый ФорматированнаяСтрока(НСтр("ru = 'сезонным коэффициентам'"),,,, СсылкаНаФорму),
			" ",
			НСтр("ru = 'соответствующей сезонной группы.'"));
		
		Форма.ПодсказкаРасчетСреднедневногоПотребления = Новый ФорматированнаяСтрока(
			СтрШаблон(РасчетСреднедневного, ПредыдущийПериод), Символы.ПС, Коррекция);
	Иначе
		Форма.ПодсказкаРасчетСреднедневногоПотребления = Новый ФорматированнаяСтрока(
			СтрШаблон(РасчетСреднедневного, ПредыдущийПериод));
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьБлокировкуПоСезоннымКоэффицентам()
	
	ЭтоГод = ПериодРасчета = Перечисления.Периодичность.Год;
	
	Элементы.ПоСезоннымКоэффициентам.Доступность                     = Не ЭтоГод И ПолучитьФункциональнуюОпцию("ИспользоватьСезонныеКоэффициенты");
	Элементы.КомментарийНевозможностиСезонныхКоэффициентов.Видимость = ЭтоГод;
	
	Если ЭтоГод И ВариантУчетаСезонныхКолебаний = Перечисления.УчетСезонныхКолебаний.ПоСезоннымКоэффициентам Тогда
		ВариантУчетаСезонныхКолебаний = Перечисления.УчетСезонныхКолебаний.НеУчитывать;
	КонецЕсли;
	
	ПредыдущийПериодРасчетаБылГод = ЭтоГод;
	
КонецПроцедуры

&НаСервере
Процедура СохранитьПараметры()
	
	// Запись констант осуществляется в привелигированном режиме.
	УстановитьПривилегированныйРежим(Истина);
	
	Константы.ПериодРасчетаТоварныхОграничений.Установить(ПериодРасчета);
	Константы.КоличествоПериодовРасчетаТоварныхОграничений.Установить(КоличествоПериодовРасчета);
	Константы.ВариантУчетаСезонныхКолебаний.Установить(ВариантУчетаСезонныхКолебаний);
	
	УстановитьПривилегированныйРежим(Ложь);
	
КонецПроцедуры

#КонецОбласти

Связанные материалы