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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("Автотест") Тогда
		Возврат;
	КонецЕсли;

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

	ГрафикиДоговора = ПолучитьИзВременногоХранилища(ПараметрыГрафика.ГрафикиДоговора);

	ГрафикОплатУслуг.Загрузить(ГрафикиДоговора.ГрафикОплатУслуг);
	ГрафикНачисленияУслуг.Загрузить(ГрафикиДоговора.ГрафикНачисленияУслуг);
	ГрафикНачисленияПроцентов.Загрузить(ГрафикиДоговора.ГрафикНачисленияПроцентов);

	Если Параметры.ИмяГрафика = "ГрафикНачисленияУслуг" Тогда
		Элементы.СтраницыГрафики.ТекущаяСтраница = Элементы.СтраницаГрафикНачислений;
	ИначеЕсли Параметры.ИмяГрафика = "ГрафикНачисленияПроцентов" Тогда
		Элементы.СтраницыГрафики.ТекущаяСтраница = Элементы.СтраницаГрафикПроцентов;
	Иначе
		Элементы.СтраницыГрафики.ТекущаяСтраница = Элементы.СтраницаГрафикОплат;
	КонецЕсли;

	Если НЕ ПараметрыГрафика.СлужебныеПараметрыФормы.ИспользуетсяУчетАрендыПоФСБУ25_2018 ИЛИ БезДисконтирования Тогда
		Элементы.ГрафикНачисленияПроцентов.Видимость = Ложь;
		Элементы.ГрафикНачисленияПроцентовВведенВручную.Видимость = Ложь;
	КонецЕсли;
	
	Если НЕ ЕстьОбеспечительныйПлатеж Тогда
		
		Элементы.ГрафикОплатУслугОбеспечительныйПлатеж.Видимость = Ложь;
		Элементы.ГрафикОплатУслугОбеспечительныйПлатежНДС.Видимость = Ложь;
		Элементы.ГрафикНачисленияУслугОбеспечительныйПлатеж.Видимость = Ложь;
		Элементы.ГрафикНачисленияУслугОбеспечительныйПлатежНДС.Видимость = Ложь;
		
		Элементы.Оплата_ОбеспечительныйПлатеж_Итого.Видимость = Ложь;
		Элементы.Оплата_ОбеспечительныйПлатеж_ИтогоВалюта.Видимость = Ложь;
		Элементы.Начисление_ОбеспечительныйПлатеж_Итого.Видимость = Ложь;
		Элементы.Начисление_ОбеспечительныйПлатеж_ИтогоВалюта.Видимость = Ложь;
		
	КонецЕсли;
	
	Если НЕ ЕстьВыкупПредметовАренды Тогда
		
		Элементы.ГрафикОплатУслугВыкупнаяСтоимость.Видимость = Ложь;
		Элементы.ГрафикОплатУслугВыкупнаяСтоимостьНДС.Видимость = Ложь;
		
		Элементы.Оплата_ВыкупнаяСтоимость_Итого.Видимость = Ложь;
		Элементы.Оплата_ВыкупнаяСтоимость_ИтогоВалюта.Видимость = Ложь;
		Элементы.Начисление_ВыкупнаяСтоимость_Итого.Видимость = Ложь;
		Элементы.Начисление_ВыкупнаяСтоимость_ИтогоВалюта.Видимость = Ложь;
		
	КонецЕсли;
	
	Если НЕ ЕстьОбеспечительныйПлатеж И НЕ ЕстьВыкупПредметовАренды Тогда
		Элементы.ГрафикОплатУслугУслугаПоАренде.АвтоОтметкаНезаполненного = Истина;
		Элементы.ГрафикНачисленияУслугУслугаПоАренде.АвтоОтметкаНезаполненного = Истина;
	КонецЕсли;

	Если УчетНДСУП.НезначащаяСтавка(СтавкаНДС)
		ИЛИ НЕ ЗначениеЗаполнено(СтавкаНДС) Тогда
		
		Элементы.ГрафикОплатУслугУслугаПоАрендеНДС.Видимость = Ложь;
		Элементы.ГрафикОплатУслугОбеспечительныйПлатежНДС.Видимость = Ложь;
		Элементы.ГрафикОплатУслугВыкупнаяСтоимостьНДС.Видимость = Ложь;
		
		Элементы.ГрафикНачисленияУслугУслугаПоАрендеНДС.Видимость = Ложь;
		Элементы.ГрафикНачисленияУслугОбеспечительныйПлатежНДС.Видимость = Ложь;
		
		Элементы.Оплата_НДС_Итого.Видимость = Ложь;
		Элементы.Оплата_НДС_ИтогоВалюта.Видимость = Ложь;
		Элементы.Начисление_НДС_Итого.Видимость = Ложь;
		Элементы.Начисление_НДС_ИтогоВалюта.Видимость = Ложь;
		
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(ДатаИзмененияАренды) Тогда
		Элементы.ЗаполнитьПоПредыдущимУсловиям_ГрафикОплат.Видимость = Ложь;
		Элементы.ЗаполнитьПоПредыдущимУсловиям_ГрафикНачислений.Видимость = Ложь;
	Иначе
		Элементы.ГрафикОплатУслугОбеспечительныйПлатеж.ТолькоПросмотр = Истина;
		Элементы.ГрафикОплатУслугОбеспечительныйПлатежНДС.ТолькоПросмотр = Истина;
	КонецЕсли;
	
	// Скрытие группы колонок и измение заголовка
	Если НЕ Элементы.ГрафикОплатУслугУслугаПоАрендеНДС.Видимость Тогда
		Элементы.ГрафикОплатУслугГруппаУслугаПоАренде.ОтображатьВШапке = Ложь;
		Элементы.ГрафикОплатУслугУслугаПоАренде.Заголовок = НСтр("ru = 'Сумма услуги по аренде'");
	КонецЕсли;
	
	Если НЕ Элементы.ГрафикОплатУслугОбеспечительныйПлатежНДС.Видимость Тогда
		Элементы.ГрафикОплатУслугГруппаОбеспечительныйПлатеж.ОтображатьВШапке = Ложь;
		Элементы.ГрафикОплатУслугОбеспечительныйПлатеж.Заголовок = НСтр("ru = 'Сумма обеспечительного платежа'");
	КонецЕсли;
	
	Если НЕ Элементы.ГрафикОплатУслугВыкупнаяСтоимостьНДС.Видимость Тогда
		Элементы.ГрафикОплатУслугГруппаВыкупнаяСтоимость.ОтображатьВШапке = Ложь;
		Элементы.ГрафикОплатУслугВыкупнаяСтоимость.Заголовок = НСтр("ru = 'Сумма выкупной стоимости'");
	КонецЕсли;
	
	Если НЕ Элементы.ГрафикНачисленияУслугУслугаПоАрендеНДС.Видимость Тогда
		Элементы.ГрафикНачисленияУслугГруппаУслугаПоАренде.ОтображатьВШапке = Ложь;
		Элементы.ГрафикНачисленияУслугУслугаПоАренде.Заголовок = НСтр("ru = 'Сумма услуги по аренде в части арендного платежа'");
	КонецЕсли;
	
	Если НЕ Элементы.ГрафикНачисленияУслугОбеспечительныйПлатежНДС.Видимость Тогда
		Элементы.ГрафикНачисленияУслугГруппаОбеспечительныйПлатеж.ОтображатьВШапке = Ложь;
		Элементы.ГрафикНачисленияУслугОбеспечительныйПлатеж.Заголовок = НСтр("ru = 'Сумма услуги по аренде в части зачета обеспечительного платежа'");
	КонецЕсли;
	
	Если НЕ ЕстьОбеспечительныйПлатеж Тогда
		Элементы.ГрафикНачисленияУслугГруппаУслугаПоАренде.Заголовок = НСтр("ru = 'Услуга по аренде'");
	КонецЕсли;
	
	Заголовок = СтрШаблон(НСтр("ru = 'График оплат и начислений по договору ""%1""'"), Строка(Параметры.Договор));
	
	ОбновитьПодвалГрафикаОплатУслуг(ЭтотОбъект);
	ОбновитьПодвалГрафикаНачисленияУслуг(ЭтотОбъект);
	ОбновитьИтоги(ЭтотОбъект);

	НастроитьЗависимыеЭлементыФормыНаКлиентеНаСервере(ЭтотОбъект);

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

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

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

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	
	УчетАрендованныхОС.ПроверитьГрафик(
		ГрафикОплатУслуг, 
		"ГрафикОплатУслуг", 
		"УслугаПоАренде,ОбеспечительныйПлатеж,ВыкупнаяСтоимость", 
		Отказ);
		
	УчетАрендованныхОС.ПроверитьГрафик(
		ГрафикНачисленияУслуг, 
		"ГрафикНачисленияУслуг", 
		"УслугаПоАренде,ОбеспечительныйПлатеж", 
		Отказ);

	УчетАрендованныхОС.ПроверитьГрафик(
		ГрафикНачисленияПроцентов, 
		"ГрафикНачисленияПроцентов", 
		"Проценты", 
		Отказ);

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

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

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

