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