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