&НаКлиенте
Процедура ГрафикНачисленияПроцентовВведенВручнуюПриИзменении(Элемент)

	НастроитьЗависимыеЭлементыФормыНаКлиентеНаСервере(ЭтотОбъект, Элемент.Имя);

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыГрафикОплатУслуг

&НаКлиенте
Процедура ГрафикОплатУслугПриИзменении(Элемент)
	
	ОбновитьПодвалГрафикаОплатУслуг(ЭтотОбъект);
	ОбновитьИтоги(ЭтотОбъект);

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

&НаКлиенте
Процедура ГрафикОплатУслугУслугаПоАрендеПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.ГрафикОплатУслуг.ТекущиеДанные;
	ТекущиеДанные.УслугаПоАрендеНДС = РассчитатьСуммуНДС(ТекущиеДанные.УслугаПоАренде);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ГрафикОплатУслугВыкупнаяСтоимостьПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.ГрафикОплатУслуг.ТекущиеДанные;
	ТекущиеДанные.ВыкупнаяСтоимостьНДС = РассчитатьСуммуНДС(ТекущиеДанные.ВыкупнаяСтоимость);

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

&НаКлиенте
Процедура ГрафикОплатУслугПередУдалением(Элемент, Отказ)

	ГрафикПередУдалением(Элемент, Отказ);

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

&НаКлиенте
Процедура ГрафикОплатУслугДатаПриИзменении(Элемент)
	
	ПриИзмененииДатыГрафика("ГрафикОплатУслуг");
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыГрафикНачисленияУслуг

&НаКлиенте
Процедура ГрафикНачисленияУслугПриИзменении(Элемент)
	
	ОбновитьПодвалГрафикаНачисленияУслуг(ЭтотОбъект);
	ОбновитьИтоги(ЭтотОбъект);

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

&НаКлиенте
Процедура ГрафикНачисленияУслугУслугаПоАрендеПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.ГрафикНачисленияУслуг.ТекущиеДанные;
	ТекущиеДанные.УслугаПоАрендеНДС = РассчитатьСуммуНДС(ТекущиеДанные.УслугаПоАренде);

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

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

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

&НаКлиенте
Процедура ГрафикНачисленияУслугПередУдалением(Элемент, Отказ)

	ГрафикПередУдалением(Элемент, Отказ);

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

&НаКлиенте
Процедура ГрафикНачисленияУслугДатаПриИзменении(Элемент)
	
	ПриИзмененииДатыГрафика("ГрафикНачисленияУслуг");
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыГрафикНачисленияПроцентов

