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