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