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

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

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

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

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда
		ЗарплатаКадры.ЗаполнитьПоОснованиюСотрудником(ЭтотОбъект, ДанныеЗаполнения);
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, ЗаймыСотрудникам.ДанныеЗаполненияДокументаПоСотруднику(ДанныеЗаполнения));
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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