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