Доход в натуральной форме / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьИсходныеДанныеДокумента(ДанныеЗаполнения)

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

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

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

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

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

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

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

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

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

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

	ОписаниеТаблицы = Документы.ДоходВНатуральнойФорме.ОписаниеТаблицыНачислений();
	ИдентификаторСтроки = ОписаниеТаблицы.НомерТаблицы * 1000000 + 1;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьПерерасчеты(МенеджерРасчета, ПараметрыРасчета) Экспорт
	
	Сотрудники = ПараметрыРасчета.Сотрудники;

	Если ИсправлениеДокументовРасчетЗарплаты.ДоначисленияРазрешены(МенеджерРасчета) Тогда
		ИсходныеДанныеДляПерерасчета = ИсправлениеРасчетовБЗК.ИсходныеДанныеДляПерерасчетаИзРезультатаРасчета(МенеджерРасчета.Зарплата.Начисления);

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

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

	Для Каждого СтрокаНачисление ИЗ Начисления Цикл
		СтрокаНачисление.ДатаНачала		= ДатаНачалаБазовогоПериода;
		СтрокаНачисление.ДатаОкончания	= ДатаОкончанияБазовогоПериода;
	КонецЦикла;
	
КонецПроцедуры

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

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

	ИдентификаторыСтрок = Новый Массив;

	Отбор = Новый Структура("Сотрудник");
	ОтборПоказателей = Новый Структура("ИдентификаторСтрокиВидаРасчета");

	Для Каждого Сотрудник Из Сотрудники Цикл
		
		Отбор.Сотрудник = Сотрудник;
		СтрокиПоСотруднику = Начисления.НайтиСтроки(Отбор);

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

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

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

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

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