Изменение условий договора займа сотруднику / Модуль объекта

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

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

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

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

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

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
	
	// Условия договора
	ЗаймыСотрудникам.ЗаписатьУсловияДоговораЗайма(Движения, ДоговорЗайма, ДатаИзменений, Ссылка);
	
КонецПроцедуры

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

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

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

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

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

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

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