&НаКлиенте
Процедура ГрафикНачисленияПроцентовПередУдалением(Элемент, Отказ)
	
	ГрафикПередУдалением(Элемент, Отказ);

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

&НаКлиенте
Процедура ГрафикНачисленияПроцентовДатаПриИзменении(Элемент)
	
	ПриИзмененииДатыГрафика("ГрафикНачисленияПроцентов");
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПеренестиВДокумент(Команда)
	
	ЗавершитьРедактирование();

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

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

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

&НаКлиенте
Процедура ЗагрузитьГрафик_ГрафикНачислений(Команда)
	
	ЗагрузитьГрафик("ГрафикНачисленияУслуг");

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

&НаКлиенте
Процедура ЗагрузитьГрафик_ГрафикПроцентов(Команда)
	
	ЗагрузитьГрафик("ГрафикНачисленияПроцентов");

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

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

&НаКлиенте
Процедура ЗаполнитьСуммы_ГрафикНачислений(Команда)
	
	ЗаполнитьСуммыВГрафике("ГрафикНачисленияУслуг");
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПоПредыдущимУсловиям_ГрафикНачислений(Команда)
	
	ЗаполнитьПоПредыдущимУсловиям("ГрафикНачисленияУслуг");
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПоПредыдущимУсловиям_ГрафикОплат(Команда)
	
	ЗаполнитьПоПредыдущимУсловиям("ГрафикОплатУслуг");
	
КонецПроцедуры
#КонецОбласти

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

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();

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

	#Область НДС
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Оплата_НДС_Итого.Имя);
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Начисление_НДС_Итого.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Оплата_НДС_Итого");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Начисление_НДС_Итого");
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста);
	#КонецОбласти
	
	#Область ГрафикОплат
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ГрафикОплатУслуг.Имя);
	
	ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора.Использование = Истина;
	ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ГрафикОплатУслуг.Дата");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ДатаИзмененияАренды");
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ГрафикОплатУслуг.Дата");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	#КонецОбласти
	
	#Область ГрафикНачислений
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ГрафикНачисленияУслуг.Имя);
	
	ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора.Использование = Истина;
	ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ГрафикНачисленияУслуг.Дата");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ДатаИзмененияАренды");
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ГрафикНачисленияУслуг.Дата");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	#КонецОбласти
	
	#Область ГрафикПроцентов
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ГрафикНачисленияПроцентов.Имя);
	
	ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора.Использование = Истина;
	ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ГрафикНачисленияПроцентов.Дата");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ДатаИзмененияАренды");
	
	ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ГрафикНачисленияПроцентов.Дата");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветНедоступногоТекста);
	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	#КонецОбласти
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗагрузитьГрафикЗавершение(РезультатЗакрытия, ИмяГрафика) Экспорт
	
	Если ТипЗнч(РезультатЗакрытия) = Тип("Строка") 
		И ЭтоАдресВременногоХранилища(РезультатЗакрытия) Тогда
			
		ЗагрузитьГрафикЗавершениеНаСервере(РезультатЗакрытия, ИмяГрафика);
	КонецЕсли;

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

&НаСервере
Процедура ЗагрузитьГрафикЗавершениеНаСервере(Знач АдресРезультата, Знач ИмяГрафика)
	
	ТаблицаГрафика = ПолучитьИзВременногоХранилища(АдресРезультата);
	
	Если ИмяГрафика = "ГрафикОплатУслуг" Тогда
		ТаблицаПриемник = ГрафикОплатУслуг;
	ИначеЕсли ИмяГрафика = "ГрафикНачисленияУслуг" Тогда
		ТаблицаПриемник = ГрафикНачисленияУслуг;
	ИначеЕсли ИмяГрафика = "ГрафикНачисленияПроцентов" Тогда
		ТаблицаПриемник = ГрафикНачисленияПроцентов;
	КонецЕсли;

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

	ОбновитьИтоги(ЭтотОбъект);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗавершитьРедактирование()
	
	ОчиститьСообщения();

	Если НЕ ПроверитьЗаполнение() Тогда
		ТекстВопроса = НСтр("ru = 'Не заполнены обязательные поля.
                             |Можно завершить редактирование или продолжить редактирование.'");
		СписокКнопок = Новый СписокЗначений;
		СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Завершить редактирование'"));
		СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Продолжить редактирование'"));
		ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьРедактированиеЗавершение", ЭтотОбъект);
		ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, СписокКнопок,, КодВозвратаДиалога.Да);
	Иначе
		ЗавершитьРедактированиеЗавершение(КодВозвратаДиалога.Да, Неопределено);
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ЗавершитьРедактированиеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;

	Модифицированность = Ложь;

	Закрыть(ПоместитьГрафикиВХранилище());
	
КонецПроцедуры

&НаСервере
Функция ПоместитьГрафикиВХранилище()
	
	ГрафикНачисленияУслуг.Сортировать("Дата");
	ГрафикОплатУслуг.Сортировать("Дата");
	ГрафикНачисленияПроцентов.Сортировать("Дата");

	ГрафикиДоговора = Новый Структура;
	ГрафикиДоговора.Вставить("ГрафикНачисленияПроцентовВведенВручную", ГрафикНачисленияПроцентовВведенВручную);
	ГрафикиДоговора.Вставить("ГрафикНачисленияУслуг", ГрафикНачисленияУслуг.Выгрузить());
	ГрафикиДоговора.Вставить("ГрафикОплатУслуг", ГрафикОплатУслуг.Выгрузить());
	ГрафикиДоговора.Вставить("ГрафикНачисленияПроцентов", ГрафикНачисленияПроцентов.Выгрузить());
	
	СуммаПроцентов = 0;
	Для Каждого СтрокаПроценты Из ГрафикНачисленияПроцентов Цикл
		Если СтрокаПроценты.Дата < ДатаИзмененияАренды Тогда
			Продолжить;
		КонецЕсли;
		СуммаПроцентов = СуммаПроцентов + СтрокаПроценты.Проценты;
	КонецЦикла;
	ГрафикиДоговора.Вставить("СуммаПроцентов", СуммаПроцентов);
	
	Возврат ПоместитьВоВременноеХранилище(ГрафикиДоговора, УникальныйИдентификатор);
	
