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