Договоры аренды (лизинга) / Загрузка графика оплат и начислений / Модуль формы

файл

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

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

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

КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗаписатьГрафик(Команда)
	
	ВыполнитьЗагрузкуГрафика();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытьФорму(Команда)
	
	Закрыть();
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтотОбъект, Команда);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВыполнитьЗагрузкуГрафика()
	
	АдресГрафика = ЗагрузитьГрафикСервер();
	
	Если АдресГрафика = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Модифицированность = Ложь;
	
	ПоказатьОповещениеПользователя(НСтр("ru = 'Загрузка графика завершена'"),,, БиблиотекаКартинок.Информация32);

	Закрыть(АдресГрафика);
	
КонецПроцедуры

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

			ДанныеСтроки = Новый Структура;
			Для Каждого Поле Из ПоляЗагрузки Цикл
				
				ТекстЗначения = ТабличныйДокумент.Область("R" + СтроковыйНомер + Поле.Значение).Текст;
				Если Поле.Ключ = "Дата" Тогда
					ЗначениеПоля = ТекстВДату(ТекстЗначения, СтроковыйНомер, Поле.Ключ);
				Иначе
					ЗначениеПоля = ТекстВЧисло(ТекстЗначения, СтроковыйНомер, Поле.Ключ);
				КонецЕсли;
				ДанныеСтроки.Вставить(Поле.Ключ, ЗначениеПоля);
				
			КонецЦикла;
			
		Исключение
			ОбщегоНазначения.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		КонецПопытки;
		
		Если ЗначениеЗаполнено(ДанныеСтроки) Тогда

			ВсеПоляЗаполнены = ЗначениеЗаполнено(ДанныеСтроки.Дата);
			Если ВсеПоляЗаполнены Тогда
				СуммаПолей = 0;
				Для Каждого Поле Из ПараметрыЗагрузки.ПоляКонтроля Цикл
					СуммаПолей = СуммаПолей + ДанныеСтроки[Поле];
				КонецЦикла;
				Если СуммаПолей = 0 Тогда
					ВсеПоляЗаполнены = Ложь;
					ЗагруженоБезОшибок = Ложь;
					ТекстСообщения = СтрШаблон(НСтр("ru='Не удалось загрузить строку %1, т.к. не заполнены суммы'"), СтроковыйНомер);
					ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
				КонецЕсли;
			КонецЕсли;
			
			Если ВсеПоляЗаполнены Тогда
				НоваяЗапись = ЗаписиГрафика.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяЗапись, ДанныеСтроки);
			КонецЕсли;
			
		КонецЕсли;
		
		НомерСтроки = НомерСтроки + 1;
		СтроковыйНомер = Формат(НомерСтроки, "ЧН=0; ЧГ=0");
		
		Попытка
			ЗаполненаДата = ЗначениеЗаполнено(ТабличныйДокумент.Область("R" + СтроковыйНомер + ПоляЗагрузки.Дата).Текст);
		Исключение
			ОбщегоНазначения.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		КонецПопытки;
		
	КонецЦикла;
	
	Если ЗагруженоБезОшибок Тогда
		АдресГрафика = ПоместитьВоВременноеХранилище(ЗаписиГрафика.Выгрузить(), УникальныйИдентификаторВладельца);
	Иначе
		АдресГрафика = Неопределено;
	КонецЕсли;
	
	Возврат АдресГрафика;
	
КонецФункции

&НаСервере
Функция ПараметрыЗагрузки()
	
	ПараметрыЗагрузки = Новый Структура;
	ПоляЗагрузки = Новый Структура("Дата", "C1");
	 
	Если ИмяГрафика = "ГрафикНачисленияПроцентов" Тогда
		ПоляЗагрузки.Вставить("Проценты", "C2");
	Иначе
		ПоляЗагрузки.Вставить("УслугаПоАренде", "C2");
	КонецЕсли;
	
	Если ЕстьОбеспечительныйПлатеж Тогда
		ПоляЗагрузки.Вставить("ОбеспечительныйПлатеж", "C3");
	КонецЕсли;
	
	Если ЕстьВыкупПредметовАренды Тогда
		ПоляЗагрузки.Вставить("ВыкупнаяСтоимость", "C4");
	КонецЕсли;
	
	ПараметрыЗагрузки.Вставить("Поля", ПоляЗагрузки);
	
	//
	МассивПолей = Новый Массив;
	
	Если ИмяГрафика = "ГрафикНачисленияПроцентов" Тогда
		МассивПолей.Добавить("Проценты");
	Иначе
		МассивПолей.Добавить("УслугаПоАренде");
	КонецЕсли;
	
	Если ЕстьОбеспечительныйПлатеж Тогда
		МассивПолей.Добавить("ОбеспечительныйПлатеж");
	КонецЕсли;
	
	Если ЕстьВыкупПредметовАренды Тогда
		МассивПолей.Добавить("ВыкупнаяСтоимость");
	КонецЕсли;
	
	ПараметрыЗагрузки.Вставить("ПоляКонтроля", МассивПолей);
	
	Возврат ПараметрыЗагрузки;
	
КонецФункции

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

&НаСервере
Процедура СообщитьОбОшибкеПреобразования(НомерСтроки, ИмяКолонки, СтроковоеЗначение)
	
	ШаблонТекста = НСтр("ru='Строка №%1 колонка ""%2"" - ошибка преобразования значения ""%3""
		|Строка не загружена.'");
	Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, НомерСтроки, ИмяКолонки, СтроковоеЗначение);
	ОбщегоНазначения.СообщитьПользователю(Текст);
	
КонецПроцедуры

&НаСервере
Функция ТекстВДату(Знач СтроковоеЗначение, НомерСтроки, ИмяКолонки, Разделитель = ".")
	
	Цифры = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтроковоеЗначение,Разделитель);
	
	Попытка
		Результат = ?(СтрДлина(Цифры[2]) = 2, "20" + Цифры[2], Цифры[2])
			+ Формат(Цифры[1], "ЧЦ=2; ЧВН=;")
			+ Формат(Цифры[0], "ЧЦ=2; ЧВН=;");
		Результат = Дата(Результат);
	Исключение
		СообщитьОбОшибкеПреобразования(НомерСтроки, ИмяКолонки, СтроковоеЗначение);
	КонецПопытки;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Функция ТекстВЧисло(СтроковоеЗначение, НомерСтроки, ИмяКолонки)
	
	Если ПустаяСтрока(СтроковоеЗначение) ИЛИ СтроковоеЗначение = Неопределено Тогда
		Возврат 0;
	КонецЕсли;
	
	Попытка
		Результат = Число(СтрЗаменить(СтроковоеЗначение," ",""));
	Исключение
		СообщитьОбОшибкеПреобразования(НомерСтроки, ИмяКолонки, СтроковоеЗначение);
	КонецПопытки;
	Возврат Результат;
	
КонецФункции

&НаКлиенте
Процедура ПоказатьПодтверждениеЗакрытияФормыЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	ВыполнитьЗагрузкуГрафика();
	
КонецПроцедуры

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

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