Варианты графиков кредитов и депозитов / Модуль менеджера

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

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

// Обновляет сроки договора кредита, депозита, займа по графику платежей.
//
// Параметры:
//    Договор - СправочникОбъект.ДоговорыКредитовИДепозитов - договор кредита, депозита, займа.
//    ИмяРеквизита - СправочникОбъект.ДоговорыКредитовИДепозитов - договор кредита, депозита, займа.
//
Процедура ПересчитатьСроки(Договор, ИмяРеквизита = "ДатаПоследнегоПлатежа") Экспорт
	
	Если (ИмяРеквизита = "ДатаПервогоТранша" ИЛИ ИмяРеквизита = "ДатаПоследнегоПлатежа")
		И ЗначениеЗаполнено(Договор.ДатаПервогоТранша)
		И ЗначениеЗаполнено(Договор.ДатаПоследнегоПлатежа) Тогда
		
		Договор.СрокМес = ОбщегоНазначенияУТ.РазностьДат(
			Договор.ДатаПервогоТранша, Договор.ДатаПоследнегоПлатежа, Перечисления.Периодичность.Месяц);
		Договор.СрокДней = ОбщегоНазначенияУТ.РазностьДат(
			Договор.ДатаПервогоТранша, Договор.ДатаПоследнегоПлатежа, Перечисления.Периодичность.День);
		
	ИначеЕсли ИмяРеквизита = "СрокМес" И ЗначениеЗаполнено(Договор.ДатаПервогоТранша) Тогда
		
		Договор.ДатаПоследнегоПлатежа = ДобавитьМесяц(Договор.ДатаПервогоТранша, Договор.СрокМес);
		Договор.СрокДней = ОбщегоНазначенияУТ.РазностьДат(
			Договор.ДатаПервогоТранша, Договор.ДатаПоследнегоПлатежа, Перечисления.Периодичность.День);
		
	ИначеЕсли ИмяРеквизита = "СрокДней"  И ЗначениеЗаполнено(Договор.ДатаПервогоТранша) Тогда
		
		Договор.ДатаПоследнегоПлатежа = Договор.ДатаПервогоТранша + Договор.СрокДней * 60*60*24;
		Договор.СрокМес = ОбщегоНазначенияУТ.РазностьДат(
			Договор.ДатаПервогоТранша, Договор.ДатаПоследнегоПлатежа, Перечисления.Периодичность.Месяц);
		
	ИначеЕсли ИмяРеквизита = "СрокМес" И ЗначениеЗаполнено(Договор.ДатаПоследнегоПлатежа) Тогда
		
		Договор.ДатаПервогоТранша = ДобавитьМесяц(Договор.ДатаПоследнегоПлатежа, -Договор.СрокМес);
		Договор.СрокДней = ОбщегоНазначенияУТ.РазностьДат(
			Договор.ДатаПервогоТранша,Договор.ДатаПоследнегоПлатежа, Перечисления.Периодичность.День);
		
	ИначеЕсли ИмяРеквизита = "СрокДней" И ЗначениеЗаполнено(Договор.ДатаПоследнегоПлатежа) Тогда
		
		Договор.ДатаПервогоТранша = Договор.ДатаПоследнегоПлатежа - Договор.СрокДней * 60*60*24;
		Договор.СрокМес = ОбщегоНазначенияУТ.РазностьДат(
			Договор.ДатаПервогоТранша, Договор.ДатаПоследнегоПлатежа, Перечисления.Периодичность.Месяц);
		
	Иначе
		Договор.СрокМес = 0;
		Договор.СрокДней = 0;
	КонецЕсли;
	
КонецПроцедуры

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

// СтандартныеПодсистемы.ВерсионированиеОбъектов
// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
// Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

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

#Область Печать

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
КонецПроцедуры

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

#Область Отчеты

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

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

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

#КонецЕсли

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