Отпуск по уходу за ребенком / Модуль объекта

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

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

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

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

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

КонецПроцедуры

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

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

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

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

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

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

#Область ПроверкаЗаполненияДокумента

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

Процедура ПроверитьЗаполнениеРеквизитовШапки(КонтейнерОшибок)
	
	Если Не ЗначениеЗаполнено(ПериодРегистрации) Тогда
		ТекстСообщения = НСтр("ru = 'Не указан период регистрации.'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ПериодРегистрации", ТекстСообщения, "");
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Организация) Тогда
		ТекстСообщения = НСтр("ru = 'Поле ""Организация"" обязательно к заполнению.'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.Организация", ТекстСообщения, "");
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Сотрудник) Тогда
		ТекстСообщения = НСтр("ru = 'Поле ""Сотрудник"" обязательно к заполнению.'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.Сотрудник", ТекстСообщения, "");		
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ДатаНачала) Тогда
		ТекстСообщения = НСтр("ru = 'Не заполнена дата начала отпуска по уходу за ребенком.'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДатаНачала", ТекстСообщения, "");
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ДатаОкончания) Тогда
		ТекстСообщения = НСтр("ru='Не указана дата окончания отпуска.'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДатаОкончания", ТекстСообщения, "");
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ДатаОкончания) И ДатаОкончания < ДатаНачала Тогда
		ТекстСообщения = НСтр("ru='Дата окончания отпуска не должна быть меньше даты начала.'");
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДатаОкончания", ТекстСообщения, "");
	КонецЕсли; 

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

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

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

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

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

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

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

Процедура СообщитьОбОшибке(Отказ, Текст, ИмяТаблицы, НомерСтроки, ИмяРеквизита)
	Если Текст = Неопределено Тогда
		Текст = НСтр("ru = 'Не заполнено поле ""%1"".'");
		Если ИмяТаблицы = Неопределено Тогда
			Текст = СтрШаблон(Текст, Метаданные().Реквизиты[ИмяРеквизита].Представление());
		Иначе
			Текст = СтрШаблон(Текст, Метаданные().ТабличныеЧасти[ИмяТаблицы].Реквизиты[ИмяРеквизита].Представление());
		КонецЕсли;
	КонецЕсли;
	
	Отказ = Истина;
	
	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = Текст;
	Если ИмяТаблицы = Неопределено Тогда
		Сообщение.Поле = ИмяРеквизита;
	Иначе
		Сообщение.Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(ИмяТаблицы, НомерСтроки, ИмяРеквизита);
	КонецЕсли;
	Сообщение.Сообщить();
КонецПроцедуры

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

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

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

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

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

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

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

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