#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
Если ДанныеЗаполнения.Свойство("Действие") Тогда
Если ДанныеЗаполнения.Действие = "Исправить" Тогда
ДокументыРазовыхНачислений.СкопироватьИсправляемыйДокумент(ЭтотОбъект,
ДанныеЗаполнения.Ссылка,
"ДокументРассчитан,ДокументЗаполнения,Рассчитал",
"ДанныеОбИндексации,Начисления,НачисленияПерерасчет,НачисленияПерерасчетНулевыеСторно,
|ОтпускаАвансомПерерасчет,НДФЛ,ОтработанноеВремяДляСреднегоОбщий,ПогашениеЗаймов,
|Показатели,ПримененныеВычетыНаДетейИИмущественные,
|РаспределениеРезультатовНачислений,РаспределениеРезультатовУдержаний,
|СреднийЗаработокОбщий,Удержания",
ДанныеЗаполнения);
ИсправленныйДокумент = ДанныеЗаполнения.Ссылка;
ЗапрашиваемыеЗначения = Новый Структура;
ЗапрашиваемыеЗначения.Вставить("Ответственный", "Ответственный");
ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтотОбъект, ЗапрашиваемыеЗначения);
Если ПредоставитьОсновнойОтпуск И КоличествоДнейОсновногоОтпускаАвансом > 0 Тогда
НоваяСтрока = ОтпускаАвансомПерерасчет.Добавить();
НоваяСтрока.ВидРасчета = ВидРасчетаОсновногоОтпуска;
НоваяСтрока.КоличествоДнейАвансом = КоличествоДнейОсновногоОтпускаАвансом;
КонецЕсли;
Для Каждого ДанныеДополнительногоОтпуска Из ДополнительныеОтпуска Цикл
ЗаполнитьЗначенияСвойств(ОтпускаАвансомПерерасчет.Добавить(), ДанныеДополнительногоОтпуска);
КонецЦикла;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.СамообслуживаниеСотрудников") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("СамообслуживаниеСотрудников");
Модуль.ЗаполнитьОтпускПоЗаявкеСотрудника(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
Если ДанныеЗаполнения.Свойство("ОснованиеПриостановки") Тогда
ЗаполнитьПоОснованиямПриостановки(ДанныеЗаполнения);
КонецЕсли;
ИначеЕсли ДанныеЗаполнения.Действие = "Заполнить" Тогда
ЗаполнитьПоДаннымЗаполнения(ДанныеЗаполнения);
ИначеЕсли ДанныеЗаполнения.Действие = "ЗаполнитьПоДокументуОтпускаСотрудников" Тогда
ЗаполнитьПоДокументуОтпускаСотрудников(ДанныеЗаполнения);
ИначеЕсли ДанныеЗаполнения.Действие = "ЗаполнитьПоЗаявке" Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.СамообслуживаниеСотрудников") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("СамообслуживаниеСотрудников");
Модуль.ЗаполнитьОтпускПоЗаявкеСотрудника(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
ИначеЕсли ДанныеЗаполнения.Действие = "ЗаполнитьИзОбучения" Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ОбучениеРазвитие") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ОбучениеРазвитие");
Модуль.ЗаполнитьОтпускИзДокументаОбучения(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
ИначеЕсли ДанныеЗаполнения.Действие = "ЗаполнитьПослеПереноса" Тогда
ЗаполнитьПослеПереноса(ДанныеЗаполнения);
КонецЕсли;
Иначе
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
Если ДанныеЗаполнения.Свойство("Сотрудник") И ЗначениеЗаполнено(ДанныеЗаполнения.Сотрудник) Тогда
ЗарплатаКадры.ЗаполнитьПоОснованиюСотрудником(ЭтотОбъект, ДанныеЗаполнения.Сотрудник);
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда
ЗарплатаКадры.ЗаполнитьПоОснованиюСотрудником(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Документы.Отпуск.ПровестиПоУчетам(Ссылка, РежимПроведения, Отказ, Неопределено, Движения, ЭтотОбъект, ДополнительныеСвойства);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если ПредоставитьОсновнойОтпуск Тогда
ЗарплатаКадры.ПроверитьКорректностьДаты(Ссылка, ДатаНачалаОсновногоОтпуска, "Объект.ДатаНачалаОсновногоОтпуска", Отказ, НСтр("ru='Дата начала основного отпуска'"), , , Ложь);
ЗарплатаКадры.ПроверитьКорректностьДаты(Ссылка, НачалоПериодаЗаКоторыйПредоставляетсяОтпуск, "Объект.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск", Отказ, НСтр("ru='Начало периода за который предоставляется основной отпуск'"), , , Ложь);
КонецЕсли;
Если ОсвобождатьСтавку Тогда
ПериодыОтсутствий = Документы.Отпуск.ПериодыОтсутствий(ЭтотОбъект);
ПериодОтсутствия = Документы.Отпуск.ПериодОтсутствия(ПериодыОтсутствий);
УправлениеШтатнымРасписанием.ПроверитьВозможностьПроведенияВременногоОсвобожденияСтавок(
Ссылка, Проведен, Сотрудник, ПериодОтсутствия.НачалоПериода, ПериодОтсутствия.ОкончаниеПериода, Отказ,
ИсправленныйДокумент, "Сотрудник,ДатаНачалаПериодаОтсутствия,ДатаОкончанияПериодаОтсутствия");
КонецЕсли;
КонтейнерОшибок = Неопределено;
ПроверитьЗаполнениеРеквизитовШапки(КонтейнерОшибок);
Если ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная") Тогда
Если ДокументРассчитан Тогда
ЗарплатаКадры.ПроверитьДатуВыплаты(ЭтотОбъект, Отказ);
ПроверитьЗаполнениеРеквизитовНеобходимыхДляРасчета(КонтейнерОшибок);
ИсправлениеДокументовЗарплатаКадры.ПроверитьЗаполнение(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ);
ПроверитьПериодДействияНачислений(Отказ);
ИменаТаблицРаспределяемыхПоСтатьямФинансирования = "Начисления,НачисленияПерерасчет,Удержания,НДФЛ,ПогашениеЗаймов,КорректировкиВыплаты";
ОтражениеЗарплатыВБухучетеРасширенный.ПроверитьРезультатыРаспределенияНачисленийУдержанийОбъекта(
ЭтотОбъект, ИменаТаблицРаспределяемыхПоСтатьямФинансирования, Отказ);
ИменаТаблицРаспределенияПоТерриториямУсловиямТруда = "Начисления,НачисленияПерерасчет";
РасчетЗарплатыРасширенный.ПроверитьРаспределениеПоТерриториямУсловиямТрудаДокумента(
ЭтотОбъект, ИменаТаблицРаспределенияПоТерриториямУсловиямТруда, Отказ);
КонецЕсли;
КонецЕсли;
Документы.Отпуск.ПроверитьРаботающих(ЭтотОбъект, Отказ);
ПроверитьПериодРаботыЗаКоторыйПредоставляетсяОтпуск(КонтейнерОшибок);
Если Не ДополнительныеСвойства.Свойство("ПроверкаПересеченияПериодовВыполнена") Тогда
ПроверитьПересечениеПериодовОтсутствия(Отказ);
КонецЕсли;
ПроверитьКоличествоДнейОтгула(КонтейнерОшибок);
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(КонтейнерОшибок, Отказ);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.СамообслуживаниеСотрудников") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("СамообслуживаниеСотрудников");
Модуль.ПроверитьНаличиеОтпускаПоЗаявкеСотрудника(ЗаявкаСотрудника, Сотрудник, Ссылка, Отказ, ИсправленныйДокумент);
КонецЕсли;
УдалитьПроверенныеРеквизиты(ПроверяемыеРеквизиты);
ЭДОБЗК.ПроверитьВозможностьСохраненияИзмененийДокументаСПечатнымиФормами(
ЭтотОбъект, Метаданные.Роли.ДобавлениеИзменениеНачисленнойЗарплатыРасширенная, Отказ);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
Если ОсвобождатьСтавку Тогда
УправлениеШтатнымРасписанием.ПроверитьВозможностьОтменыПроведения(Ссылка, Сотрудник,
ДатаНачалаПериодаОтсутствия, ДатаОкончанияПериодаОтсутствия, Отказ);
КонецЕсли;
Если ЗначениеЗаполнено(ИсправленныйДокумент) И ПериодыПриостановкиОтпуска.Количество() > 0 Тогда
ПроверитьПересекающиесяБольничные();
КонецЕсли;
ПерерасчетЗарплаты.УдалитьПерерасчетыПоРегистратору(Ссылка);
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Документы.Отпуск.ЗаполнитьДатуЗапретаРедактирования(ЭтотОбъект);
ПериодыОтсутствий = Документы.Отпуск.ПериодыОтсутствий(ЭтотОбъект);
ПериодОтсутствия = Документы.Отпуск.ПериодОтсутствия(ПериодыОтсутствий);
ДатаНачалаПериодаОтсутствия = ПериодОтсутствия.НачалоПериода;
ДатаОкончанияПериодаОтсутствия = ПериодОтсутствия.ОкончаниеПериода;
ПредставлениеПериода = ЗарплатаКадрыРасширенный.ПредставлениеПериодаРасчетногоДокумента(ДатаНачалаПериодаОтсутствия, ДатаОкончанияПериодаОтсутствия);
ДокументыРазовыхНачислений.ЗаполнитьРегистраторРазовыхНачисленийПередЗаписью(ЭтотОбъект);
РасчетЗарплатыРасширенный.ЗаполнитьИсходныйДокумент(ЭтотОбъект);
ОтражениеЗарплатыВБухучетеРасширенный.ОбновитьДанныеБухучетаДокументаПередЗаписью(ЭтотОбъект);
ЗаполнитьКоличествоДнейОтпускаАвансом();
ЗаполнитьФлажкиНаличияВидовОтпусков();
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
УчетСреднегоЗаработка.ЗаписатьДатуНачалаСобытия(Ссылка, Сотрудник, ДатаНачалаСобытия);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ЦепочкиДокументов") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ЦепочкиДокументов");
Модуль.УстановитьВторичныеРеквизитыДокументаЗамещения(ЭтотОбъект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
Модуль.СохранитьВариантРасчетаСреднегоЗаработкаДокумента(ЭтотОбъект, ДатаНачалаСобытия);
КонецЕсли;
Если ЗначениеЗаполнено(ДокументЗаполнения) И Не ДополнительныеСвойства.Свойство("ОтпускаСотрудников") Тогда
Документы.ОтпускаСотрудников.УстановитьСвойствоДокументРассчитан(ДокументЗаполнения);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ДанныеДляБухучета = Документы.Отпуск.ДанныеДляБухучетаЗарплатыПервичныхДокументов(ЭтотОбъект);
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьБухучетЗарплатыПервичныхДокументов(ДанныеДляБухучета);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
ДокументыРазовыхНачислений.ПриКопированииДокумента(ЭтотОбъект);
РасчетЗарплатыРасширенный.ЗаполнитьИсходныйДокументПриКопировании(ЭтотОбъект, ОбъектКопирования.Ссылка);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ЗаполнитьПоДаннымЗаполнения(ДанныеЗаполнения)
Если ЭтоНовый() Тогда
ДокументЗаполнения = ДанныеЗаполнения.Ссылка;
Организация = ДанныеЗаполнения.Организация;
Сотрудник = ДанныеЗаполнения.Сотрудник;
ДанныеЗаполнения.Свойство("Руководитель", Руководитель);
ДанныеЗаполнения.Свойство("ДолжностьРуководителя", ДолжностьРуководителя);
ПредоставитьОсновнойОтпуск = Ложь;
ДанныеЗаполнения.Свойство("ПредоставитьМатериальнуюПомощьПриОтпуске", ПредоставитьМатериальнуюПомощьПриОтпуске);
ДанныеЗаполнения.Свойство("ПредоставитьЕдиновременнуюВыплатуКОтпуску", ПредоставитьЕдиновременнуюВыплатуКОтпуску);
КонецЕсли;
РанняяДатаОтпуска = '00010101';
ПредоставитьДополнительныйОтпуск = Ложь;
Для каждого ДанныеОтпуска Из ДанныеЗаполнения.ДанныеОтпусков Цикл
Если РанняяДатаОтпуска > ДанныеОтпуска.ДатаНачала
ИЛИ РанняяДатаОтпуска = '00010101' Тогда
РанняяДатаОтпуска = ДанныеОтпуска.ДатаНачала;
КонецЕсли;
КоличествоДнейКомпенсации = ?(ДанныеОтпуска.Свойство("КоличествоДнейКомпенсации"), ДанныеОтпуска.КоличествоДнейКомпенсации, 0);
Если Не ПредоставитьЕдиновременнуюВыплатуКОтпуску Тогда
ПредоставитьЕдиновременнуюВыплатуКОтпуску = ?(ДанныеОтпуска.Свойство("ПредоставитьЕдиновременнуюВыплатуКОтпуску"), ДанныеОтпуска.ПредоставитьЕдиновременнуюВыплатуКОтпуску, Ложь);
КонецЕсли;
Если (ДанныеЗаполнения.Свойство("АвторасчетПериодаПредоставления")
И ДанныеЗаполнения.АвторасчетПериодаПредоставления)
ИЛИ НЕ ДанныеОтпуска.Свойство("НачалоПериодаЗаКоторыйПредоставляетсяОтпуск")
ИЛИ НЕ ДанныеОтпуска.Свойство("КонецПериодаЗаКоторыйПредоставляетсяОтпуск") Тогда
СтруктураПараметров = ОстаткиОтпусков.ПараметрыПолученияРабочегоПериодаОтпуска();
СтруктураПараметров.Сотрудник = Сотрудник;
СтруктураПараметров.ТекущийРегистратор = Ссылка;
СтруктураПараметров.ВидОтпуска = ДанныеОтпуска.ВидОтпуска;
СтруктураПараметров.ДатаНачала = ДанныеОтпуска.ДатаНачала;
СтруктураПараметров.ДатаОкончания = ДанныеОтпуска.ДатаОкончания;
СтруктураПараметров.ДатаКомпенсации = ?(ЗначениеЗаполнено(ПериодРегистрации), ПериодРегистрации, НачалоМесяца(ТекущаяДатаСеанса()));
СтруктураПараметров.КоличествоДнейКомпенсации = ?(ЗначениеЗаполнено(КоличествоДнейКомпенсации), КоличествоДнейКомпенсации, КоличествоДнейКомпенсацииОсновногоОтпуска);
РабочийПериодОтпуска = ОстаткиОтпусков.РабочийПериодОтпуска(СтруктураПараметров);
НачалоПериодаПредоставления = РабочийПериодОтпуска.РабочийГодС;
КонецПериодаПредоставления = РабочийПериодОтпуска.РабочийГодПо;
Иначе
НачалоПериодаПредоставления = ДанныеОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск;
КонецПериодаПредоставления = ДанныеОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск;
КонецЕсли;
Если ДанныеОтпуска.ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной") Тогда
Если ДанныеОтпуска.Свойство("Основание") Тогда
Основание = ДанныеОтпуска.Основание;
КонецЕсли;
ДатаНачалаОсновногоОтпуска = ДанныеОтпуска.ДатаНачала;
ДатаОкончанияОсновногоОтпуска = ДанныеОтпуска.ДатаОкончания;
КоличествоДнейОсновногоОтпуска = ДанныеОтпуска.КоличествоДней;
КоличествоДнейКомпенсацииОсновногоОтпуска = КоличествоДнейКомпенсации;
ПредоставитьОсновнойОтпуск = КоличествоДнейОсновногоОтпуска <> 0;
ПредоставитьКомпенсациюОсновногоОтпуска = КоличествоДнейКомпенсацииОсновногоОтпуска <> 0;
НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = НачалоПериодаПредоставления;
КонецПериодаЗаКоторыйПредоставляетсяОтпуск = КонецПериодаПредоставления;
Если ЗначениеЗаполнено(ДанныеОтпуска.ВидОтпускаПрежний)
И ДанныеОтпуска.ВидОтпускаПрежний <> ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной") Тогда
СтрокиОтпуска = ДополнительныеОтпуска.НайтиСтроки(Новый Структура("ВидОтпуска", ДанныеОтпуска.ВидОтпускаПрежний));
Если СтрокиОтпуска.Количество() > 0 Тогда
ДополнительныеОтпуска.Удалить(СтрокиОтпуска[0]);
ПредоставитьДополнительныйОтпуск = ДополнительныеОтпуска.Количество() > 0;
КонецЕсли;
КонецЕсли;
Иначе
ПредоставитьДополнительныйОтпуск = Истина;
Если ЗначениеЗаполнено(ДанныеОтпуска.ВидОтпускаПрежний) Тогда
Если ДанныеОтпуска.ВидОтпускаПрежний = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной") Тогда
ПредоставитьОсновнойОтпуск = Ложь;
ДатаНачалаОсновногоОтпуска = '00010101';
ДатаОкончанияОсновногоОтпуска = '00010101';
КоличествоДнейОсновногоОтпуска = 0;
КоличествоДнейКомпенсацииОсновногоОтпуска = 0;
ПредоставитьКомпенсациюОсновногоОтпуска = Ложь;
НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = '00010101';
КонецПериодаЗаКоторыйПредоставляетсяОтпуск = '00010101';
ИскомыйВидОтпуска = ДанныеОтпуска.ВидОтпуска;
Иначе
ИскомыйВидОтпуска = ДанныеОтпуска.ВидОтпускаПрежний;
КонецЕсли
Иначе
ИскомыйВидОтпуска = ДанныеОтпуска.ВидОтпуска;
КонецЕсли;
СтрокиОтпуска = ДополнительныеОтпуска.НайтиСтроки(Новый Структура("ВидОтпуска", ИскомыйВидОтпуска));
Если СтрокиОтпуска.Количество() > 0 Тогда
СтрокаДополнительногоОтпуска = СтрокиОтпуска[0];
Иначе
СтрокаДополнительногоОтпуска = ДополнительныеОтпуска.Добавить();
КонецЕсли;
Если ДанныеОтпуска.Свойство("Основание") Тогда
СтрокаДополнительногоОтпуска.Основание = ДанныеОтпуска.Основание;
КонецЕсли;
СтрокаДополнительногоОтпуска.ВидОтпуска = ДанныеОтпуска.ВидОтпуска;
СтрокаДополнительногоОтпуска.ДатаНачала = ДанныеОтпуска.ДатаНачала;
СтрокаДополнительногоОтпуска.ДатаОкончания = ДанныеОтпуска.ДатаОкончания;
СтрокаДополнительногоОтпуска.КоличествоДней = ДанныеОтпуска.КоличествоДней;
СтрокаДополнительногоОтпуска.КоличествоДнейКомпенсации = КоличествоДнейКомпенсации;
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаДополнительногоОтпуска.ВидОтпуска, "ОтпускЯвляетсяЕжегодным") Тогда
СтрокаДополнительногоОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = НачалоПериодаПредоставления;
СтрокаДополнительногоОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = КонецПериодаПредоставления;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ПредоставитьДополнительныйОтпуск Тогда
ДополнительныеОтпуска.Очистить();
КонецЕсли;
Если Не ЭтоНовый() Тогда
Если ПредоставитьОсновнойОтпуск И ЗначениеЗаполнено(ДатаНачалаОсновногоОтпуска) Тогда
РанняяДатаОтпуска = Мин(ДатаНачалаОсновногоОтпуска, РанняяДатаОтпуска);
КонецЕсли;
Если ПредоставитьДополнительныйОтпуск Тогда
Для Каждого СтрокаДополнительногоОтпуска Из ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(СтрокаДополнительногоОтпуска.ДатаНачала) Тогда
РанняяДатаОтпуска = Мин(СтрокаДополнительногоОтпуска.ДатаНачала, РанняяДатаОтпуска);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ДатаНачалаСобытия = РанняяДатаОтпуска;
Если ЭтоНовый() И Не ЗначениеЗаполнено(ДатаНачалаСобытия) Тогда
ДатаНачалаСобытия = НачалоМесяца(ТекущаяДатаСеанса());
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотрудник, "ДатаПриема");
Если КадровыеДанные.Количество() > 0
И ЗначениеЗаполнено(КадровыеДанные[0].ДатаПриема)
И НачалоМесяца(КадровыеДанные[0].ДатаПриема) = ДатаНачалаСобытия
И КадровыеДанные[0].ДатаПриема > ДатаНачалаСобытия Тогда
ДатаНачалаСобытия = КадровыеДанные[0].ДатаПриема;
КонецЕсли;
КонецЕсли;
ЗаполнитьКоличествоДнейОтпускаАвансом();
ЗарплатаКадрыРасширенный.УстановитьВариантРасчетаДокументаПоСреднемуЗаработку(ЭтотОбъект);
ДопПараметры = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(ЭтотОбъект, "ВидРасчетаОсновногоОтпуска");
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВОбъекте(ЭтотОбъект, "ВидРасчетаОсновногоОтпуска", ДопПараметры);
Если ЗначениеЗаполнено(ДатаНачалаСобытия) И ЗначениеЗаполнено(Сотрудник) Тогда
ПериодРасчетаСреднего = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(ДатаНачалаСобытия, Сотрудник, ВидРасчетаОсновногоОтпуска);
ПериодРасчетаСреднегоЗаработкаНачало = ПериодРасчетаСреднего.ДатаНачала;
ПериодРасчетаСреднегоЗаработкаОкончание = ПериодРасчетаСреднего.ДатаОкончания;
КонецЕсли;
ПланируемаяДатыВыплатыОтпуска = РасчетЗарплатыРасширенный.ДатаСобытияСУчетомНерабочихДней(
Документы.Отпуск.ПредварительнаяДатаОплатыОтпуска(ЭтотОбъект),
Организация, Сотрудник);
Если ПланируемаяДатыВыплатыОтпуска <> Неопределено Тогда
ПланируемаяДатаВыплаты = ПланируемаяДатыВыплатыОтпуска;
КонецЕсли;
Если ЭтоНовый() Тогда
Если ЗначениеЗаполнено(РанняяДатаОтпуска) И РанняяДатаОтпуска < ТекущаяДатаСеанса() Тогда
Дата = РанняяДатаОтпуска;
Иначе
Дата = ТекущаяДатаСеанса();
КонецЕсли;
ПериодРегистрации = НачалоМесяца(Дата);
ЗапрашиваемыеЗначения = Новый Структура;
ЗапрашиваемыеЗначения.Вставить("Ответственный", "Ответственный");
ФиксированныеЗначения = Новый Массив;
Если ЗначениеЗаполнено(Организация) Тогда
ЗапрашиваемыеЗначения.Вставить("Организация", "Организация");
ИсключаемыеСвойства = Новый Массив;
СведенияОПодписях = ПодписиДокументов.СведенияОПодписяхПоУмолчаниюДляОбъектаМетаданных(Метаданные(), Организация);
Если Не ЗначениеЗаполнено(Руководитель) Тогда
Если ЗначениеЗаполнено(ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СведенияОПодписях, "Руководитель")) Тогда
Руководитель = СведенияОПодписях.Руководитель;
ИсключаемыеСвойства.Добавить("Руководитель");
Иначе
ЗапрашиваемыеЗначения.Вставить("Руководитель", "Руководитель");
КонецЕсли;
Иначе
ИсключаемыеСвойства.Добавить("Руководитель");
КонецЕсли;
Если Не ЗначениеЗаполнено(ДолжностьРуководителя) Тогда
Если ЗначениеЗаполнено(ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СведенияОПодписях, "ДолжностьРуководителя")) Тогда
ДолжностьРуководителя = СведенияОПодписях.ДолжностьРуководителя;
ИсключаемыеСвойства.Добавить("ДолжностьРуководителя");
Иначе
ЗапрашиваемыеЗначения.Вставить("ДолжностьРуководителя", "ДолжностьРуководителя");
КонецЕсли;
Иначе
ИсключаемыеСвойства.Добавить("ДолжностьРуководителя");
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СведенияОПодписях, , СтрСоединить(ИсключаемыеСвойства, ","));
Если Не ЗначениеЗаполнено(ГлавныйБухгалтер) Тогда
ЗапрашиваемыеЗначения.Вставить("ГлавныйБухгалтер", "ГлавныйБухгалтер");
КонецЕсли;
Если Не ЗначениеЗаполнено(Бухгалтер) Тогда
ЗапрашиваемыеЗначения.Вставить("Бухгалтер", "Бухгалтер");
КонецЕсли;
Если Не ЗначениеЗаполнено(РаботникКадровойСлужбы) Тогда
ЗапрашиваемыеЗначения.Вставить("РаботникКадровойСлужбы", "РаботникКадровойСлужбы");
КонецЕсли;
Если Не ЗначениеЗаполнено(ДолжностьРаботникаКадровойСлужбы) Тогда
ЗапрашиваемыеЗначения.Вставить("ДолжностьРаботникаКадровойСлужбы", "ДолжностьРаботникаКадровойСлужбы");
КонецЕсли;
ФиксированныеЗначения.Добавить("Организация");
КонецЕсли;
ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтотОбъект, ЗапрашиваемыеЗначения, ФиксированныеЗначения);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПоДокументуОтпускаСотрудников(ДанныеЗаполнения)
Если ЭтоНовый() Тогда
ДокументЗаполнения = ДанныеЗаполнения.ДокументЗаполнения;
Организация = ДанныеЗаполнения.Организация;
Сотрудник = ДанныеЗаполнения.Сотрудник;
Руководитель = ДанныеЗаполнения.Руководитель;
ДолжностьРуководителя = ДанныеЗаполнения.ДолжностьРуководителя;
Дата = ?(ЗначениеЗаполнено(ДанныеЗаполнения.ДатаНачала), Мин(ДанныеЗаполнения.ДатаНачала, ТекущаяДатаСеанса()), ТекущаяДатаСеанса());
ДатаРегистрации = Макс(ДанныеЗаполнения.ДатаДокументаЗаполнения, ТекущаяДатаСеанса());
Если ЗначениеЗаполнено(ДанныеЗаполнения.ДатаНачала) И ДанныеЗаполнения.ДатаНачала < ДатаРегистрации Тогда
ДатаРегистрации = ДанныеЗаполнения.ДатаНачала;
КонецЕсли;
ПериодРегистрации = НачалоМесяца(ДатаРегистрации);
ЗапрашиваемыеЗначения = Новый Структура;
ЗапрашиваемыеЗначения.Вставить("Ответственный", "Ответственный");
ЗапрашиваемыеЗначения.Вставить("Организация", "Организация");
ЗапрашиваемыеЗначения.Вставить("ГлавныйБухгалтер", "ГлавныйБухгалтер");
ЗапрашиваемыеЗначения.Вставить("Бухгалтер", "Бухгалтер");
ЗапрашиваемыеЗначения.Вставить("РаботникКадровойСлужбы", "РаботникКадровойСлужбы");
ЗапрашиваемыеЗначения.Вставить("ДолжностьРаботникаКадровойСлужбы", "ДолжностьРаботникаКадровойСлужбы");
ФиксированныеЗначения = Новый Массив;
ФиксированныеЗначения.Добавить("Организация");
ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтотОбъект, ЗапрашиваемыеЗначения, ФиксированныеЗначения);
КонецЕсли;
ДатаНачалаСобытия = ДанныеЗаполнения.ДатаНачала;
Если Не ЗначениеЗаполнено(ДатаНачалаСобытия) Тогда
ДатаНачалаСобытия = НачалоМесяца(ПериодРегистрации);
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотрудник, "ДатаПриема");
Если КадровыеДанные.Количество() > 0
И ЗначениеЗаполнено(КадровыеДанные[0].ДатаПриема)
И НачалоМесяца(КадровыеДанные[0].ДатаПриема) = ДатаНачалаСобытия
И КадровыеДанные[0].ДатаПриема > ДатаНачалаСобытия Тогда
ДатаНачалаСобытия = КадровыеДанные[0].ДатаПриема;
КонецЕсли;
КонецЕсли;
НачалоОтпуска = ДанныеЗаполнения.ДатаНачала;
ОкончаниеОтпуска = ДанныеЗаполнения.ДатаОкончания;
ПредоставитьОсновнойОтпуск = Ложь;
ПредоставитьКомпенсациюОсновногоОтпуска = Ложь;
ПредоставитьДополнительныйОтпуск = Ложь;
ДополнительныеОтпуска.Очистить();
ОсновнойОтпуск = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
ВидыОтпусковБезОплаты = Справочники.ВидыОтпусков.ВидыОтпусковБезОплаты();
КатегорияОтпуск = Документы.Отпуск.КатегорияНачисленияОтпуск(ЭтотОбъект);
КатегорияКомпенсация = Документы.Отпуск.КатегорияНачисленияКомпенсацияОтпуска(ЭтотОбъект);
КатегорияОтпускБезОплаты = Документы.Отпуск.КатегорияНачисленияОтпускБезОплаты();
ПараметрыДополнительногоОтпуска = ОбщегоНазначенияБЗК.ПараметрыВыбораВСтруктуру(
ЭтотОбъект, Метаданные().ТабличныеЧасти.ДополнительныеОтпуска.Реквизиты.Найти("ВидРасчета"));
ПараметрыКомпенсацииДополнительногоОтпуска = ОбщегоНазначенияБЗК.ПараметрыВыбораВСтруктуру(
ЭтотОбъект, Метаданные().ТабличныеЧасти.ДополнительныеОтпуска.Реквизиты.Найти("ВидРасчетаКомпенсации"));
Для Каждого ДанныеОтпуска Из ДанныеЗаполнения.ДанныеОтпусков Цикл
Если ДанныеОтпуска.ВидОтпуска = ОсновнойОтпуск Тогда
Если ЗначениеЗаполнено(ДанныеОтпуска.ДатаНачала) Тогда
ПредоставитьОсновнойОтпуск = Истина;
ДатаНачалаОсновногоОтпуска = ДанныеОтпуска.ДатаНачала;
ДатаОкончанияОсновногоОтпуска = ДанныеОтпуска.ДатаОкончания;
КоличествоДнейОсновногоОтпуска = ДанныеОтпуска.КоличествоДней;
Основание = ДанныеОтпуска.Основание;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеОтпуска.КоличествоДнейКомпенсации) Тогда
ПредоставитьКомпенсациюОсновногоОтпуска = Истина;
КоличествоДнейКомпенсацииОсновногоОтпуска = ДанныеОтпуска.КоличествоДнейКомпенсации;
КонецЕсли;
НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = ДанныеОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск;
КонецПериодаЗаКоторыйПредоставляетсяОтпуск = ДанныеОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск;
Иначе
ПредоставитьДополнительныйОтпуск = Истина;
НоваяСтрока = ДополнительныеОтпуска.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеОтпуска);
Если ЗначениеЗаполнено(НоваяСтрока.ВидОтпуска) И НоваяСтрока.КоличествоДней > 0
И Не ЗначениеЗаполнено(НоваяСтрока.ВидРасчета) Тогда
КатегорияВидаОтпуска = КатегорияОтпуск;
Если ВидыОтпусковБезОплаты.Найти(НоваяСтрока.ВидОтпуска) <> Неопределено Тогда
КатегорияВидаОтпуска = КатегорияОтпускБезОплаты;
КонецЕсли;
ПараметрыДополнительногоОтпуска.Отбор.Вставить("КатегорияНачисленияИлиНеоплаченногоВремени", КатегорияВидаОтпуска);
ПараметрыДополнительногоОтпуска.Отбор.Вставить("ВидОтпуска", НоваяСтрока.ВидОтпуска);
НоваяСтрока.ВидРасчета = ПланыВидовРасчета.Начисления.НачислениеПоУмолчанию(ПараметрыДополнительногоОтпуска.Отбор);
КонецЕсли;
Если ЗначениеЗаполнено(НоваяСтрока.ВидОтпуска) И НоваяСтрока.КоличествоДнейКомпенсации > 0
И Не ЗначениеЗаполнено(НоваяСтрока.ВидРасчетаКомпенсации) Тогда
ПараметрыКомпенсацииДополнительногоОтпуска.Отбор.Вставить("КатегорияНачисленияИлиНеоплаченногоВремени", КатегорияКомпенсация);
ПараметрыКомпенсацииДополнительногоОтпуска.Отбор.Вставить("ВидОтпуска", НоваяСтрока.ВидОтпуска);
НоваяСтрока.ВидРасчетаКомпенсации = ПланыВидовРасчета.Начисления.НачислениеПоУмолчанию(ПараметрыКомпенсацииДополнительногоОтпуска.Отбор);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПредоставитьМатериальнуюПомощьПриОтпуске = ДанныеЗаполнения.ПредоставитьМатериальнуюПомощьПриОтпуске;
ПредоставитьЕдиновременнуюВыплатуКОтпуску = ДанныеЗаполнения.ПредоставитьЕдиновременнуюВыплатуКОтпуску;
ОсвобождатьСтавку = ДанныеЗаполнения.ОсвобождатьСтавку;
ЗаполнитьКоличествоДнейОтпускаАвансом();
ЗарплатаКадрыРасширенный.УстановитьВариантРасчетаДокументаПоСреднемуЗаработку(ЭтотОбъект);
ПараметрыВыбораНачислений = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(ЭтотОбъект, "ВидРасчетаОсновногоОтпуска");
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВОбъекте(ЭтотОбъект, "ВидРасчетаОсновногоОтпуска", ПараметрыВыбораНачислений);
Если ПредоставитьКомпенсациюОсновногоОтпуска Тогда
ПараметрыВыбораКомпенсации = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(ЭтотОбъект, "ВидРасчетаКомпенсацииОсновногоОтпуска");
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВОбъекте(ЭтотОбъект, "ВидРасчетаКомпенсацииОсновногоОтпуска", ПараметрыВыбораКомпенсации);
КонецЕсли;
Если ПредоставитьМатериальнуюПомощьПриОтпуске Тогда
ПараметрыМатериальнойПомощи = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(ЭтотОбъект, "ВидРасчетаМатериальнойПомощиПриОтпуске");
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВОбъекте(ЭтотОбъект, "ВидРасчетаМатериальнойПомощиПриОтпуске", ПараметрыМатериальнойПомощи);
КонецЕсли;
Если ПредоставитьЕдиновременнуюВыплатуКОтпуску Тогда
ПараметрыЕдиновременнойВыплаты = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(ЭтотОбъект, "ВидРасчетаЕдиновременнойВыплатыКОтпуску");
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВОбъекте(ЭтотОбъект, "ВидРасчетаЕдиновременнойВыплатыКОтпуску", ПараметрыЕдиновременнойВыплаты);
КонецЕсли;
Если ЗначениеЗаполнено(ДатаНачалаСобытия) И ЗначениеЗаполнено(Сотрудник) Тогда
ПериодРасчетаСреднего = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(ДатаНачалаСобытия, Сотрудник, ВидРасчетаОсновногоОтпуска);
ПериодРасчетаСреднегоЗаработкаНачало = ПериодРасчетаСреднего.ДатаНачала;
ПериодРасчетаСреднегоЗаработкаОкончание = ПериодРасчетаСреднего.ДатаОкончания;
КонецЕсли;
ПланируемаяДатыВыплатыОтпуска = РасчетЗарплатыРасширенный.ДатаСобытияСУчетомНерабочихДней(
Документы.Отпуск.ПредварительнаяДатаОплатыОтпуска(ЭтотОбъект),
Организация, Сотрудник);
Если ПланируемаяДатыВыплатыОтпуска <> Неопределено Тогда
ПланируемаяДатаВыплаты = ПланируемаяДатыВыплатыОтпуска;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПланируемаяДатаВыплаты) Или ПланируемаяДатаВыплаты < Дата Тогда
ПланируемаяДатаВыплаты = Дата;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПорядокВыплаты) Тогда
ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Межрасчет;
КонецЕсли;
РассчитатьДокумент = Истина;
Если Не ПривилегированныйРежим() Тогда
ПраваНаДокумент = МногофункциональныеДокументыБЗК.ПраваНаДокумент(ЭтотОбъект)["НачисленнаяЗарплата"];
РассчитатьДокумент = ПраваНаДокумент <> Неопределено И ПраваНаДокумент.Редактирование;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если (РассчитатьДокумент Или Константы.РассчитыватьДокументыПриРедактировании.Получить()) И ДокументГотовКРасчету() Тогда
ПараметрыРасчета = Документы.Отпуск.ПараметрыРасчета();
ПараметрыРасчета.ПерезаполнитьНачисления = Истина;
ПараметрыРасчета.СохранятьИсправления = Истина;
ПараметрыРасчета.СкорректированСреднийЗаработок = Ложь;
ПараметрыРасчета.ОбновитьДанныеДляРасчетаСреднего = Истина;
Рассчитать(ПараметрыРасчета);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Процедура ЗаполнитьКоличествоДнейОтпускаАвансом()
Если Не ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении") Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Сотрудник) Или Не ЗначениеЗаполнено(ДатаНачалаСобытия) Тогда
Возврат;
КонецЕсли;
ИсключаемыеРегистраторы = Новый Массив;
ИсключаемыеРегистраторы.Добавить(Ссылка);
ИсключаемыеРегистраторы.Добавить(ИсправленныйДокумент);
ОстаткиВРазрезеВидовОтпусков = Документы.Отпуск.ОстаткиВРазрезеВидовОтпусков(Сотрудник, ДатаНачалаСобытия, ИсключаемыеРегистраторы);
КоличествоДнейОтпусков = Неопределено;
Если ДокументРассчитан Тогда
КоличествоДнейОтпусков = Новый Соответствие;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Начисления", Начисления);
Запрос.УстановитьПараметр("КатегорииОплатыДолейРКСН", ПланыВидовРасчета.Начисления.КатегорииНачисленийОплатыДолейРКиСН());
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.Начисление КАК Начисление,
| Начисления.ОплаченоДней КАК ОплаченоДней
|ПОМЕСТИТЬ ВТНачисленияДокумента
|ИЗ
| &Начисления КАК Начисления
|;
|
|
|ВЫБРАТЬ
| Начисления.ВидОтпуска КАК ВидОтпуска,
| СУММА(НачисленияДокумента.ОплаченоДней) КАК ОплаченоДней
|ИЗ
| ВТНачисленияДокумента КАК НачисленияДокумента
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления КАК Начисления
| ПО НачисленияДокумента.Начисление = Начисления.Ссылка
| И (Начисления.ВидОтпуска.ОтпускЯвляетсяЕжегодным = ИСТИНА)
| И (НЕ Начисления.КатегорияНачисленияИлиНеоплаченногоВремени В (&КатегорииОплатыДолейРКСН))
|
|СГРУППИРОВАТЬ ПО
| Начисления.ВидОтпуска";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
КоличествоДнейОтпусков.Вставить(Выборка.ВидОтпуска, Выборка.ОплаченоДней);
КонецЦикла;
КонецЕсли;
КоличествоДнейОсновногоОтпускаАвансом = 0;
Если ПредоставитьОсновнойОтпуск Тогда
ОсновнойОтпуск = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
ОстатокОтпуска = ОстаткиВРазрезеВидовОтпусков.Получить(ОсновнойОтпуск);
КоличествоДней = КоличествоДнейОсновногоОтпуска;
Если КоличествоДнейОтпусков <> Неопределено И КоличествоДнейОтпусков[ОсновнойОтпуск] <> Неопределено Тогда
КоличествоДней = КоличествоДнейОтпусков[ОсновнойОтпуск];
КонецЕсли;
КоличествоДнейОсновногоОтпускаАвансом = Документы.Отпуск.КоличествоДнейОтпускаАвансом(КоличествоДней, ОстатокОтпуска);
КонецЕсли;
Если ПредоставитьДополнительныйОтпуск Тогда
ВидыОтпусков = ДополнительныеОтпуска.ВыгрузитьКолонку("ВидОтпуска");
ЕжегодныеОтпуска = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(ВидыОтпусков, "ОтпускЯвляетсяЕжегодным");
Для Каждого СтрокаОтпуска Из ДополнительныеОтпуска Цикл
Если Не ЕжегодныеОтпуска[СтрокаОтпуска.ВидОтпуска] Тогда
СтрокаОтпуска.КоличествоДнейАвансом = 0;
Продолжить;
КонецЕсли;
КоличествоДней = СтрокаОтпуска.КоличествоДней;
Если КоличествоДнейОтпусков <> Неопределено И КоличествоДнейОтпусков[СтрокаОтпуска.ВидОтпуска] <> Неопределено Тогда
КоличествоДней = КоличествоДнейОтпусков[СтрокаОтпуска.ВидОтпуска];
КонецЕсли;
ОстатокОтпуска = ОстаткиВРазрезеВидовОтпусков.Получить(СтрокаОтпуска.ВидОтпуска);
СтрокаОтпуска.КоличествоДнейАвансом = Документы.Отпуск.КоличествоДнейОтпускаАвансом(КоличествоДней, ОстатокОтпуска);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция ПериодыНачисленийПродлеваемыхОтпусков()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОтпускНачисления.ДатаНачала КАК ДатаНачала,
| ОтпускНачисления.ДатаОкончания КАК ДатаОкончания
|ИЗ
| Документ.Отпуск.Начисления КАК ОтпускНачисления
|ГДЕ
| ОтпускНачисления.Ссылка = &Ссылка
| И ОтпускНачисления.Начисление.ВидОтпуска В (&ВидОтпуска)";
Запрос.УстановитьПараметр("ВидОтпуска", Справочники.ВидыОтпусков.ВидыПродлеваемыхОтпусков());
Запрос.УстановитьПараметр("Ссылка", ИсправленныйДокумент);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
Процедура ЗаполнитьПоОснованиямПриостановки(ДанныеЗаполнения)
ДанныеБольничного = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеЗаполнения.ОснованиеПриостановки,
"ДатаНачала, ДатаОкончания, ПериодРегистрации");
ПериодРегистрации = ДанныеБольничного.ПериодРегистрации;
ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Зарплата;
НоваяСтрока = ПериодыПриостановкиОтпуска.Добавить();
НоваяСтрока.Причина = ДанныеЗаполнения.ОснованиеПриостановки;
ПериодПересечения = ОбщегоНазначенияБЗК.ПериодПересеченияДвухИнтервалов(ДанныеБольничного.ДатаНачала,
ДанныеБольничного.ДатаОкончания, ДатаНачалаПериодаОтсутствия, ДатаОкончанияПериодаОтсутствия);
НоваяСтрока.ДатаНачалаПериода = ПериодПересечения.ДатаНачала;
НоваяСтрока.ДатаОкончанияПериода = ПериодПересечения.ДатаОкончания;
Документы.Отпуск.ЗаполнитьКоличествоДнейПриостановки(ЭтотОбъект, НоваяСтрока);
КонецПроцедуры
Процедура ЗаполнитьФлажкиНаличияВидовОтпусков() Экспорт
ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускПострадавшимВАварииЧАЭС");
ЕстьОтпускЧАЭС = ДополнительныеОтпуска.Найти(ВидОтпуска, "ВидОтпуска") <> Неопределено;
ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускНаСанаторноКурортноеЛечение");
ЕстьОтпускНаПериодЛечения = ДополнительныеОтпуска.Найти(ВидОтпуска, "ВидОтпуска") <> Неопределено;
КонецПроцедуры
#Область ПроверкаЗаполненияДокумента
Функция ДокументГотовКРасчету(ВыводитьСообщения = Истина) Экспорт
КонтейнерОшибок = Неопределено;
ПроверитьЗаполнениеРеквизитовШапки(КонтейнерОшибок);
ПроверитьЗаполнениеРеквизитовНеобходимыхДляРасчета(КонтейнерОшибок, Истина);
КонтейнерСодержитОшибки = Ложь;
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(КонтейнерОшибок, КонтейнерСодержитОшибки);
Если Не ВыводитьСообщения Тогда
ПолучитьСообщенияПользователю(Истина);
КонецЕсли;
Возврат Не КонтейнерСодержитОшибки;
КонецФункции
Процедура ПроверитьЗаполнениеРеквизитовШапки(КонтейнерОшибок)
Если Не ЗначениеЗаполнено(ПериодРегистрации) Тогда
ТекстСообщения = НСтр("ru = 'Не указан период регистрации.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ПериодРегистрации", ТекстСообщения, "");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Организация) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Организация"" обязательно к заполнению.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.Организация", ТекстСообщения, "");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Сотрудник) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Сотрудник"" обязательно к заполнению.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.Сотрудник", ТекстСообщения, "");
КонецЕсли;
Если НЕ ПредоставитьОсновнойОтпуск
И НЕ ПредоставитьКомпенсациюОсновногоОтпуска
И НЕ ПредоставитьДополнительныйОтпуск
И НЕ ПредоставитьМатериальнуюПомощьПриОтпуске Тогда
ТекстСообщения = НСтр("ru = 'Документом не оплачивается ни основной, ни дополнительный отпуск.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.", ТекстСообщения, "");
КонецЕсли;
Если ПредоставитьОсновнойОтпуск Тогда
Если НЕ ЗначениеЗаполнено(ДатаНачалаОсновногоОтпуска) И НЕ ЗначениеЗаполнено(ДатаОкончанияОсновногоОтпуска) Тогда
Если НЕ ПредоставитьКомпенсациюОсновногоОтпуска Тогда
ТекстСообщения = НСтр("ru = 'Необходимо заполнить даты начала и окончания отпуска.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДатаНачалаОсновногоОтпуска", ТекстСообщения, "");
Иначе
ТекстСообщения = НСтр("ru = 'Флажок оплаты основного отпуска взведен, но не одно поле не заполнено. Снимите флажок, или заполните даты основного отпуска.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ПредоставитьОсновнойОтпуск", ТекстСообщения, "");
КонецЕсли;
Иначе
Если НЕ ЗначениеЗаполнено(ДатаНачалаОсновногоОтпуска) И ЗначениеЗаполнено(ДатаОкончанияОсновногоОтпуска) Тогда
ТекстСообщения = НСтр("ru = 'Не заполнена дата начала основного отпуска.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДатаНачалаОсновногоОтпуска", ТекстСообщения, "");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДатаОкончанияОсновногоОтпуска) И ЗначениеЗаполнено(ДатаНачалаОсновногоОтпуска) Тогда
ТекстСообщения = НСтр("ru = 'Не заполнена дата окончания основного отпуска.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДатаОкончанияОсновногоОтпуска", ТекстСообщения, "");
КонецЕсли;
Если ЗначениеЗаполнено(ДатаНачалаОсновногоОтпуска) И ЗначениеЗаполнено(ДатаОкончанияОсновногоОтпуска) И ДатаНачалаОсновногоОтпуска > ДатаОкончанияОсновногоОтпуска Тогда
ТекстСообщения = НСтр("ru = 'Дата окончания основного отпуска не может быть меньше даты начала.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДатаОкончанияОсновногоОтпуска", ТекстСообщения, "");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ПредоставитьКомпенсациюОсновногоОтпуска Тогда
Если НЕ ЗначениеЗаполнено(КоличествоДнейКомпенсацииОсновногоОтпуска) Тогда
ТекстСообщения = НСтр("ru = 'Флажок оплаты компенсации основного отпуска взведен, но не указано количество дней. Снимите флажок или укажите количество дней компенсации'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ПредоставитьКомпенсациюОсновногоОтпуска", ТекстСообщения, "");
КонецЕсли;
КонецЕсли;
Если ПредоставитьДополнительныйОтпуск Тогда
Если ДополнительныеОтпуска.Количество() < 1 Тогда
ТекстСообщения = НСтр("ru = 'Флажок оплаты дополнительных отпусков взведен, но не один отпуск не добавлен. Снимите флажок или добавьте дополнительный отпуск.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска", ТекстСообщения, "");
Иначе
Если ПредоставитьОсновнойОтпуск Тогда
Период = Новый Структура;
Период.Вставить("НомерСтроки", 0);
Период.Вставить("ДатаНачала", ДатаНачалаОсновногоОтпуска);
Период.Вставить("ДатаОкончания", ДатаОкончанияОсновногоОтпуска);
НомераСтрок = ПересеченияПериодов(Период, ДополнительныеОтпуска);
Если ЗначениеЗаполнено(НомераСтрок) Тогда
ТекстСообщения = НСтр("ru = 'Период основного отпуска пересекается с периодами следующих строк дополнительных отпусков: %1.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, НомераСтрок);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска", ТекстСообщения, "");
КонецЕсли;
КонецЕсли;
Для каждого ДополнительныйОтпуск Из ДополнительныеОтпуска Цикл
ИндексСтроки = ДополнительныйОтпуск.НомерСтроки - 1;
Если НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.ВидОтпуска) Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 не заполнен вид дополнительного отпуска.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].ВидОтпуска", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) И НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания)
И НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.КоличествоДнейКомпенсации) Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 не заполнены ни даты отпуска, ни количество дней компенсации.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].ДатаНачала", ТекстСообщения, "", ИндексСтроки);
Иначе
Если НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) И ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания) Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 не заполнена дата начала отпуска.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].ДатаНачала", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания) И ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 не заполнена дата окончания отпуска.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].ДатаОкончания", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) И ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания)
И ДополнительныйОтпуск.ДатаНачала > ДополнительныйОтпуск.ДатаОкончания Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 дата окончания отпуска меньше даты начала.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].ДатаОкончания", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) И ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания)
И ДополнительныйОтпуск.ДатаНачала <= ДополнительныйОтпуск.ДатаОкончания Тогда
НомераСтрок = ПересеченияПериодов(ДополнительныйОтпуск, ДополнительныеОтпуска);
Если ЗначениеЗаполнено(НомераСтрок) Тогда
ТекстСообщения = НСтр("ru = 'Период строки %1 пересекается с периодами следующих строк: %2.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки, НомераСтрок);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].ДатаОкончания", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ПроверитьЦелостностьПериодаОтпуска(КонтейнерОшибок);
КонецПроцедуры
Процедура ПроверитьЗаполнениеРеквизитовНеобходимыхДляРасчета(КонтейнерОшибок, ПроверкаПередРасчетом = Ложь)
Если Не ДокументРассчитан И Не ПроверкаПередРасчетом Тогда
Возврат;
КонецЕсли;
Если ПредоставитьОсновнойОтпуск
И ЗначениеЗаполнено(ДатаНачалаОсновногоОтпуска) И ЗначениеЗаполнено(ДатаОкончанияОсновногоОтпуска)
И НЕ ЗначениеЗаполнено(ВидРасчетаОсновногоОтпуска) Тогда
Если ПолучитьФункциональнуюОпцию("ВыбиратьВидНачисленияОсновногоОтпуска") Тогда
ТекстСообщения = НСтр("ru = 'Не выбран вид начисления для оплаты основного отпуска.'");
Иначе
ТекстСообщения = НСтр("ru = 'Не удалось подобрать вид начисления для оплаты основного отпуска.'");
КонецЕсли;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ВидРасчетаОсновногоОтпуска", ТекстСообщения, "");
КонецЕсли;
Если ПредоставитьКомпенсациюОсновногоОтпуска
И Не ЗначениеЗаполнено(ВидРасчетаКомпенсацииОсновногоОтпуска) Тогда
Если ПолучитьФункциональнуюОпцию("ВыбиратьВидНачисленияКомпенсацииОсновногоОтпуска") Тогда
ТекстСообщения = НСтр("ru = 'Не выбран вид начисления для оплаты компенсации основного отпуска.'");
Иначе
ТекстСообщения = НСтр("ru = 'Не удалось подобрать вид начисления для оплаты компенсации основного отпуска.'");
КонецЕсли;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ВидРасчетаКомпенсацииОсновногоОтпуска", ТекстСообщения, "");
КонецЕсли;
Если ПредоставитьДополнительныйОтпуск Тогда
Для каждого ДополнительныйОтпуск Из ДополнительныеОтпуска Цикл
ИндексСтроки = ДополнительныйОтпуск.НомерСтроки - 1;
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) И ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания)
И Не ЗначениеЗаполнено(ДополнительныйОтпуск.КоличествоДней) Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 указаны даты отпуска, но не указано количество дней.'");
ЗначениеПодстановки = ДополнительныйОтпуск.НомерСтроки;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ЗначениеПодстановки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].КоличествоДней", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) И ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания)
И ЗначениеЗаполнено(ДополнительныйОтпуск.КоличествоДней) И НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.ВидРасчета) Тогда
Если ПолучитьФункциональнуюОпцию("ВыбиратьВидНачисленияДополнительногоОтпуска") Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 не выбран вид начисления для оплаты отпуска.'");
ЗначениеПодстановки = ДополнительныйОтпуск.НомерСтроки;
Иначе
ТекстСообщения = НСтр("ru = 'Не удалось подобрать вид начисления для оплаты %1.'");
ЗначениеПодстановки = ДополнительныйОтпуск.ВидОтпуска;
КонецЕсли;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ЗначениеПодстановки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].ВидРасчета", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
Если ЗначениеЗаполнено(ДополнительныйОтпуск.КоличествоДнейКомпенсации) И НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.ВидРасчетаКомпенсации) Тогда
Если ПолучитьФункциональнуюОпцию("ВыбиратьВидНачисленияКомпенсацииДополнительногоОтпуска") Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 не выбран вид начисления для оплаты компенсации отпуска.'");
ЗначениеПодстановки = ДополнительныйОтпуск.НомерСтроки;
Иначе
ТекстСообщения = НСтр("ru = 'Не удалось подобрать вид начисления для оплаты компенсации %1.'");
ЗначениеПодстановки = ДополнительныйОтпуск.ВидОтпуска;
КонецЕсли;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ЗначениеПодстановки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].ВидРасчетаКомпенсации", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ПредоставитьМатериальнуюПомощьПриОтпуске
И ПолучитьФункциональнуюОпцию("ВыбиратьВидНачисленияОплатыМатериальнойПомощиКОтпуску")
И Не ЗначениеЗаполнено(ВидРасчетаМатериальнойПомощиПриОтпуске) Тогда
ТекстСообщения = НСтр("ru = 'Не выбран вид начисления для выплаты материальной помощи к отпуску.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ВидРасчетаМатериальнойПомощиПриОтпуске", ТекстСообщения, "");
КонецЕсли;
ПроверитьЗаполнениеПланируемойДатыВыплаты(КонтейнерОшибок, ПроверкаПередРасчетом);
КонецПроцедуры
Процедура ПроверитьЦелостностьПериодаОтпуска(КонтейнерОшибок)
ПериодыРазрывов = ПериодыРазрывов();
Для каждого ПериодРазрыва Из ПериодыРазрывов Цикл
Если НачалоДня(ПериодРазрыва.ДатаНачала) = НачалоДня(ПериодРазрыва.ДатаОкончания) Тогда
ТекстСообщения = НСтр("ru = 'Период отпуска прерывается %1.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Формат(ПериодРазрыва.ДатаНачала,"ДЛФ=D"));
Иначе
ТекстСообщения = НСтр("ru = 'Период отпуска прерывается с %1 по %2.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Формат(ПериодРазрыва.ДатаНачала,"ДЛФ=D"), Формат(ПериодРазрыва.ДатаОкончания,"ДЛФ=D"));
КонецЕсли;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ПериодРазрыва" + ПериодРазрыва.ДатаНачала, ТекстСообщения, "");
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьЗаполнениеПланируемойДатыВыплаты(КонтейнерОшибок, ПроверкаПередРасчетом)
МассивНачисленийДокумента = Новый Массив;
Если НЕ ПроверкаПередРасчетом Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивНачисленийДокумента, Начисления.ВыгрузитьКолонку("Начисление"), Истина);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивНачисленийДокумента, НачисленияПерерасчет.ВыгрузитьКолонку("Начисление"), Истина);
КонецЕсли;
Если УчетНДФЛРасширенный.ДатаВыплатыОбязательнаКЗаполнению(ПорядокВыплаты, МассивНачисленийДокумента)
И Не ЗначениеЗаполнено(ПланируемаяДатаВыплаты) Тогда
ТекстСообщения = НСтр("ru = 'Дата выплаты обязательна к заполнению при выплате в межрасчет.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ПланируемаяДатаВыплаты", ТекстСообщения, "");
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьПериодРаботыЗаКоторыйПредоставляетсяОтпуск(КонтейнерОшибок)
Если ПредоставитьОсновнойОтпуск Или ПредоставитьКомпенсациюОсновногоОтпуска Тогда
Если ЗначениеЗаполнено(НачалоПериодаЗаКоторыйПредоставляетсяОтпуск) И ЗначениеЗаполнено(КонецПериодаЗаКоторыйПредоставляетсяОтпуск)
И НачалоПериодаЗаКоторыйПредоставляетсяОтпуск > КонецПериодаЗаКоторыйПредоставляетсяОтпуск Тогда
ТекстСообщения = НСтр("ru = 'Начало периода работы за который предоставляется отпуск (компенсация) не может быть больше окончания этого периода.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск", ТекстСообщения, "");
КонецЕсли;
КонецЕсли;
Если ПредоставитьДополнительныйОтпуск Тогда
ВидыОтпусков = ДополнительныеОтпуска.ВыгрузитьКолонку("ВидОтпуска");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыОтпусков.Ссылка КАК ВидОтпуска
|ИЗ
| Справочник.ВидыОтпусков КАК ВидыОтпусков
|ГДЕ
| ВидыОтпусков.ОтпускБезОплаты = ЛОЖЬ
| И ВидыОтпусков.Ссылка В(&ВидыОтпусков)
| И ВидыОтпусков.ОтпускЯвляетсяЕжегодным = ИСТИНА";
Запрос.УстановитьПараметр("ВидыОтпусков", ВидыОтпусков);
ЕжегодныеОтпуска = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидОтпуска");
Для каждого ДополнительныйОтпуск Из ДополнительныеОтпуска Цикл
ИндексСтроки = ДополнительныйОтпуск.НомерСтроки - 1;
Если НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.КоличествоДней) Тогда
Продолжить;
КонецЕсли;
Если НЕ ЕжегодныеОтпуска.Найти(ДополнительныйОтпуск.ВидОтпуска) = Неопределено Тогда
Если НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск)
И НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск) Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 не указан период за который предоставляется отпуск.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].НачалоПериодаЗаКоторыйПредоставляетсяОтпуск", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск)
И ЗначениеЗаполнено(ДополнительныйОтпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск) Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 не заполнена дата начала периода за который предоставляется отпуск.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].НачалоПериодаЗаКоторыйПредоставляетсяОтпуск", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДополнительныйОтпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск)
И ЗначениеЗаполнено(ДополнительныйОтпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск) Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 не заполнена дата окончания периода за который предоставляется отпуск.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].КонецПериодаЗаКоторыйПредоставляетсяОтпуск", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
Если ЗначениеЗаполнено(ДополнительныйОтпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск)
И ЗначениеЗаполнено(ДополнительныйОтпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск)
И ДополнительныйОтпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск > ДополнительныйОтпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск Тогда
ТекстСообщения = НСтр("ru = 'В строке %1 дата окончания периода за который предоставляется отпуск меньше даты начала.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДополнительныйОтпуск.НомерСтроки);
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ДополнительныеОтпуска[%1].НачалоПериодаЗаКоторыйПредоставляетсяОтпуск", ТекстСообщения, "", ИндексСтроки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция ПересеченияПериодов(ПроверяемыйПериод, Периоды)
НомераСтрок = "";
Если ЗначениеЗаполнено(ПроверяемыйПериод.ДатаНачала) Тогда
Для каждого Период Из Периоды Цикл
Если НЕ ЗначениеЗаполнено(Период.ДатаНачала) Тогда
Продолжить;
КонецЕсли;
Если ПроверяемыйПериод.НомерСтроки < Период.НомерСтроки Тогда
Если ПроверяемыйПериод.ДатаНачала <= Период.ДатаНачала И ПроверяемыйПериод.ДатаОкончания >= Период.ДатаНачала Тогда
НомераСтрок = НомераСтрок + ", " + Период.НомерСтроки;
Продолжить;
КонецЕсли;
Если ПроверяемыйПериод.ДатаНачала >= Период.ДатаНачала И ПроверяемыйПериод.ДатаНачала <= Период.ДатаОкончания Тогда
НомераСтрок = НомераСтрок + ", " + Период.НомерСтроки;
Продолжить;
КонецЕсли;
Если ПроверяемыйПериод.ДатаОкончания >= Период.ДатаНачала И ПроверяемыйПериод.ДатаОкончания <= Период.ДатаОкончания Тогда
НомераСтрок = НомераСтрок + ", " + Период.НомерСтроки;
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Прав(НомераСтрок, СтрДлина(НомераСтрок) - 2);
КонецФункции
Функция ПериодыРазрывов()
ПериодыОтпусков = Новый ТаблицаЗначений;
ПериодыОтпусков.Колонки.Добавить("ДатаНачала");
ПериодыОтпусков.Колонки.Добавить("ДатаОкончания");
ПериодыРазрывов = ПериодыОтпусков.СкопироватьКолонки();
Если ПредоставитьОсновнойОтпуск Тогда
ПериодОсновногоОтпуска = ПериодыОтпусков.Добавить();
ПериодОсновногоОтпуска.ДатаНачала = ДатаНачалаОсновногоОтпуска;
ПериодОсновногоОтпуска.ДатаОкончания = ДатаОкончанияОсновногоОтпуска;
КонецЕсли;
Если ПредоставитьДополнительныйОтпуск Тогда
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДополнительныеОтпуска, ПериодыОтпусков);
КонецЕсли;
Компенсации = ПериодыОтпусков.НайтиСтроки(Новый Структура("ДатаНачала", '00010101'));
Для каждого СтрокаКомпенсации Из Компенсации Цикл
ПериодыОтпусков.Удалить(СтрокаКомпенсации);
КонецЦикла;
ПериодыОтпусков.Сортировать("ДатаНачала, ДатаОкончания");
КоличествоПериодов = ПериодыОтпусков.Количество();
Индекс = 0;
Пока Индекс < КоличествоПериодов - 1 Цикл
ТекущийПериод = ПериодыОтпусков[Индекс];
СледующийПериод = ПериодыОтпусков[Индекс + 1];
Если КонецДня(ТекущийПериод.ДатаОкончания) + 1 < НачалоДня(СледующийПериод.ДатаНачала) Тогда
ПериодРазрыва = ПериодыРазрывов.Добавить();
ПериодРазрыва.ДатаНачала = КонецДня(ТекущийПериод.ДатаОкончания) + 1;
ПериодРазрыва.ДатаОкончания = НачалоДня(СледующийПериод.ДатаНачала) - 1;
КонецЕсли;
Индекс = Индекс + 1;
КонецЦикла;
Возврат ПериодыРазрывов
КонецФункции
Процедура ПроверитьПериодДействияНачислений(Отказ)
ПараметрыПроверкиПериодаДействия = РасчетЗарплатыРасширенный.ПараметрыПроверкиПериодаДействия();
ПараметрыПроверкиПериодаДействия.Ссылка = Ссылка;
ПроверяемыеКоллекции = Новый Массив;
ПроверяемыеКоллекции.Добавить(РасчетЗарплатыРасширенный.ОписаниеКоллекцииДляПроверкиПериодаДействия("Начисления", НСтр("ru='Начисления'")));
ПроверяемыеКоллекции.Добавить(РасчетЗарплатыРасширенный.ОписаниеКоллекцииДляПроверкиПериодаДействия("Удержания", НСтр("ru='Удержания'"), "Удержание"));
ПроверяемыеКоллекции.Добавить(РасчетЗарплатыРасширенный.ОписаниеКоллекцииДляПроверкиПериодаДействия("НачисленияПерерасчет", НСтр("ru='Перерасчет прошлого периода'")));
РасчетЗарплатыРасширенный.ПроверитьПериодДействияВКоллекцияхНачислений(ЭтотОбъект, ПараметрыПроверкиПериодаДействия, ПроверяемыеКоллекции, Отказ);
КонецПроцедуры
Процедура ПроверитьКоличествоДнейОтгула(КонтейнерОшибок)
Если ПредоставитьОтгул И КоличествоДнейОтгула = 0 Тогда
ТекстСообщения = НСтр("ru = 'Не указано количество дней отгула.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.КоличествоДнейОтгула", ТекстСообщения, "");
КонецЕсли;
КонецПроцедуры
Процедура УдалитьПроверенныеРеквизиты(ПроверяемыеРеквизиты)
Если ПроверяемыеРеквизиты = Неопределено Тогда
Возврат;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "Организация");
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "Сотрудник");
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ПланируемаяДатаВыплаты");
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "НачалоПериодаЗаКоторыйПредоставляетсяОтпуск");
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "КонецПериодаЗаКоторыйПредоставляетсяОтпуск");
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ДополнительныеОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск");
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПроверяемыеРеквизиты, "ДополнительныеОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск");
КонецПроцедуры
Процедура ПроверитьПересекающиесяБольничные()
ПересекающиесяБольничные = Новый Массив;
КатегорииБольничного = Новый Массив;
КатегорииБольничного.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛиста);
КатегорииБольничного.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛистаЗаСчетРаботодателя);
КатегорииБольничного.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоНесчастныйСлучайНаПроизводстве);
КатегорииБольничного.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоПрофзаболевание);
НачисленияПродлеваемыхОтпусковДокумента = ПериодыНачисленийПродлеваемыхОтпусков();
Отборы = Новый Массив;
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "ФизическоеЛицо", "В", ФизическоеЛицо);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "ПериодДействия", ">=",
НачалоМесяца(ДатаНачалаПериодаОтсутствия));
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "ПериодДействия", "<=",
НачалоМесяца(ДатаОкончанияПериодаОтсутствия));
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "ВидРасчета.КатегорияНачисленияИлиНеоплаченногоВремени",
"В", КатегорииБольничного);
НачисленияПересекающегосяБольничного = РегистрыРасчета.Начисления.РезультирующийПериодДействия(Отборы);
Для Каждого НачислениеЕжегодногоОплачиваемогоОтпускаДокумента Из НачисленияПродлеваемыхОтпусковДокумента Цикл
Для Каждого НачислениеПересекающегосяБольничного Из НачисленияПересекающегосяБольничного Цикл
Если ОбщегоНазначенияБЗК.ИнтервалыПересекаются(
НачислениеЕжегодногоОплачиваемогоОтпускаДокумента.ДатаНачала,
НачислениеЕжегодногоОплачиваемогоОтпускаДокумента.ДатаОкончания,
НачислениеПересекающегосяБольничного.ПериодДействияНачало,
НачислениеПересекающегосяБольничного.ПериодДействияКонец) Тогда
ПересекающийсяБольничныйПоНачислению = НачислениеПересекающегосяБольничного.Регистратор;
ПересекающиесяБольничные.Добавить(ПересекающийсяБольничныйПоНачислению);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ПересекающиесяБольничные = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ПересекающиесяБольничные);
ТекстОтменыПроведенияБольничных = Новый Массив;
Для Каждого Больничный Из ПересекающиесяБольничные Цикл
ТекстОтменыПроведенияБольничных.Добавить(СтрШаблон(НСтр("ru = 'Отмените проведение %1'"), Больничный));
КонецЦикла;
ИнформацияОПересечении = СтрСоединить(ТекстОтменыПроведенияБольничных, Символы.ПС);
Если ПересекающиесяБольничные.Количество() > 0 Тогда
ТекстСообщения = НСтр("ru = 'Отмена проведения запрещена.
|Есть больничные, пересекающиеся с исправленным документом.'") + Символы.ПС + ИнформацияОПересечении;
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьПересечениеПериодовОтсутствия(Отказ)
РезультатПроверки = РезультатПроверкиПересеченийПериодовОтсутствия();
ДанныеСотрудника = РезультатПроверки.ДанныеСотрудников.Получить(Сотрудник);
Если ДанныеСотрудника = Неопределено Тогда
Возврат;
КонецЕсли;
Если РезультатПроверки.Отказ Тогда
ТекстСообщения = НСтр("ru = 'На период %1 сотруднику уже зарегистрирован отпуск документом %2.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДанныеСотрудника.ПредставлениеПериода, ДанныеСотрудника.Регистратор);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , , , Отказ);
Возврат;
КонецЕсли;
КонецПроцедуры
Функция РезультатПроверкиПересеченийПериодовОтсутствия() Экспорт
РеквизитыДляПроведения = Документы.Отпуск.РеквизитыДляПроведенияПустаяСтруктура();
ЗаполнитьЗначенияСвойств(РеквизитыДляПроведения, ЭтотОбъект);
ИсходныеДанные = Документы.Отпуск.ДанныеСостоянийСотрудника(РеквизитыДляПроведения);
Возврат СостоянияСотрудников.ПроверитьПересечениеПериодовОтсутствия(ИсходныеДанные, Ссылка, ИсправленныйДокумент);
КонецФункции
#КонецОбласти
Процедура ЗаполнитьПослеПереноса(ДанныеЗаполнения)
Если ПредоставитьОсновнойОтпуск Тогда
ВидОсновногоОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
СтруктураПараметров = ОстаткиОтпусков.ПараметрыПолученияРабочегоПериодаОтпуска();
СтруктураПараметров.Сотрудник = Сотрудник;
СтруктураПараметров.ТекущийРегистратор = Ссылка;
СтруктураПараметров.ВидОтпуска = ВидОсновногоОтпуска;
СтруктураПараметров.ДатаНачала = ДатаНачалаОсновногоОтпуска;
СтруктураПараметров.ДатаОкончания = ДатаОкончанияОсновногоОтпуска;
СтруктураПараметров.ДатаКомпенсации = ПериодРегистрации;
СтруктураПараметров.КоличествоДнейКомпенсации = КоличествоДнейКомпенсацииОсновногоОтпуска;
РабочийПериодОтпуска = ОстаткиОтпусков.РабочийПериодОтпуска(СтруктураПараметров);
НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = РабочийПериодОтпуска.РабочийГодС;
КонецПериодаЗаКоторыйПредоставляетсяОтпуск = РабочийПериодОтпуска.РабочийГодПо;
КонецЕсли;
Для каждого СтрокаДополнительногоОтпуска Из ДополнительныеОтпуска Цикл
Если Не ЗначениеЗаполнено(СтрокаДополнительногоОтпуска.ВидОтпуска) Тогда
ПредоставитьДополнительныйОтпуск = Ложь;
Продолжить;
КонецЕсли;
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаДополнительногоОтпуска.ВидОтпуска, "ОтпускЯвляетсяЕжегодным") Тогда
СтруктураПараметров = ОстаткиОтпусков.ПараметрыПолученияРабочегоПериодаОтпуска();
СтруктураПараметров.Сотрудник = Сотрудник;
СтруктураПараметров.ТекущийРегистратор = Ссылка;
СтруктураПараметров.ВидОтпуска = СтрокаДополнительногоОтпуска.ВидОтпуска;
СтруктураПараметров.ДатаНачала = СтрокаДополнительногоОтпуска.ДатаНачала;
СтруктураПараметров.ДатаОкончания = СтрокаДополнительногоОтпуска.ДатаОкончания;
СтруктураПараметров.ДатаКомпенсации = ПериодРегистрации;
СтруктураПараметров.КоличествоДнейКомпенсации = 0;
РабочийПериодОтпуска = ОстаткиОтпусков.РабочийПериодОтпуска(СтруктураПараметров);
СтрокаДополнительногоОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = РабочийПериодОтпуска.РабочийГодС;
СтрокаДополнительногоОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = РабочийПериодОтпуска.РабочийГодПо;
КонецЕсли;
КонецЦикла;
ДопПараметры = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(ЭтотОбъект, "ВидРасчетаОсновногоОтпуска");
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВОбъекте(ЭтотОбъект, "ВидРасчетаОсновногоОтпуска", ДопПараметры);
ПериодРасчетаСреднего = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(ДатаНачалаСобытия, Сотрудник, ВидРасчетаОсновногоОтпуска);
ПериодРасчетаСреднегоЗаработкаНачало = ПериодРасчетаСреднего.ДатаНачала;
ПериодРасчетаСреднегоЗаработкаОкончание = ПериодРасчетаСреднего.ДатаОкончания;
ЗапрашиваемыеЗначения = Новый Структура;
ЗапрашиваемыеЗначения.Вставить("Организация", "Организация");
ЗапрашиваемыеЗначения.Вставить("Ответственный", "Ответственный");
ЗапрашиваемыеЗначения.Вставить("Руководитель", "Руководитель");
ЗапрашиваемыеЗначения.Вставить("ДолжностьРуководителя", "ДолжностьРуководителя");
ЗапрашиваемыеЗначения.Вставить("ГлавныйБухгалтер", "ГлавныйБухгалтер");
ЗапрашиваемыеЗначения.Вставить("Бухгалтер", "Бухгалтер");
ЗапрашиваемыеЗначения.Вставить("РаботникКадровойСлужбы", "РаботникКадровойСлужбы");
ЗапрашиваемыеЗначения.Вставить("ДолжностьРаботникаКадровойСлужбы", "ДолжностьРаботникаКадровойСлужбы");
ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтотОбъект, ЗапрашиваемыеЗначения, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Организация"));
КонецПроцедуры
#Область ЗаполнениеИРасчет
Функция ПараметрыРасчета() Экспорт
Возврат Документы.Отпуск.ПараметрыРасчета();
КонецФункции
Процедура Рассчитать(ПараметрыРасчета = Неопределено) Экспорт
Если ПараметрыРасчета = Неопределено Тогда
ПараметрыРасчета = ПараметрыРасчета();
КонецЕсли;
ОписаниеДокумента = Документы.Отпуск.ОписаниеДокументаРасчета();
Если ЗначениеЗаполнено(ЭтотОбъект.ИсправленныйДокумент) Тогда
ПараметрыИсправленногоДокумента = Документы.Отпуск.ПараметрыИсправляемогоДокумента(ЭтотОбъект.ИсправленныйДокумент);
Иначе
ПараметрыИсправленногоДокумента = Неопределено;
КонецЕсли;
Документы.Отпуск.ОчиститьРассчитанныеДанные(ЭтотОбъект, ПараметрыРасчета.ПерезаполнитьНачисления, ПараметрыРасчета.ОбновитьРасчетДенежногоСодержания);
НачалоПериода = ?(ПараметрыРасчета.ПерезаполнитьНачисления, Документы.Отпуск.НачальныйПериодРасчетаЗарплаты(ЭтотОбъект).ДатаНачала, Неопределено);
ПериодРасчетаЗарплаты = Документы.Отпуск.ПериодРасчетаЗарплатыДоНачалаОтпуска(ЭтотОбъект, НачалоПериода);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(ЭтотОбъект.ПериодРегистрации, ЭтотОбъект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты, ПараметрыРасчета.СохранятьИсправления);
ЗафиксированныеСтрокиОплатыТруда = Новый Соответствие;
Если ПараметрыРасчета.ПерезаполнитьНачисления Тогда
Если (ЭтотОбъект.РассчитатьЗарплату Или ЭтотОбъект.ПредоставитьЕдиновременнуюВыплатуКОтпуску
Или (ЭтотОбъект.ПредоставитьМатериальнуюПомощьПриОтпуске И ЭтотОбъект.РасчетДенежногоСодержания))
И Документы.Отпуск.ОтпускНачинаетсяВСледующемМесяце(ЭтотОбъект, НачалоПериода) Тогда
ЗаполнитьНачисления(МенеджерРасчета, ПериодРасчетаЗарплаты, ПараметрыИсправленногоДокумента, ПараметрыРасчета.ОбновитьДанныеДляРасчетаСреднего);
ЗаполнитьПерерасчеты(МенеджерРасчета);
Если Не ПараметрыРасчета.СкорректированСреднийЗаработок Тогда
ПараметрыРасчета.ОбновитьДанныеДляРасчетаСреднего = Истина;
КонецЕсли;
ЗафиксированныеСтрокиОплатыОтпуска = УстановитьПризнакФиксРасчетНачислениямОплатыОтпуска(МенеджерРасчета);
НастройкиРасчетаОтпуска = ОбщегоНазначения.СкопироватьРекурсивно(МенеджерРасчета.НастройкиРасчета);
МенеджерРасчета.УстановитьНастройкиРасчетаПоУмолчанию();
МенеджерРасчета.НастройкиРасчета.Сотрудники = НастройкиРасчетаОтпуска.Сотрудники;
МенеджерРасчета.НастройкиРасчета.ФизическиеЛица = НастройкиРасчетаОтпуска.ФизическиеЛица;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления = Истина;
МенеджерРасчета.РассчитатьЗарплату();
ЗаполнитьНастройкиМенеджераРасчетаПоШаблону(МенеджерРасчета, НастройкиРасчетаОтпуска);
РезультатРасчетаНачисленийВДанныеОбъекта(МенеджерРасчета.Зарплата);
НоваяТранзакция = НачатьНовуюТранзакцию();
ЗарегистрироватьНачисленияОплатыТруда(МенеджерРасчета.Зарплата);
ОбновитьДанныеДляРасчетаСохраняемогоЗаработка(ПараметрыРасчета);
Если НоваяТранзакция Тогда
ОтменитьТранзакцию();
КонецЕсли;
Документы.Отпуск.ОчиститьРассчитанныеДанные(ЭтотОбъект, ПараметрыРасчета.ПерезаполнитьНачисления, ложь);
ОчиститьДанныеДляРасчетаСреднегоЗаПериодРегистрации(ПараметрыРасчета.ОбновитьДанныеДляРасчетаСреднего);
СброситьПризнакФиксРасчет(МенеджерРасчета, ЗафиксированныеСтрокиОплатыОтпуска);
ЗафиксированныеСтрокиОплатыТруда = УстановитьПризнакФиксРасчетНачислениямОплатыТруда(МенеджерРасчета);
Иначе
ОбновитьДанныеДляРасчетаСохраняемогоЗаработка(ПараметрыРасчета);
КонецЕсли;
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(ЭтотОбъект.ПериодРегистрации, ЭтотОбъект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты, ПараметрыРасчета.СохранятьИсправления);
ЗаполнитьНачисления(МенеджерРасчета, ПериодРасчетаЗарплаты, ПараметрыИсправленногоДокумента, ПараметрыРасчета.ОбновитьДанныеДляРасчетаСреднего);
ЗаполнитьПерерасчеты(МенеджерРасчета);
МенеджерРасчета.НастройкиБухучета.КоэффициентыСреднегоЗаработкаДокумента
= УчетСреднегоЗаработка.КоэффициентыРаспределенияСреднегоЗаработкаДокумента(ЭтотОбъект, ОписаниеДокумента, ЭтоСреднеЧасовойЗаработок());
МенеджерРасчета.НастройкиБухучета.КоэффициентыРаспределенияДенежногоСодержания = ЭтотОбъект.КоэффициентыРаспределенияДенежногоСодержания.Выгрузить();
Иначе
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
КонецЕсли;
ЗаполнитьУдержания(МенеджерРасчета);
МенеджерРасчета.РассчитатьЗарплату();
СброситьПризнакФиксРасчет(МенеджерРасчета, ЗафиксированныеСтрокиОплатыТруда);
РасчетЗарплатыВДанныeОбъекта(МенеджерРасчета.Зарплата);
КонецПроцедуры
Процедура ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты, СохранятьИсправления = Истина)
ОписаниеДокумента = Документы.Отпуск.ОписаниеДокументаРасчета();
ПараметрыИсправляемого = Документы.Отпуск.ПараметрыИсправляемогоДокумента(ЭтотОбъект.ИсправленныйДокумент);
МенеджерРасчета.ИсключаемыйРегистратор = ЭтотОбъект.Ссылка;
ИсправлениеРасчетовБЗК.НастроитьМенеджерРасчета(МенеджерРасчета, ЭтотОбъект, ОписаниеДокумента, ПараметрыИсправляемого);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриИнициализацииМенеджераРасчетаДляЗаполненияДокументаРасчетаЗарплаты(МенеджерРасчета);
КонецЕсли;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьКорректировкиВыплаты = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьЗаймы = ПериодРасчетаЗарплаты <> Неопределено;
МенеджерРасчета.НастройкиРасчета.РассчитыватьУдержания = РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(ЭтотОбъект.ПорядокВыплаты);
МенеджерРасчета.НастройкиРасчета.СохранятьИсправления = СохранятьИсправления;
МенеджерРасчета.НастройкиРасчета.РасчетЗарплаты = ПериодРасчетаЗарплаты <> Неопределено;
МенеджерРасчета.НастройкиНДФЛ.Сотрудники = ЭтотОбъект.Сотрудник;
МенеджерРасчета.НастройкиНДФЛ.ДатаВыплаты = ЭтотОбъект.ПланируемаяДатаВыплаты;
МенеджерРасчета.НастройкиНДФЛ.ОкончательныйРасчет = Ложь;
МенеджерРасчета.НастройкиНДФЛ.ДоходПолученНаТерриторииРФ = ЭтотОбъект.ДоходПолученНаТерриторииРФ;
ЗасчитыватьДанныеАвансов = ЭтотОбъект.РассчитатьЗарплату;
Если ЗасчитыватьДанныеАвансов
И ИсправлениеРасчетовБЗККлиентСервер.ИсправлениеВТекущемПериоде(ЭтотОбъект, ПараметрыИсправляемого)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотОбъект.ИсправленныйДокумент, "РассчитатьЗарплату") Тогда
ЗасчитыватьДанныеАвансов = Ложь
КонецЕсли;
МенеджерРасчета.НастройкиНДФЛ.ЗасчитыватьДанныеАвансов = ЗасчитыватьДанныеАвансов;
МенеджерРасчета.НастройкиУдержаний.РассчитыватьТолькоПоТекущемуДокументу = Истина;
Если ПериодРасчетаЗарплаты <> Неопределено Тогда
МенеджерРасчета.НастройкиЗаймов.Сотрудники = ЭтотОбъект.Сотрудник;
МенеджерРасчета.НастройкиЗаймов.ДатаПогашения = ПериодРасчетаЗарплаты.ДатаОкончания;
КонецЕсли;
МенеджерРасчета.НастройкиБухучета.НастройкиБухучетаДокумента = Документы.Отпуск.ДанныеДляБухучетаЗарплатыПервичныхДокументов(ЭтотОбъект)["ТаблицаБухучетЗарплаты"];
МенеджерРасчета.ДобавитьДатуНачалаСобытия(ЭтотОбъект.Сотрудник, ЭтотОбъект.ДатаНачалаСобытия);
КонецПроцедуры
Процедура ЗаполнитьНачисления(МенеджерРасчета, ПериодРасчетаЗарплаты, ПараметрыИсправленногоДокумента, ОбновитьДанныеДляРасчетаСреднего)
Если Не ЭтотОбъект.РассчитатьЗарплату Тогда
ОчиститьДанныеДляРасчетаСреднегоЗаПериодРегистрации(ОбновитьДанныеДляРасчетаСреднего);
КонецЕсли;
ТаблицаНачислений = МенеджерРасчета.ТаблицаИсходныеДанныеНачисленияЗарплатыПоНачислениям();
ДополнитьНачисленияВыплачиваемыеКОтпуску(ТаблицаНачислений, МенеджерРасчета, ПериодРасчетаЗарплаты, ПараметрыИсправленногоДокумента);
ДополнитьНачисленияОплатаОтпуска(ТаблицаНачислений, МенеджерРасчета);
МенеджерРасчета.ЗаполнитьНачисленияСотрудникаЗаПериод(ЭтотОбъект.Сотрудник, ТаблицаНачислений, ПериодРасчетаЗарплаты);
КонецПроцедуры
Процедура ЗаполнитьПерерасчеты(МенеджерРасчета)
Если Не ИсправлениеДокументовРасчетЗарплаты.ДоначисленияРазрешены(МенеджерРасчета) Тогда
Возврат;
КонецЕсли;
ИсходныеДанныеДляПерерасчета = ИсправлениеРасчетовБЗК.ИсходныеДанныеДляПерерасчетаИзРезультатаРасчета(МенеджерРасчета.Зарплата.Начисления);
Если ЗначениеЗаполнено(ЭтотОбъект.ИсправленныйДокумент) Тогда
ОписаниеТаблиц = Новый Массив();
ОписаниеТаблиц.Добавить(Документы.Отпуск.ОписаниеТаблицыНачислений());
РезультатПерерасчета = ИсправлениеРасчетовБЗК.ДанныеПерерасчетаДляИсправления(
ЭтотОбъект.Организация,
ЭтотОбъект.ПериодРегистрации,
ИсходныеДанныеДляПерерасчета,
ЭтотОбъект.ИсправленныйДокумент,
ЭтотОбъект.Ссылка,
Документы.Отпуск.ОписаниеДокументаРасчета(),
ОписаниеТаблиц,,
ЭтотОбъект.ДоначислитьЗарплатуПриНеобходимости);
Иначе
РезультатПерерасчета = ИсправлениеРасчетовБЗК.ДанныеПерерасчета(ЭтотОбъект, ИсходныеДанныеДляПерерасчета, Документы.Отпуск.ОписаниеДокументаРасчета());
КонецЕсли;
Если Не РезультатПерерасчета = Неопределено Тогда
ИсправлениеРасчетовБЗК.ДанныеПерерасчетаВМенеджерРасчета(РезультатПерерасчета, МенеджерРасчета);
КонецЕсли;
КонецПроцедуры
Процедура ОчиститьДанныеДляРасчетаСреднегоЗаПериодРегистрации(ОбновитьДанныеДляРасчетаСреднего)
Если ЭтотОбъект.РасчетДенежногоСодержания
Или Не ОбновитьДанныеДляРасчетаСреднего Тогда
Возврат;
КонецЕсли;
ТаблицыСреднего = Новый Массив;
ТаблицыСреднего.Добавить(ЭтотОбъект.СреднийЗаработокОбщий);
ТаблицыСреднего.Добавить(ЭтотОбъект.ОтработанноеВремяДляСреднегоОбщий);
Для Каждого ТаблицаСреднего Из ТаблицыСреднего Цикл
НайденныеСтроки = ТаблицаСреднего.НайтиСтроки(Новый Структура("Период", ЭтотОбъект.ПериодРегистрации));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
ТаблицаСреднего.Удалить(НайденнаяСтрока);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ДополнитьНачисленияВыплачиваемыеКОтпуску(ТаблицаНачислений, МенеджерРасчета, ПериодРасчетаЗарплаты, ПараметрыИсправленногоДокумента)
ПредоставляетсяЕдиновременнаяВыплатаКОтпуску =
ЭтотОбъект.ПредоставитьЕдиновременнуюВыплатуКОтпуску И ЗначениеЗаполнено(ЭтотОбъект.ВидРасчетаЕдиновременнойВыплатыКОтпуску);
ПериодРегистрацииЕдиновременнойВыплаты = ЭтотОбъект.ПериодРегистрации;
ПериодРегистрацииМатериальнойПомощи = ЭтотОбъект.ПериодРегистрации;
Если ИсправлениеРасчетовБЗККлиентСервер.ЭтоИсправление(ПараметрыИсправленногоДокумента)
И (ПредоставляетсяЕдиновременнаяВыплатаКОтпуску Или ЭтотОбъект.ПредоставитьМатериальнуюПомощьПриОтпуске) Тогда
РеквизитыИсправленного = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПараметрыИсправленногоДокумента.Ссылка,
"ПредоставитьЕдиновременнуюВыплатуКОтпуску,ВидРасчетаЕдиновременнойВыплатыКОтпуску,ПредоставитьМатериальнуюПомощьПриОтпуске");
ПервичныйДокумент = ИсправлениеДокументовЗарплатаКадры.ПервыйДокументЦепочкиИсправлений(ПараметрыИсправленногоДокумента.Ссылка);
ПервичныйПериодРегистрации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПервичныйДокумент, "ПериодРегистрации");
Если ПредоставляетсяЕдиновременнаяВыплатаКОтпуску
И РеквизитыИсправленного.ПредоставитьЕдиновременнуюВыплатуКОтпуску И ЗначениеЗаполнено(РеквизитыИсправленного.ВидРасчетаЕдиновременнойВыплатыКОтпуску) Тогда
ПериодРегистрацииЕдиновременнойВыплаты = ПервичныйПериодРегистрации;
КонецЕсли;
Если ЭтотОбъект.ПредоставитьМатериальнуюПомощьПриОтпуске И РеквизитыИсправленного.ПредоставитьМатериальнуюПомощьПриОтпуске Тогда
ПериодРегистрацииМатериальнойПомощи = ПервичныйПериодРегистрации;
КонецЕсли;
КонецЕсли;
ТаблицаВедущихНачислений = МенеджерРасчета.НовыйВедущиеНачисленияСотрудников();
РегистраторРазовыхНачислений = ДокументыРазовыхНачислений.РегистраторРазовогоНачисления(ЭтотОбъект.Ссылка);
Если ПредоставляетсяЕдиновременнаяВыплатаКОтпуску Тогда
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = ЭтотОбъект.Сотрудник;
НовыйИнтервал.Начисление = ЭтотОбъект.ВидРасчетаЕдиновременнойВыплатыКОтпуску;
НовыйИнтервал.ДатаНачала = НачалоМесяца(ПериодРегистрацииЕдиновременнойВыплаты);
НовыйИнтервал.ДатаОкончания = КонецМесяца(ПериодРегистрацииЕдиновременнойВыплаты);
НовыйИнтервал.ПериодПолученияПоказателей = ЭтотОбъект.ДатаНачалаСобытия;
НовыйИнтервал.РегистраторРазовогоНачисления = РегистраторРазовыхНачислений;
СтрокаТаблицыВедущих = ТаблицаВедущихНачислений.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицыВедущих, НовыйИнтервал);
КонецЕсли;
Если ЭтотОбъект.ПредоставитьМатериальнуюПомощьПриОтпуске Тогда
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = ЭтотОбъект.Сотрудник;
НовыйИнтервал.Начисление = ЭтотОбъект.ВидРасчетаМатериальнойПомощиПриОтпуске;
НовыйИнтервал.ДатаНачала = НачалоМесяца(ПериодРегистрацииМатериальнойПомощи);
НовыйИнтервал.ДатаОкончания = КонецМесяца(ПериодРегистрацииМатериальнойПомощи);
НовыйИнтервал.ПериодПолученияПоказателей = ЭтотОбъект.ДатаНачалаСобытия;
НовыйИнтервал.РегистраторРазовогоНачисления = РегистраторРазовыхНачислений;
СтрокаТаблицыВедущих = ТаблицаВедущихНачислений.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицыВедущих, НовыйИнтервал);
КонецЕсли;
Если ТаблицаВедущихНачислений.Количество() > 0 Тогда
ЗависимыеНачисления = МенеджерРасчета.ЗависимыеНачисленияРассчитываемыеСРазовыми(ТаблицаВедущихНачислений);
Для Каждого СтрокаЗависимогоНачисления Из ЗависимыеНачисления Цикл
Если ПериодРасчетаЗарплаты <> Неопределено
И ОбщегоНазначенияБЗК.ДатаВИнтервале(СтрокаЗависимогоНачисления.ДатаНачала, ПериодРасчетаЗарплаты.ДатаНачала, ПериодРасчетаЗарплаты.ДатаОкончания, Истина)
И ОбщегоНазначенияБЗК.ДатаВИнтервале(СтрокаЗависимогоНачисления.ДатаОкончания, ПериодРасчетаЗарплаты.ДатаНачала, ПериодРасчетаЗарплаты.ДатаОкончания, Истина) Тогда
Продолжить;
КонецЕсли;
Если ПериодРасчетаЗарплаты <> Неопределено
И ОбщегоНазначенияБЗК.ДатаВИнтервале(СтрокаЗависимогоНачисления.ДатаНачала, ПериодРасчетаЗарплаты.ДатаНачала, ПериодРасчетаЗарплаты.ДатаОкончания, Истина) Тогда
НовыйИнтервал = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НовыйИнтервал, СтрокаЗависимогоНачисления);
НовыйИнтервал.РассчитыватьПоРазовымНачислениямДокумента = Истина;
НовыйИнтервал.РегистраторРазовогоНачисления = РегистраторРазовыхНачислений;
НовыйИнтервал.ДатаНачала = КонецДня(ПериодРасчетаЗарплаты.ДатаОкончания) + 1;
Иначе
НовыйИнтервал = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НовыйИнтервал, СтрокаЗависимогоНачисления);
НовыйИнтервал.РассчитыватьПоРазовымНачислениямДокумента = Истина;
НовыйИнтервал.РегистраторРазовогоНачисления = РегистраторРазовыхНачислений;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ДополнитьНачисленияОплатаОтпуска(ТаблицаНачислений, МенеджерРасчета)
ОтпускВРабочихДняхПоДоговору = ОстаткиОтпусков.ОтпускСотрудникаВРабочихДняхПоДоговору(ЭтотОбъект.Сотрудник, ЭтотОбъект.ДатаНачалаСобытия);
ПоКалендарнымДням = ОстаткиОтпусков.ОписаниеВидаОтпуска(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"), ОтпускВРабочихДняхПоДоговору).СпособРасчетаПоКалендарнымДням;
ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
ДополнительныеПараметры.Индексации = ЭтотОбъект.ДанныеОбИндексации;
ДополнительныеПараметры.ДатаНачалаСобытия = ЭтотОбъект.ДатаНачалаСобытия;
ДополнительныеПараметры.НачалоПериода = ЭтотОбъект.ПериодРасчетаСреднегоЗаработкаНачало;
ДополнительныеПараметры.ОкончаниеПериода = ЭтотОбъект.ПериодРасчетаСреднегоЗаработкаОкончание;
ДополнительныеПараметры.ПоЧасам = ЭтоСреднеЧасовойЗаработок();
Если РасчетДенежногоСодержания Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
СтруктураОбъекта = ПодготовитьСтруктуруОбъектаДляРасчетаДенежногоСодержания();
МодульРасчетДенежногоСодержания = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
ЗначенияПоказателейСохраняемогоДенежногоСодержания = МодульРасчетДенежногоСодержания.ЗначенияПоказателейСохраняемогоДенежногоСодержания(СтруктураОбъекта);
КонецЕсли;
ПоказательСохраняемыйЗаработок = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СохраняемоеДенежноеСодержание");
ЗначениеПоказателяПоКалендарнымДням = ЭтотОбъект.СохраняемоеДенежноеСодержание;
ЗначениеПоказателяПоРабочимДням = ЭтотОбъект.СохраняемоеДенежноеСодержание;
Иначе
Если ПоКалендарнымДням Тогда
ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;
Иначе
ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоШестидневке;
КонецЕсли;
ЗначенияПоказателейСреднегоЗаработка = УчетСреднегоЗаработкаКлиентСервер.ЗначенияПоказателейСреднегоЗаработкаОбщего(СреднийЗаработокОбщий, ОтработанноеВремяДляСреднегоОбщий, ДополнительныеПараметры);
ПоказательСохраняемыйЗаработок = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СреднийЗаработокОбщий");
ЗначениеПоказателяПоКалендарнымДням = ЭтотОбъект.СреднийЗаработок;
ЗначениеПоказателяПоРабочимДням = ЭтотОбъект.СреднийЗаработокПоРабочимДням;
КонецЕсли;
ДниКомпенсацииСсылка = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.КоличествоДнейКомпенсации");
ПоказательСДСНеИндексируемое = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СохраняемоеДенежноеСодержаниеНеИндексируемое");
ЗначениеПоказателяСДСНеИндексируемое = ЭтотОбъект.СохраняемоеДенежноеСодержаниеНеИндексируемое;
ПоказательМесячноеДенежноеСодержание = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.МесячноеДенежноеСодержание");
ЗначениеПоказателяМесячноеДенежноеСодержание = ЭтотОбъект.МесячноеДенежноеСодержание;
ЗначениеПоказателяУчитыватьМРОТ = ?(ЭтотОбъект.УчитыватьМРОТПриОплатеПоСреднемуЗаработку, 1, 0);
ПоказательУчитыватьМРОТ = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.УчитыватьМРОТ");
КонецОтпуска = Неопределено;
ДополнительныеВидыРасчета = РасчетЗарплатыРасширенный.ДополнительныеНачисленияОсновныхВидовРасчета(ВидыРасчетаДокумента());
ДатаНачалаРаздельногоРасчетаРКСН = УчетНДФЛРасширенный.ДатаЗаконаПроРКиЕАЭС();
Если ЭтотОбъект.ПредоставитьОсновнойОтпуск Тогда
Если ЗначениеЗаполнено(ЭтотОбъект.ДатаНачалаОсновногоОтпуска) И ЗначениеЗаполнено(ЭтотОбъект.ДатаОкончанияОсновногоОтпуска) Тогда
Если РасчетДенежногоСодержания
И ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
ЗначенияПоказателейСреднегоЗаработка = МодульРасчетДенежногоСодержания.ЗначенияПоказателейСохраняемогоДенежногоСодержанияПоНазначению(ЗначенияПоказателейСохраняемогоДенежногоСодержания, "ЕжегодныйОтпуск");
КонецЕсли;
ПериодыНачислений = Новый Массив;
ПериодОтпуска = Новый Структура;
ПериодОтпуска.Вставить("ДатаНачалаПериода", ЭтотОбъект.ДатаНачалаОсновногоОтпуска);
ПериодОтпуска.Вставить("ДатаОкончанияПериода", ЭтотОбъект.ДатаОкончанияОсновногоОтпуска);
ПериодыНачислений.Добавить(ПериодОтпуска);
Если ЭтотОбъект.ПериодыПриостановкиОтпуска.Количество()> 0 Тогда
ПериодыНачислений = Документы.Отпуск.ИсключитьИнтервалыИзПериодов(ПериодОтпуска, ЭтотОбъект.ПериодыПриостановкиОтпуска);
КонецЕсли;
Для Каждого ПериодНачисления Из ПериодыНачислений Цикл
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = ЭтотОбъект.Сотрудник;
НовыйИнтервал.Начисление = ЭтотОбъект.ВидРасчетаОсновногоОтпуска;
НовыйИнтервал.ДатаНачала = ПериодНачисления.ДатаНачалаПериода;
НовыйИнтервал.ДатаОкончания = КонецДня(ПериодНачисления.ДатаОкончанияПериода);
Если ПоКалендарнымДням Тогда
ЗначениеПоказателя = ЗначениеПоказателяПоКалендарнымДням;
Иначе
ЗначениеПоказателя = ЗначениеПоказателяПоРабочимДням;
КонецЕсли;
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСохраняемыйЗаработок, ЗначениеПоказателя);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательУчитыватьМРОТ, ЗначениеПоказателяУчитыватьМРОТ);
Если ЗначениеЗаполнено(ПоказательСДСНеИндексируемое) Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСДСНеИндексируемое, ЗначениеПоказателяСДСНеИндексируемое);
КонецЕсли;
Если ЗначениеЗаполнено(ПоказательМесячноеДенежноеСодержание) Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательМесячноеДенежноеСодержание, ЗначениеПоказателяМесячноеДенежноеСодержание);
КонецЕсли;
КонецОтпуска = ЭтотОбъект.ДатаОкончанияОсновногоОтпуска;
Если Не ЭтотОбъект.РасчетДенежногоСодержания И ПолучитьФункциональнуюОпцию("ИндексироватьСреднийЗаработокЧастично") Тогда
УчетСреднегоЗаработка.ДобавитьЗначенияПоказателейЧастичнойИндексацииОтпусков(ЭтотОбъект, МенеджерРасчета, НовыйИнтервал, ПоКалендарнымДням);
КонецЕсли;
ВидыРасчетаДолейРКСН = ДополнительныеВидыРасчета.Получить(ЭтотОбъект.ВидРасчетаОсновногоОтпуска);
Если ВидыРасчетаДолейРКСН <> Неопределено И ЭтотОбъект.ПланируемаяДатаВыплаты >= ДатаНачалаРаздельногоРасчетаРКСН Тогда
Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК, ЭтотОбъект.ПланируемаяДатаВыплаты) Тогда
НоваяСтрока = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК;
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
КонецЕсли;
Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН, ЭтотОбъект.ПланируемаяДатаВыплаты) Тогда
НоваяСтрока = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН;
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
КонецЕсли;
Иначе
НулевыеЗначенияПоказателейРКСН = Справочники.ПоказателиРасчетаЗарплаты.НулевыеЗначенияПоказателейРКСН();
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НовыйИнтервал, МенеджерРасчета, НулевыеЗначенияПоказателейРКСН);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если ЭтотОбъект.ПредоставитьКомпенсациюОсновногоОтпуска Тогда
Если ЭтотОбъект.КоличествоДнейКомпенсацииОсновногоОтпуска > 0 Тогда
Если РасчетДенежногоСодержания
И ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
ЗначенияПоказателейСреднегоЗаработка = МодульРасчетДенежногоСодержания.ЗначенияПоказателейСохраняемогоДенежногоСодержанияПоНазначению(ЗначенияПоказателейСохраняемогоДенежногоСодержания, "ВыходноеПособие");
КонецЕсли;
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = ЭтотОбъект.Сотрудник;
НовыйИнтервал.Начисление = ЭтотОбъект.ВидРасчетаКомпенсацииОсновногоОтпуска;
НовыйИнтервал.ДатаНачала = НачалоМесяца(ЭтотОбъект.ПериодРегистрации);
НовыйИнтервал.ДатаОкончания = КонецМесяца(ЭтотОбъект.ПериодРегистрации);
Если ПоКалендарнымДням Тогда
ЗначениеПоказателя = ЗначениеПоказателяПоКалендарнымДням;
Иначе
ЗначениеПоказателя = ЗначениеПоказателяПоРабочимДням;
КонецЕсли;
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСохраняемыйЗаработок, ЗначениеПоказателя);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ДниКомпенсацииСсылка, ЭтотОбъект.КоличествоДнейКомпенсацииОсновногоОтпуска);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательУчитыватьМРОТ, ЗначениеПоказателяУчитыватьМРОТ);
Если ЗначениеЗаполнено(ПоказательСДСНеИндексируемое) Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСДСНеИндексируемое, ЗначениеПоказателяСДСНеИндексируемое);
КонецЕсли;
Если ЗначениеЗаполнено(ПоказательМесячноеДенежноеСодержание) Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательМесячноеДенежноеСодержание, ЗначениеПоказателяМесячноеДенежноеСодержание);
КонецЕсли;
Если Не ЭтотОбъект.РасчетДенежногоСодержания И ПолучитьФункциональнуюОпцию("ИндексироватьСреднийЗаработокЧастично") Тогда
УчетСреднегоЗаработка.ДобавитьЗначенияПоказателейЧастичнойИндексацииОтпусков(ЭтотОбъект, МенеджерРасчета, НовыйИнтервал, ПоКалендарнымДням);
КонецЕсли;
ВидыРасчетаДолейРКСН = ДополнительныеВидыРасчета.Получить(ЭтотОбъект.ВидРасчетаКомпенсацииОсновногоОтпуска);
Если ВидыРасчетаДолейРКСН <> Неопределено И ЭтотОбъект.ПланируемаяДатаВыплаты >= ДатаНачалаРаздельногоРасчетаРКСН Тогда
Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК, ЭтотОбъект.ПланируемаяДатаВыплаты) Тогда
НоваяСтрока = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК;
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
КонецЕсли;
Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН, ЭтотОбъект.ПланируемаяДатаВыплаты) Тогда
НоваяСтрока = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН;
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
КонецЕсли;
Иначе
НулевыеЗначенияПоказателейРКСН = Справочники.ПоказателиРасчетаЗарплаты.НулевыеЗначенияПоказателейРКСН();
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НовыйИнтервал, МенеджерРасчета, НулевыеЗначенияПоказателейРКСН);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЭтотОбъект.ПредоставитьДополнительныйОтпуск Тогда
Для Каждого СтрокаДополнительногоОтпуска Из ЭтотОбъект.ДополнительныеОтпуска Цикл
Если РасчетДенежногоСодержания
И ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
ЗначенияПоказателейСреднегоЗаработка = МодульРасчетДенежногоСодержания.ЗначенияПоказателейСохраняемогоДенежногоСодержанияПоНазначению(ЗначенияПоказателейСохраняемогоДенежногоСодержания, "ЕжегодныйОтпуск");
Иначе
Если ПоКалендарнымДням <> ОстаткиОтпусков.ОписаниеВидаОтпуска(СтрокаДополнительногоОтпуска.ВидОтпуска, ОтпускВРабочихДняхПоДоговору).СпособРасчетаПоКалендарнымДням Тогда
ПоКалендарнымДням = Не ПоКалендарнымДням;
Если ПоКалендарнымДням Тогда
ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;
Иначе
ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоШестидневке;
КонецЕсли;
ЗначенияПоказателейСреднегоЗаработка = УчетСреднегоЗаработкаКлиентСервер.ЗначенияПоказателейСреднегоЗаработкаОбщего(СреднийЗаработокОбщий, ОтработанноеВремяДляСреднегоОбщий, ДополнительныеПараметры);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаДополнительногоОтпуска.ДатаНачала) И ЗначениеЗаполнено(СтрокаДополнительногоОтпуска.ДатаОкончания) Тогда
ПериодыНачисленияДопОтпусков = Новый Массив;
ПериодДопОтпуска = Новый Структура;
ПериодДопОтпуска.Вставить("ДатаНачалаПериода", СтрокаДополнительногоОтпуска.ДатаНачала);
ПериодДопОтпуска.Вставить("ДатаОкончанияПериода", СтрокаДополнительногоОтпуска.ДатаОкончания);
ПериодыНачисленияДопОтпусков.Добавить(ПериодДопОтпуска);
Если ЭтотОбъект.ПериодыПриостановкиОтпуска.Количество() > 0 Тогда
ПериодыНачисленияДопОтпусков = Документы.Отпуск.ИсключитьИнтервалыИзПериодов(ПериодДопОтпуска, ЭтотОбъект.ПериодыПриостановкиОтпуска);
КонецЕсли;
Для Каждого ПериодНачисления Из ПериодыНачисленияДопОтпусков Цикл
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = ЭтотОбъект.Сотрудник;
НовыйИнтервал.Начисление = СтрокаДополнительногоОтпуска.ВидРасчета;
НовыйИнтервал.ДатаНачала = ПериодНачисления.ДатаНачалаПериода;
НовыйИнтервал.ДатаОкончания = КонецДня(ПериодНачисления.ДатаОкончанияПериода);
Если ПоКалендарнымДням Тогда
ЗначениеПоказателя = ЗначениеПоказателяПоКалендарнымДням;
Иначе
ЗначениеПоказателя = ЗначениеПоказателяПоРабочимДням;
КонецЕсли;
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСохраняемыйЗаработок, ЗначениеПоказателя);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательУчитыватьМРОТ, ЗначениеПоказателяУчитыватьМРОТ);
Если ЗначениеЗаполнено(ПоказательСДСНеИндексируемое) Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСДСНеИндексируемое, ЗначениеПоказателяСДСНеИндексируемое);
КонецЕсли;
Если ЗначениеЗаполнено(ПоказательМесячноеДенежноеСодержание) Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательМесячноеДенежноеСодержание, ЗначениеПоказателяМесячноеДенежноеСодержание);
КонецЕсли;
КонецОтпуска = СтрокаДополнительногоОтпуска.ДатаОкончания;
Если Не ЭтотОбъект.РасчетДенежногоСодержания И ПолучитьФункциональнуюОпцию("ИндексироватьСреднийЗаработокЧастично") Тогда
УчетСреднегоЗаработка.ДобавитьЗначенияПоказателейЧастичнойИндексацииОтпусков(ЭтотОбъект, МенеджерРасчета, НовыйИнтервал, ПоКалендарнымДням);
КонецЕсли;
ВидыРасчетаДолейРКСН = ДополнительныеВидыРасчета.Получить(СтрокаДополнительногоОтпуска.ВидРасчета);
Если ВидыРасчетаДолейРКСН <> Неопределено И ЭтотОбъект.ПланируемаяДатаВыплаты >= ДатаНачалаРаздельногоРасчетаРКСН Тогда
Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК, ЭтотОбъект.ПланируемаяДатаВыплаты) Тогда
НоваяСтрока = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК;
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
КонецЕсли;
Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН, ЭтотОбъект.ПланируемаяДатаВыплаты) Тогда
НоваяСтрока = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН;
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
КонецЕсли;
Иначе
НулевыеЗначенияПоказателейРКСН = Справочники.ПоказателиРасчетаЗарплаты.НулевыеЗначенияПоказателейРКСН();
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НовыйИнтервал, МенеджерРасчета, НулевыеЗначенияПоказателейРКСН);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если СтрокаДополнительногоОтпуска.КоличествоДнейКомпенсации > 0 Тогда
Если РасчетДенежногоСодержания
И ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
ЗначенияПоказателейСреднегоЗаработка = МодульРасчетДенежногоСодержания.ЗначенияПоказателейСохраняемогоДенежногоСодержанияПоНазначению(ЗначенияПоказателейСохраняемогоДенежногоСодержания, "ВыходноеПособие");
КонецЕсли;
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = ЭтотОбъект.Сотрудник;
НовыйИнтервал.Начисление = СтрокаДополнительногоОтпуска.ВидРасчетаКомпенсации;
НовыйИнтервал.ДатаНачала = НачалоМесяца(ЭтотОбъект.ПериодРегистрации);
НовыйИнтервал.ДатаОкончания = КонецМесяца(ЭтотОбъект.ПериодРегистрации);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ДниКомпенсацииСсылка, СтрокаДополнительногоОтпуска.КоличествоДнейКомпенсации);
Если ПоКалендарнымДням Тогда
ЗначениеПоказателя = ЗначениеПоказателяПоКалендарнымДням;
Иначе
ЗначениеПоказателя = ЗначениеПоказателяПоРабочимДням;
КонецЕсли;
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСохраняемыйЗаработок, ЗначениеПоказателя);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательУчитыватьМРОТ, ЗначениеПоказателяУчитыватьМРОТ);
Если ЗначениеЗаполнено(ПоказательСДСНеИндексируемое) Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСДСНеИндексируемое, ЗначениеПоказателяСДСНеИндексируемое);
КонецЕсли;
Если ЗначениеЗаполнено(ПоказательМесячноеДенежноеСодержание) Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательМесячноеДенежноеСодержание, ЗначениеПоказателяМесячноеДенежноеСодержание);
КонецЕсли;
Если Не ЭтотОбъект.РасчетДенежногоСодержания И ПолучитьФункциональнуюОпцию("ИндексироватьСреднийЗаработокЧастично") Тогда
УчетСреднегоЗаработка.ДобавитьЗначенияПоказателейЧастичнойИндексацииОтпусков(ЭтотОбъект, МенеджерРасчета, НовыйИнтервал, ПоКалендарнымДням);
КонецЕсли;
ВидыРасчетаДолейРКСН = ДополнительныеВидыРасчета.Получить(СтрокаДополнительногоОтпуска.ВидРасчетаКомпенсации);
Если ВидыРасчетаДолейРКСН <> Неопределено И ЭтотОбъект.ПланируемаяДатаВыплаты >= ДатаНачалаРаздельногоРасчетаРКСН Тогда
Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК, ЭтотОбъект.ПланируемаяДатаВыплаты) Тогда
НоваяСтрока = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК;
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
КонецЕсли;
Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН, ЭтотОбъект.ПланируемаяДатаВыплаты) Тогда
НоваяСтрока = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН;
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
КонецЕсли;
Иначе
НулевыеЗначенияПоказателейРКСН = Справочники.ПоказателиРасчетаЗарплаты.НулевыеЗначенияПоказателейРКСН();
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НовыйИнтервал, МенеджерРасчета, НулевыеЗначенияПоказателейРКСН);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЭтотОбъект.ПредоставитьОтгул Тогда
Если КонецОтпуска <> Неопределено Тогда
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = ЭтотОбъект.Сотрудник;
НовыйИнтервал.Начисление = ЭтотОбъект.ВидРасчетаОтгул;
НовыйИнтервал.ДатаНачала = НачалоДня(КонецДня(КонецОтпуска) + 1);
НовыйИнтервал.ДатаОкончания = УчетРабочегоВремениРасширенный.ДатаОкончанияПоГрафикуРаботыСотрудника(ЭтотОбъект.Сотрудник, НовыйИнтервал.ДатаНачала, ЭтотОбъект.КоличествоДнейОтгула);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция УстановитьПризнакФиксРасчетНачислениямОплатыОтпуска(МенеджерРасчета)
ЗафиксированныеСтроки = Новый Соответствие;
НачисленияОплатыОтпуска = НачисленияОплатыОтпуска();
Для Каждого СтрокаНачисления Из МенеджерРасчета.Зарплата.Начисления Цикл
Если Не ЗначениеЗаполнено(СтрокаНачисления.Начисление) Тогда
Продолжить;
КонецЕсли;
Если НачисленияОплатыОтпуска[СтрокаНачисления.Начисление] = Истина
И Не СтрокаНачисления.ФиксРасчет Тогда
СтрокаНачисления.ФиксРасчет = Истина;
СтрокаНачисления.ФиксРасчетВремени = Истина;
ЗафиксированныеСтроки.Вставить(СтрокаНачисления, Истина);
КонецЕсли;
КонецЦикла;
Возврат ЗафиксированныеСтроки;
КонецФункции
Функция УстановитьПризнакФиксРасчетНачислениямОплатыТруда(МенеджерРасчета)
ЗафиксированныеСтроки = Новый Соответствие;
НачисленияОплатыОтпуска = НачисленияОплатыОтпуска();
Для Каждого СтрокаНачисления Из МенеджерРасчета.Зарплата.Начисления Цикл
Если Не ЗначениеЗаполнено(СтрокаНачисления.Начисление) Тогда
Продолжить;
КонецЕсли;
Если НачисленияОплатыОтпуска[СтрокаНачисления.Начисление] <> Истина
И Не СтрокаНачисления.ФиксРасчет Тогда
СтрокаНачисления.ФиксРасчет = Истина;
СтрокаНачисления.ФиксРасчетВремени = Истина;
ЗафиксированныеСтроки.Вставить(СтрокаНачисления, Истина);
КонецЕсли;
КонецЦикла;
Возврат ЗафиксированныеСтроки;
КонецФункции
Функция НачисленияОплатыОтпуска()
НачисленияОплатыОтпуска = Новый Соответствие;
Если ЗначениеЗаполнено(ЭтотОбъект.ВидРасчетаМатериальнойПомощиПриОтпуске)
И НЕ ЭтотОбъект.РасчетДенежногоСодержания Тогда
НачисленияОплатыОтпуска.Вставить(ЭтотОбъект.ВидРасчетаМатериальнойПомощиПриОтпуске, Истина);
КонецЕсли;
Если ЗначениеЗаполнено(ЭтотОбъект.ВидРасчетаОсновногоОтпуска) Тогда
НачисленияОплатыОтпуска.Вставить(ЭтотОбъект.ВидРасчетаОсновногоОтпуска, Истина);
КонецЕсли;
Если ЗначениеЗаполнено(ЭтотОбъект.ВидРасчетаКомпенсацииОсновногоОтпуска) Тогда
НачисленияОплатыОтпуска.Вставить(ЭтотОбъект.ВидРасчетаКомпенсацииОсновногоОтпуска, Истина);
КонецЕсли;
Если ЗначениеЗаполнено(ЭтотОбъект.ВидРасчетаОтгул) Тогда
НачисленияОплатыОтпуска.Вставить(ЭтотОбъект.ВидРасчетаОтгул, Истина);
КонецЕсли;
Для Каждого СтрокаТаблицы Из ЭтотОбъект.ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(СтрокаТаблицы.ВидРасчета) Тогда
НачисленияОплатыОтпуска.Вставить(СтрокаТаблицы.ВидРасчета, Истина);
КонецЕсли;
КонецЦикла;
Возврат НачисленияОплатыОтпуска;
КонецФункции
Процедура ЗаполнитьНастройкиМенеджераРасчетаПоШаблону(МенеджерРасчета, ШаблонНастроек)
МенеджерРасчета.УстановитьНастройкиРасчетаПоУмолчанию();
Для Каждого ЭлементНастроек Из ШаблонНастроек Цикл
МенеджерРасчета.НастройкиРасчета.Вставить(ЭлементНастроек.Ключ, ЭлементНастроек.Значение);
КонецЦикла;
КонецПроцедуры
Процедура РезультатРасчетаНачисленийВДанныеОбъекта(ДанныеМенеджераРасчета)
ТаблицыНачислений = РасчетДокументовБЗК.ТаблицыНачисленийДокумента();
ТаблицыНачислений.Начисления = ЭтотОбъект.Начисления;
ТаблицыНачислений.НачисленияПерерасчет = ЭтотОбъект.НачисленияПерерасчет;
ТаблицыНачислений.НачисленияПерерасчетНулевыеСторно = ЭтотОбъект.НачисленияПерерасчетНулевыеСторно;
ТаблицыНачислений.Показатели = ЭтотОбъект.Показатели;
ТаблицыНачислений.РаспределениеПоСтатьям = ЭтотОбъект.РаспределениеРезультатовНачислений;
ТаблицыНачислений.РаспределениеПоТерриториямУсловиямТруда = ЭтотОбъект.РаспределениеПоТерриториямУсловиямТруда;
ОписаниеТаблиц = РасчетДокументовБЗК.ОписаниеТаблицНачисленийДокумента();
ОписаниеТаблиц.Начисления = Документы.Отпуск.ОписаниеТаблицыНачислений();
ОписаниеТаблиц.НачисленияПерерасчет = Документы.Отпуск.ОписаниеТаблицыПерерасчетов();
ОписаниеТаблиц.НачисленияПерерасчетНулевыеСторно = Документы.Отпуск.ОписаниеТаблицыПерерасчетовНулевыеСторно();
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
ТаблицыНачислений.УправленческиеНачисления = ЭтотОбъект.УправленческиеНачисления;
ОписаниеТаблиц.УправленческиеНачисления = Модуль.ОписаниеТаблицыНачисленийДокумента();
КонецЕсли;
РасчетДокументовБЗК.РасчетЗарплатыНачисленияВДанныеОбъекта(
ТаблицыНачислений,
ДанныеМенеджераРасчета.Начисления,
ЭтотОбъект.Организация,
ОписаниеТаблиц);
РасчетЗарплатыРасширенныйФормы.СортироватьПерерасчеты(ЭтотОбъект.НачисленияПерерасчет);
КонецПроцедуры
Функция НачатьНовуюТранзакцию() Экспорт
Если ТранзакцияАктивна() Тогда
Возврат Ложь;
Иначе
НачатьТранзакцию();
Возврат Истина;
КонецЕсли;
КонецФункции
Процедура ЗарегистрироватьНачисленияОплатыТруда(ДанныеМенеджераРасчета)
ДанныеДляПроведения = ДанныеДляВременнойРегистрацииНачислений();
Отказ = Ложь;
НаборыЗаписей = ЗарплатаКадры.НаборыЗаписейРегистратора(Метаданные.Документы.Отпуск, ДанныеДляПроведения.ДокументСсылка);
ДанныеДляПроведенияУчетЗарплаты = ОтражениеЗарплатыВУчете.ОписаниеДанныеДляПроведения();
ДанныеДляПроведенияУчетЗарплаты.Движения = НаборыЗаписей;
ДанныеДляПроведенияУчетЗарплаты.Организация = ЭтотОбъект.Организация;
ДанныеДляПроведенияУчетЗарплаты.ПериодРегистрации = ЭтотОбъект.ПериодРегистрации;
ДанныеДляПроведенияУчетЗарплаты.ПланируемаяДатаВыплаты = ЭтотОбъект.ПланируемаяДатаВыплаты;
ДанныеДляПроведенияУчетЗарплаты.ПорядокВыплаты = ЭтотОбъект.ПорядокВыплаты;
ДанныеДляПроведенияУчетЗарплаты.МенеджерВременныхТаблиц = ДанныеДляПроведения.МенеджерВременныхТаблиц;
Если ЭтотОбъект.РасчетДенежногоСодержания Тогда
УчетНачисленнойЗарплаты.ЗарегистрироватьНачисления(ДанныеДляПроведенияУчетЗарплаты, Отказ,
ДанныеДляПроведения.НачисленияПоСотрудникам, Неопределено, Истина);
УчетНачисленнойЗарплатыРасширенный.ЗарегистрироватьУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.УдержанияПоСотрудникам);
Иначе
ИсправлениеДокументовРасчетЗарплаты.ПриВременнойРегистрацииИсправления(НаборыЗаписей, ДанныеДляПроведения);
РасчетЗарплатыРасширенный.СформироватьДвиженияНачислений(
НаборыЗаписей,
Отказ,
ЭтотОбъект.Организация,
КонецМесяца(ЭтотОбъект.ПериодРегистрации),
ДанныеДляПроведения.Начисления,
ДанныеДляПроведения.ПоказателиНачислений,
Истина);
УчетНачисленнойЗарплаты.ЗарегистрироватьОтработанноеВремя(ДанныеДляПроведенияУчетЗарплаты, Отказ,
ДанныеДляПроведения.ОтработанноеВремяПоСотрудникам, Истина);
НаборыЗаписей.ДанныеОВремениДляРасчетаСреднегоОбщий.ДополнительныеСвойства.Вставить("ИсключаемыйРегистратор", ЭтотОбъект.Ссылка);
УчетСреднегоЗаработка.ЗарегистрироватьДанныеСреднегоЗаработка(НаборыЗаписей, Отказ, ДанныеДляПроведения.НачисленияДляСреднегоЗаработка, Истина);
КонецЕсли;
КонецПроцедуры
Функция ДанныеДляВременнойРегистрацииНачислений() Экспорт
ОткрытаТранзакция = НачатьНовуюТранзакцию();
УстановитьПривилегированныйРежим(Истина);
ДокументОбъект = ЭтотОбъект;
ЭтотОбъект.ДополнительныеСвойства.Вставить("МодификацияЗапрещена");
ДокументОбъект = ЭтотОбъект.Скопировать();
ЭтотОбъект.ДополнительныеСвойства.Удалить("МодификацияЗапрещена");
ДокументОбъект.Дата = ЭтотОбъект.Дата;
Если Не ЗначениеЗаполнено(ДокументОбъект.Номер)
И Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Прав(ЭтотОбъект.Номер, 3)) Тогда
ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел(255);
СлучайныйНомер = СтрЗаменить(ГенераторСлучайныхЧисел.СлучайноеЧисло(0, 99999), Символы.НПП, "");
ДокументОбъект.Номер = "ОТПК-8" + СтроковыеФункцииКлиентСервер.ДополнитьСтроку(СлучайныйНомер, 5);
КонецЕсли;
ВременнаяСсылка = Документы.Отпуск.ПолучитьСсылку();
ДокументОбъект.УстановитьСсылкуНового(ВременнаяСсылка);
ДокументОбъект.ДополнительныеСвойства.Вставить("ПроцессыОбработкиДокументов_ЗаписатьБезПроверкиИсполнителяЭтапа");
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
ДокументСсылка = ДокументОбъект.Ссылка;
ДокументОбъект.ДополнительныеСвойства.Удалить("ПроцессыОбработкиДокументов_ЗаписатьБезПроверкиИсполнителяЭтапа");
РеквизитыДляПроведения = Документы.Отпуск.РеквизитыДляПроведения(ДокументСсылка);
РеквизитыДляПроведения.ДокументРассчитан = Истина;
ДанныеДляПроведения = Документы.Отпуск.ДанныеДляПроведения(РеквизитыДляПроведения);
УстановитьПривилегированныйРежим(Ложь);
Если ОткрытаТранзакция Тогда
ОтменитьТранзакцию();
КонецЕсли;
ДанныеДляПроведения.Вставить("ДокументСсылка", ДокументСсылка);
ДанныеДляПроведения.Вставить("ПериодРегистрации", ЭтотОбъект.ПериодРегистрации);
ИсправлениеРасчетовБЗК.ДополнитьДанныеДляВременнойРегистрации(ДанныеДляПроведения, ЭтотОбъект.ИсправленныйДокумент);
Возврат ДанныеДляПроведения;
КонецФункции
Процедура ОбновитьДанныеДляРасчетаСохраняемогоЗаработка(ПараметрыРасчета)
Если ЭтотОбъект.РасчетДенежногоСодержания
И ПараметрыРасчета.ОбновитьРасчетДенежногоСодержания Тогда
ОбновитьДанныеДляРасчетаСохраняемогоДенежногоСодержания();
Иначе
ОбновитьДанныеДляРасчетаСреднего(ПараметрыРасчета);
КонецЕсли;
КонецПроцедуры
Процедура ОбновитьДанныеДляРасчетаСреднего(ПараметрыРасчета)
Если Не ПараметрыРасчета.ОбновитьДанныеДляРасчетаСреднего Тогда
Возврат
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
УчетСреднегоЗаработка.ОбновитьДанныеОбщегоСреднегоЗаработка(
Новый Структура("ДанныеОНачислениях, ДанныеОВремени, ДанныеОбИндексации",
ЭтотОбъект.СреднийЗаработокОбщий, ЭтотОбъект.ОтработанноеВремяДляСреднегоОбщий, ЭтотОбъект.ДанныеОбИндексации),
ЭтотОбъект.ДатаНачалаСобытия,
ЭтотОбъект.ПериодРасчетаСреднегоЗаработкаНачало,
ЭтотОбъект.ПериодРасчетаСреднегоЗаработкаОкончание,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ЭтотОбъект.Сотрудник), ,
ЭтотОбъект.Ссылка,
Истина);
РассчитатьСреднийЗаработок();
ПараметрыРасчета.ОбновитьДанныеДляРасчетаСреднего = Ложь;
КонецПроцедуры
Процедура ОбновитьДанныеДляРасчетаСохраняемогоДенежногоСодержания()
УстановитьПривилегированныйРежим(Истина);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
СтруктураОбъекта = ПодготовитьСтруктуруОбъектаДляРасчетаДенежногоСодержания();
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
Модуль.ОбновитьДанныеСохраняемогоДенежногоСодержанияДокумента(СтруктураОбъекта);
КонецЕсли;
РассчитатьСреднийЗаработок();
КонецПроцедуры
Функция ПодготовитьСтруктуруОбъектаДляРасчетаДенежногоСодержания()
ОбъектСтруктура = Новый Структура;
ОбъектСтруктура.Вставить("Ссылка", ЭтотОбъект.Ссылка);
ОбъектСтруктура.Вставить("ИсправленныйДокумент",ЭтотОбъект.ИсправленныйДокумент);
ОбъектСтруктура.Вставить("Сотрудник", ЭтотОбъект.Сотрудник);
ОбъектСтруктура.Вставить("Организация", ЭтотОбъект.Организация);
ОбъектСтруктура.Вставить("ПериодРегистрации", ЭтотОбъект.ПериодРегистрации);
ОбъектСтруктура.Вставить("ДатаНачалаСобытия", ЭтотОбъект.ДатаНачалаСобытия);
ОбъектСтруктура.Вставить("ДенежноеСодержание", ЭтотОбъект.ДенежноеСодержание);
ОбъектСтруктура.Вставить("Показатели", ЭтотОбъект.Показатели);
ОбъектСтруктура.Вставить("ДенежноеСодержаниеФактическиеНачисления", ЭтотОбъект.ДенежноеСодержаниеФактическиеНачисления);
ОбъектСтруктура.Вставить("КоэффициентыРаспределенияДенежногоСодержания", ЭтотОбъект.КоэффициентыРаспределенияДенежногоСодержания);
ОбъектСтруктура.Вставить("ПериодРасчетаСохраняемогоСодержанияНачало", ЭтотОбъект.ПериодРасчетаСреднегоЗаработкаНачало);
ОбъектСтруктура.Вставить("ПериодРасчетаСохраняемогоСодержанияОкончание", ЭтотОбъект.ПериодРасчетаСреднегоЗаработкаОкончание);
ОбъектСтруктура.Вставить("ФиксПериодРасчетаСохраняемогоСодержания", ЭтотОбъект.ФиксПериодРасчетаСреднегоЗаработка);
ОбъектСтруктура.Вставить("СохраняемоеДенежноеСодержаниеНеИндексируемое", ЭтотОбъект.СохраняемоеДенежноеСодержаниеНеИндексируемое);
ОбъектСтруктура.Вставить("СохраняемоеДенежноеСодержание", ЭтотОбъект.СохраняемоеДенежноеСодержание);
ОбъектСтруктура.Вставить("МесячноеДенежноеСодержание", ЭтотОбъект.МесячноеДенежноеСодержание);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
ОбъектСтруктура.Вставить("НазначенияРасчетаДенежногоСодержания", Модуль.НазначенияРасчетаДенежногоСодержания(Ссылка));
КонецЕсли;
Возврат ОбъектСтруктура;
КонецФункции
Процедура РассчитатьСреднийЗаработок()
УстановитьПривилегированныйРежим(Истина);
Если ЭтотОбъект.РасчетДенежногоСодержания Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
Модуль.РассчитатьСохраняемоеДенежноеСодержаниеПоОбъекту(
ЭтотОбъект,
Документы.Отпуск.ОписаниеДокументаРасчета());
КонецЕсли;
Иначе
ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
ДополнительныеПараметры.Индексации = ЭтотОбъект.ДанныеОбИндексации;
ДополнительныеПараметры.ДатаНачалаСобытия = ЭтотОбъект.ДатаНачалаСобытия;
ДополнительныеПараметры.НачалоПериода = ЭтотОбъект.ПериодРасчетаСреднегоЗаработкаНачало;
ДополнительныеПараметры.ОкончаниеПериода = ЭтотОбъект.ПериодРасчетаСреднегоЗаработкаОкончание;
ДополнительныеПараметры.ПоЧасам = ЭтоСреднеЧасовойЗаработок();
СпособыРасчетаСреднегоЗаработка = Документы.Отпуск.СпособыРасчетаСреднегоЗаработка();
Для Каждого КлючИЗначение Из СпособыРасчетаСреднегоЗаработка Цикл
ДополнительныеПараметры.СпособРасчетаОтпуска = КлючИЗначение.Значение;
ЗначенияПоказателей = УчетСреднегоЗаработкаКлиентСервер.ЗначенияПоказателейСреднегоЗаработкаОбщего(ЭтотОбъект.СреднийЗаработокОбщий, ЭтотОбъект.ОтработанноеВремяДляСреднегоОбщий, ДополнительныеПараметры);
ЭтотОбъект[КлючИЗначение.Ключ] = ЗначенияПоказателей.СреднийЗаработокОбщий;
Если ПолучитьФункциональнуюОпцию("ИндексироватьСреднийЗаработокЧастично") Тогда
УчетСреднегоЗаработка.ЗаполнитьДанныеЧастичнойИндексацииОтпусков(ЭтотОбъект, ЗначенияПоказателей, КлючИЗначение.Ключ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция ЭтоСреднеЧасовойЗаработок()
Возврат Ложь;
КонецФункции
Процедура СброситьПризнакФиксРасчет(МенеджерРасчета, СбрасываемыеСтроки)
Для Каждого СтрокаТаблицы Из МенеджерРасчета.Зарплата.Начисления Цикл
Если СтрокаТаблицы.ФиксРасчет
И СбрасываемыеСтроки[СтрокаТаблицы] = Истина Тогда
СтрокаТаблицы.ФиксРасчет = Ложь;
СтрокаТаблицы.ФиксРасчетВремени = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьУдержания(МенеджерРасчета)
Если Не РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(ЭтотОбъект.ПорядокВыплаты) Тогда
Возврат;
КонецЕсли;
МенеджерРасчета.ЗаполнитьУдержанияСотрудникаЗаПериод(
ЭтотОбъект.Сотрудник,
ЭтотОбъект.ПериодРегистрации,
КонецМесяца(ЭтотОбъект.ПериодРегистрации));
КонецПроцедуры
Процедура РасчетЗарплатыВДанныeОбъекта(ДанныеМенеджераРасчета)
Документы.Отпуск.ОчиститьРассчитанныеДанные(ЭтотОбъект, Истина, Ложь);
РезультатРасчетаНачисленийВДанныеОбъекта(ДанныеМенеджераРасчета);
ТаблицыУдержаний = РасчетДокументовБЗК.ТаблицыУдержанийДокумента();
ТаблицыУдержаний.Удержания = ЭтотОбъект.Удержания;
ТаблицыУдержаний.РаспределениеПоСтатьям = ЭтотОбъект.РаспределениеРезультатовУдержаний;
ТаблицыУдержаний.Показатели = ЭтотОбъект.Показатели;
ОписаниеТаблицУдержаний = РасчетДокументовБЗК.ОписаниеТаблицУдержанийДокумента();
ОписаниеТаблицУдержаний.Удержания = Документы.Отпуск.ОписаниеТаблицыУдержаний();
РасчетДокументовБЗК.РасчетЗарплатыУдержанияВДанныеОбъекта(
ТаблицыУдержаний,
ДанныеМенеджераРасчета.Удержания,
ОписаниеТаблицУдержаний);
ТаблицыНДФЛ = РасчетДокументовБЗК.ТаблицыНДФЛДокумента();
ТаблицыНДФЛ.НДФЛ = ЭтотОбъект.НДФЛ;
ТаблицыНДФЛ.Вычеты = ЭтотОбъект.ПримененныеВычетыНаДетейИИмущественные;
ТаблицыНДФЛ.РаспределениеПоСтатьям = ЭтотОбъект.РаспределениеРезультатовУдержаний;
ОписаниеТаблицыНДФЛ = Документы.Отпуск.ОписаниеТаблицыНДФЛ();
РасчетДокументовБЗК.РасчетЗарплатыНДФЛВДанныеОбъекта(ТаблицыНДФЛ, ДанныеМенеджераРасчета.НДФЛ, ОписаниеТаблицыНДФЛ);
ОписаниеТаблицыЗаймов = Документы.Отпуск.ОписаниеТаблицыПогашениеЗаймов();
РасчетДокументовБЗК.РасчетЗарплатыПогашениеЗаймовВДанныеОбъекта(
ЭтотОбъект.ПогашениеЗаймов,
ДанныеМенеджераРасчета.ПогашениеЗаймов,
ЭтотОбъект.РаспределениеРезультатовУдержаний,
ОписаниеТаблицыЗаймов);
РасчетДокументовБЗК.РасчетЗарплатыКорректировкиВыплатыВДанныеОбъекта(
ЭтотОбъект.КорректировкиВыплаты,
ДанныеМенеджераРасчета.КорректировкиВыплаты,
ЭтотОбъект.РаспределениеРезультатовУдержаний,
ОписаниеТаблицыЗаймов);
КонецПроцедуры
Процедура ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета)
ДокументыРазовыхНачислений.ПередПомещениемДанныхОбъектаВМенеджерРасчета(ЭтотОбъект);
ТаблицыНачисленийДокумента = РасчетДокументовБЗК.ТаблицыНачисленийДокумента();
ТаблицыНачисленийДокумента.Показатели = ЭтотОбъект.Показатели;
ТаблицыНачисленийДокумента.РаспределениеПоСтатьям = ЭтотОбъект.РаспределениеРезультатовНачислений;
ТаблицыНачисленийДокумента.РаспределениеПоТерриториямУсловиямТруда = ЭтотОбъект.РаспределениеПоТерриториямУсловиямТруда;
РасчетДокументовБЗК.НачисленияВМенеджерРасчета(ЭтотОбъект.Начисления, МенеджерРасчета, ТаблицыНачисленийДокумента, ЭтотОбъект.Организация);
РасчетДокументовБЗК.НачисленияПерерасчетСНулевымиСторноМенеджерРасчета(
ЭтотОбъект.НачисленияПерерасчет,
ЭтотОбъект.НачисленияПерерасчетНулевыеСторно,
МенеджерРасчета,
ТаблицыНачисленийДокумента,
ЭтотОбъект.Организация);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.НачисленияОбъектаВМенеджерРасчета(
ЭтотОбъект.УправленческиеНачисления,
МенеджерРасчета,
ТаблицыНачисленийДокумента);
КонецЕсли;
ТаблицыУдержанийДокумента = РасчетДокументовБЗК.ТаблицыУдержанийДокумента();
ТаблицыУдержанийДокумента.РаспределениеПоСтатьям = ЭтотОбъект.РаспределениеРезультатовУдержаний;
ТаблицыУдержанийДокумента.Показатели = Показатели;
РасчетДокументовБЗК.УдержанияВМенеджерРасчета(ЭтотОбъект.Удержания, МенеджерРасчета, ТаблицыУдержанийДокумента);
РасчетДокументовБЗК.КорректировкиВыплатыВМенеджерРасчета(ЭтотОбъект.КорректировкиВыплаты, МенеджерРасчета, ТаблицыНачисленийДокумента.РаспределениеПоСтатьям);
РасчетДокументовБЗК.ПогашениеЗаймовВДанныеМенеджераРасчета(ЭтотОбъект.ПогашениеЗаймов, МенеджерРасчета, ТаблицыНачисленийДокумента.РаспределениеПоСтатьям);
ТаблицыНДФЛ = РасчетДокументовБЗК.ТаблицыНДФЛДокумента();
ТаблицыНДФЛ.НДФЛ = ЭтотОбъект.НДФЛ;
ТаблицыНДФЛ.Вычеты = ЭтотОбъект.ПримененныеВычетыНаДетейИИмущественные;
ТаблицыНДФЛ.РаспределениеПоСтатьям = ЭтотОбъект.РаспределениеРезультатовУдержаний;
РасчетДокументовБЗК.НДФЛВДанныеМенеджераРасчета(ТаблицыНДФЛ, МенеджерРасчета);
МенеджерРасчета.НастройкиБухучета.КоэффициентыСреднегоЗаработкаДокумента =
УчетСреднегоЗаработка.КоэффициентыРаспределенияСреднегоЗаработкаДокумента(
ЭтотОбъект,
Документы.Отпуск.ОписаниеДокументаРасчета(),
ЭтоСреднеЧасовойЗаработок());
МенеджерРасчета.НастройкиБухучета.КоэффициентыРаспределенияДенежногоСодержания = ЭтотОбъект.КоэффициентыРаспределенияДенежногоСодержания.Выгрузить();
КонецПроцедуры
Функция ВидыРасчетаДокумента()
МассивВидовРасчета = Новый Массив;
МассивВидовРасчета.Добавить(ВидРасчетаОсновногоОтпуска);
МассивВидовРасчета.Добавить(ВидРасчетаКомпенсацииОсновногоОтпуска);
ВидыРасчетаДополнительныхОтпусков = ДополнительныеОтпуска.ВыгрузитьКолонку("ВидРасчета");
ВидыРасчетаКомпенсацииДополнительныхОтпусков = ДополнительныеОтпуска.ВыгрузитьКолонку("ВидРасчетаКомпенсации");
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивВидовРасчета, ВидыРасчетаДополнительныхОтпусков);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивВидовРасчета, ВидыРасчетаКомпенсацииДополнительныхОтпусков);
Возврат МассивВидовРасчета;
КонецФункции
#КонецОбласти
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли