Виды бюджетов / Форма свойств периода / Модуль формы

файл


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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	ПериодичностьБюджета = Неопределено;
	Если НЕ Параметры.Свойство("Периодичность",            ПериодичностьБюджета)
	 ИЛИ НЕ Параметры.Свойство("ДополнительнаяИнформация", ПериодичностьПериодов)
	 ИЛИ НЕ Параметры.Свойство("СпособПланирования") Тогда
		ТекстСообщения = НСтр("ru='Непосредственное открытие этой формы не предусмотрено. Открытие формы выполняется при добавлении периода в вид бюджета.'");
		ВызватьИсключение ТекстСообщения;
	КонецЕсли;
	
	Если Параметры.СпособПланирования = Перечисления.СпособыСоставленияБюджетов.НаФиксированныйПериод Тогда
		КоличествоПериодов = 1;
	Иначе
		КоличествоПериодов = Параметры.КоличествоПериодовСкользящегоБюджета;
	КонецЕсли;
	
	Кэш = Новый Соответствие;
	НомерПериода = 0;
	
	Для Сч = 1 По КоличествоПериодов Цикл
	
		ТекущаяДата = Дата(1985, 1, 1);
		КонецПериода = БюджетированиеКлиентСервер.ДатаКонцаПериода(ТекущаяДата, ПериодичностьБюджета);
		
		ЛокальныйНомерПериода = 0;
		
		Пока ТекущаяДата < КонецПериода Цикл
			
			Представление = "";
			ЛокальныйНомерПериода = ЛокальныйНомерПериода + 1;
			Если ПериодичностьПериодов = Перечисления.Периодичность.Месяц
				И ПериодичностьБюджета = Перечисления.Периодичность.Год Тогда
				
				ФорматнаяСтрока = НСтр("ru = 'ДФ=MMMM'");
				Представление = Формат(Дата(1985, ЛокальныйНомерПериода, 1), ФорматнаяСтрока);
				
			ИначеЕсли ПериодичностьПериодов = Перечисления.Периодичность.День
				И ПериодичностьБюджета = Перечисления.Периодичность.Неделя Тогда
				
				ФорматнаяСтрока = НСтр("ru = 'ДФ=dddd'");
				Представление = Формат(Дата(1985, 1, ЛокальныйНомерПериода), ФорматнаяСтрока);
				
			ИначеЕсли ПериодичностьПериодов <> ПериодичностьБюджета Тогда
				
				Представление = ИмяПериода(НомерПериода + 1, ПериодичностьПериодов);
				
			КонецЕсли;
			
			ТекущаяДата = БюджетированиеКлиентСервер.ДобавитьИнтервал(ТекущаяДата, ПериодичностьПериодов, 1, Кэш);
			
			Если КоличествоПериодов > 1 Тогда
				Если ПустаяСтрока(Представление) Тогда
					Представление = ИмяПериода(Сч, ПериодичностьБюджета);
				Иначе
					Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru = '%1, %3'"),
						ИмяПериода(Сч, ПериодичностьБюджета),
						Представление);
				КонецЕсли;
			КонецЕсли;
			
			Если ПустаяСтрока(Представление) Тогда
				Представление = Строка(ПериодичностьПериодов);
			КонецЕсли;
			
			СписокПериодов.Добавить(НомерПериода, Представление, Истина);
			НомерПериода = НомерПериода + 1;
			
		КонецЦикла;
	КонецЦикла;
	
	Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
		НСтр("ru = 'Период %1'"),
		НРег(Строка(ПериодичностьПериодов)));
	
	УправлениеФормой();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВсеПериодыПриИзменении(Элемент)
	
	УправлениеФормой();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбранныеПериодыПриИзменении(Элемент)
	
	УправлениеФормой();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура Выбрать(Команда)
	
	Закрыть(ПолучитьРезультатВыбора());
	
КонецПроцедуры

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

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

&НаСервере
Процедура УправлениеФормой()
	
	Элементы.СписокПериодов.Доступность = ВыбранныеПериоды;
	
КонецПроцедуры

&НаСервере
Функция ИмяПериода(НомерПериода, Периодичность)
	
	Если Периодичность = Перечисления.Периодичность.День Тогда
		ОписаниеДлительности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1-й день'"),
			НомерПериода);
	ИначеЕсли Периодичность = Перечисления.Периодичность.Неделя Тогда
		ОписаниеДлительности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1-я неделя'"),
			НомерПериода);
	ИначеЕсли Периодичность = Перечисления.Периодичность.Декада Тогда
		ОписаниеДлительности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1-я декада'"),
			НомерПериода);
	ИначеЕсли Периодичность = Перечисления.Периодичность.Месяц Тогда
		ОписаниеДлительности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1-й месяц'"),
			НомерПериода);
	ИначеЕсли Периодичность = Перечисления.Периодичность.Квартал Тогда
		ОписаниеДлительности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1-й квартал'"),
			НомерПериода);
	ИначеЕсли Периодичность = Перечисления.Периодичность.Полугодие Тогда
		ОписаниеДлительности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1-е полугодие'"),
			НомерПериода);
	ИначеЕсли Периодичность = Перечисления.Периодичность.Год Тогда
		ОписаниеДлительности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1-й год'"),
			НомерПериода);
	КонецЕсли;
	
	Возврат ОписаниеДлительности;
	
КонецФункции

&НаСервере
Процедура ДобавитьСтрокуРезультата(Результат, Наименование, ВыбранныйПериод = Неопределено)
	
	НоваяСтрока = Новый Структура("НаименованиеДляПечати, СтатьяПоказательТипИзмерения, ЗначениеАналитики, ЭтоАналитикаПрочее");
	НоваяСтрока.НаименованиеДляПечати 			= Наименование;
	НоваяСтрока.СтатьяПоказательТипИзмерения 	= ПериодичностьПериодов;
	НоваяСтрока.ЗначениеАналитики 				= ВыбранныйПериод;
	НоваяСтрока.ЭтоАналитикаПрочее 				= Ложь;
	
	Результат.Добавить(НоваяСтрока);
	
КонецПроцедуры

&НаСервере
Функция ПолучитьРезультатВыбора()
	
	Результат = Новый Массив;
	
	Если Не ВыбранныеПериоды Тогда
		ДобавитьСтрокуРезультата(Результат, Строка(ПериодичностьПериодов));
	Иначе
		Для Каждого Элемент Из СписокПериодов Цикл
			Если Элемент.Пометка Тогда
				ДобавитьСтрокуРезультата(Результат, Элемент.Представление, Элемент.Значение);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

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