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