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