КонецФункции

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьИтоги(Форма)
	
	// Итоги по графику начислений
	НачислениеУслугаПоАрендеПослеИзменений = 0;
	НачислениеОбеспечительныйПлатежПослеИзменений = 0;
	НачислениеУслугаПоАрендеНДСПослеИзменений = 0;
	НачислениеОбеспечительныйПлатежНДСПослеИзменений = 0;
	НачислениеОбеспечительныйПлатежДоИзменений = 0;
	НачислениеОбеспечительныйПлатежНДСДоИзменений = 0;

	Для Каждого СтрокаГрафика Из Форма.ГрафикНачисленияУслуг Цикл

		Если СтрокаГрафика.Дата >= Форма.ДатаИзмененияАренды Тогда
			НачислениеУслугаПоАрендеПослеИзменений = НачислениеУслугаПоАрендеПослеИзменений + СтрокаГрафика.УслугаПоАренде;
			НачислениеОбеспечительныйПлатежПослеИзменений = НачислениеОбеспечительныйПлатежПослеИзменений + СтрокаГрафика.ОбеспечительныйПлатеж;
			НачислениеУслугаПоАрендеНДСПослеИзменений = НачислениеУслугаПоАрендеНДСПослеИзменений + СтрокаГрафика.УслугаПоАрендеНДС;
			НачислениеОбеспечительныйПлатежНДСПослеИзменений = НачислениеОбеспечительныйПлатежНДСПослеИзменений + СтрокаГрафика.ОбеспечительныйПлатежНДС;
		Иначе
			НачислениеОбеспечительныйПлатежДоИзменений = НачислениеОбеспечительныйПлатежДоИзменений + СтрокаГрафика.ОбеспечительныйПлатеж;
			НачислениеОбеспечительныйПлатежНДСДоИзменений = НачислениеОбеспечительныйПлатежНДСДоИзменений + СтрокаГрафика.ОбеспечительныйПлатежНДС;
		КонецЕсли;

	КонецЦикла;

	Форма.Начисление_УслугаПоАренде_ПослеИзменений = НачислениеУслугаПоАрендеПослеИзменений;
	Форма.Начисление_ОбеспечительныйПлатеж_ПослеИзменений = НачислениеОбеспечительныйПлатежПослеИзменений;

	Форма.Начисление_НДС_ПослеИзменений =
	+ Форма.СуммаНДСВыкупаПредметовАренды
	+ НачислениеУслугаПоАрендеНДСПослеИзменений
	+ НачислениеОбеспечительныйПлатежНДСПослеИзменений;

	// Итоги по графику оплат
	ОплатаУслугаПоАрендеПослеИзменений = 0;
	ОплатаОбеспечительныйПлатежПослеИзменений = 0;
	ОплатаВыкупнаяСтоимостьПослеИзменений = 0;
	ОплатаУслугаПоАрендеНДСПослеИзменений = 0;
	ОплатаОбеспечительныйПлатежНДСПослеИзменений = 0;
	ОплатаВыкупнаяСтоимостьНДСПослеИзменений = 0;

	Для Каждого СтрокаГрафика Из Форма.ГрафикОплатУслуг Цикл

		Если СтрокаГрафика.Дата >= Форма.ДатаИзмененияАренды Тогда
			ОплатаУслугаПоАрендеПослеИзменений = ОплатаУслугаПоАрендеПослеИзменений + СтрокаГрафика.УслугаПоАренде;
			ОплатаВыкупнаяСтоимостьПослеИзменений = ОплатаВыкупнаяСтоимостьПослеИзменений + СтрокаГрафика.ВыкупнаяСтоимость;
			ОплатаУслугаПоАрендеНДСПослеИзменений = ОплатаУслугаПоАрендеНДСПослеИзменений + СтрокаГрафика.УслугаПоАрендеНДС;
			ОплатаВыкупнаяСтоимостьНДСПослеИзменений = ОплатаВыкупнаяСтоимостьНДСПослеИзменений + СтрокаГрафика.ВыкупнаяСтоимостьНДС;
		КонецЕсли; 
		ОплатаОбеспечительныйПлатежПослеИзменений = ОплатаОбеспечительныйПлатежПослеИзменений + СтрокаГрафика.ОбеспечительныйПлатеж;
		ОплатаОбеспечительныйПлатежНДСПослеИзменений = ОплатаОбеспечительныйПлатежНДСПослеИзменений + СтрокаГрафика.ОбеспечительныйПлатежНДС;

	КонецЦикла;

	Форма.Оплата_УслугаПоАренде_ПослеИзменений = ОплатаУслугаПоАрендеПослеИзменений;
	Форма.Оплата_ОбеспечительныйПлатеж_ПослеИзменений = ОплатаОбеспечительныйПлатежПослеИзменений - НачислениеОбеспечительныйПлатежДоИзменений;
	Форма.Оплата_ВыкупнаяСтоимость_ПослеИзменений = ОплатаВыкупнаяСтоимостьПослеИзменений;

	Форма.Оплата_НДС_ПослеИзменений = 
	ОплатаУслугаПоАрендеНДСПослеИзменений
	+ ОплатаОбеспечительныйПлатежНДСПослеИзменений
	+ ОплатаВыкупнаяСтоимостьНДСПослеИзменений
	- НачислениеОбеспечительныйПлатежНДСДоИзменений;

	Форма.Оплата_КоличествоСтрок = Форма.ГрафикОплатУслуг.Количество();
	Форма.Начисление_КоличествоСтрок = Форма.ГрафикНачисленияУслуг.Количество();
	Форма.Проценты_КоличествоСтрок = Форма.ГрафикНачисленияПроцентов.Количество();

	Начисление_ПослеИзменений = 
	Форма.СуммаВыкупаПредметовАренды
	+ Форма.Начисление_ОбеспечительныйПлатеж_ПослеИзменений
	+ Форма.Начисление_УслугаПоАренде_ПослеИзменений;

	Оплата_ПослеИзменений = 
	Форма.Оплата_ВыкупнаяСтоимость_ПослеИзменений
	+ Форма.Оплата_ОбеспечительныйПлатеж_ПослеИзменений
	+ Форма.Оплата_УслугаПоАренде_ПослеИзменений;

	Форма.Начисление_ПослеИзменений = ?(Начисление_ПослеИзменений <> 0, Строка(Начисление_ПослеИзменений) + " (" + Форма.ВалютаДокументаПредставление + ")", "");
	Форма.Оплата_ПослеИзменений = ?(Оплата_ПослеИзменений <> 0, Строка(Оплата_ПослеИзменений) + " (" + Форма.ВалютаДокументаПредставление + ")", "");
	
	Форма.Начисление_ОбеспечительныйПлатеж_Итого = Форма.ГрафикНачисленияУслуг.Итог("ОбеспечительныйПлатеж");
	Форма.Начисление_УслугаПоАренде_Итого = Форма.ГрафикНачисленияУслуг.Итог("УслугаПоАренде");
	
	Форма.Начисление_НДС_Итого =
		+ Форма.ГрафикОплатУслуг.Итог("ВыкупнаяСтоимостьНДС")
		+ Форма.ГрафикНачисленияУслуг.Итог("УслугаПоАрендеНДС")
		+ Форма.ГрафикНачисленияУслуг.Итог("ОбеспечительныйПлатежНДС");
	
	Форма.Оплата_ВыкупнаяСтоимость_Итого = Форма.ГрафикОплатУслуг.Итог("ВыкупнаяСтоимость");
	Форма.Оплата_ОбеспечительныйПлатеж_Итого = Форма.ГрафикОплатУслуг.Итог("ОбеспечительныйПлатеж");
	Форма.Оплата_УслугаПоАренде_Итого = Форма.ГрафикОплатУслуг.Итог("УслугаПоАренде");
	
	Форма.Оплата_НДС_Итого = 
		Форма.ГрафикОплатУслуг.Итог("УслугаПоАрендеНДС")
		+ Форма.ГрафикОплатУслуг.Итог("ОбеспечительныйПлатежНДС")
		+ Форма.ГрафикОплатУслуг.Итог("ВыкупнаяСтоимостьНДС");
	
