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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьСотрудникаВТаблицахНачислений()
	
	ТаблицыНачислений = Новый Массив;
	ТаблицыНачислений.Добавить(Начисления);
	ТаблицыНачислений.Добавить(НачисленияПерерасчет);
	ТаблицыНачислений.Добавить(НачисленияПерерасчетНулевыеСторно);
	
	Для Каждого ТаблицаНачислений Из ТаблицыНачислений Цикл
		Для Каждого СтрокаТаблицы Из ТаблицаНачислений Цикл
			Если Не ЗначениеЗаполнено(СтрокаТаблицы.Сотрудник) Тогда
				СтрокаТаблицы.Сотрудник = Сотрудник;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

	ЗапрашиваемыеЗначения.Вставить("Ответственный", "Ответственный");
	
	ФиксированныеЗначения = Новый Массив;
	
	Если ЗначениеЗаполнено(Организация) Тогда
		
		ЗапрашиваемыеЗначения.Вставить("Организация", "Организация");

		Если НЕ ЗначениеЗаполнено(Руководитель) Тогда
			ЗапрашиваемыеЗначения.Вставить("Руководитель", "Руководитель");
		КонецЕсли; 
		
		Если НЕ ЗначениеЗаполнено(ДолжностьРуководителя) Тогда
			ЗапрашиваемыеЗначения.Вставить("ДолжностьРуководителя", "ДолжностьРуководителя");
		КонецЕсли; 
        		
		Если НЕ ЗначениеЗаполнено(ГлавныйБухгалтер) Тогда
			ЗапрашиваемыеЗначения.Вставить("ГлавныйБухгалтер", "ГлавныйБухгалтер");
		КонецЕсли; 
		
		Если НЕ ЗначениеЗаполнено(ДолжностьГлавногоБухгалтера) Тогда
			ЗапрашиваемыеЗначения.Вставить("ДолжностьГлавногоБухгалтера", "ДолжностьГлавногоБухгалтера");
		КонецЕсли; 

		ФиксированныеЗначения.Добавить("Организация");
		
	КонецЕсли;
	
	ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтотОбъект, ЗапрашиваемыеЗначения, ФиксированныеЗначения);

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

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

#Область ЗаполнениеИРасчет	

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

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

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

	ОписаниеТаблицыНачислений = Документы.ОплатаПоСреднемуЗаработку.ОписаниеТаблицыНачислений(ПараметрыРасчета.РегистрацияНачисленийДоступна);
	
	ОписаниеТаблиц = РасчетДокументовБЗК.ОписаниеТаблицНачисленийДокумента();
	ОписаниеТаблиц.Начисления = ОписаниеТаблицыНачислений;
	ОписаниеТаблиц.НачисленияПерерасчет = Документы.ОплатаПоСреднемуЗаработку.ОписаниеТаблицыПерерасчетов(ПараметрыРасчета.РегистрацияНачисленийДоступна);
	ОписаниеТаблиц.НачисленияПерерасчетНулевыеСторно = Документы.ОплатаПоСреднемуЗаработку.ОписаниеТаблицыПерерасчетовНулевыеСторно();

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

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

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

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

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

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

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

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

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

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

Процедура РассчитатьСреднийЗаработок(ИспользуетсяСреднечасовойЗаработок = Ложь) Экспорт

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

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

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

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

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

	ЭтотОбъект.ДенежноеСодержание.Очистить();
	ЭтотОбъект.ДенежноеСодержаниеФактическиеНачисления.Очистить();
	
КонецПроцедуры  

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

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

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

	Если Не ЗначениеЗаполнено(ВидРасчета) Тогда
		ДанныеЗаполнения.Свойство("ВидРасчета", ВидРасчета);
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ВидВремени) Тогда
		ДанныеЗаполнения.Свойство("ВидВремени", ВидВремени);
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ИсправленныйДокумент) Тогда
		ДанныеЗаполнения.Свойство("ИсправленныйДокумент", ИсправленныйДокумент);
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ДатаПервичногоДокумента) Тогда
		ДанныеЗаполнения.Свойство("ДатаПервичногоДокумента", ДатаПервичногоДокумента);
	КонецЕсли;

	Если Не ЗначениеЗаполнено(НомерПервичногоДокумента) Тогда
		ДанныеЗаполнения.Свойство("НомерПервичногоДокумента", НомерПервичногоДокумента);
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Рассчитал) Тогда
		ДанныеЗаполнения.Свойство("Рассчитал", Рассчитал);
	КонецЕсли;

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

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

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

	ПланируемаяДатаВыплаты = РасчетЗарплатыРасширенный.ПланируемаяДатаВыплатыЗарплатыПоНастройкамПоПорядкуВыплаты(
		ПараметрыПолученияДатыВыплаты);
	
	Возврат ПланируемаяДатаВыплаты;
	
КонецФункции

Процедура ОбновитьВариантРасчета() Экспорт

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

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

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

Функция ВидыРасчетаДокумента()

	МассивВидовРасчета = Новый Массив;
	МассивВидовРасчета.Добавить(ЭтотОбъект.ВидРасчета);
	
	Возврат МассивВидовРасчета;
	
КонецФункции

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

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

	Возврат ОбъектСтруктура;
	
КонецФункции

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

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

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