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