КонецПроцедуры

&НаСервере
Функция ПолучитьДанныеГрафика()

	ТекстЗапроса = 
	"ВЫБРАТЬ
	|	УсловияДоговоровАренды.АктуальныеУсловияДоговора КАК АктуальныеУсловияДоговора,
	|	УсловияДоговоровАренды.СтавкаНДС КАК СтавкаНДС,
	|	УсловияДоговоровАренды.ГрафикНачисленияПроцентовВведенВручную КАК ГрафикНачисленияПроцентовВведенВручную
	|ПОМЕСТИТЬ втУсловияДоговоровАренды
	|ИЗ
	|	РегистрСведений.УсловияДоговоровАренды.СрезПоследних(, Договор = &Договор) КАК УсловияДоговоровАренды
	|ИНДЕКСИРОВАТЬ ПО
	|	АктуальныеУсловияДоговора
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	УсловияДоговоровАренды.СтавкаНДС КАК СтавкаНДС,
	|	УсловияДоговоровАренды.ГрафикНачисленияПроцентовВведенВручную КАК ГрафикНачисленияПроцентовВведенВручную
	|ИЗ
	|	втУсловияДоговоровАренды КАК УсловияДоговоровАренды
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДанныеГрафика.Дата КАК Дата,
	|	ДанныеГрафика.УслугаПоАренде КАК УслугаПоАренде,
	|	ДанныеГрафика.УслугаПоАрендеНДС КАК УслугаПоАрендеНДС,
	|	ДанныеГрафика.ОбеспечительныйПлатеж КАК ОбеспечительныйПлатеж,
	|	ДанныеГрафика.ОбеспечительныйПлатежНДС КАК ОбеспечительныйПлатежНДС,
	|	ДанныеГрафика.ВыкупнаяСтоимость КАК ВыкупнаяСтоимость,
	|	ДанныеГрафика.ВыкупнаяСтоимостьНДС КАК ВыкупнаяСтоимостьНДС
	|ИЗ
	|	РегистрСведений.ГрафикНачисленияУслугПоАренде КАК ДанныеГрафика
	|ГДЕ
	|	ДанныеГрафика.АктуальныеУсловияДоговора В (ВЫБРАТЬ Т.АктуальныеУсловияДоговора ИЗ втУсловияДоговоровАренды КАК Т)
	|	И ДанныеГрафика.Договор = &Договор
	|	И ДанныеГрафика.Активность
	|
	|УПОРЯДОЧИТЬ ПО
	|	Дата
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДанныеГрафика.Дата КАК Дата,
	|	ДанныеГрафика.УслугаПоАренде КАК УслугаПоАренде,
	|	ДанныеГрафика.УслугаПоАрендеНДС КАК УслугаПоАрендеНДС,
	|	ДанныеГрафика.ОбеспечительныйПлатеж КАК ОбеспечительныйПлатеж,
	|	ДанныеГрафика.ОбеспечительныйПлатежНДС КАК ОбеспечительныйПлатежНДС,
	|	ДанныеГрафика.ВыкупнаяСтоимость + ДанныеГрафика.ВыкупнаяСтоимостьАванс КАК ВыкупнаяСтоимость,
	|	ДанныеГрафика.ВыкупнаяСтоимостьНДС КАК ВыкупнаяСтоимостьНДС
	|ИЗ
	|	РегистрСведений.ГрафикОплатУслугПоАренде КАК ДанныеГрафика
	|ГДЕ
	|	ДанныеГрафика.АктуальныеУсловияДоговора В (ВЫБРАТЬ Т.АктуальныеУсловияДоговора ИЗ втУсловияДоговоровАренды КАК Т)
	|	И ДанныеГрафика.Договор = &Договор
	|	И ДанныеГрафика.Активность
	|
	|УПОРЯДОЧИТЬ ПО
	|	Дата
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДанныеГрафика.Дата КАК Дата,
	|	ДанныеГрафика.Проценты КАК Проценты
	|ИЗ
	|	РегистрСведений.ГрафикНачисленияПроцентовПоАренде КАК ДанныеГрафика
	|ГДЕ
	|	ДанныеГрафика.АктуальныеУсловияДоговора В (ВЫБРАТЬ Т.АктуальныеУсловияДоговора ИЗ втУсловияДоговоровАренды КАК Т)
	|	И ДанныеГрафика.Договор = &Договор
	|	И ДанныеГрафика.Активность
	|
	|УПОРЯДОЧИТЬ ПО
	|	Дата";
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("Договор", Параметры.Договор);
	
	Результат = Запрос.ВыполнитьПакет();
	
	СписокРеквизитов = "Организация,ВалютаВзаиморасчетов,ТипДоговора,Балансодержатель,ДатаНачалаДействия,
	|ВалютаВзаиморасчетов,СпособОпределенияСтоимостиАктивов,
	|ЕстьОбеспечительныйПлатеж,ЕстьВыкупПредметовАренды";
	РеквизитыДоговора = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.Договор, СписокРеквизитов);
	
	СлужебныеПараметрыФормы = Новый Структура;
	СлужебныеПараметрыФормы.Вставить("РеквизитыДоговора", РеквизитыДоговора);
	СлужебныеПараметрыФормы.Вставить(
		"ИспользуетсяУчетАрендыПоФСБУ25_2018",
		УчетАрендованныхОС.ИспользуетсяУчетАрендыПоФСБУ25_2018(РеквизитыДоговора.Организация));
	
	ПараметрыГрафика = Новый Структура;
	
	ПараметрыГрафика.Вставить("ТолькоПросмотр", Истина);
	ПараметрыГрафика.Вставить("СлужебныеПараметрыФормы", СлужебныеПараметрыФормы);
	ПараметрыГрафика.Вставить("ВалютаДокументаПредставление", Строка(РеквизитыДоговора.ВалютаВзаиморасчетов));
	ПараметрыГрафика.Вставить("ПроцентнаяСтавка", 0);
	ПараметрыГрафика.Вставить("ПриведеннаяСтоимость", 0);
	ПараметрыГрафика.Вставить("ДатаНачалаАренды", '000101010000');
	ПараметрыГрафика.Вставить("ДатаИзмененияАренды", '000101010000');
	ПараметрыГрафика.Вставить("Договор", Параметры.Договор);
	
	Выборка = Результат[Результат.ВГраница() - 3].Выбрать();
	Если Выборка.Следующий() Тогда
		ПараметрыГрафика.Вставить("СтавкаНДС", Выборка.СтавкаНДС);
		ПараметрыГрафика.Вставить("ГрафикНачисленияПроцентовВведенВручную", Выборка.ГрафикНачисленияПроцентовВведенВручную);
	Иначе
		ПараметрыГрафика.Вставить("СтавкаНДС", Справочники.СтавкиНДС.ПустаяСсылка());
		ПараметрыГрафика.Вставить("ГрафикНачисленияПроцентовВведенВручную", Ложь);
	КонецЕсли;
	
	ГрафикиДоговора = Новый Структура;
	ГрафикиДоговора.Вставить("ГрафикНачисленияУслуг", Результат[Результат.ВГраница() - 2].Выгрузить());
	ГрафикиДоговора.Вставить("ГрафикОплатУслуг", Результат[Результат.ВГраница() - 1].Выгрузить());
	ГрафикиДоговора.Вставить("ГрафикНачисленияПроцентов", Результат[Результат.ВГраница()].Выгрузить());
	ПараметрыГрафика.Вставить("ГрафикиДоговора", ПоместитьВоВременноеХранилище(ГрафикиДоговора, УникальныйИдентификатор));
	
	ПараметрыГрафика.Вставить("СуммаВыкупаПредметовАренды", ГрафикиДоговора.ГрафикНачисленияУслуг.Итог("ВыкупнаяСтоимость"));
	ПараметрыГрафика.Вставить("СуммаНДСВыкупаПредметовАренды", ГрафикиДоговора.ГрафикНачисленияУслуг.Итог("ВыкупнаяСтоимостьНДС"));

	Возврат ПараметрыГрафика;
	
КонецФункции

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

&НаКлиенте
Функция РассчитатьСуммуНДС(СуммаСНДС)
	
	ТекПроцентНДС = УчетНДСУПКлиентСервер.ЗначениеСтавкиНДС(СтавкаНДС);
	Возврат УчетНДСУПКлиентСервер.РассчитатьСуммуНДС(СуммаСНДС, ТекПроцентНДС, Истина);
	
КонецФункции

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

&НаСервере
Процедура ЗаполнитьПоПредыдущимУсловиямНаСервере(ИмяГрафика, Перезаполнить = Истина, ОбновлятьИтоги = Истина)
	
	ТекстыЗапроса = Новый Массив;
	
	ТекстУсловия = 
		"ВЫБРАТЬ
		|	УсловияДоговоровАрендыСрезПоследних.АктуальныеУсловияДоговора КАК АктуальныеУсловияДоговора
		|ПОМЕСТИТЬ втУсловияДоговора
		|ИЗ
		|	РегистрСведений.УсловияДоговоровАренды.СрезПоследних(&ГраницаПериода, Договор = &Договор) КАК УсловияДоговоровАрендыСрезПоследних";
	
	Если ИмяГрафика = "ГрафикНачисленияУслуг" Тогда
		
		ТекстГрафика = "ВЫБРАТЬ
		|	ГрафикНачисленияУслугПоАренде.Дата КАК Дата,
		|	ГрафикНачисленияУслугПоАренде.УслугаПоАренде КАК УслугаПоАренде,
		|	ГрафикНачисленияУслугПоАренде.УслугаПоАрендеНДС КАК УслугаПоАрендеНДС,
		|	ГрафикНачисленияУслугПоАренде.ОбеспечительныйПлатеж КАК ОбеспечительныйПлатеж,
		|	ГрафикНачисленияУслугПоАренде.ОбеспечительныйПлатежНДС КАК ОбеспечительныйПлатежНДС
		|ИЗ
		|	РегистрСведений.ГрафикНачисленияУслугПоАренде КАК ГрафикНачисленияУслугПоАренде
		|ГДЕ
		|	ГрафикНачисленияУслугПоАренде.АктуальныеУсловияДоговора В
		|			(ВЫБРАТЬ
		|				втУсловияДоговора.АктуальныеУсловияДоговора КАК АктуальныеУсловияДоговора
		|			ИЗ
		|				втУсловияДоговора КАК втУсловияДоговора)
		|	И ГрафикНачисленияУслугПоАренде.УслугаПоАренде + ГрафикНачисленияУслугПоАренде.ОбеспечительныйПлатеж <> 0";
		
		Если НЕ Перезаполнить Тогда
			ТекстГрафика = ТекстГрафика + "
				|	И ГрафикНачисленияУслугПоАренде.Дата < &Период";
		КонецЕсли;
		
	ИначеЕсли ИмяГрафика = "ГрафикОплатУслуг" Тогда
		
		ТекстГрафика = "ВЫБРАТЬ
		|	ГрафикОплатУслугПоАренде.Дата КАК Дата,
		|	ГрафикОплатУслугПоАренде.УслугаПоАренде КАК УслугаПоАренде,
		|	ГрафикОплатУслугПоАренде.УслугаПоАрендеНДС КАК УслугаПоАрендеНДС,
		|	ГрафикОплатУслугПоАренде.ОбеспечительныйПлатеж КАК ОбеспечительныйПлатеж,
		|	ГрафикОплатУслугПоАренде.ОбеспечительныйПлатежНДС КАК ОбеспечительныйПлатежНДС,
		|	ГрафикОплатУслугПоАренде.ВыкупнаяСтоимость + ГрафикОплатУслугПоАренде.ВыкупнаяСтоимостьАванс КАК ВыкупнаяСтоимость,
		|	ГрафикОплатУслугПоАренде.ВыкупнаяСтоимостьНДС КАК ВыкупнаяСтоимостьНДС
		|ИЗ
		|	РегистрСведений.ГрафикОплатУслугПоАренде КАК ГрафикОплатУслугПоАренде
		|ГДЕ
		|	ГрафикОплатУслугПоАренде.АктуальныеУсловияДоговора В
		|			(ВЫБРАТЬ
		|				втУсловияДоговора.АктуальныеУсловияДоговора КАК АктуальныеУсловияДоговора
		|			ИЗ
		|				втУсловияДоговора КАК втУсловияДоговора)
		|	И ГрафикОплатУслугПоАренде.УслугаПоАренде + ГрафикОплатУслугПоАренде.ОбеспечительныйПлатеж
		|		+ ГрафикОплатУслугПоАренде.ВыкупнаяСтоимость + ГрафикОплатУслугПоАренде.ВыкупнаяСтоимостьАванс <> 0";
		
		Если НЕ Перезаполнить Тогда
			ТекстГрафика = ТекстГрафика + "
				|	И ГрафикОплатУслугПоАренде.Дата < &Период";
		КонецЕсли;
	
	ИначеЕсли ИмяГрафика = "ГрафикНачисленияПроцентов" Тогда

		ТекстГрафика = "ВЫБРАТЬ
		|	ГрафикНачисленияПроцентовПоАренде.Дата КАК Дата,
		|	ГрафикНачисленияПроцентовПоАренде.Проценты КАК Проценты
		|ИЗ
		|	РегистрСведений.ГрафикНачисленияПроцентовПоАренде КАК ГрафикНачисленияПроцентовПоАренде
		|ГДЕ
		|	ГрафикНачисленияПроцентовПоАренде.АктуальныеУсловияДоговора В
		|			(ВЫБРАТЬ
		|				втУсловияДоговора.АктуальныеУсловияДоговора КАК АктуальныеУсловияДоговора
		|			ИЗ
		|				втУсловияДоговора КАК втУсловияДоговора)
		|	И ГрафикНачисленияПроцентовПоАренде.Проценты <> 0";

		Если НЕ Перезаполнить Тогда
			ТекстГрафика = ТекстГрафика + "
			|	И ГрафикНачисленияПроцентовПоАренде.Дата < &Период";
		КонецЕсли;
		
	КонецЕсли;
	
	ТекстыЗапроса.Добавить(ТекстУсловия);
	ТекстыЗапроса.Добавить(ТекстГрафика);
	
	Запрос = Новый Запрос;
	Запрос.Текст = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов());
	Запрос.УстановитьПараметр("Договор", Договор);
	Запрос.УстановитьПараметр("ГраницаПериода", Новый Граница(ДатаИзмененияАренды, ВидГраницы.Исключая));
	Запрос.УстановитьПараметр("Период", ДатаИзмененияАренды);
	
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	
	ДанныеГрафика = ЭтотОбъект[ИмяГрафика];
	
	Если Перезаполнить Тогда
		ДанныеГрафика.Очистить();
	Иначе
		МассивУдаляемыхСтрок = Новый Массив;
		Для Каждого СтрокаГрафика Из ЭтотОбъект[ИмяГрафика] Цикл
			Если СтрокаГрафика.Дата < ДатаИзмененияАренды Тогда
				МассивУдаляемыхСтрок.Добавить(СтрокаГрафика);
			КонецЕсли;
		КонецЦикла;
		ОбщегоНазначенияУТ.УдалитьСтрокиТаблицы(ДанныеГрафика, МассивУдаляемыхСтрок);
	КонецЕсли;
	
	Пока Выборка.Следующий() Цикл
		СтрокаГрафика = ЭтотОбъект[ИмяГрафика].Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаГрафика, Выборка);
	КонецЦикла;
	
	ДанныеГрафика.Сортировать("Дата");
	
	Если ОбновлятьИтоги Тогда
		Если ИмяГрафика = "ГрафикОплатУслуг" Тогда
			ОбновитьПодвалГрафикаОплатУслуг(ЭтотОбъект);
		ИначеЕсли ИмяГрафика = "ГрафикНачисленияУслуг" Тогда
			ОбновитьПодвалГрафикаНачисленияУслуг(ЭтотОбъект);
		КонецЕсли;
		ОбновитьИтоги(ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

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

	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция СтруктураРеквизитовКолонкиФормы(ИмяТаблицы, ИмяКолонкиФормы)

	ИмяРеквизитаСуммы = СтрЗаменить(Элементы[ИмяКолонкиФормы].ПутьКДанным, ИмяТаблицы + ".", "");
	ИмяРеквизитаНДС = ИмяРеквизитаСуммы + "НДС";
	Возврат Новый Структура("Сумма, НДС", ИмяРеквизитаСуммы, ИмяРеквизитаНДС);

КонецФункции

&НаКлиенте
Процедура ГрафикПередУдалением(Элемент, Отказ)
	
	ТекущиеДанные = Элемент.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено
		И ЗначениеЗаполнено(ТекущиеДанные.Дата)
		И ТекущиеДанные.Дата < ДатаИзмененияАренды Тогда
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииДатыГрафика(ИмяГрафика)

	ТекущиеДанные = Элементы[ИмяГрафика].ТекущиеДанные;
	
	ОчиститьСообщения();
	
	Если ТекущиеДанные <> Неопределено
		И ЗначениеЗаполнено(ТекущиеДанные.Дата)
		И ТекущиеДанные.Дата < ДатаИзмененияАренды Тогда
		ТекстПредупреждения = 
			СтрШаблон(НСтр("ru = 'Дата графика не должна быть меньше даты изменения договора аренды: %1.'"),
				Формат(ДатаИзмененияАренды, "ДЛФ=D"));
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстПредупреждения,, ИмяГрафика);
		ТекущиеДанные.Дата = '00010101';
	КонецЕсли;

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

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

	Если МассивДоступныхКолонок.Найти(ТекущаяКолонка) = Неопределено Тогда
		
		МассивЗаголовковКолонок = Новый Массив;
		Для Каждого ДоступнаяКолонка Из МассивДоступныхКолонок Цикл
			ЗаголовокКолонки = СтрШаблон("«%1 / %2»", ДоступнаяКолонка.Родитель.Заголовок, ДоступнаяКолонка.Заголовок);
			МассивЗаголовковКолонок.Добавить(ЗаголовокКолонки);
		КонецЦикла;
		
		ТекстКолонки = СтрСоединить(МассивЗаголовковКолонок, ", ");
		ТекстПредупреждения =
			СтрШаблон(НСтр("ru = 'Невозможно заполнить выбранную колонку. Доступно заполнение колонок: %1.'"), ТекстКолонки);
		ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстПредупреждения,, ТекущаяКолонка.Имя);
		Возврат;
		
	КонецЕсли;
	
	ИменаРеквизитовКолонки = СтруктураРеквизитовКолонкиФормы(ИмяТаблицы, ТекущаяКолонка.Имя);

	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ИмяТаблицы", ИмяТаблицы);
	ДополнительныеПараметры.Вставить("ИмяКолонкиСуммы", ИменаРеквизитовКолонки.Сумма);
	ДополнительныеПараметры.Вставить("ИмяКолонкиНДС", ИменаРеквизитовКолонки.НДС);
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьСуммыВГрафикеЗавершение", ЭтотОбъект, ДополнительныеПараметры);
	
	ТекущаяСтрока = Элементы[ИмяТаблицы].ТекущиеДанные;
	СуммаЗаполнения = ?(ТекущаяСтрока = Неопределено, 0, ТекущаяСтрока[ИменаРеквизитовКолонки.Сумма]);

	ТекстПодсказки = НСтр("ru='Введите значение суммы'");
	ОписаниеТипов = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный));
	
	ПоказатьВводЗначения(ОписаниеОповещения, СуммаЗаполнения, ТекстПодсказки, ОписаниеТипов);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПоПредыдущимУсловиям(ИмяТаблицы)
	
	Если ЭтотОбъект[ИмяТаблицы].Количество() <> 0 Тогда
		ТекстВопроса = НСтр("ru = 'График будет перезаполнен по исходным условиям. Продолжить?'");
		ДополнительныеПараметры = Новый Структура("ИмяТаблицы", ИмяТаблицы);
		ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьПредыдущимУсловиямЗавершение", ЭтотОбъект, ДополнительныеПараметры);
		ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
	Иначе
		ЗаполнитьПоПредыдущимУсловиямНаСервере(ИмяТаблицы);
	КонецЕсли;
	
КонецПроцедуры

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

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