#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Процедура ПровестиПоУчетам(ДокументСсылка, РежимПроведения, Отказ, ВидыУчетов = Неопределено, Движения = Неопределено, Объект = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
СтруктураВидовУчета = ПроведениеСервер.СтруктураВидовУчета();
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвиженийПоВидамУчета(РежимПроведения, ДокументСсылка, СтруктураВидовУчета, ВидыУчетов, Движения, Объект, Отказ);
РеквизитыДляПроведения = РеквизитыДляПроведения(ДокументСсылка);
ДанныеДляПроведения = ДанныеДляПроведения(РеквизитыДляПроведения, СтруктураВидовУчета);
РезультатИсправления = ИсправлениеДокументовЗарплатаКадры.ПриПроведенииИсправления(ДокументСсылка,
Движения, РежимПроведения, Отказ, РеквизитыДляПроведения, СтруктураВидовУчета, Объект);
Если РеквизитыДляПроведения.ДокументРассчитан Тогда
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
Если РеквизитыДляПроведения.ПериодыПриостановкиОтпуска.Количество() > 0 Тогда
Движения.Начисления.ДополнительныеСвойства.Вставить("ОтключитьРегистрациюПерерасчетов");
КонецЕсли;
РасчетЗарплатыРасширенный.СформироватьДвиженияНачислений(Движения, Отказ, РеквизитыДляПроведения.Организация, КонецМесяца(РеквизитыДляПроведения.ПериодРегистрации), ДанныеДляПроведения.Начисления, ДанныеДляПроведения.ПоказателиНачислений, Истина);
РасчетЗарплатыРасширенный.СформироватьДвиженияРаспределенияПоТерриториямУсловиямТруда(Движения, Отказ, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.РаспределениеПоТерриториямУсловиямТруда);
РасчетЗарплатыРасширенный.СформироватьДвиженияРаспределенияРезультатовНачислений(Движения, Отказ, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.РаспределениеРезультатовНачислений);
ПерерасчетЗарплаты.СформироватьДвиженияИсходныеДанныхПерерасчетов(Движения, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.Начисления);
РасчетЗарплатыРасширенный.СформироватьДвиженияУдержаний(
Движения, Отказ, РеквизитыДляПроведения.Организация, КонецМесяца(РеквизитыДляПроведения.ПериодРегистрации), ДанныеДляПроведения.Удержания, ДанныеДляПроведения.ПоказателиУдержаний);
ИсполнительныеЛисты.СформироватьУдержанияПоИсполнительнымДокументам(Движения, ДанныеДляПроведения.УдержанияПоИсполнительнымДокументам);
РасчетЗарплатыРасширенный.СформироватьДвиженияУдержанийДоПределаПоСотрудникам(Движения, Отказ, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.УдержанияДоПределаПоСотрудникам);
РасчетЗарплатыРасширенный.СформироватьЗадолженностьПоУдержаниямФизическихЛиц(Движения, ДанныеДляПроведения.ЗадолженностьПоУдержаниям);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.СформироватьДвиженияНачислений(Движения, Отказ, ДанныеДляПроведения, РеквизитыДляПроведения.ПериодРегистрации);
КонецЕсли;
ПроверитьПересечениеФактическогоПериодаДействия(ДокументСсылка, Отказ);
ДанныеДляПроведенияУчетЗарплаты = ОтражениеЗарплатыВУчете.ОписаниеДанныеДляПроведения();
ДанныеДляПроведенияУчетЗарплаты.Движения = Движения;
ДанныеДляПроведенияУчетЗарплаты.Организация = РеквизитыДляПроведения.Организация;
ДанныеДляПроведенияУчетЗарплаты.ПериодРегистрации = РеквизитыДляПроведения.ПериодРегистрации;
ДанныеДляПроведенияУчетЗарплаты.ПланируемаяДатаВыплаты = РеквизитыДляПроведения.ПланируемаяДатаВыплаты;
ДанныеДляПроведенияУчетЗарплаты.ПорядокВыплаты = РеквизитыДляПроведения.ПорядокВыплаты;
ДанныеДляПроведенияУчетЗарплаты.ДниОтпускаАвансом = ДанныеДляПроведения.ДниОтпускаАвансом;
ДанныеДляПроведенияУчетЗарплаты.МенеджерВременныхТаблиц = ДанныеДляПроведения.МенеджерВременныхТаблиц;
УчетНачисленнойЗарплаты.ЗарегистрироватьНачисления(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.НачисленияПоСотрудникам, Неопределено);
УчетНачисленнойЗарплаты.ЗарегистрироватьОтработанноеВремя(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.ОтработанноеВремяПоСотрудникам, Истина);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ЗарегистрироватьНачисленияУдержания(Движения, Отказ, ДанныеДляПроведения, РеквизитыДляПроведения.ПериодРегистрации,
РеквизитыДляПроведения.ПорядокВыплаты, РеквизитыДляПроведения.ПланируемаяДатаВыплаты);
Модуль.ЗарегистрироватьОтработанноеВремя(Движения, Отказ, ДанныеДляПроведения, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты);
КонецЕсли;
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
ДанныеДляПроведения.НачисленияПоСотрудникам, ДанныеДляПроведения.УдержанияПоСотрудникам, Неопределено);
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
Неопределено, ДанныеДляПроведения.УдержанияЗаймов, Неопределено);
УчетНачисленнойЗарплаты.СоздатьВТРаспределениеНачисленийТекущегоДокумента(ДанныеДляПроведенияУчетЗарплаты);
ДатаОперацииПоНалогам = НачалоДня(РеквизитыДляПроведения.ДатаНачалаСобытия) - 1;
УчетНДФЛ.СформироватьДоходыНДФЛПоКодамДоходовИзТаблицыЗначений(Движения, Отказ, РеквизитыДляПроведения.Организация, ДатаОперацииПоНалогам, ДанныеДляПроведения.МатериальнаяВыгода, Ложь, , ДокументСсылка, РеквизитыДляПроведения.ДоходПолученНаТерриторииРФ);
ЗасчитыватьДанныеАвансов = РеквизитыДляПроведения.РассчитатьЗарплату;
Если ЗасчитыватьДанныеАвансов
И РезультатИсправления.ИсправлениеВТекущемПериоде
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РеквизитыДляПроведения.ИсправленныйДокумент, "РассчитатьЗарплату") Тогда
ЗасчитыватьДанныеАвансов = Ложь
КонецЕсли;
УчетНДФЛРасширенный.ЗарегистрироватьДоходыИСуммыНДФЛПоВременнойТаблицеНачислений(
РеквизитыДляПроведения.Ссылка, Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.Дата, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты, РеквизитыДляПроведения.ПланируемаяДатаВыплаты, ДанныеДляПроведения, Истина, Истина, РеквизитыДляПроведения.ДоходПолученНаТерриторииРФ, , , "ВТНачисленияДляУчетаДоходовНДФЛ", ЗасчитыватьДанныеАвансов);
РасчетЗарплатыРасширенный.СформироватьДвиженияКорректировкиВыплатыПоВременнойТаблицеНачислений(Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты, ДанныеДляПроведения, Истина, Истина);
ЗаймыСотрудникам.ЗарегистрироватьВзаиморасчетыПоЗаймам(Движения, ДанныеДляПроведения.ВзаиморасчетыПоЗаймам, Отказ);
УчетНДФЛ.СформироватьНалогиВычеты(Движения, Отказ, РеквизитыДляПроведения.Организация, ДатаОперацииПоНалогам, ДанныеДляПроведения.НалогНаМатериальнуюВыгоду);
УчетНачисленнойЗарплаты.ПодготовитьДанныеНДФЛКРегистрации(ДанныеДляПроведения.НалогНаМатериальнуюВыгоду, РеквизитыДляПроведения.Организация, ДатаОперацииПоНалогам);
УчетНачисленнойЗарплатыРасширенный.ЗарегистрироватьУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.УдержанияПоСотрудникам);
УчетНачисленнойЗарплатыРасширенный.ЗарегистрироватьЗаймы(ДанныеДляПроведенияУчетЗарплаты, Отказ,
ДанныеДляПроведения.УдержанияЗаймов, ДанныеДляПроведения.НалогНаМатериальнуюВыгоду);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
Модуль.ЗарегистрироватьКорректировкиДляРасчетаСохраняемогоДенежногоСодержания(ДанныеДляПроведения.КорректировкиДляРегистрацииДенежногоСодержания, РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаНачало, РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаОкончание);
Модуль.ЗарегистрироватьНачисленияСоставМесячногоДенежногоСодержания(Движения, Отказ, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.СоставМесячногоДенежногоСодержания);
КонецЕсли;
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
Неопределено, Неопределено, ДанныеДляПроведения.НДФЛПоСотрудникам);
Если ЗасчитыватьДанныеАвансов Тогда
УчетНачисленнойЗарплатыРасширенный.ЗаполнитьЗачетАвансаНДФЛВНаборахЗаписей(Движения, РеквизитыДляПроведения.ПериодРегистрации);
КонецЕсли;
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
Неопределено, Неопределено, ДанныеДляПроведения.НалогНаМатериальнуюВыгоду);
УчетСтраховыхВзносов.СформироватьПособия(Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.Пособия, Неопределено);
КонецЕсли;
Если СтруктураВидовУчета.СтраховыеВзносы Тогда
УчетСтраховыхВзносов.СформироватьСведенияОДоходахСтраховыеВзносы(Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.МенеджерВременныхТаблиц, Ложь, Истина, РеквизитыДляПроведения.Ссылка);
КонецЕсли;
Если СтруктураВидовУчета.ДанныеДляРасчетаСреднего Тогда
ПараметрыКорректировок = УчетСреднегоЗаработка.ДополнительныеПараметрыЗаписиКорректировокОбщегоСреднегоЗаработка();
ПараметрыКорректировок.Организация = РеквизитыДляПроведения.Организация;
ПараметрыКорректировок.ФизическоеЛицо = РеквизитыДляПроведения.ФизическоеЛицо;
ПараметрыКорректировок.Сотрудник = РеквизитыДляПроведения.Сотрудник;
УчетСреднегоЗаработка.ЗаписатьКорректировкиОбщегоСреднегоЗаработка(
УчетСреднегоЗаработка.КорректировкиОбщегоСреднегоЗаработкаДокумента(РеквизитыДляПроведения.Ссылка),
РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаНачало,
РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаОкончание,
ПараметрыКорректировок);
УчетСреднегоЗаработка.ЗарегистрироватьДанныеСреднегоЗаработка(Движения, Отказ, ДанныеДляПроведения.НачисленияДляСреднегоЗаработка);
КонецЕсли;
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
ПараметрыДвиженийОтпусков = ОстаткиОтпусков.ПараметрыДляСформироватьДвиженияФактическихОтпусков();
ПараметрыДвиженийОтпусков.ДатаРегистрации = РеквизитыДляПроведения.Дата;
ПараметрыДвиженийОтпусков.Начисления = ДанныеДляПроведения.Начисления;
ПараметрыДвиженийОтпусков.РабочиеПериоды = ДанныеДляПроведения.РабочиеПериодыДляОтпусков;
ПараметрыДвиженийОтпусков.Основания = ДанныеДляПроведения.ОснованияДляОтпусков;
ПараметрыДвиженийОтпусков.ПериодНачисления = РеквизитыДляПроведения.ПериодРегистрации;
ДатыНачалаКомпенсаций = Новый Соответствие;
ДатаКомпенсации = ДатаКомпенсацииОтпуска(РеквизитыДляПроведения.ПланируемаяДатаВыплаты, РеквизитыДляПроведения.ПериодРегистрации);
ДатыНачалаКомпенсаций.Вставить(РеквизитыДляПроведения.Сотрудник, ДатаКомпенсации);
ПараметрыДвиженийОтпусков.ДатыНачалаКомпенсаций = ДатыНачалаКомпенсаций;
ОстаткиОтпусков.СформироватьДвиженияФактическихОтпусков(Движения, Отказ, ПараметрыДвиженийОтпусков);
ОстаткиОтпусков.СформироватьДвиженияПериодовОтпусков(Движения, РеквизитыДляПроведения.Ссылка, ДанныеДляПроведения.ПериодыОтпусков);
СостоянияСотрудников.ЗарегистрироватьСостоянияСотрудников(Движения, РеквизитыДляПроведения.Ссылка, ДанныеСостоянийСотрудника(РеквизитыДляПроведения));
Если РеквизитыДляПроведения.ПредоставитьОтгул Тогда
ДанныеОбОтгулах = ДанныеОбОтгулах(РеквизитыДляПроведения);
УчетРабочегоВремениРасширенный.ЗарегистрироватьИПроверитьОстаткиДниЧасыОтгуловСотрудников(Движения, ДанныеОбОтгулах, Отказ);
УчетОтгулов.ЗарегистрироватьДанныеОбИспользованииОтгулов(Движения, ДанныеДляПроведения.ИспользованиеОтгулов);
КонецЕсли;
УчетСтажаПФР.ЗарегистрироватьПериодыВУчетеСтажаПФР(Движения, ДанныеДляРегистрацииВУчетаСтажаПФР(РеквизитыДляПроведения.Ссылка)[РеквизитыДляПроведения.Ссылка]);
Если РеквизитыДляПроведения.ОсвобождатьСтавку Тогда
ЗарплатаКадрыРасширенный.УстановитьВремяРегистрацииДокумента(Движения, РеквизитыДляПроведения.СотрудникиДаты, РеквизитыДляПроведения.Ссылка);
КадровыйУчетРасширенный.СформироватьДвиженияЗанятостиВременноОсвобожденныхПозицииШтатногоРасписания(
Движения, РеквизитыДляПроведения.Сотрудник, РеквизитыДляПроведения.ДатаНачалаПериодаОтсутствия, РеквизитыДляПроведения.ДатаОкончанияПериодаОтсутствия, Ложь);
КонецЕсли;
ОграничениеВзысканий.ЗарегистрироватьДанныеСохраняемогоЗаработка(Движения, Отказ, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты);
УчетСреднегоЗаработка.УдалитьПричиныПерерасчетов(РеквизитыДляПроведения.Ссылка, ДополнительныеПараметры);
ПерерасчетЗарплаты.УдалитьПерерасчетыПоДополнительнымПараметрам(РеквизитыДляПроведения.Ссылка, ДополнительныеПараметры);
КонецЕсли;
ПроведениеРасширенныйСервер.ВыполнитьЗапланированныеКорректировкиДвижений(Движения);
ПроведениеСервер.ЗаписьДвиженийПоУчетам(Движения, СтруктураВидовУчета);
КонецПроцедуры
Функция СторнироватьПоУчетам(Движения, Регистратор, ИсправленныйДокумент, СтруктураВидовУчета, ДополнительныеПараметры) Экспорт
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
УчетРабочегоВремениРасширенный.СторнироватьДниЧасыОтгуловСотрудников(Движения, ИсправленныйДокумент);
УчетОтгулов.СторнироватьДанныеОбИспользованииОтгулов(Движения, ИсправленныйДокумент);
КонецЕсли;
Если (ДополнительныеПараметры.ОтменаДокумента Или ДополнительныеПараметры.ИсправлениеВТекущемПериоде)
И Не ДополнительныеПараметры.ИсправлениеДоначислением Тогда
СторнироватьРасчеты = ДополнительныеПараметры.ОтменаДокумента Или ДополнительныеПараметры.РеквизитыДляПроведения.ДокументРассчитан;
Если СтруктураВидовУчета.ДанныеДляРасчетаСреднего И СторнироватьРасчеты Тогда
УчетСреднегоЗаработка.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент);
КонецЕсли;
Если СтруктураВидовУчета.СтраховыеВзносы И СторнироватьРасчеты Тогда
УчетСтраховыхВзносовРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
УправлениеШтатнымРасписанием.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент);
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета И СторнироватьРасчеты Тогда
Если ДополнительныеПараметры.ИсправлениеВТекущемПериоде Тогда
Если Не ДополнительныеПараметры.Свойство("СторнироватьЗарегистрированноеПриНачисленииАванса")
И (ДополнительныеПараметры.ОтменаДокумента Или Не ДополнительныеПараметры.РеквизитыДляПроведения.РассчитатьЗарплату)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ИсправленныйДокумент, "РассчитатьЗарплату") Тогда
ДополнительныеПараметры.Вставить("СторнироватьЗарегистрированноеПриНачисленииАванса", Истина)
КонецЕсли;
Если Не ДополнительныеПараметры.ОтменаДокумента
И ДополнительныеПараметры.РеквизитыДляПроведения.ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Аванс Тогда
РеквизитыИсправленного = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ИсправленныйДокумент, "ПорядокВыплаты");
Если ДополнительныеПараметры.РеквизитыДляПроведения.ПорядокВыплаты <> РеквизитыИсправленного.ПорядокВыплаты Тогда
УчетНачисленнойЗарплатыРасширенный.ЗапланироватьКопированиеСторноВАванс(Движения);
КонецЕсли;
КонецЕсли;
КонецЕсли;
РасчетЗарплатыРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
ОтражениеЗарплатыВБухучетеРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент);
УчетНДФЛРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
УчетНачисленнойЗарплатыРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
ИсправлениеДокументовЗарплатаКадры.СторнироватьДвиженияБезСпецификиУчетов(
Движения, ИсправленныйДокумент, ДополнительныеПараметры);
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И ЗначениеРазрешено(ФизическоеЛицо)";
КонецПроцедуры
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КадровыйУчетРасширенный.ДобавитьКомандуПечатиПриказаОПредоставленииОтпуска(КомандыПечати);
Если Пользователи.РолиДоступны("ДобавлениеИзменениеНачисленнойЗарплатыРасширенная,ПолныеПрава,ЧтениеНачисленнойЗарплатыРасширенная", , Ложь)
И ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная") Тогда
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.МенеджерПечати = "Обработка.ПечатьКадровыхПриказовРасширенная";
КомандаПечати.Идентификатор = "ПФ_MXL_Т60";
КомандаПечати.Представление = НСтр("ru = 'Записка - расчет о предоставлении отпуска (Т-60)'");
КомандаПечати.Порядок = 20;
КомандаПечати.ФункциональныеОпции = "РаботаВХозрасчетнойОрганизации";
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
Макет = Метаданные.Документы.Отпуск.Макеты.ПФ_MXL_СправкаДляОплатыОтпускаЧАЭС;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = Макет.Имя;
КомандаПечати.Представление = Макет.Представление();
КомандаПечати.Порядок = 80;
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ЕстьОтпускЧАЭС", Истина);
Макет = Метаданные.Документы.Отпуск.Макеты.ПФ_MXL_ОтпускНаПериодЛечения_2024;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.Идентификатор = Макет.Имя;
КомандаПечати.Представление = Макет.Представление();
КомандаПечати.Порядок = 80;
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ЕстьОтпускНаПериодЛечения", Истина);
КонецЕсли;
УчетСреднегоЗаработка.ДобавитьКомандуПечатиРасчетаСреднегоЗаработка(КомандыПечати, "Документ.Отпуск");
УчетСреднегоЗаработка.ДобавитьКомандуПечатиРасчетаСреднегоЗаработка0504425(КомандыПечати, "Документ.Отпуск");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
МодульГосударственнаяСлужба = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
МодульГосударственнаяСлужба.ДобавитьКомандыПечатиСохраняемогоДенежногоСодержания(КомандыПечати);
КонецЕсли;
РасчетЗарплатыРасширенный.ДобавитьКомандуПечатиПодробногоРасчетаНачислений(КомандыПечати);
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
МенеджерПечати = Документы.Отпуск;
УправлениеПечатьюБЗК.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, МенеджерПечати);
Обработки.ПечатьРасчетаСреднегоЗаработка.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры
Процедура ПриФормированииПечатнойФормы(КонтекстПечати) Экспорт
Макеты = Метаданные.Документы.Отпуск.Макеты;
Если КонтекстПечати.МетаданныеМакета = Макеты.ПФ_MXL_СправкаДляОплатыОтпускаЧАЭС Тогда
ПриПечатиСправкиДляОплатыОтпускаЧАЭС(КонтекстПечати);
ИначеЕсли КонтекстПечати.МетаданныеМакета = Макеты.ПФ_MXL_ОтпускНаПериодЛечения_2024 Тогда
ПриПечатиОтпускаНаПериодЛечения_2024(КонтекстПечати);
КонецЕсли;
КонецПроцедуры
Функция ОписаниеРазделовДанных() Экспорт
ВсеРазделы = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();
ОписаниеРазделовДанных = Новый Соответствие();
ОписаниеРаздела = МногофункциональныеДокументыБЗККлиентСервер.НовыйОписаниеРазделаДанных();
ОписаниеРазделовДанных.Вставить(ВсеРазделы.КадровыеДанные, ОписаниеРаздела);
ОписаниеРаздела.РеквизитСостояние = "Проведен";
ОписаниеРаздела.РеквизитОтветсвенный = "Ответственный";
ОписаниеРаздела = МногофункциональныеДокументыБЗККлиентСервер.НовыйОписаниеРазделаДанных();
ОписаниеРазделовДанных.Вставить(ВсеРазделы.НачисленнаяЗарплата, ОписаниеРаздела);
ОписаниеРаздела.РеквизитСостояние = "ДокументРассчитан";
ОписаниеРаздела.РеквизитОтветсвенный = "Рассчитал";
ОписаниеРаздела.ТребуетсяУтверждениеПриПроведении = Истина;
ОписаниеРаздела.СообщениеДокументНеУтвержден = НСтр("ru = '%1 - документ не рассчитан.'");
Возврат ОписаниеРазделовДанных;
КонецФункции
Функция ЗначенияДоступа(ДокументОбъект) Экспорт
Возврат МногофункциональныеДокументыБЗК.ЗначенияДоступаПоСоставуДокумента(
ДокументОбъект,
ДокументОбъект.Организация);
КонецФункции
#КонецОбласти
Функция ПредварительнаяДатаОплатыОтпуска(Объект) Экспорт
Если не Объект.ПредоставитьОсновнойОтпуск и не Объект.ПредоставитьДополнительныйОтпуск Тогда
Возврат Неопределено;
КонецЕсли;
ДатаНачалаОтпуска = Объект.ДатаНачалаСобытия;
ДатаОплатыОтпуска = Неопределено;
ОтпускГосслужащего = Ложь;
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Объект, "РасчетДенежногоСодержания") Тогда
ОтпускГосслужащего = Объект.РасчетДенежногоСодержания;
КонецЕсли;
ДнейДоОтпуска = ?(ОтпускГосслужащего, 11, 4);
Если ЗначениеЗаполнено(ДатаНачалаОтпуска) Тогда
ДатаОплатыОтпуска = ДатаНачалаОтпуска - 86400 * ДнейДоОтпуска;
КонецЕсли;
Возврат ДатаОплатыОтпуска;
КонецФункции
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
#Область ОбновлениеИнформационнойБазы
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.30.34";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("9d6378e1-44f6-11ef-812c-4cedfb43b11a");
Обработчик.Процедура = "Документы.Отпуск.ЗаполнитьФлажкиНаличияВидовОтпусков";
Обработчик.Комментарий = НСтр("ru = 'Заполнение флажков наличия видов дополнительных отпусков.'");
КонецПроцедуры
Процедура ЗаполнитьФлажкиНаличияВидовОтпусков(ПараметрыОбновления = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВложенныйЗапрос.Ссылка КАК Ссылка,
| МАКСИМУМ(ВложенныйЗапрос.ЕстьОтпускЧАЭС) КАК ЕстьОтпускЧАЭС,
| МАКСИМУМ(ВложенныйЗапрос.ЕстьОтпускНаПериодЛечения) КАК ЕстьОтпускНаПериодЛечения
|ИЗ
| (ВЫБРАТЬ
| Шапка.Ссылка КАК Ссылка,
| ИСТИНА КАК ЕстьОтпускЧАЭС,
| ЛОЖЬ КАК ЕстьОтпускНаПериодЛечения
| ИЗ
| Документ.Отпуск.ДополнительныеОтпуска КАК ТабличнаяЧасть
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Отпуск КАК Шапка
| ПО ТабличнаяЧасть.Ссылка = Шапка.Ссылка
| И (Шапка.ЕстьОтпускЧАЭС = ЛОЖЬ)
| ГДЕ
| ТабличнаяЧасть.ВидОтпуска = &ВидОтпускаЧАЭС
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Шапка.Ссылка,
| ЛОЖЬ,
| ИСТИНА
| ИЗ
| Документ.Отпуск.ДополнительныеОтпуска КАК ТабличнаяЧасть
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Отпуск КАК Шапка
| ПО ТабличнаяЧасть.Ссылка = Шапка.Ссылка
| И (Шапка.ЕстьОтпускНаПериодЛечения = ЛОЖЬ)
| ГДЕ
| ТабличнаяЧасть.ВидОтпуска = &ВидОтпускаСКЛ) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Ссылка";
ВидОтпускаЧАЭС = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускПострадавшимВАварииЧАЭС");
ВидОтпускаСКЛ = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускНаСанаторноКурортноеЛечение");
Если Не ЗначениеЗаполнено(ВидОтпускаЧАЭС) И Не ЗначениеЗаполнено(ВидОтпускаСКЛ) Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ВидОтпускаЧАЭС) Тогда
Запрос.УстановитьПараметр("ВидОтпускаЧАЭС", ВидОтпускаЧАЭС);
Иначе
Запрос.УстановитьПараметр("ВидОтпускаЧАЭС", 0);
КонецЕсли;
Если ЗначениеЗаполнено(ВидОтпускаСКЛ) Тогда
Запрос.УстановитьПараметр("ВидОтпускаСКЛ", ВидОтпускаСКЛ);
Иначе
Запрос.УстановитьПараметр("ВидОтпускаСКЛ", 0);
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.ЕстьОтпускЧАЭС = Выборка.ЕстьОтпускЧАЭС;
ДокументОбъект.ЕстьОтпускНаПериодЛечения = Выборка.ЕстьОтпускНаПериодЛечения;
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ДокументОбъект);
КонецЦикла;
Если ПараметрыОбновления <> Неопределено Тогда
ПараметрыОбновления.ОбработкаЗавершена = Истина;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиПравилРегистрации
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОтбораПоОрганизации(Настройки);
ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОбъектаСПрисоединеннымиФайлами(Настройки);
КонецПроцедуры
#КонецОбласти
Функция ОписаниеСоставаОбъекта() Экспорт
Возврат ЗарплатаКадрыСоставДокументов.ОписаниеСоставаОбъектаФизическоеЛицоВШапке();
КонецФункции
Процедура ЗаполнитьДниОтпускаАвансом(ДокументСсылка, ДанныеДляПроведения, Сторнирование = Ложь) Экспорт
Если Не ЗначениеЗаполнено(ДокументСсылка) Или ТипЗнч(ДокументСсылка) <> Тип("ДокументСсылка.Отпуск") Тогда
ДниОтпускаАвансом = ОтражениеЗарплатыВУчете.НоваяТаблицаДнейОтпускаАвансом();
ДанныеДляПроведения.Вставить("ДниОтпускаАвансом", ДниОтпускаАвансом);
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.УстановитьПараметр("Сторнирование", Сторнирование);
Запрос.Текст = "ВЫБРАТЬ
| Отпуск.ВидРасчетаОсновногоОтпуска КАК Начисление,
| Отпуск.КоличествоДнейОсновногоОтпускаАвансом КАК КоличествоДнейАвансом,
| &Сторнирование КАК Сторно
|ПОМЕСТИТЬ ВТДниОтпускаАвансом
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.Ссылка = &Ссылка
| И Отпуск.ВидРасчетаОсновногоОтпуска <> ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОтпускДополнительныеОтпуска.ВидРасчета,
| ОтпускДополнительныеОтпуска.КоличествоДнейАвансом,
| &Сторнирование
|ИЗ
| Документ.Отпуск.ДополнительныеОтпуска КАК ОтпускДополнительныеОтпуска
|ГДЕ
| ОтпускДополнительныеОтпуска.Ссылка = &Ссылка
| И ОтпускДополнительныеОтпуска.ВидРасчета <> ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОтпускОтпускаАвансомПерерасчет.ВидРасчета,
| ОтпускОтпускаАвансомПерерасчет.КоличествоДнейАвансом,
| ИСТИНА
|ИЗ
| Документ.Отпуск.ОтпускаАвансомПерерасчет КАК ОтпускОтпускаАвансомПерерасчет
|ГДЕ
| ОтпускОтпускаАвансомПерерасчет.Ссылка = &Ссылка
| И ОтпускОтпускаАвансомПерерасчет.ВидРасчета <> ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ПустаяСсылка)
| И НЕ &Сторнирование
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДниОтпускаАвансом.Начисление КАК Начисление,
| ОтпускНачисления.Начисление КАК НачислениеРКСН
|ПОМЕСТИТЬ ВТНачисленияРКСН
|ИЗ
| ВТДниОтпускаАвансом КАК ДниОтпускаАвансом
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Отпуск.Начисления КАК ОтпускНачисления
| ПО (ОтпускНачисления.Ссылка = &Ссылка)
| И ДниОтпускаАвансом.Начисление = ОтпускНачисления.Начисление.ОсновнойВидРасчета
|;
|
|
|ВЫБРАТЬ
| ДниОтпускаАвансом.Начисление КАК Начисление,
| ДниОтпускаАвансом.КоличествоДнейАвансом КАК КоличествоДнейАвансом,
| ДниОтпускаАвансом.Сторно КАК Сторно
|ИЗ
| ВТДниОтпускаАвансом КАК ДниОтпускаАвансом
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| НачисленияРКСН.НачислениеРКСН,
| ДниОтпускаАвансом.КоличествоДнейАвансом,
| ДниОтпускаАвансом.Сторно
|ИЗ
| ВТДниОтпускаАвансом КАК ДниОтпускаАвансом
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНачисленияРКСН КАК НачисленияРКСН
| ПО ДниОтпускаАвансом.Начисление = НачисленияРКСН.Начисление";
Выборка = Запрос.Выполнить().Выбрать();
ДниОтпускаАвансом = ОтражениеЗарплатыВУчете.НоваяТаблицаДнейОтпускаАвансом();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ДниОтпускаАвансом.Добавить(), Выборка);
КонецЦикла;
ДниОтпускаАвансом.Свернуть("Начисление, Сторно", "КоличествоДнейАвансом");
ДанныеДляПроведения.Вставить("ДниОтпускаАвансом", ДниОтпускаАвансом);
КонецПроцедуры
Функция ОписаниеТаблицРазовыхНачислений() Экспорт
ОписаниеТаблиц = Новый Массив;
ОписаниеТаблицы = ДокументыРазовыхНачислений.НовыйОписаниеТаблицыРазовыхНачислений();
ОписаниеТаблиц.Добавить(ОписаниеТаблицы);
ОписаниеТаблицы.ИмяТаблицы = "Начисления";
ОписаниеТаблицы.ИмяПоляВидРасчета = "Начисление";
Возврат ОписаниеТаблиц;
КонецФункции
Функция СвойстваИсправляемогоДокумента(ДокументСсылка) Экспорт
Реквизиты = ИсправлениеДокументовЗарплатаКадры.РеквизитыИсправляемогоРасчетногоДокумента();
Реквизиты.Вставить("ДокументРассчитан");
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, Реквизиты);
КонецФункции
Функция ПараметрыИсправляемогоДокумента(ДокументСсылка) Экспорт
Возврат ИсправлениеДокументовЗарплатаКадры.ПараметрыИсправляемогоДокумента(ДокументСсылка,
СвойстваИсправляемогоДокумента(ДокументСсылка));
КонецФункции
Функция ПараметрыСторнируемогоДокумента(ДокументСсылка) Экспорт
Свойства = ПараметрыИсправляемогоДокумента(ДокументСсылка);
Реквизиты = Новый Структура;
Реквизиты.Вставить("ДатаВыплаты", "ПланируемаяДатаВыплаты");
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Свойства, ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, Реквизиты));
Параметры = ИсправлениеДокументовЗарплатаКадры.ПараметрыСторнируемогоДокумента(ДокументСсылка, Свойства);
ОписаниеТаблицы = ИсправлениеДокументовЗарплатаКадры.НовыйОписаниеТаблицыНачислений();
ОписаниеТаблицы.ИмяТаблицы = "Начисления";
ОписаниеТаблицы.ИмяПоляВидРасчета = "Начисление";
Параметры.ТаблицыНачислений.Добавить(ОписаниеТаблицы);
ОписаниеТаблицы = ИсправлениеДокументовЗарплатаКадры.НовыйОписаниеТаблицыНачислений();
ОписаниеТаблицы.ИмяТаблицы = "УправленческиеНачисления";
ОписаниеТаблицы.ИмяПоляВидРасчета = "Начисление";
Параметры.ТаблицыНачислений.Добавить(ОписаниеТаблицы);
Возврат Параметры;
КонецФункции
#Область РассылкаДокументов
Процедура ДобавитьКомандыРассылки(Команды) Экспорт
Команда = Команды.Добавить();
Команда.ТипПараметра = Новый ОписаниеТипов("ДокументСсылка.Отпуск");
Команда.Представление = НСтр("ru = 'Рассылка приказов (Т-6)'");
Команда.Назначение = РассылкаДокументов.ВидыНазначенияКомандыРассылки().ДляСписка;
Команда.РежимЗаписи = РассылкаДокументов.РежимыЗаписиОбъектаПередВыполнениемКомандыРассылки().Проводить;
Команда.ПечатныеФормы = РассылкаДокументовКлиентСервер.НоваяПечатнаяФорма();
Команда.ПечатныеФормы.Идентификатор = "ПФ_MXL_Т6";
Команда.ТемаПисьма = НСтр("ru = 'Приказ о предоставлении отпуска (Т-6)'");
Команда.ТекстПисьма =
НСтр("ru = 'Добрый день!
|
|Во вложении приказ о вашем отпуске (форма Т-6).
|Пожалуйста, распечатайте его, поставьте свою подпись в обозначенных местах и пришлите нам фотографию или скан-копию в ответ на это письмо.
|
|С уважением, Администрация.'");
КонецПроцедуры
#КонецОбласти
#Область ПрямыеВыплаты
Процедура ЗаполнитьЗаявлениеСотрудникаНаВыплатуПособияПоОснованию(Отпуск, Заявление, РеквизитыДокумента, ДанныеДляРасчетаСреднегоЗаработка) Экспорт
ИменаРеквизитов =
"Дата,
|Номер,
|Организация,
|Сотрудник,
|ИсправленныйДокумент,
|ДатаНачалаПериодаОтсутствия,
|ДатаОкончанияПериодаОтсутствия";
РеквизитыОтпуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Отпуск, ИменаРеквизитов);
РеквизитыДокумента.Вставить("Организация", РеквизитыОтпуска.Организация);
РеквизитыДокумента.Вставить("Сотрудник", РеквизитыОтпуска.Сотрудник);
РеквизитыДокумента.Вставить("ДатаПредставленияПакетаДокументов", РеквизитыОтпуска.Дата);
РеквизитыДокумента.Вставить("ДатаПриказаОПредоставленииОтпускаПоУходуЗаРебенком", РеквизитыОтпуска.Дата);
РеквизитыДокумента.Вставить("НомерПриказаОПредоставленииОтпускаПоУходуЗаРебенком", РеквизитыОтпуска.Номер);
РеквизитыДокумента.Вставить("ДатаНачалаОтпускаПоУходуЗаРебенком", РеквизитыОтпуска.ДатаНачалаПериодаОтсутствия);
РеквизитыДокумента.Вставить("ДатаОкончанияОтпускаПоУходуЗаРебенком", РеквизитыОтпуска.ДатаОкончанияПериодаОтсутствия);
Если ЗначениеЗаполнено(РеквизитыОтпуска.ИсправленныйДокумент) Тогда
РеквизитыДокумента.Вставить("Перерасчет", Истина);
РеквизитыДокумента.Вставить("КодПричиныПерерасчета", "01");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СЭДО
Процедура ПриПолученииОсновныхСведенийОДокументеДляСЭДО(БольничныйСсылка, ДокументСЭДО, ОсновныеСведения) Экспорт
ИменаРеквизитов = "Представление, Проведен, ДокументРассчитан, Рассчитал, Организация, Сотрудник, ФизическоеЛицо";
Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(БольничныйСсылка, ИменаРеквизитов);
ЗаполнитьЗначенияСвойств(ОсновныеСведения, Значения);
ОсновныеСведения.ГоловнаяОрганизация = ЗарплатаКадры.ГоловнаяОрганизация(Значения.Организация);
ОсновныеСведения.Рассчитан = Значения.ДокументРассчитан;
ОсновныеСведения.Утвержден = Значения.ДокументРассчитан И ЗначениеЗаполнено(Значения.Рассчитал);
КонецПроцедуры
Процедура ЗаполнитьОтветНаЗапросФССДляРасчетаПособия(Отпуск, ДокументСЭДО, Реквизиты, ДанныеДляРасчетаСреднегоЗаработка) Экспорт
РеквизитыОтпуска = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Отпуск, "Организация, Сотрудник, ДатаНачалаСобытия");
Реквизиты.Вставить("Организация", РеквизитыОтпуска.Организация);
Реквизиты.Вставить("Сотрудник", РеквизитыОтпуска.Сотрудник);
Реквизиты.Вставить("ДатаНачалаСобытия", РеквизитыОтпуска.ДатаНачалаСобытия);
КонецПроцедуры
#КонецОбласти
Функция ОбъектЗаблокирован(СсылкаНаОбъект) Экспорт
Возврат Ложь;
КонецФункции
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Команда = СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(
КомандыСозданияНаОсновании, Метаданные.Документы.СведенияДляОплатыОтпускаСФР);
Если Команда <> Неопределено Тогда
Команда.РежимЗаписи = "Проводить";
Команда.ВидимостьВФормах = "ФормаДокумента";
Команда.МножественныйВыбор = Ложь;
Команда.ИмяФормы = "Документ.СведенияДляОплатыОтпускаСФР.ФормаОбъекта";
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(Команда, "ЕстьОтпускНаПериодЛечения", Истина);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда
МодульБизнесПроцессыЗадание = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессы.Задание");
МодульБизнесПроцессыЗадание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ДобавитьКомандыСозданияДокументов(КомандыСозданияДокументов, ДополнительныеПараметры) Экспорт
ЗарплатаКадрыРасширенный.ДобавитьВКоллекциюКомандуСозданияДокументаПоМетаданнымДокумента(
КомандыСозданияДокументов, Метаданные.Документы.Отпуск);
КонецФункции
Функция ДанныеДляПроведения(РеквизитыДляПроведения, СтруктураВидовУчета = Неопределено) Экспорт
Если СтруктураВидовУчета = Неопределено Тогда
СтруктураВидовУчета = ПроведениеСервер.СтруктураВидовУчета();
Для Каждого ВидУчета Из СтруктураВидовУчета Цикл
СтруктураВидовУчета[ВидУчета.Ключ] = Истина;
КонецЦикла;
КонецЕсли;
ДанныеДляПроведения = РасчетЗарплаты.СоздатьДанныеДляПроведенияНачисленияЗарплаты();
Если СтруктураВидовУчета.ОстальныеВидыУчета Или СтруктураВидовУчета.СтраховыеВзносы Тогда
РасчетЗарплатыРасширенный.ЗаполнитьНачисления(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, "Начисления,НачисленияПерерасчет,НачисленияПерерасчетНулевыеСторно", "Ссылка.ПериодРегистрации");
Если РеквизитыДляПроведения.ДокументРассчитан Тогда
ОтражениеЗарплатыВБухучете.СоздатьВТНачисленияСДаннымиЕНВД(РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.МенеджерВременныхТаблиц, ДанныеДляПроведения.НачисленияПоСотрудникам);
КонецЕсли;
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
Если РеквизитыДляПроведения.ДокументРассчитан Тогда
РасчетЗарплатыРасширенный.ЗаполнитьУдержания(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка);
РасчетЗарплаты.ЗаполнитьСписокФизическихЛиц(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.ИсправленныйДокумент);
РасчетЗарплаты.ЗаполнитьДанныеНДФЛ(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка);
РасчетЗарплатыРасширенный.ЗаполнитьДанныеКорректировкиВыплаты(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка);
ЗаполнитьСведенияОПособиях(РеквизитыДляПроведения, ДанныеДляПроведения);
РасчетЗарплатыРасширенный.ЗаполнитьПогашениеЗадолженностиПоУдержаниям(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.ПериодРегистрации);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
ПараметрыУправленческаяЗарплата = Модуль.ДополнительныеПараметрыПодготовкиДанныхДляПроведения();
ПараметрыУправленческаяЗарплата.ПолеДатыДействия = "Ссылка.ПериодРегистрации";
ПараметрыУправленческаяЗарплата.ПолеВидаНачисления = "Начисление";
Модуль.ПриПодготовкеДанныхДляПроведенияДокументаРасчетаЗарплаты(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, ПараметрыУправленческаяЗарплата);
КонецЕсли;
ДатаОперации = Мин(КонецМесяца(РеквизитыДляПроведения.ПериодРегистрации), РеквизитыДляПроведения.ДатаНачалаСобытия - 1);
ЗаймыСотрудникам.ЗаполнитьДанныеДляПроведенияПоЗаймам(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, ДатаОперации, "Ссылка.ПериодРегистрации");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
КорректировкиДляРегистрацииДенежногоСодержания = Модуль.СведенияОКорректировкахДляРегистрацииДенежногоСодержанияДокумента(РеквизитыДляПроведения.Ссылка);
ДанныеДляПроведения.Вставить("КорректировкиДляРегистрацииДенежногоСодержания", КорректировкиДляРегистрацииДенежногоСодержания);
СоставМесячногоДенежногоСодержания = Модуль.СведенияОСоставеМесячногоДенежногоСодержания(РеквизитыДляПроведения.Ссылка, "ДенежноеСодержание,ДенежноеСодержаниеФактическиеНачисления");
ДанныеДляПроведения.Вставить("СоставМесячногоДенежногоСодержания", СоставМесячногоДенежногоСодержания);
КонецЕсли;
КонецЕсли;
ДанныеДляПроведения.Вставить("РабочиеПериодыДляОтпусков", РабочиеПериодыДляОтпусков(РеквизитыДляПроведения.Ссылка));
ДанныеДляПроведения.Вставить("ОснованияДляОтпусков", ОснованияДляОтпусков(РеквизитыДляПроведения.Ссылка));
ЗаполнитьДниОтпускаАвансом(РеквизитыДляПроведения.Ссылка, ДанныеДляПроведения);
ЗаполнитьПериодыОтпусков(РеквизитыДляПроведения, ДанныеДляПроведения);
ЗаполнитьДанныеОбИспользованииОтгулов(РеквизитыДляПроведения, ДанныеДляПроведения);
КонецЕсли;
Если РеквизитыДляПроведения.ДокументРассчитан И СтруктураВидовУчета.ДанныеДляРасчетаСреднего Тогда
ДополнительныеПараметры = УчетСреднегоЗаработка.ДополнительныеПараметрыРегистрацииДанныхСреднегоЗаработка();
ДополнительныеПараметры.МесяцНачисления = "Ссылка.ПериодРегистрации";
УчетСреднегоЗаработка.ЗаполнитьТаблицыДляРегистрацииДанныхСреднегоЗаработка(ДанныеДляПроведения, РеквизитыДляПроведения.Ссылка, ДополнительныеПараметры);
КонецЕсли;
Возврат ДанныеДляПроведения;
КонецФункции
Функция РеквизитыДляПроведения(ДокументСсылка) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Отпуск.Ссылка КАК Ссылка,
| Отпуск.ДокументРассчитан КАК ДокументРассчитан,
| Отпуск.Организация КАК Организация,
| Отпуск.ПериодРегистрации КАК ПериодРегистрации,
| Отпуск.ПорядокВыплаты КАК ПорядокВыплаты,
| Отпуск.Дата КАК Дата,
| Отпуск.ПланируемаяДатаВыплаты КАК ПланируемаяДатаВыплаты,
| Отпуск.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| Отпуск.ПериодРасчетаСреднегоЗаработкаНачало КАК ПериодРасчетаСреднегоЗаработкаНачало,
| Отпуск.ПериодРасчетаСреднегоЗаработкаОкончание КАК ПериодРасчетаСреднегоЗаработкаОкончание,
| Отпуск.ФизическоеЛицо КАК ФизическоеЛицо,
| Отпуск.ПредоставитьОтгул КАК ПредоставитьОтгул,
| Отпуск.ОсвобождатьСтавку КАК ОсвобождатьСтавку,
| Отпуск.Сотрудник КАК Сотрудник,
| Отпуск.ДатаНачалаПериодаОтсутствия КАК ДатаНачалаПериодаОтсутствия,
| Отпуск.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончанияПериодаОтсутствия,
| Отпуск.ИсправленныйДокумент КАК ИсправленныйДокумент,
| Отпуск.ВидВремени КАК ВидВремени,
| Отпуск.Номер КАК Номер,
| Отпуск.ПредоставитьОсновнойОтпуск КАК ПредоставитьОсновнойОтпуск,
| Отпуск.ДатаНачалаОсновногоОтпуска КАК ДатаНачалаОсновногоОтпуска,
| Отпуск.ДатаОкончанияОсновногоОтпуска КАК ДатаОкончанияОсновногоОтпуска,
| Отпуск.ПредоставитьДополнительныйОтпуск КАК ПредоставитьДополнительныйОтпуск,
| Отпуск.РасходДнейОтгула КАК РасходДнейОтгула,
| Отпуск.РасходЧасовОтгула КАК РасходЧасовОтгула,
| Отпуск.КоличествоДнейОтгула КАК КоличествоДнейОтгула,
| Отпуск.ВидРасчетаОтгул КАК ВидРасчетаОтгул,
| Отпуск.ДокументЗаполнения КАК ДокументЗаполнения,
| Отпуск.ДокументЗаполнения.Номер КАК НомерДокументаЗаполнения,
| Отпуск.ДокументЗаполнения.Дата КАК ДатаДокументаЗаполнения,
| Отпуск.ДоходПолученНаТерриторииРФ КАК ДоходПолученНаТерриторииРФ,
| Отпуск.РассчитатьЗарплату КАК РассчитатьЗарплату,
| Отпуск.НомерПервичногоДокумента КАК НомерПервичногоДокумента
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| ОтпускРаспределениеПоТерриториямУсловиямТруда.НомерСтроки КАК НомерСтроки,
| ОтпускРаспределениеПоТерриториямУсловиямТруда.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ОтпускРаспределениеПоТерриториямУсловиямТруда.Территория КАК Территория,
| ОтпускРаспределениеПоТерриториямУсловиямТруда.УсловияТруда КАК УсловияТруда,
| ОтпускРаспределениеПоТерриториямУсловиямТруда.ДоляРаспределения КАК ДоляРаспределения,
| ОтпускРаспределениеПоТерриториямУсловиямТруда.Результат КАК Результат,
| ОтпускРаспределениеПоТерриториямУсловиямТруда.ИдентификаторСтрокиПоказателей КАК ИдентификаторСтрокиПоказателей,
| ОтпускРаспределениеПоТерриториямУсловиямТруда.СуммаВычета КАК СуммаВычета,
| ОтпускРаспределениеПоТерриториямУсловиямТруда.СкидкаПоВзносам КАК СкидкаПоВзносам,
| ОтпускРаспределениеПоТерриториямУсловиямТруда.РанееНачислено КАК РанееНачислено
|ИЗ
| Документ.Отпуск.РаспределениеПоТерриториямУсловиямТруда КАК ОтпускРаспределениеПоТерриториямУсловиямТруда
|ГДЕ
| ОтпускРаспределениеПоТерриториямУсловиямТруда.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| ОтпускРаспределениеРезультатовНачислений.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ОтпускРаспределениеРезультатовНачислений.Территория КАК Территория,
| ОтпускРаспределениеРезультатовНачислений.СтатьяФинансирования КАК СтатьяФинансирования,
| ОтпускРаспределениеРезультатовНачислений.СтатьяРасходов КАК СтатьяРасходов,
| ОтпускРаспределениеРезультатовНачислений.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| ОтпускРаспределениеРезультатовНачислений.ОблагаетсяЕНВД КАК ОблагаетсяЕНВД,
| СУММА(ОтпускРаспределениеРезультатовНачислений.Результат) КАК Результат,
| ОтпускРаспределениеРезультатовНачислений.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат
|ИЗ
| Документ.Отпуск.РаспределениеРезультатовНачислений КАК ОтпускРаспределениеРезультатовНачислений
|ГДЕ
| ОтпускРаспределениеРезультатовНачислений.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ОтпускРаспределениеРезультатовНачислений.ПодразделениеУчетаЗатрат,
| ОтпускРаспределениеРезультатовНачислений.СтатьяРасходов,
| ОтпускРаспределениеРезультатовНачислений.СпособОтраженияЗарплатыВБухучете,
| ОтпускРаспределениеРезультатовНачислений.Территория,
| ОтпускРаспределениеРезультатовНачислений.ОблагаетсяЕНВД,
| ОтпускРаспределениеРезультатовНачислений.СтатьяФинансирования,
| ОтпускРаспределениеРезультатовНачислений.ИдентификаторСтроки
|;
|
|
|ВЫБРАТЬ
| ОтпускДополнительныеОтпуска.НомерСтроки КАК НомерСтроки,
| ОтпускДополнительныеОтпуска.ВидОтпуска КАК ВидОтпуска,
| ОтпускДополнительныеОтпуска.ВидРасчета КАК ВидРасчета,
| ОтпускДополнительныеОтпуска.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени КАК ВидВремени,
| ОтпускДополнительныеОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК НачалоПериодаЗаКоторыйПредоставляетсяОтпуск,
| ОтпускДополнительныеОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК КонецПериодаЗаКоторыйПредоставляетсяОтпуск,
| ОтпускДополнительныеОтпуска.КоличествоДней КАК КоличествоДней,
| ОтпускДополнительныеОтпуска.ДатаНачала КАК ДатаНачала,
| ОтпускДополнительныеОтпуска.ДатаОкончания КАК ДатаОкончания,
| ОтпускДополнительныеОтпуска.КоличествоДнейКомпенсации КАК КоличествоДнейКомпенсации,
| ОтпускДополнительныеОтпуска.ВидРасчетаКомпенсации КАК ВидРасчетаКомпенсации,
| ОтпускДополнительныеОтпуска.Основание КАК Основание
|ИЗ
| Документ.Отпуск.ДополнительныеОтпуска КАК ОтпускДополнительныеОтпуска
|ГДЕ
| ОтпускДополнительныеОтпуска.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| ОтпускНачисления.НомерСтроки КАК НомерСтроки,
| ОтпускНачисления.Начисление КАК Начисление,
| ОтпускНачисления.ДатаНачала КАК ДатаНачала,
| ОтпускНачисления.ДатаОкончания КАК ДатаОкончания,
| ОтпускНачисления.Результат КАК Результат,
| ОтпускНачисления.Подразделение КАК Подразделение,
| ОтпускНачисления.ВидЗанятости КАК ВидЗанятости,
| ОтпускНачисления.НормаДней КАК НормаДней,
| ОтпускНачисления.НормаЧасов КАК НормаЧасов,
| ОтпускНачисления.ОтработаноДней КАК ОтработаноДней,
| ОтпускНачисления.ОтработаноЧасов КАК ОтработаноЧасов,
| ОтпускНачисления.Сотрудник КАК Сотрудник,
| ОтпускНачисления.РасчетнаяБазаЗаЕдиницуНормыВремени КАК РасчетнаяБазаЗаЕдиницуНормыВремени,
| ОтпускНачисления.ИдентификаторСтрокиВидаРасчета КАК ИдентификаторСтрокиВидаРасчета,
| ОтпускНачисления.ГрафикРаботы КАК ГрафикРаботы,
| ОтпускНачисления.ВидУчетаВремени КАК ВидУчетаВремени,
| ОтпускНачисления.ФиксСтрока КАК ФиксСтрока,
| ОтпускНачисления.ФиксЗаполнение КАК ФиксЗаполнение,
| ОтпускНачисления.ФиксРасчетВремени КАК ФиксРасчетВремени,
| ОтпускНачисления.ФиксРасчет КАК ФиксРасчет,
| ОтпускНачисления.ВремяВЧасах КАК ВремяВЧасах,
| ОтпускНачисления.ГрафикРаботыНорма КАК ГрафикРаботыНорма,
| ОтпускНачисления.ВремяВЦеломЗаПериод КАК ВремяВЦеломЗаПериод,
| ОтпускНачисления.ОбщийГрафик КАК ОбщийГрафик,
| ОтпускНачисления.ПериодРегистрацииВремени КАК ПериодРегистрацииВремени,
| ОтпускНачисления.ПериодРегистрацииНормыВремени КАК ПериодРегистрацииНормыВремени,
| ОтпускНачисления.СуммаВычета КАК СуммаВычета,
| ОтпускНачисления.КодВычета КАК КодВычета,
| ОтпускНачисления.УдалитьКодВычета КАК УдалитьКодВычета,
| ОтпускНачисления.ОплаченоДней КАК ОплаченоДней,
| ОтпускНачисления.ОплаченоЧасов КАК ОплаченоЧасов,
| ОтпускНачисления.ДокументОснование КАК ДокументОснование
|ИЗ
| Документ.Отпуск.Начисления КАК ОтпускНачисления
|ГДЕ
| ОтпускНачисления.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| ОтпускПериодыПриостановкиОтпуска.НомерСтроки КАК НомерСтроки,
| ОтпускПериодыПриостановкиОтпуска.ДатаНачалаПериода КАК ДатаНачалаПериода,
| ОтпускПериодыПриостановкиОтпуска.ДатаОкончанияПериода КАК ДатаОкончанияПериода,
| ОтпускПериодыПриостановкиОтпуска.КоличествоДнейПриостановки КАК КоличествоДнейПриостановки,
| ОтпускПериодыПриостановкиОтпуска.Причина КАК Причина
|ИЗ
| Документ.Отпуск.ПериодыПриостановкиОтпуска КАК ОтпускПериодыПриостановкиОтпуска
|ГДЕ
| ОтпускПериодыПриостановкиОтпуска.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Результаты = Запрос.ВыполнитьПакет();
РеквизитыДляПроведения = РеквизитыДляПроведенияПустаяСтруктура();
ВыборкаРеквизиты = Результаты[0].Выбрать();
Пока ВыборкаРеквизиты.Следующий() Цикл
ЗаполнитьЗначенияСвойств(РеквизитыДляПроведения, ВыборкаРеквизиты);
КонецЦикла;
РеквизитыДляПроведения.РаспределениеПоТерриториямУсловиямТруда = Результаты[1].Выгрузить();
РеквизитыДляПроведения.РаспределениеРезультатовНачислений = Результаты[2].Выгрузить();
РеквизитыДляПроведения.ДополнительныеОтпуска = Результаты[3].Выгрузить();
РеквизитыДляПроведения.Начисления = Результаты[4].Выгрузить();
РеквизитыДляПроведения.ПериодыПриостановкиОтпуска = Результаты[5].Выгрузить();
СотрудникиДаты = Результаты[0].Выгрузить();
СотрудникиДаты.Колонки.ДатаНачалаСобытия.Имя = "ДатаСобытия";
РеквизитыДляПроведения.СотрудникиДаты = СотрудникиДаты;
Возврат РеквизитыДляПроведения;
КонецФункции
Функция РеквизитыДляПроведенияПустаяСтруктура() Экспорт
РеквизитыДляПроведенияПустаяСтруктура = Новый Структура(
"Ссылка,
|ДокументРассчитан,
|Организация,
|ПериодРегистрации,
|ПорядокВыплаты,
|Дата,
|ПланируемаяДатаВыплаты,
|ДатаНачалаСобытия,
|ПериодРасчетаСреднегоЗаработкаНачало,
|ПериодРасчетаСреднегоЗаработкаОкончание,
|ФизическоеЛицо,
|ПредоставитьОтгул,
|ОсвобождатьСтавку,
|Сотрудник,
|ДатаНачалаПериодаОтсутствия,
|ДатаОкончанияПериодаОтсутствия,
|ИсправленныйДокумент,
|ВидВремени,
|Номер,
|ПредоставитьОсновнойОтпуск,
|ДатаНачалаОсновногоОтпуска,
|ДатаОкончанияОсновногоОтпуска,
|ПредоставитьДополнительныйОтпуск,
|РасходДнейОтгула,
|РасходЧасовОтгула,
|КоличествоДнейОтгула,
|ВидРасчетаОтгул,
|ДополнительныеОтпуска,
|Начисления,
|РаспределениеПоТерриториямУсловиямТруда,
|ДокументЗаполнения,
|НомерДокументаЗаполнения,
|ДатаДокументаЗаполнения,
|ДоходПолученНаТерриторииРФ,
|РаспределениеРезультатовНачислений,
|СотрудникиДаты,
|РассчитатьЗарплату,
|ПериодыПриостановкиОтпуска,
|НомерПервичногоДокумента");
Возврат РеквизитыДляПроведенияПустаяСтруктура;
КонецФункции
Процедура ПроверитьРаботающих(ДокументОбъект, Отказ) Экспорт
Если НЕ (ДокументОбъект.ПредоставитьОсновнойОтпуск
Или ДокументОбъект.ПредоставитьКомпенсациюОсновногоОтпуска
Или ДокументОбъект.ПредоставитьДополнительныйОтпуск) Тогда
Возврат;
КонецЕсли;
НачалоПроверяемогоПериода = '00010101';
ОкончаниеПроверяемогоПериода = '00010101';
Если ДокументОбъект.ПредоставитьКомпенсациюОсновногоОтпуска Тогда
НачалоПроверяемогоПериода = ДокументОбъект.ПериодРегистрации;
ОкончаниеПроверяемогоПериода = КонецМесяца(ДокументОбъект.ПериодРегистрации);
Если ЗначениеЗаполнено(ДокументОбъект.ИсправленныйДокумент) Тогда
ИсходныйДокумент = ИсправлениеДокументовЗарплатаКадры.ПервыйДокументЦепочкиИсправлений(ДокументОбъект.ИсправленныйДокумент);
НачалоПроверяемогоПериода = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ИсходныйДокумент, "ПериодРегистрации");
ОкончаниеПроверяемогоПериода = КонецМесяца(НачалоПроверяемогоПериода);
КонецЕсли;
КонецЕсли;
Если ДокументОбъект.ПредоставитьОсновнойОтпуск Тогда
Если НЕ ЗначениеЗаполнено(НачалоПроверяемогоПериода) Тогда
НачалоПроверяемогоПериода = ДокументОбъект.ДатаНачалаОсновногоОтпуска;
ИначеЕсли ЗначениеЗаполнено(ДокументОбъект.ДатаНачалаОсновногоОтпуска) Тогда
НачалоПроверяемогоПериода = Мин(НачалоПроверяемогоПериода, ДокументОбъект.ДатаНачалаОсновногоОтпуска);
КонецЕсли;
ОкончаниеПроверяемогоПериода = Макс(ОкончаниеПроверяемогоПериода, ДокументОбъект.ДатаОкончанияОсновногоОтпуска);
КонецЕсли;
Если ДокументОбъект.ПредоставитьДополнительныйОтпуск Тогда
Для каждого ДополнительныйОтпуск Из ДокументОбъект.ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) Тогда
Если НЕ ЗначениеЗаполнено(НачалоПроверяемогоПериода) Тогда
НачалоПроверяемогоПериода = ДополнительныйОтпуск.ДатаНачала;
Иначе
НачалоПроверяемогоПериода = Мин(НачалоПроверяемогоПериода, ДополнительныйОтпуск.ДатаНачала);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания) Тогда
ОкончаниеПроверяемогоПериода = Макс(ОкончаниеПроверяемогоПериода, ДополнительныйОтпуск.ДатаОкончания);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПараметрыПолученияСотрудниковОрганизаций = КадровыйУчет.ПараметрыПолученияРабочихМестВОрганизацийПоВременнойТаблице();
ПараметрыПолученияСотрудниковОрганизаций.Организация = ДокументОбъект.Организация;
ПараметрыПолученияСотрудниковОрганизаций.НачалоПериода = НачалоПроверяемогоПериода;
ПараметрыПолученияСотрудниковОрганизаций.ОкончаниеПериода = ОкончаниеПроверяемогоПериода;
ПараметрыПолученияСотрудниковОрганизаций.РаботникиПоДоговорамГПХ = Неопределено;
КадровыйУчет.ПроверитьРаботающихСотрудников(
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДокументОбъект.Сотрудник),
ПараметрыПолученияСотрудниковОрганизаций,
Отказ,
Новый Структура("ИмяПоляСотрудник, ИмяОбъекта", "Сотрудник", "Объект")
);
КонецПроцедуры
Функция ДанныеСостоянийСотрудника(РеквизитыДляПроведения) Экспорт
ДанныеСостояний = СостоянияСотрудников.ПустаяТаблицаДанныхСостоянийСотрудника();
Если РеквизитыДляПроведения.ПредоставитьОсновнойОтпуск Тогда
ПериодыНачислений = Новый Массив;
ПериодОтпуска = Новый Структура;
ПериодОтпуска.Вставить("ДатаНачалаПериода", РеквизитыДляПроведения.ДатаНачалаОсновногоОтпуска);
ПериодОтпуска.Вставить("ДатаОкончанияПериода", РеквизитыДляПроведения.ДатаОкончанияОсновногоОтпуска);
ПериодыНачислений.Добавить(ПериодОтпуска);
Если РеквизитыДляПроведения.ПериодыПриостановкиОтпуска.Количество()> 0 Тогда
ПериодыНачислений = ИсключитьИнтервалыИзПериодов(ПериодОтпуска, РеквизитыДляПроведения.ПериодыПриостановкиОтпуска);
КонецЕсли;
Для Каждого ПериодНачисления Из ПериодыНачислений Цикл
НоваяСтрока = ДанныеСостояний.Добавить();
НоваяСтрока.Сотрудник = РеквизитыДляПроведения.Сотрудник;
НоваяСтрока.Состояние = Перечисления.СостоянияСотрудника.ОтпускОсновной;
НоваяСтрока.Начало = ПериодНачисления.ДатаНачалаПериода;
НоваяСтрока.Окончание = ПериодНачисления.ДатаОкончанияПериода;
НоваяСтрока.ВидВремени = РеквизитыДляПроведения.ВидВремени;
КонецЦикла;
КонецЕсли;
Если РеквизитыДляПроведения.ПредоставитьДополнительныйОтпуск Тогда
Для Каждого СтрокаТаблицы Из РеквизитыДляПроведения.ДополнительныеОтпуска Цикл
Если Не ЗначениеЗаполнено(СтрокаТаблицы.ДатаНачала)
И Не ЗначениеЗаполнено(СтрокаТаблицы.ДатаОкончания) Тогда
Продолжить;
КонецЕсли;
ПериодыНачисленияДопОтпусков = Новый Массив;
ПериодДопОтпуска = Новый Структура;
ПериодДопОтпуска.Вставить("ДатаНачалаПериода", СтрокаТаблицы.ДатаНачала);
ПериодДопОтпуска.Вставить("ДатаОкончанияПериода", СтрокаТаблицы.ДатаОкончания);
ПериодыНачисленияДопОтпусков.Добавить(ПериодДопОтпуска);
Если РеквизитыДляПроведения.ПериодыПриостановкиОтпуска.Количество() > 0 Тогда
ПериодыНачисленияДопОтпусков = ИсключитьИнтервалыИзПериодов(ПериодДопОтпуска, РеквизитыДляПроведения.ПериодыПриостановкиОтпуска);
КонецЕсли;
Для Каждого ПериодНачисления Из ПериодыНачисленияДопОтпусков Цикл
НоваяСтрока = ДанныеСостояний.Добавить();
НоваяСтрока.Сотрудник = РеквизитыДляПроведения.Сотрудник;
НоваяСтрока.Состояние = СостоянияСотрудников.СостояниеПоВидуОтпуска(СтрокаТаблицы.ВидОтпуска);
НоваяСтрока.Начало = ПериодНачисления.ДатаНачалаПериода;
НоваяСтрока.Окончание = ПериодНачисления.ДатаОкончанияПериода;
НоваяСтрока.ВидВремени = СтрокаТаблицы.ВидВремени;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Если РеквизитыДляПроведения.ПредоставитьОтгул Тогда
НоваяСтрока = ДанныеСостояний.Добавить();
НоваяСтрока.Сотрудник = РеквизитыДляПроведения.Сотрудник;
НоваяСтрока.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСотрудника.ДополнительныеВыходныеДниНеоплачиваемые");
ЗаполнитьЗначенияСвойств(НоваяСтрока, ПериодОтгула(РеквизитыДляПроведения));
КонецЕсли;
Возврат ДанныеСостояний;
КонецФункции
Функция ДанныеОбОтгулах(РеквизитыДляПроведения)
ТаблицаОтгулов = Новый Структура("Организация, Сотрудник, Период, ВидДвижения, Дни, Часы");
ТаблицаОтгулов.Период = ДатаНачалаОтгула(РеквизитыДляПроведения);
ТаблицаОтгулов.ВидДвижения = ВидДвиженияНакопления.Расход;
ТаблицаОтгулов.Организация = РеквизитыДляПроведения.Организация;
ТаблицаОтгулов.Сотрудник = РеквизитыДляПроведения.Сотрудник;
ТаблицаОтгулов.Дни = РеквизитыДляПроведения.РасходДнейОтгула;
ТаблицаОтгулов.Часы = РеквизитыДляПроведения.РасходЧасовОтгула;
Возврат ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТаблицаОтгулов);
КонецФункции
Процедура ЗаполнитьДанныеОбИспользованииОтгулов(РеквизитыДляПроведения, ДанныеДляПроведения)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", РеквизитыДляПроведения.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК ВидДвижения,
| ОтпускОтработанныеДни.Ссылка.Организация КАК Организация,
| ОтпускОтработанныеДни.Ссылка.Сотрудник КАК Сотрудник,
| ОтпускОтработанныеДни.Дата КАК ОтработанныйДень,
| ВЫБОР
| КОГДА ОтпускОтработанныеДни.Часы = 0
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Дни,
| ОтпускОтработанныеДни.Часы КАК Часы
|ИЗ
| Документ.Отпуск.ОтработанныеДни КАК ОтпускОтработанныеДни
|ГДЕ
| ОтпускОтработанныеДни.Ссылка = &Ссылка
| И ОтпускОтработанныеДни.Ссылка.ПредоставитьОтгул";
ИспользованиеОтгулов = Запрос.Выполнить().Выгрузить();
ИспользованиеОтгулов.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
ИспользованиеОтгулов.ЗаполнитьЗначения(ДатаНачалаОтгула(РеквизитыДляПроведения), "Период");
ДанныеДляПроведения.Вставить("ИспользованиеОтгулов", ИспользованиеОтгулов);
КонецПроцедуры
Функция ПериодОтгула(РеквизитыДляПроведения)
Начало = ?(РеквизитыДляПроведения.ПредоставитьОсновнойОтпуск, КонецДня(РеквизитыДляПроведения.ДатаОкончанияОсновногоОтпуска)+1, '00010101');
Если РеквизитыДляПроведения.ПредоставитьДополнительныйОтпуск Тогда
Для Каждого СтрокаТаблицы Из РеквизитыДляПроведения.ДополнительныеОтпуска Цикл
Начало = Макс(Начало , КонецДня(СтрокаТаблицы.ДатаОкончания)+1);
КонецЦикла;
КонецЕсли;
Окончание = УчетРабочегоВремениРасширенный.ДатаОкончанияПоГрафикуРаботыСотрудника(РеквизитыДляПроведения.Сотрудник, Начало, РеквизитыДляПроведения.КоличествоДнейОтгула);
Возврат Новый Структура("Начало, Окончание", Начало, Окончание);
КонецФункции
Функция ДатаНачалаОтгула(РеквизитыДляПроведения)
ОтгулыНачисления = РеквизитыДляПроведения.Начисления.НайтиСтроки(Новый Структура("Начисление", РеквизитыДляПроведения.ВидРасчетаОтгул));
Если ОтгулыНачисления.Количество() > 0 Тогда
Возврат ОтгулыНачисления[0].ДатаНачала;
Иначе
Возврат РеквизитыДляПроведения.Дата;
КонецЕсли;
КонецФункции
Процедура ЗаполнитьПериодыОтпусков(РеквизитыДляПроведения, ДанныеДляПроведения)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", РеквизитыДляПроведения.Ссылка);
Запрос.УстановитьПараметр("ОсновнойОтпуск", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"));
Запрос.Текст = "ВЫБРАТЬ
| Отпуск.Сотрудник КАК Сотрудник,
| Отпуск.ДатаНачалаОсновногоОтпуска КАК ДатаНачала,
| Отпуск.ДатаОкончанияОсновногоОтпуска КАК ДатаОкончания,
| &ОсновнойОтпуск КАК ВидОтпуска,
| Отпуск.КоличествоДнейОсновногоОтпуска КАК КоличествоДней,
| Отпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийПериодС,
| Отпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК РабочийПериодПо,
| ЛОЖЬ КАК Компенсация,
| Отпуск.ДатаНачалаОсновногоОтпуска КАК ПериодЗаписи,
| Отпуск.Основание КАК Основание
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.Ссылка = &Ссылка
| И Отпуск.ПредоставитьОсновнойОтпуск
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДополнительныеОтпуска.Ссылка.Сотрудник,
| ДополнительныеОтпуска.ДатаНачала,
| ДополнительныеОтпуска.ДатаОкончания,
| ДополнительныеОтпуска.ВидОтпуска,
| ДополнительныеОтпуска.КоличествоДней,
| ДополнительныеОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск,
| ДополнительныеОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск,
| ЛОЖЬ,
| ДополнительныеОтпуска.ДатаНачала,
| ДополнительныеОтпуска.Основание
|ИЗ
| Документ.Отпуск.ДополнительныеОтпуска КАК ДополнительныеОтпуска
|ГДЕ
| ДополнительныеОтпуска.Ссылка = &Ссылка
| И ДополнительныеОтпуска.Ссылка.ПредоставитьДополнительныйОтпуск
| И ДополнительныеОтпуска.ДатаНачала <> ДАТАВРЕМЯ(1, 1, 1)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Отпуск.Сотрудник,
| ДАТАВРЕМЯ(1, 1, 1),
| ДАТАВРЕМЯ(1, 1, 1),
| &ОсновнойОтпуск,
| Отпуск.КоличествоДнейКомпенсацииОсновногоОтпуска,
| Отпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск,
| Отпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск,
| ИСТИНА,
| Отпуск.Дата,
| Отпуск.Основание
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.Ссылка = &Ссылка
| И Отпуск.ПредоставитьКомпенсациюОсновногоОтпуска
| И Отпуск.КоличествоДнейКомпенсацииОсновногоОтпуска > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ДополнительныеОтпуска.Ссылка.Сотрудник,
| ДАТАВРЕМЯ(1, 1, 1),
| ДАТАВРЕМЯ(1, 1, 1),
| ДополнительныеОтпуска.ВидОтпуска,
| СУММА(ДополнительныеОтпуска.КоличествоДнейКомпенсации),
| МИНИМУМ(ДополнительныеОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск),
| МАКСИМУМ(ДополнительныеОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск),
| ИСТИНА,
| ДополнительныеОтпуска.Ссылка.Дата,
| МАКСИМУМ(ВЫРАЗИТЬ(ДополнительныеОтпуска.Основание КАК СТРОКА(1024)))
|ИЗ
| Документ.Отпуск.ДополнительныеОтпуска КАК ДополнительныеОтпуска
|ГДЕ
| ДополнительныеОтпуска.Ссылка = &Ссылка
| И ДополнительныеОтпуска.Ссылка.ПредоставитьДополнительныйОтпуск
| И ДополнительныеОтпуска.КоличествоДнейКомпенсации > 0
|
|СГРУППИРОВАТЬ ПО
| ДополнительныеОтпуска.Ссылка.Сотрудник,
| ДополнительныеОтпуска.ВидОтпуска,
| ДополнительныеОтпуска.Ссылка.Дата";
ПериодыОтпусков = ОстаткиОтпусков.ПустаяТаблицаПериодовОтпусков();
ИсходныйДокумент = РеквизитыДляПроведения.Ссылка;
ИсходныйДокументДата = РеквизитыДляПроведения.Дата;
ИсходныйДокументНомер = ЗарплатаКадрыОтчеты.НомерНаПечать(РеквизитыДляПроведения.Номер, РеквизитыДляПроведения.НомерПервичногоДокумента);
ДокументЗаполнения = РеквизитыДляПроведения.ДокументЗаполнения;
Если ЗначениеЗаполнено(РеквизитыДляПроведения.ИсправленныйДокумент) Тогда
ИсходныйДокумент = ИсправлениеДокументовЗарплатаКадры.ПервыйДокументЦепочкиИсправлений(РеквизитыДляПроведения.ИсправленныйДокумент);
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ИсходныйДокумент, "Дата, Номер, ДокументЗаполнения, НомерПервичногоДокумента");
ИсходныйДокументДата = ЗначенияРеквизитов["Дата"];
ИсходныйДокументНомер = ЗарплатаКадрыОтчеты.НомерНаПечать(ЗначенияРеквизитов["Номер"], ЗначенияРеквизитов["НомерПервичногоДокумента"]);
ДокументЗаполнения = ЗначенияРеквизитов["ДокументЗаполнения"];
КонецЕсли;
Если ЗначениеЗаполнено(ДокументЗаполнения) Тогда
ИсходныйДокумент = ДокументЗаполнения;
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ИсходныйДокумент, "Дата, Номер, НомерПервичногоДокумента");
ИсходныйДокументДата = ЗначенияРеквизитов["Дата"];
ИсходныйДокументНомер = ЗначенияРеквизитов["Номер"];
ИсходныйДокументНомер = ЗарплатаКадрыОтчеты.НомерНаПечать(ЗначенияРеквизитов["Номер"], ЗначенияРеквизитов["НомерПервичногоДокумента"]);
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ПериодыОтпусков.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
НоваяСтрока.Состояние = СостоянияСотрудников.СостояниеПоВидуОтпуска(Выборка.ВидОтпуска);
НоваяСтрока.ИсходныйДокумент = ИсходныйДокумент;
НоваяСтрока.ИсходныйДокументДата = ИсходныйДокументДата;
НоваяСтрока.ИсходныйДокументНомер = ИсходныйДокументНомер;
КонецЦикла;
ДанныеДляПроведения.Вставить("ПериодыОтпусков", ПериодыОтпусков);
КонецПроцедуры
Процедура ПроверитьПересечениеФактическогоПериодаДействия(ДокументСсылка, Отказ)
Если Отказ Тогда
Возврат;
КонецЕсли;
ИменаРеквизитов =
"ПериодРегистрации,
|Организация,
|ИсправленныйДокумент,
|ВидРасчетаОсновногоОтпуска";
РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, ИменаРеквизитов);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст = "ВЫБРАТЬ
| Начисления.*
|ИЗ
| Документ.Отпуск.Начисления КАК Начисления
|ГДЕ
| Начисления.Ссылка = &Ссылка";
Начисления = Запрос.Выполнить().Выгрузить();
ПараметрыПроверки = РасчетЗарплатыРасширенный.ПараметрыПроверкиПересеченияФактическогоПериодаДействия();
ПараметрыПроверки.Организация = РеквизитыДокумента.Организация;
ПараметрыПроверки.ПериодРегистрации = РеквизитыДокумента.ПериодРегистрации;
ПараметрыПроверки.Документ = ДокументСсылка;
ПараметрыПроверки.Начисления = Начисления;
ПараметрыПроверки.ИсправленныйДокумент = РеквизитыДокумента.ИсправленныйДокумент;
ПараметрыПроверки.ОсновныеНачисления = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(РеквизитыДокумента.ВидРасчетаОсновногоОтпуска);
РасчетЗарплатыРасширенный.ПроверитьПересечениеФактическогоПериодаДействия(ПараметрыПроверки, Отказ);
КонецПроцедуры
Функция ИсключитьИнтервалыИзПериодов(ИсходныйПериод, Интервалы) Экспорт
ТекущийПериод = ИсходныйПериод;
РезультирующиеПериоды = Новый Массив;
Интервалы.Сортировать("ДатаНачалаПериода");
Для Каждого Интервал Из Интервалы Цикл
ПериодПересечения = ОбщегоНазначенияБЗК.ПериодПересеченияДвухИнтервалов(ТекущийПериод.ДатаНачалаПериода,
ТекущийПериод.ДатаОкончанияПериода,
Интервал.ДатаНачалаПериода,
Интервал.ДатаОкончанияПериода);
Если ПериодПересечения = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТекущийПериод.ДатаНачалаПериода > ПериодПересечения.ДатаНачала
И ТекущийПериод.ДатаОкончанияПериода < ПериодПересечения.ДатаОкончания Тогда
ТекущийПериод = Неопределено;
Прервать;
КонецЕсли;
Если ТекущийПериод.ДатаНачалаПериода <> ПериодПересечения.ДатаНачала Тогда
НовыйПериод = Новый Структура;
НовыйПериод.Вставить("ДатаНачалаПериода", ТекущийПериод.ДатаНачалаПериода);
НовыйПериод.Вставить("ДатаОкончанияПериода", НачалоДня(ПериодПересечения.ДатаНачала) - 1);
РезультирующиеПериоды.Добавить(НовыйПериод);
КонецЕсли;
Если ПериодПересечения.ДатаОкончания <> ТекущийПериод.ДатаОкончанияПериода Тогда
ТекущийПериод.ДатаНачалаПериода = КонецДня(ПериодПересечения.ДатаОкончания) + 1;
Иначе
ТекущийПериод = Неопределено;
Прервать;
КонецЕсли;
КонецЦикла;
Если ТекущийПериод <> Неопределено Тогда
РезультирующиеПериоды.Добавить(ТекущийПериод);
КонецЕсли;
Возврат РезультирующиеПериоды;
КонецФункции
#Область ПечатьРасчетаСреднегоЗаработка
Функция ДанныеДокументовДляПечатиРасчетаСреднегоЗаработка(МассивСсылок, ПоСтатьямФинансирования = Ложь, ИмяМакета = "") Экспорт
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
СоздатьВТКадровыеДанныеСотрудниковДокумента(Запрос);
Запрос.Текст =
"ВЫБРАТЬ
| Отпуск.Сотрудник КАК Сотрудник,
| Отпуск.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| Отпуск.Ссылка КАК Ссылка,
| Отпуск.Организация КАК Организация,
| ВЫБОР
| КОГДА НЕ ОтпускаСотрудников.Дата ЕСТЬ NULL
| ТОГДА ОтпускаСотрудников.Дата
| КОГДА Отпуск.ДатаПервичногоДокумента <> ДАТАВРЕМЯ(1,1,1)
| ТОГДА Отпуск.ДатаПервичногоДокумента
| ИНАЧЕ Отпуск.Дата
| КОНЕЦ КАК ДатаДокумента,
| ВЫБОР
| КОГДА НЕ ОтпускаСотрудников.Номер ЕСТЬ NULL
| ТОГДА ОтпускаСотрудников.Номер
| КОГДА Отпуск.НомерПервичногоДокумента <> """"
| ТОГДА Отпуск.НомерПервичногоДокумента
| ИНАЧЕ Отпуск.Номер
| КОНЕЦ КАК НомерДокумента,
| ВЫБОР
| КОГДА ОтпускаСотрудников.Номер ЕСТЬ NULL
| И Отпуск.НаименованиеПервичногоДокумента <> """"
| ТОГДА Отпуск.НаименованиеПервичногоДокумента
| ИНАЧЕ """"
| КОНЕЦ КАК НаименованиеПервичногоДокумента,
| Отпуск.ДатаНачалаПериодаОтсутствия КАК ДатаНачалаОтсутствия,
| Отпуск.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончанияОтсутствия,
| Отпуск.ПериодРасчетаСреднегоЗаработкаНачало КАК НачалоРасчетногоПериода,
| Отпуск.ПериодРасчетаСреднегоЗаработкаОкончание КАК ОкончаниеРасчетногоПериода,
| Отпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК НачалоПериодаЗаКоторыйПредоставляетсяОтпуск,
| Отпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК КонецПериодаЗаКоторыйПредоставляетсяОтпуск,
| КадровыеДанныеСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| КадровыеДанныеСотрудников.ФИОПолные КАК ФИОПолные,
| КадровыеДанныеСотрудников.ТабельныйНомер КАК ТабельныйНомер,
| КадровыеДанныеСотрудников.Подразделение КАК Подразделение,
| КадровыеДанныеСотрудников.Должность КАК Должность,
| КадровыеДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
| Организации.НаименованиеСокращенное КАК ОрганизацияНаименованиеСокращенное,
| Организации.КодПоОКПО КАК КодПоОКПО,
| Организации.НаименованиеПолное КАК ОрганизацияНаименованиеПолное
|ИЗ
| Документ.Отпуск КАК Отпуск
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ПО Отпуск.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
| И Отпуск.ДатаНачалаСобытия = КадровыеДанныеСотрудников.Период
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
| ПО Отпуск.Организация = Организации.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтпускаСотрудников КАК ОтпускаСотрудников
| ПО Отпуск.ДокументЗаполнения = ОтпускаСотрудников.Ссылка
|ГДЕ
| Отпуск.Ссылка В(&МассивСсылок)";
Результат = Запрос.Выполнить();
ДанныеДокументов = Новый Массив;
Если Результат.Пустой() Тогда
Возврат ДанныеДокументов;
КонецЕсли;
ТаблицыДанныхОСреднем = УчетСреднегоЗаработка.ТаблицыДанныхОСреднемЗаработке("Отпуск", МассивСсылок);
Выборка = Результат.Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("Ссылка") Цикл
ДанныеДокумента = Обработки.ПечатьРасчетаСреднегоЗаработка.ПустаяСтруктураДанныхДляПечатиСреднегоЗаработка();
ЗаполнитьЗначенияСвойств(ДанныеДокумента.РеквизитыДокумента, Выборка);
ЗаполнитьЗначенияСвойств(ДанныеДокумента.КадровыеДанныеСотрудника, Выборка);
ДанныеОНачислениях = УчетСреднегоЗаработка.ТаблицаОтобраннаяПоПолю(ТаблицыДанныхОСреднем["ДанныеОНачислениях"], "Ссылка", Выборка.Ссылка);
ДанныеОВремени = УчетСреднегоЗаработка.ТаблицаОтобраннаяПоПолю(ТаблицыДанныхОСреднем["ДанныеОВремени"], "Ссылка", Выборка.Ссылка);
ДанныеОбИндексации = УчетСреднегоЗаработка.ТаблицаОтобраннаяПоПолю(ТаблицыДанныхОСреднем["ДанныеОбИндексации"], "Ссылка", Выборка.Ссылка);
МассивОтпусков = ВидыОтпусковОбъекта(Выборка.Ссылка.ПолучитьОбъект());
Если ОстаткиОтпусков.СодержатсяТолькоОтпускаПоРабочимДням(МассивОтпусков, Выборка.Сотрудник, Выборка.ДатаНачалаСобытия) Тогда
СпособРасчета = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоШестидневке;
Иначе
СпособРасчета = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;
КонецЕсли;
ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
ДополнительныеПараметры.Индексации = ДанныеОбИндексации;
ДополнительныеПараметры.ДатаНачалаСобытия = Выборка.ДатаНачалаСобытия;
ДополнительныеПараметры.НачалоПериода = Выборка.НачалоРасчетногоПериода;
ДополнительныеПараметры.ОкончаниеПериода = Выборка.ОкончаниеРасчетногоПериода;
ДополнительныеПараметры.ПоСтатьямФинансирования = ПоСтатьямФинансирования;
ДополнительныеПараметры.СпособРасчетаОтпуска = СпособРасчета;
ДанныеДокумента.ДанныеРасчетаСреднего = УчетСреднегоЗаработкаКлиентСервер.ДанныеДляРасчетаСреднегоЗаработка(ДанныеОНачислениях, ДанныеОВремени, ДополнительныеПараметры);
ДанныеДокумента.ПараметрыРасчета.СпособРасчета = СпособРасчета;
ДанныеДокумента.ПараметрыРасчета.ИспользоватьСреднеЧасовойЗаработок = Ложь;
ДанныеДокумента.ПараметрыРасчета.НачалоРасчетногоПериода = Выборка.НачалоРасчетногоПериода;
ДанныеДокумента.ПараметрыРасчета.ОкончаниеРасчетногоПериода = Выборка.ОкончаниеРасчетногоПериода;
ДанныеДокументов.Добавить(ДанныеДокумента);
КонецЦикла;
Возврат ДанныеДокументов;
КонецФункции
Процедура СоздатьВТКадровыеДанныеСотрудниковДокумента(Запрос)
Запрос.Текст =
"ВЫБРАТЬ
| Отпуск.Сотрудник КАК Сотрудник,
| Отпуск.ДатаНачалаСобытия КАК Период
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.Ссылка В(&МассивСсылок)";
Запрос.Выполнить();
Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудники");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(Описатель, Истина, "ФизическоеЛицо,ФИОПолные,ТабельныйНомер,Подразделение,Должность,ВидЗанятости");
Запрос.Текст = "УНИЧТОЖИТЬ ВТСотрудники";
Запрос.Выполнить();
КонецПроцедуры
Функция ДанныеДокументовДляПечатиРасчетаСреднегоЗаработка0504425(МассивСсылок) Экспорт
ЗапросПоОрганизациям = Новый Запрос;
ЗапросПоОрганизациям.УстановитьПараметр("МассивСсылок", МассивСсылок);
ЗапросПоОрганизациям.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Отпуск.Организация КАК Организация,
| Отпуск.ДатаНачалаСобытия КАК ДатаНачалаСобытия
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.Ссылка В(&МассивСсылок)";
ТаблицаРезультатовПоОрганизациям = ЗапросПоОрганизациям.Выполнить().Выгрузить();
ОрганизацииИСведенияОНих = ЗарплатаКадрыРасширенный.ПолучитьИННиКППОрганизаций(ТаблицаРезультатовПоОрганизациям);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| Отпуск.Ссылка КАК Ссылка,
| Отпуск.ДатаНачалаПериодаОтсутствия КАК Дата,
| Отпуск.ГлавныйБухгалтер КАК ГлавныйБухгалтер,
| Отпуск.Бухгалтер КАК Бухгалтер,
| Отпуск.Исполнитель КАК Исполнитель,
| Отпуск.ОтветственныйИсполнитель КАК ОтветственныйИсполнитель
|ПОМЕСТИТЬ ВТСотрудникиИПериод
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.Ссылка В(&МассивСсылок)";
Запрос.Выполнить();
ЗарплатаКадры.СоздатьВТФИООтветственныхЛиц(Запрос.МенеджерВременныхТаблиц, Истина, "ГлавныйБухгалтер,Бухгалтер,Исполнитель,ОтветственныйИсполнитель", "ВТСотрудникиИПериод");
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ДополнительныеОтпуска.КоличествоДней) КАК КоличествоДней,
| ДополнительныеОтпуска.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ВТДополнительныеОтпуска
|ИЗ
| Документ.Отпуск.ДополнительныеОтпуска КАК ДополнительныеОтпуска
|ГДЕ
| ДополнительныеОтпуска.Ссылка В(&МассивСсылок)
|
|СГРУППИРОВАТЬ ПО
| ДополнительныеОтпуска.Ссылка
|;
|
|
|ВЫБРАТЬ
| Отпуск.Ссылка КАК Ссылка,
| Отпуск.ВидРасчетаОсновногоОтпуска КАК Начисление,
| Отпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК НачалоПериодаЗаКоторыйПредоставляетсяОтпуск,
| Отпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК КонецПериодаЗаКоторыйПредоставляетсяОтпуск,
| Отпуск.ДатаНачалаПериодаОтсутствия КАК ДатаНачалаОтсутствия,
| Отпуск.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончанияОтсутствия,
| Отпуск.КоличествоДнейОсновногоОтпуска КАК ДнейОсновногоОтпуска,
| ЕСТЬNULL(ВТДополнительныеОтпуска.КоличествоДней, 0) КАК ДнейДополнительногоОтпуска,
| Отпуск.КоличествоДнейОсновногоОтпуска + ЕСТЬNULL(ВТДополнительныеОтпуска.КоличествоДней, 0) КАК ДнейОтпускаВсего,
| ФИОГлавногоБухгалтера.РасшифровкаПодписи КАК ГлавныйБухгалтерРасшифровкаПодписи,
| ФИОБухгалтера.РасшифровкаПодписи КАК БухгалтерРасшифровкаПодписи,
| ФИОИсполнителя.РасшифровкаПодписи КАК ИсполнительРасшифровкаПодписи,
| ФИООтветственногоИсполнителя.РасшифровкаПодписи КАК ОтветственныйИсполнительРасшифровкаПодписи,
| Отпуск.ДолжностьИсполнителя КАК ДолжностьИсполнителя,
| Отпуск.ДолжностьОтветственногоИсполнителя КАК ДолжностьОтветственногоИсполнителя,
| Отпуск.Основание КАК Основание,
| Отпуск.РассчитатьЗарплату КАК РассчитатьЗарплату,
| ВЫБОР
| КОГДА Отпуск.ИсправленныйДокумент <> ЗНАЧЕНИЕ(Документ.Отпуск.ПустаяСсылка)
| ТОГДА Отпуск.ИсправленныйДокумент.ПериодРегистрации
| ИНАЧЕ Отпуск.ПериодРегистрации
| КОНЕЦ КАК НачалоПериодаРасчетаЗарплаты
|ИЗ
| Документ.Отпуск КАК Отпуск
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОГлавногоБухгалтера
| ПО Отпуск.Ссылка = ФИОГлавногоБухгалтера.Ссылка
| И Отпуск.ГлавныйБухгалтер = ФИОГлавногоБухгалтера.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОБухгалтера
| ПО Отпуск.Ссылка = ФИОБухгалтера.Ссылка
| И Отпуск.Бухгалтер = ФИОБухгалтера.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОИсполнителя
| ПО Отпуск.Ссылка = ФИОИсполнителя.Ссылка
| И Отпуск.Исполнитель = ФИОИсполнителя.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИООтветственногоИсполнителя
| ПО Отпуск.Ссылка = ФИОИсполнителя.Ссылка
| И Отпуск.ОтветственныйИсполнитель = ФИООтветственногоИсполнителя.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДополнительныеОтпуска КАК ВТДополнительныеОтпуска
| ПО Отпуск.Ссылка = ВТДополнительныеОтпуска.Ссылка
|ГДЕ
| Отпуск.Ссылка В(&МассивСсылок)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| Отпуск.Ссылка КАК Ссылка,
| 1 КАК Приоритет,
| ВЫБОР
| КОГДА Отпуск.ПредоставитьОсновнойОтпуск = ИСТИНА
| ТОГДА &ОсновнойОтпуск
| ИНАЧЕ NULL
| КОНЕЦ КАК ВидОтпуска,
| ВидыОтпусков.Наименование КАК ВидОтпускаНаименование
|ИЗ
| Документ.Отпуск КАК Отпуск
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыОтпусков КАК ВидыОтпусков
| ПО (ВидыОтпусков.Ссылка = &ОсновнойОтпуск)
|ГДЕ
| Отпуск.Ссылка В(&МассивСсылок)
| И НЕ ВЫБОР
| КОГДА Отпуск.ПредоставитьОсновнойОтпуск = ИСТИНА
| ТОГДА &ОсновнойОтпуск
| ИНАЧЕ NULL
| КОНЕЦ ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОтпускДополнительныеОтпуска.Ссылка,
| 2,
| ОтпускДополнительныеОтпуска.ВидОтпуска,
| ОтпускДополнительныеОтпуска.ВидОтпуска.Наименование
|ИЗ
| Документ.Отпуск.ДополнительныеОтпуска КАК ОтпускДополнительныеОтпуска
|ГДЕ
| ОтпускДополнительныеОтпуска.Ссылка В(&МассивСсылок)
|
|УПОРЯДОЧИТЬ ПО
| Приоритет";
ОсновнойОтпуск = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
Запрос.УстановитьПараметр("ОсновнойОтпуск", ?(ОсновнойОтпуск = Неопределено, Null, ОсновнойОтпуск));
Результаты = Запрос.ВыполнитьПакет();
ВыборкаВидыОтпусков = Результаты[Результаты.Количество() - 1].Выбрать();
Выборка = Результаты[Результаты.Количество() - 2].Выбрать();
ДанныеДокументов = Новый Массив;
БазовыеДанныеДокументов = ДанныеДокументовДляПечатиРасчетаСреднегоЗаработка(МассивСсылок, Истина);
Отбор = Новый Структура("Ссылка");
Для каждого БазовыеДанныеДокумента Из БазовыеДанныеДокументов Цикл
Выборка.Сбросить();
НаименованиеСобытия = "";
ДанныеДокумента = Обработки.ПечатьРасчетаСреднегоЗаработка.ПустаяСтруктураДанныхДляПечатиСреднегоЗаработка0504425();
ЗаполнитьЗначенияСвойств(ДанныеДокумента, БазовыеДанныеДокумента, , "РеквизитыДокумента");
ЗаполнитьЗначенияСвойств(ДанныеДокумента.РеквизитыДокумента, БазовыеДанныеДокумента.РеквизитыДокумента);
Отбор.Ссылка = БазовыеДанныеДокумента.РеквизитыДокумента.Ссылка;
Если Выборка.НайтиСледующий(Отбор) Тогда
ЗаполнитьЗначенияСвойств(ДанныеДокумента.РеквизитыДокумента, Выборка);
Пока ВыборкаВидыОтпусков.НайтиСледующий(Отбор) Цикл
НаименованиеСобытия = НаименованиеСобытия + ?(ЗначениеЗаполнено(НаименованиеСобытия), ", ", "") + ВыборкаВидыОтпусков.ВидОтпускаНаименование;
КонецЦикла;
ДанныеДокумента.РеквизитыДокумента.НаименованиеСобытия = НаименованиеСобытия;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ДанныеДокумента.РеквизитыДокумента,
ОрганизацииИСведенияОНих.Получить(БазовыеДанныеДокумента.РеквизитыДокумента.Организация),
"ИНН, КПП");
ДанныеДокументов.Добавить(ДанныеДокумента);
КонецЦикла;
Возврат ДанныеДокументов;
КонецФункции
#КонецОбласти
#Область ПечатьПодробногоРасчетаНачислений
Процедура ЗаполнитьОписаниеДокументаРасчетаНачислений(ОписаниеДокумента) Экспорт
КатегорииСпециализированногоНачисления = Новый Массив;
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаОтпуска);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.КомпенсацияОтпуска);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОтпускБезОплаты);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.Отгул);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДенежноеСодержаниеНаПериодОтпуска);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДенежноеСодержаниеКомпенсацияОтпуска);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиРайонногоКоэффициентаВСреднемЗаработке);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиСевернойНадбавкиВСреднемЗаработке);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиРайонногоКоэффициентаВСДС);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиСевернойНадбавкиВСДС);
МетаданныеДокумента = ПустаяСсылка().Метаданные();
ОписаниеДокумента.Вставить("ИмяДокумента", МетаданныеДокумента.Имя);
ОписаниеДокумента.Вставить("СинонимДокумента", МетаданныеДокумента.Синоним);
ОписаниеДокумента.Вставить("ЕстьРасчетСреднегоЗаработка", Истина);
ОписаниеДокумента.Вставить("ЕстьРасчетСпециализированныхНачислений", Истина);
ОписаниеДокумента.Вставить("ЕстьРасчетЗарплаты", Истина);
ОписаниеДокумента.Вставить("КатегорииСпециализированногоНачисления", КатегорииСпециализированногоНачисления);
ОписаниеДокумента.Вставить("НазваниеСпециализированногоНачисления", НСтр("ru = 'Отпуск'"));
КонецПроцедуры
Процедура ЗаполнитьДанныеДокументовДляПодробногоРасчетаНачислений(МассивСсылок, ДанныеДокументов) Экспорт
РасчетЗарплатыРасширенный.ЗаполнитьДанныеДокументовДляПодробногоРасчетаНачислений(МассивСсылок, ПустаяСсылка().Метаданные().Имя, ДанныеДокументов);
КонецПроцедуры
Функция НачисленияПоказателиДокументов(МассивСсылок) Экспорт
Возврат РасчетЗарплатыРасширенный.НачисленияПоказателиДокументов(МассивСсылок, ПустаяСсылка().Метаданные().Имя);
КонецФункции
#КонецОбласти
#Область ПечатьСправкиДляОплатыОтпускаЧАЭС
Функция ДанныеДляПечатиСправкиДляОплатыОтпускаЧАЭС(МассивСсылок)
ВидОтпускаПострадавшимВАварииЧАЭС = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускПострадавшимВАварииЧАЭС");
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.УстановитьПараметр("ТаблицаДниОтпускаЧАЭС", КоличествоОплачиваемыхДнейПоВидуОтпуска(МассивСсылок, ВидОтпускаПострадавшимВАварииЧАЭС));
Запрос.Текст =
"ВЫБРАТЬ
| Отпуска.Ссылка КАК Ссылка,
| Отпуска.ДатаНачалаПериодаОтсутствия КАК Дата,
| Отпуска.Руководитель КАК Руководитель,
| Отпуска.ГлавныйБухгалтер КАК ГлавныйБухгалтер
|ПОМЕСТИТЬ ВТДанныеДокументов
|ИЗ
| Документ.Отпуск КАК Отпуска
|ГДЕ
| Отпуска.Ссылка В(&МассивСсылок)
|;
|
|
|ВЫБРАТЬ
| ДниОтпускаЧАЭС.Отпуск КАК Ссылка,
| ДниОтпускаЧАЭС.КоличествоДней КАК КоличествоДнейОтпуска
|ПОМЕСТИТЬ ВТДниОтпускаЧАЭС
|ИЗ
| &ТаблицаДниОтпускаЧАЭС КАК ДниОтпускаЧАЭС";
Запрос.Выполнить();
ИменаПолей = Новый Массив;
ИменаПолей.Добавить("Руководитель");
ИменаПолей.Добавить("ГлавныйБухгалтер");
ЗарплатаКадры.СоздатьВТФИООтветственныхЛиц(Запрос.МенеджерВременныхТаблиц, Истина, ИменаПолей, "ВТДанныеДокументов");
Запрос.Текст =
"ВЫБРАТЬ
| Отпуска.Ссылка КАК Ссылка,
| Отпуска.Сотрудник КАК Сотрудник,
| Отпуска.ФизическоеЛицо КАК ФизическоеЛицо,
| Отпуска.Номер КАК НомерДокумента,
| Отпуска.Дата КАК ДатаДокумента,
| Отпуска.РасчетДенежногоСодержания КАК РасчетДенежногоСодержания,
| Отпуска.СохраняемоеДенежноеСодержание КАК СохраняемоеДенежноеСодержание,
| ВЫБОР
| КОГДА ОрганизацияСправочник.НаименованиеПолное ПОДОБНО """"
| ТОГДА ОрганизацияСправочник.Наименование
| ИНАЧЕ ОрганизацияСправочник.НаименованиеПолное
| КОНЕЦ КАК НаименованиеОрганизации,
| ФИОРуководителя.РасшифровкаПодписи КАК РуководительРасшифровкаПодписи,
| ФИОГлавногоБухгалтера.РасшифровкаПодписи КАК ГлавныйБухгалтерРасшифровкаПодписи,
| Отпуска.ДолжностьРуководителя КАК ДолжностьРуководителя,
| Отпуска.ПериодРасчетаСреднегоЗаработкаНачало КАК РасчетныйПериодС,
| Отпуска.ПериодРасчетаСреднегоЗаработкаОкончание КАК РасчетныйПериодПо,
| ОтпускДополнительныеОтпуска.ДатаНачала КАК ДатаНачала,
| ОтпускДополнительныеОтпуска.ДатаОкончания КАК ДатаОкончания,
| ОтпускДополнительныеОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск КАК НачалоПериодаЗаКоторыйПредоставляетсяОтпуск,
| ОтпускДополнительныеОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск КАК КонецПериодаЗаКоторыйПредоставляетсяОтпуск,
| ВТДниОтпускаЧАЭС.КоличествоДнейОтпуска КАК ДнейОтпуска
|ИЗ
| ВТДанныеДокументов КАК ВТДанныеДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Отпуск КАК Отпуска
| ПО ВТДанныеДокументов.Ссылка = Отпуска.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОРуководителя
| ПО (Отпуска.ДатаНачалаПериодаОтсутствия = ФИОРуководителя.Дата)
| И (Отпуска.Ссылка = ФИОРуководителя.Ссылка)
| И (Отпуска.Руководитель = ФИОРуководителя.ФизическоеЛицо)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИОГлавногоБухгалтера
| ПО (Отпуска.ДатаНачалаПериодаОтсутствия = ФИОГлавногоБухгалтера.Дата)
| И (Отпуска.Ссылка = ФИОГлавногоБухгалтера.Ссылка)
| И (Отпуска.ГлавныйБухгалтер = ФИОГлавногоБухгалтера.ФизическоеЛицо)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК ОрганизацияСправочник
| ПО (Отпуска.Организация = ОрганизацияСправочник.Ссылка)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Отпуск.ДополнительныеОтпуска КАК ОтпускДополнительныеОтпуска
| ПО ВТДанныеДокументов.Ссылка = ОтпускДополнительныеОтпуска.Ссылка
| И (ОтпускДополнительныеОтпуска.ВидОтпуска = &ОтпускЧАЭС)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДниОтпускаЧАЭС КАК ВТДниОтпускаЧАЭС
| ПО ВТДанныеДокументов.Ссылка = ВТДниОтпускаЧАЭС.Ссылка";
Запрос.УстановитьПараметр("ОтпускЧАЭС", ВидОтпускаПострадавшимВАварииЧАЭС);
Результат = Запрос.Выполнить();
СписокСотрудников = Результат.Выгрузить().ВыгрузитьКолонку("Сотрудник");
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, "ФИО,ДокументПредставление,Пол");
ДанныеРасчетаСреднегоЗаработкаДокументов = Документы.Отпуск.ДанныеДокументовДляПечатиРасчетаСреднегоЗаработка(МассивСсылок);
Возврат Новый Структура("ДанныеСправок, КадровыеДанныеСотрудников, ДанныеРасчетаСреднегоЗаработкаДокументов", Результат.Выбрать(), КадровыеДанныеСотрудников, ДанныеРасчетаСреднегоЗаработкаДокументов);
КонецФункции
Процедура ПриПечатиСправкиДляОплатыОтпускаЧАЭС(КонтекстПечати)
ДанныеДляПечатиСправок = ДанныеДляПечатиСправкиДляОплатыОтпускаЧАЭС(КонтекстПечати.МассивОбъектов);
ДанныеСправок = ДанныеДляПечатиСправок.ДанныеСправок;
КадровыеДанныеСотрудников = ДанныеДляПечатиСправок.КадровыеДанныеСотрудников;
ДанныеРасчетаСреднегоЗаработкаДокументов = ДанныеДляПечатиСправок.ДанныеРасчетаСреднегоЗаработкаДокументов;
Если ДанныеСправок.Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'Документом не регистрируется дополнительных отпусков гражданам, подвергшимся воздействию радиации вследствие катастрофы на ЧАЭС.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецЕсли;
ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();
Пока ДанныеСправок.Следующий() Цикл
УправлениеПечатьюБЗК.ПередПечатьюОчередногоОбъекта(КонтекстПечати);
СекцияСправка = КонтекстПечати.Макет.ПолучитьОбласть("Справка");
СекцияИндексация = КонтекстПечати.Макет.ПолучитьОбласть("Индексация");
СекцияПодвал = КонтекстПечати.Макет.ПолучитьОбласть("Подвал");
ЗаполняемыеСвойства = "НаименованиеОрганизации,НомерДокумента,ДатаДокумента,ДнейОтпуска";
ЗаполнитьЗначенияСвойств(СекцияСправка.Параметры, ДанныеСправок, ЗаполняемыеСвойства);
ЗаполняемыеСвойства = "РуководительРасшифровкаПодписи,ДолжностьРуководителя,ГлавныйБухгалтерРасшифровкаПодписи";
ЗаполнитьЗначенияСвойств(СекцияПодвал.Параметры, ДанныеСправок, ЗаполняемыеСвойства);
СекцияСправка.Параметры.НаименованиеОрганизации = СокрЛП(СекцияСправка.Параметры.НаименованиеОрганизации);
КадровыеДанныеСотрудника = КадровыеДанныеСотрудников.Найти(ДанныеСправок.Сотрудник);
ФамилияИО = КадровыеДанныеСотрудника.ФИО;
ФизическиеЛицаЗарплатаКадры.Просклонять(ФамилияИО, 3, ФамилияИО, КадровыеДанныеСотрудника.Пол, КадровыеДанныеСотрудника.ФизическоеЛицо);
СекцияСправка.Параметры.ФамилияИО = ФамилияИО;
ФорматнаяСтрокаДаты = "ДЛФ=DD";
ПредставлениеДатыНачалаОтпуска = Формат(ДанныеСправок.ДатаНачала, ФорматнаяСтрокаДаты);
ПредставлениеДатыОкончанияОтпуска = Формат(ДанныеСправок.ДатаОкончания, ФорматнаяСтрокаДаты);
СекцияСправка.Параметры.ДатаНачалаЧисло = СокрЛП(Лев(ПредставлениеДатыНачалаОтпуска,2));
СекцияСправка.Параметры.ДатаНачалаМесяцГод = СокрЛП(Прав(ПредставлениеДатыНачалаОтпуска, СтрДлина(ПредставлениеДатыНачалаОтпуска)-2));
СекцияСправка.Параметры.ДатаОкончанияЧисло = СокрЛП(Лев(ПредставлениеДатыОкончанияОтпуска,2));
СекцияСправка.Параметры.ДатаОкончанияМесяцГод = СокрЛП(Прав(ПредставлениеДатыОкончанияОтпуска, СтрДлина(ПредставлениеДатыОкончанияОтпуска)-2));
ПредставлениеДатыНачалаРасчетногоПериода = Формат(ДанныеСправок.РасчетныйПериодС, ФорматнаяСтрокаДаты);
ПредставлениеДатыОкончанияРасчетногоПериода = Формат(ДанныеСправок.РасчетныйПериодПо, ФорматнаяСтрокаДаты);
СекцияСправка.Параметры.ДатаНачалаРасчетногоПериодаЧисло = СокрЛП(Лев(ПредставлениеДатыНачалаРасчетногоПериода,2));
СекцияСправка.Параметры.ДатаНачалаРасчетногоПериодаМесяцГод = СокрЛП(Прав(ПредставлениеДатыНачалаРасчетногоПериода, СтрДлина(ПредставлениеДатыНачалаРасчетногоПериода)-2));
СекцияСправка.Параметры.ДатаОкончанияРасчетногоПериодаЧисло = СокрЛП(Лев(ПредставлениеДатыОкончанияРасчетногоПериода,2));
СекцияСправка.Параметры.ДатаОкончанияРасчетногоПериодаМесяцГод = СокрЛП(Прав(ПредставлениеДатыОкончанияРасчетногоПериода, СтрДлина(ПредставлениеДатыОкончанияРасчетногоПериода)-2));
ПредставлениеДатыНачалаПериодаРаботы = Формат(ДанныеСправок.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск, ФорматнаяСтрокаДаты);
ПредставлениеДатыОкончанияПериодаРаботы = Формат(ДанныеСправок.КонецПериодаЗаКоторыйПредоставляетсяОтпуск, ФорматнаяСтрокаДаты);
СекцияСправка.Параметры.ДатаНачалаПериодаРаботыЧисло = СокрЛП(Лев(ПредставлениеДатыНачалаПериодаРаботы,2));
СекцияСправка.Параметры.ДатаНачалаПериодаРаботыМесяцГод = СокрЛП(Прав(ПредставлениеДатыНачалаПериодаРаботы, СтрДлина(ПредставлениеДатыНачалаПериодаРаботы)-2));
СекцияСправка.Параметры.ДатаОкончанияПериодаРаботыЧисло = СокрЛП(Лев(ПредставлениеДатыОкончанияПериодаРаботы,2));
СекцияСправка.Параметры.ДатаОкончанияПериодаРаботыМесяцГод = СокрЛП(Прав(ПредставлениеДатыОкончанияПериодаРаботы, СтрДлина(ПредставлениеДатыОкончанияПериодаРаботы)-2));
Для каждого Элемент Из ДанныеРасчетаСреднегоЗаработкаДокументов Цикл
Если ДанныеСправок.Ссылка = Элемент.РеквизитыДокумента.Ссылка Тогда
ДанныеРасчетаСреднегоЗаработка = Элемент.ДанныеРасчетаСреднего;
ПараметрыРасчетаСреднего = Элемент.ПараметрыРасчета;
Прервать;
КонецЕсли;
КонецЦикла;
Заработок = УчетСреднегоЗаработкаКлиентСервер.ИтогиПоПолю(ДанныеРасчетаСреднегоЗаработка["Заработок"], "Учтено");
ОтработаноДней = УчетСреднегоЗаработкаКлиентСервер.ИтогиПоПолю(ДанныеРасчетаСреднегоЗаработка["ОтработанноеВремя"], "Учтено");
СреднийЗаработок = УчетСреднегоЗаработкаКлиентСервер.СреднийЗаработок(Заработок, ОтработаноДней);
Если ДанныеСправок.РасчетДенежногоСодержания Тогда
НормаДней = 0;
Если ОбщегоНазначенияБЗККлиентСервер.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначенияБЗККлиентСервер.ОбщийМодуль("РасчетДенежногоСодержания");
НормаДней = Модуль.КоличествоДнейВМесяцеДляОплатыОтпусков(ДанныеСправок.ДатаНачала);
КонецЕсли;
Заработок = ДанныеСправок.СохраняемоеДенежноеСодержание;
СреднийЗаработок = 0;
Если НормаДней <> 0 Тогда
СреднийЗаработок = Заработок / НормаДней;
КонецЕсли;
КонецЕсли;
СекцияСправка.Параметры.ОтработаноДней = ОтработаноДней;
СекцияСправка.Параметры.ЗаработокРуб = Формат(Цел(Заработок),"ЧДЦ=0; ЧН=-");
СекцияСправка.Параметры.ЗаработокКоп = Формат((Заработок - Цел(Заработок)) * 100,"ЧЦ=2; ЧДЦ=0; ЧН=-");
СекцияСправка.Параметры.ДневнойЗаработокРуб = Формат(Цел(СреднийЗаработок),"ЧДЦ=0; ЧН=-");
СекцияСправка.Параметры.ДневнойЗаработокКоп = Формат((СреднийЗаработок - Цел(СреднийЗаработок)) * 100,"ЧЦ=2; ЧДЦ=0; ЧН=-");
Если ДанныеСправок.РасчетДенежногоСодержания Тогда
СекцияСправка.Область("ОбластьОтработаноДней").Текст = "";
КонецЕсли;
КонтекстПечати.ТабличныйДокумент.Вывести(СекцияСправка);
ПериодОтпуска = Новый Структура("ДатаНачалаПериода, ДатаОкончанияПериода", ДанныеСправок.ДатаНачала, ДанныеСправок.ДатаОкончания);
ПериодыОтпуска = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПериодОтпуска);
ДанныеОтпускаЧАЭС = УчетСреднегоЗаработка.ДанныеОплатыОтпускаЧАЭС(ДанныеСправок.Сотрудник, СреднийЗаработок, ДанныеСправок.ДнейОтпуска, ПериодыОтпуска);
Для Каждого ДанныеИндексации Из ДанныеОтпускаЧАЭС.КоэффициентыИндексации Цикл
СекцияИндексация.Параметры.ДатаИндексации = Формат(ДанныеИндексации.Период, ФорматнаяСтрокаДаты);
СекцияИндексация.Параметры.КоэффициентИндексации = Окр(ДанныеИндексации.Коэффициент, 2);
КонтекстПечати.ТабличныйДокумент.Вывести(СекцияИндексация);
КонецЦикла;
КВыплате = ДанныеОтпускаЧАЭС.Сумма;
СекцияПодвал.Параметры.КВыплатеРуб = Формат(Цел(КВыплате),"ЧДЦ=0; ЧН=-");
СекцияПодвал.Параметры.КВыплатеКоп = Формат((КВыплате - Цел(КВыплате)) * 100,"ЧЦ=2; ЧДЦ=0; ЧН=-");
СекцияПодвал.Параметры.КВыплатеПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(КВыплате, ВалютаУчета);
СекцияПодвал.Параметры.ДокументПредставление = КадровыеДанныеСотрудника.ДокументПредставление;
КонтекстПечати.ТабличныйДокумент.Вывести(СекцияПодвал);
УправлениеПечатьюБЗК.ПослеПечатиОчередногоОбъекта(КонтекстПечати, ДанныеСправок.Ссылка);
КонецЦикла;
КонецПроцедуры
Функция КоличествоОплачиваемыхДнейПоВидуОтпуска(МассивОтпусков, ВидОтпуска) Экспорт
ДокументыИОплачиваемыеДниПоВидуОтпуска = Новый ТаблицаЗначений;
ДокументыИОплачиваемыеДниПоВидуОтпуска.Колонки.Добавить("Отпуск", Новый ОписаниеТипов("ДокументСсылка.Отпуск"));
ДокументыИОплачиваемыеДниПоВидуОтпуска.Колонки.Добавить("КоличествоДней", Новый ОписаниеТипов("Число"));
ДокументыИОплачиваемыеДниПоВидуОтпуска.Колонки.Добавить("ПериодыОтпуска", Новый ОписаниеТипов("Массив"));
Отбор = Новый Структура("ВидОтпуска", ВидОтпуска);
Для Каждого Отпуск Из МассивОтпусков Цикл
КоличествоОплачиваемыхДнейПоВидуОтпуска = 0;
ПериодыПоВидуОтпуска = Новый Массив;
СтрокиПоВидуОтпуска = Отпуск.ДополнительныеОтпуска.НайтиСтроки(Отбор);
Если СтрокиПоВидуОтпуска.Количество() > 0 Тогда
ПериодыПриостановкиОтпуска = Новый ТаблицаЗначений;
ПериодыПриостановкиОтпуска.Колонки.Добавить("ДатаНачалаПериода");
ПериодыПриостановкиОтпуска.Колонки.Добавить("ДатаОкончанияПериода");
Для Каждого СтрокаПриостановки Из Отпуск.ПериодыПриостановкиОтпуска Цикл
НоваяСтрока = ПериодыПриостановкиОтпуска.Добавить();
НоваяСтрока.ДатаНачалаПериода = СтрокаПриостановки.ДатаНачалаПериода;
НоваяСтрока.ДатаОкончанияПериода = СтрокаПриостановки.ДатаОкончанияПериода;
КонецЦикла;
НачисленияПоВидуОтпуска = Новый Массив;
Для Каждого СтрокаПоВидуОтпуска Из СтрокиПоВидуОтпуска Цикл
ПериодДопОтпуска = Новый Структура;
ПериодДопОтпуска.Вставить("ДатаНачалаПериода", СтрокаПоВидуОтпуска.ДатаНачала);
ПериодДопОтпуска.Вставить("ДатаОкончанияПериода", СтрокаПоВидуОтпуска.ДатаОкончания);
ПериодыОтпускаСУчетомПриостановок = ИсключитьИнтервалыИзПериодов(
ПериодДопОтпуска, ПериодыПриостановкиОтпуска);
ОтпускВРабочихДняхПоДоговору = ОстаткиОтпусков.ОтпускСотрудникаВРабочихДняхПоДоговору(
Отпуск.Сотрудник, Отпуск.ДатаНачалаСобытия);
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
КоличествоДнейОтпускаСУчетомПриостановок = 0;
Для Каждого ПериодОтпускаСУчетомПриостановок Из ПериодыОтпускаСУчетомПриостановок Цикл
КоличествоДнейОтпускаСУчетомПриостановок = КоличествоДнейОтпускаСУчетомПриостановок +
УчетРабочегоВремениРасширенный.ДлительностьИнтервала(
Отпуск.Сотрудник,
ПериодОтпускаСУчетомПриостановок.ДатаНачалаПериода,
ПериодОтпускаСУчетомПриостановок.ДатаОкончанияПериода,
ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням,
ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
ПериодыПоВидуОтпуска.Добавить(ПериодОтпускаСУчетомПриостановок);
КонецЦикла;
КоличествоОплачиваемыхДнейПоВидуОтпуска = КоличествоОплачиваемыхДнейПоВидуОтпуска + КоличествоДнейОтпускаСУчетомПриостановок;
КонецЦикла;
КонецЕсли;
НоваяСтрока = ДокументыИОплачиваемыеДниПоВидуОтпуска.Добавить();
НоваяСтрока.Отпуск = Отпуск;
НоваяСтрока.КоличествоДней = КоличествоОплачиваемыхДнейПоВидуОтпуска;
НоваяСтрока.ПериодыОтпуска = ПериодыПоВидуОтпуска;
КонецЦикла;
Возврат ДокументыИОплачиваемыеДниПоВидуОтпуска;
КонецФункции
#КонецОбласти
#Область ПФ_MXL_ОтпускНаПериодЛечения
Процедура ПриПечатиОтпускаНаПериодЛечения_2024(КонтекстПечати)
СЭДОФСС.УстановитьСтандартныйОтступПечати(КонтекстПечати);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", КонтекстПечати.МассивОбъектов);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокументов.Ссылка КАК Ссылка,
| ДанныеДокументов.Номер КАК Номер,
| ДанныеДокументов.Дата КАК Дата,
| ДанныеДокументов.Организация КАК Организация,
| ДанныеДокументов.Сотрудник КАК Сотрудник,
| ДанныеДокументов.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеДокументов.ДатаНачалаПериодаОтсутствия КАК Период,
| ДанныеДокументов.ДатаНачалаПериодаОтсутствия КАК ДатаНачала,
| ДанныеДокументов.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончания
|ПОМЕСТИТЬ ВТДанныеДокументов
|ИЗ
| Документ.Отпуск КАК ДанныеДокументов
|ГДЕ
| ДанныеДокументов.Ссылка В(&МассивСсылок)
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДанныеДокументов.Организация КАК Организация,
| ДанныеДокументов.Период КАК Период
|ПОМЕСТИТЬ ВТОрганизацииПериоды
|ИЗ
| ВТДанныеДокументов КАК ДанныеДокументов";
Запрос.Выполнить();
ЗарплатаКадрыРасширенный.СоздатьВТОтветственныеЛица(
Запрос.МенеджерВременныхТаблиц,
"ВТОрганизацииПериоды",
"ПредставительСФР, ДолжностьПредставителяСФР",
"ВТОтветственныеЛица");
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДанныеДокументов.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеДокументов.Период КАК Период
|ПОМЕСТИТЬ ВТФизлица
|ИЗ
| ВТДанныеДокументов КАК ДанныеДокументов
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОтветственныеЛица.ПредставительСФР,
| ОтветственныеЛица.Период
|ИЗ
| ВТОтветственныеЛица КАК ОтветственныеЛица";
Запрос.Выполнить();
Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеФизическихЛиц(
Запрос.МенеджерВременныхТаблиц,
"ВТФизлица",
"ФизическоеЛицо,Период");
ИменаПолей = "СтраховойНомерПФР, Фамилия, Имя, Отчество, ФИОПолные, ИОФамилия";
КадровыйУчет.СоздатьВТКадровыеДанныеФизическихЛиц(Описатель, Истина, ИменаПолей);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокументов.Ссылка КАК Ссылка,
| ДанныеДокументов.Номер КАК Номер,
| ДанныеДокументов.Дата КАК Дата,
| ДанныеДокументов.Организация КАК Организация,
| ДанныеДокументов.Сотрудник КАК Сотрудник,
| ДанныеДокументов.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеДокументов.Период КАК Период,
| ДанныеДокументов.ДатаНачала КАК ДатаНачала,
| ДанныеДокументов.ДатаОкончания КАК ДатаОкончания,
| ВЫБОР
| КОГДА ОрганизацияСправочник.НаименованиеПолное ПОДОБНО """"
| ТОГДА ОрганизацияСправочник.Наименование
| ИНАЧЕ ОрганизацияСправочник.НаименованиеПолное
| КОНЕЦ КАК СтраховательНаименование,
| ОтветственныеЛица.ПредставительСФР КАК ПредставительСФР,
| ОтветственныеЛица.ДолжностьПредставителяСФР КАК ДолжностьПредставителяСФР,
| УполномоченныйКадровыеДанные.ИОФамилия КАК РасшифровкаПодписиПредставителяСФР,
| УполномоченныйКадровыеДанные.ФИОПолные КАК ФИОПредставителяСФР,
| ФизическоеЛицоКадровыеДанные.СтраховойНомерПФР КАК СНИЛС,
| ФизическоеЛицоКадровыеДанные.Фамилия КАК Фамилия,
| ФизическоеЛицоКадровыеДанные.Имя КАК Имя,
| ФизическоеЛицоКадровыеДанные.Отчество КАК Отчество
|ИЗ
| ВТДанныеДокументов КАК ДанныеДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК ОрганизацияСправочник
| ПО ДанныеДокументов.Организация = ОрганизацияСправочник.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТОтветственныеЛица КАК ОтветственныеЛица
| ПО ДанныеДокументов.Организация = ОтветственныеЛица.Организация
| И ДанныеДокументов.Период = ОтветственныеЛица.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеФизическихЛиц КАК УполномоченныйКадровыеДанные
| ПО (ОтветственныеЛица.ПредставительСФР = УполномоченныйКадровыеДанные.ФизическоеЛицо)
| И (ОтветственныеЛица.Период = УполномоченныйКадровыеДанные.Период)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеФизическихЛиц КАК ФизическоеЛицоКадровыеДанные
| ПО ДанныеДокументов.ФизическоеЛицо = ФизическоеЛицоКадровыеДанные.ФизическоеЛицо
| И ДанныеДокументов.Период = ФизическоеЛицоКадровыеДанные.Период
|
|УПОРЯДОЧИТЬ ПО
| Организация,
| ФизическоеЛицо,
| Дата";
ТаблицаШапка = Запрос.Выполнить().Выгрузить();
ТаблицаШапка.Колонки.Добавить("СреднийЗаработокОбщий");
ЗаполнитьДолжностьПредставителяСФРПоКадровомуУчету(Запрос, ТаблицаШапка);
Запрос.УстановитьПараметр("ВидОтпуска", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускНаСанаторноКурортноеЛечение"));
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДополнительныеОтпуска.Ссылка КАК Ссылка,
| СУММА(ДополнительныеОтпуска.КоличествоДней) КАК КоличествоДней,
| МИНИМУМ(ДополнительныеОтпуска.ДатаНачала) КАК ДатаНачала,
| МАКСИМУМ(ДополнительныеОтпуска.ДатаОкончания) КАК ДатаОкончания
|ИЗ
| Документ.Отпуск.ДополнительныеОтпуска КАК ДополнительныеОтпуска
|ГДЕ
| ДополнительныеОтпуска.Ссылка В(&МассивСсылок)
| И ДополнительныеОтпуска.ВидОтпуска = &ВидОтпуска
|
|СГРУППИРОВАТЬ ПО
| ДополнительныеОтпуска.Ссылка";
ПродолжительностьОтпусков = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПериодОтпуска = Новый Структура("ДатаНачала, ДатаОкончания, КоличествоДней");
ЗаполнитьЗначенияСвойств(ПериодОтпуска, Выборка);
ПродолжительностьОтпусков.Вставить(Выборка.Ссылка, ПериодОтпуска);
КонецЦикла;
ДанныеСреднегоЗаработка = Новый Соответствие;
СреднийЗаработокДокументов = ДанныеДокументовДляПечатиРасчетаСреднегоЗаработка(КонтекстПечати.МассивОбъектов);
Для Каждого ДанныеДокумента Из СреднийЗаработокДокументов Цикл
СсылкаНаДокумент = ДанныеДокумента.РеквизитыДокумента.Ссылка;
ДанныеСреднегоЗаработка.Вставить(СсылкаНаДокумент, ДанныеДокумента);
КонецЦикла;
ВидыПремий = Новый Массив;
ВидыПремий.Добавить(Перечисления.УчетНачисленийВСреднемЗаработкеОбщий.ПремияГодоваяПроцентом);
ВидыПремий.Добавить(Перечисления.УчетНачисленийВСреднемЗаработкеОбщий.ПремияГодоваяФиксированнойСуммой);
ВидыПремий.Добавить(Перечисления.УчетНачисленийВСреднемЗаработкеОбщий.ПремияПроцентом);
ВидыПремий.Добавить(Перечисления.УчетНачисленийВСреднемЗаработкеОбщий.ПремияФиксированнойСуммой);
Организации = КоллекцииБЗК.УникальныеЗначенияКолонки(ТаблицаШапка, "Организация");
ПустаяДата = Неопределено;
ТипыСпособовПрямыхВыплат = СпособыПрямыхВыплатФСС.ТипыСпособовПрямыхВыплат();
Для Каждого Организация Из Организации Цикл
Фильтр = Новый Структура("Организация", Организация);
Физлица = КоллекцииБЗК.УникальныеЗначенияКолонкиСФильтром(ТаблицаШапка, Фильтр, "ФизическоеЛицо");
НастройкиПрямыхВыплат = СпособыПрямыхВыплатФСС.НастройкиСотрудников(Организация, Физлица, ПустаяДата);
СпособыПрямыхВыплатФСС.ЗаполнитьСведенияОбАдресах(НастройкиПрямыхВыплат.ТаблицаРезультат);
ИменаПолей = "НаимЮЛПол, НаимЮЛСокр, РегистрационныйНомерФСС, ДополнительныйКодФСС, ИННЮЛ";
Страхователь = СЭДОФСС.СведенияОСтрахователе(Организация, ИменаПолей);
Найденные = ТаблицаШапка.НайтиСтроки(Фильтр);
Для Каждого СтрокаТаблицы Из Найденные Цикл
Данные = Обработки.ОбщиеФормыСЭДОФСС.ПустаяСтруктураДанныхДляПечатиОтпускаНаПериодЛечения();
ЗаполнитьЗначенияСвойств(Данные, СтрокаТаблицы);
ПериодОтпуска = ПродолжительностьОтпусков.Получить(СтрокаТаблицы.Ссылка);
Если ПериодОтпуска = Неопределено Тогда
ПериодОтпуска = Новый Структура("ДатаНачала, ДатаОкончания, КоличествоДней");
КонецЕсли;
Если СтрДлина(Страхователь.НаимЮЛПол) <= 150 Или Не ЗначениеЗаполнено(Страхователь.НаимЮЛСокр) Тогда
Данные.СтраховательНаименование = Страхователь.НаимЮЛПол;
Иначе
Данные.СтраховательНаименование = Страхователь.НаимЮЛСокр;
КонецЕсли;
Данные.РегистрационныйНомер = Страхователь.РегистрационныйНомерФСС;
Данные.ДополнительныйКод = Страхователь.ДополнительныйКодФСС;
Данные.СтраховательИНН = Страхователь.ИННЮЛ;
Данные.УполномоченныйПредставительДолжность = СокрЛП(СтрокаТаблицы.ДолжностьПредставителяСФР);
Данные.УполномоченныйПредставительФИО = СокрЛП(СтрокаТаблицы.ФИОПредставителяСФР);
Данные.ОтпускНомер = СтрокаТаблицы.Номер;
Данные.ОтпускДата = СтрокаТаблицы.Дата;
Данные.ОтпускДатаНачала = ПериодОтпуска.ДатаНачала;
Данные.ОтпускДатаОкончания = ПериодОтпуска.ДатаОкончания;
СпособПрямыхвыплат = НастройкиПрямыхВыплат.ТаблицаРезультат.Найти(СтрокаТаблицы.ФизическоеЛицо, "ФизическоеЛицо");
Если СпособПрямыхвыплат <> Неопределено Тогда
ТипСпособа = ТипыСпособовПрямыхВыплат.Найти(ТипЗнч(СпособПрямыхвыплат.Значение), "Тип");
Если ТипСпособа <> Неопределено Тогда
Данные.СпособВыплатыПособия = ТипСпособа.СпособВыплатыПособия;
Если ТипСпособа.СпособВыплатыПособия = Перечисления.СпособыВыплатыПособия.НаКартуМИР Тогда
Если ЗначениеЗаполнено(СпособПрямыхвыплат.Значение) Тогда
Данные.КартаМИР = БанковскиеКарты.ПолныйНомерКарты(СпособПрямыхвыплат.Значение);
КонецЕсли;
ИначеЕсли ТипСпособа.СпособВыплатыПособия = Перечисления.СпособыВыплатыПособия.ЧерезБанк Тогда
Данные.БанкНаименование = СпособПрямыхвыплат.НаименованиеБанка;
Данные.БанкБИК = СпособПрямыхвыплат.БИК;
Данные.НомерСчета = СпособПрямыхвыплат.НомерСчета;
Иначе
Данные.АдресПроживания = СпособПрямыхвыплат.ЗначениеАдреса;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПремияВсего = 0;
СреднийЗаработок = ДанныеСреднегоЗаработка.Получить(СтрокаТаблицы.Ссылка);
Для Каждого ДанныеЗаработка Из СреднийЗаработок.ДанныеРасчетаСреднего.Заработок Цикл
Если ВидыПремий.Найти(ДанныеЗаработка.СоставнаяЧасть) <> Неопределено Тогда
ПремияВсего = ПремияВсего + ДанныеЗаработка.Учтено;
КонецЕсли;
Если ДанныеЗаработка.СоставнаяЧасть = Перечисления.УчетНачисленийВСреднемЗаработкеОбщий.ОбщийЗаработок Тогда
СтрокаСредний = Данные.СреднийЗаработок.Найти(ДанныеЗаработка.Месяц, "Период");
Если СтрокаСредний = Неопределено Тогда
СтрокаСредний = Данные.СреднийЗаработок.Добавить();
КонецЕсли;
СтрокаСредний.Период = ДанныеЗаработка.Месяц;
СтрокаСредний.СуммаВыплат = СтрокаСредний.СуммаВыплат + ДанныеЗаработка.Учтено;
КонецЕсли;
КонецЦикла;
Для Каждого ДанныеВремени Из СреднийЗаработок.ДанныеРасчетаСреднего.ОтработанноеВремя Цикл
СтрокаСредний = Данные.СреднийЗаработок.Найти(ДанныеВремени.Месяц, "Период");
Если СтрокаСредний = Неопределено Тогда
СтрокаСредний = Данные.СреднийЗаработок.Добавить();
КонецЕсли;
СтрокаСредний.Период = ДанныеВремени.Месяц;
СтрокаСредний.КалендарныхДней = ДанныеВремени.Учтено;
КонецЦикла;
Данные.СреднийЗаработок.Сортировать("Период");
Данные.ИтогоСуммаВыплат = Данные.СреднийЗаработок.Итог("СуммаВыплат");
Данные.ИтогоКалендарныхДней = Данные.СреднийЗаработок.Итог("КалендарныхДней");
Данные.ПремияВсего = ПремияВсего;
Данные.ЗаработокВключаяПремию = Данные.ИтогоСуммаВыплат + ПремияВсего;
Данные.СреднийЗаработокЗаРасчетныйПериод = УчетСреднегоЗаработкаКлиентСервер.СреднийЗаработок(
Данные.ЗаработокВключаяПремию,
Данные.ИтогоКалендарныхДней);
Данные.КоличествоДнейОтпуска = ПериодОтпуска.КоличествоДней;
Данные.СуммаКВыплатеЗаОтпуск = ?(Данные.КоличествоДнейОтпуска = Неопределено,
0, Данные.СреднийЗаработокЗаРасчетныйПериод * Данные.КоличествоДнейОтпуска);
Обработки.ОбщиеФормыСЭДОФСС.НапечататьОтпускНаПериодЛечения(КонтекстПечати, Данные);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьДолжностьПредставителяСФРПоКадровомуУчету(Запрос, ДанныеПечати)
Отбор = Новый Структура("ДолжностьПредставителяСФР", Справочники.Должности.ПустаяСсылка());
ОтветственныеБезДолжности = ДанныеПечати.НайтиСтроки(Отбор);
Если ОтветственныеБезДолжности.Количество() = 0 Тогда
Возврат;
КонецЕсли;
МассивОрганизаций = Новый Массив;
Для Каждого СтрокаДанных Из ОтветственныеБезДолжности Цикл
Если ЗначениеЗаполнено(СтрокаДанных.ПредставительСФР) И МассивОрганизаций.Найти(СтрокаДанных.Организация) = Неопределено Тогда
МассивОрганизаций.Добавить(СтрокаДанных.Организация);
КонецЕсли;
КонецЦикла;
Для Каждого Организация Из МассивОрганизаций Цикл
ГоловнаяОрганизация = ЗарплатаКадры.ГоловнаяОрганизация(Организация);
КадровыйУчет.СоздатьВТОсновныеСотрудникиФизическихЛицВПериодах(
Запрос.МенеджерВременныхТаблиц, Истина, ГоловнаяОрганизация, "ВТФизлица", "ВТОсновныеСотрудники");
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТОсновныеСотрудники.ФизическоеЛицо КАК ПредставительСФР,
| ВТОсновныеСотрудники.Должность КАК ДолжностьПредставителяСФР,
| ВТОсновныеСотрудники.Период КАК Период,
| ВТОсновныеСотрудники.Организация КАК Организация
|ИЗ
| ВТОсновныеСотрудники КАК ВТОсновныеСотрудники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОтветственныеЛица КАК ВТОтветственныеЛица
| ПО ВТОсновныеСотрудники.ФизическоеЛицо = ВТОтветственныеЛица.ПредставительСФР
| И ВТОсновныеСотрудники.Организация = ВТОтветственныеЛица.Организация
| И ВТОсновныеСотрудники.Период = ВТОтветственныеЛица.Период
|ГДЕ
| ВТОтветственныеЛица.ДолжностьПредставителяСФР = ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка)";
Выборка = Запрос.Выполнить().Выбрать();
Отбор = Новый Структура("Период,Организация,ПредставительСФР");
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(Отбор, Выборка);
Для Каждого СтрокДанных Из ДанныеПечати.НайтиСтроки(Отбор) Цикл
СтрокДанных.ДолжностьПредставителяСФР = Выборка.ДолжностьПредставителяСФР;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
Функция ДатаКомпенсацииОтпуска(ПланируемаяДатаВыплаты, ПериодРегистрации) Экспорт
ДатаКомпенсации = ?(ПланируемаяДатаВыплаты < ПериодРегистрации, ПериодРегистрации,
?(ПланируемаяДатаВыплаты > КонецМесяца(ПериодРегистрации), НачалоДня(КонецМесяца(ПериодРегистрации)), ПланируемаяДатаВыплаты));
Возврат ДатаКомпенсации;
КонецФункции
Функция ДанныеДляРегистрацииВУчетаСтажаПФР(МассивСсылок) Экспорт
ДанныеДляРегистрацииВУчете = Новый Соответствие;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| Отпуск.Сотрудник КАК Сотрудник,
| Отпуск.ДатаНачалаОсновногоОтпуска КАК ДатаНачалаОсновногоОтпуска,
| Отпуск.ДатаОкончанияОсновногоОтпуска КАК ДатаОкончанияОсновногоОтпуска,
| Отпуск.ВидРасчетаОсновногоОтпуска.ВидСтажаПФР2014 КАК ВидСтажаОтпускОсновной,
| Отпуск.ПредоставитьДополнительныйОтпуск КАК ПредоставитьДополнительныйОтпуск,
| Отпуск.Ссылка КАК Ссылка,
| Отпуск.ПредоставитьОсновнойОтпуск КАК ПредоставитьОсновнойОтпуск
|ПОМЕСТИТЬ ВТДанныеДокумента
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.Ссылка В(&МассивСсылок)
|;
|
|
|ВЫБРАТЬ
| ДанныеДокумента.Сотрудник КАК Сотрудник,
| ДанныеДокумента.ДатаНачалаОсновногоОтпуска КАК ДатаНачалаОсновногоОтпуска,
| ДанныеДокумента.ДатаОкончанияОсновногоОтпуска КАК ДатаОкончанияОсновногоОтпуска,
| ДанныеДокумента.ВидСтажаОтпускОсновной КАК ВидСтажаОтпускОсновной,
| ДанныеДокумента.ПредоставитьДополнительныйОтпуск КАК ПредоставитьДополнительныйОтпуск,
| ДанныеДокумента.Ссылка КАК Ссылка,
| ДанныеДокумента.ПредоставитьОсновнойОтпуск КАК ПредоставитьОсновнойОтпуск,
| ОтпускДополнительныеОтпуска.ВидОтпуска КАК ВидОтпуска,
| ОтпускДополнительныеОтпуска.ВидРасчета.ВидСтажаПФР2014 КАК ВидСтажаДополнительныйОтпуск,
| ОтпускДополнительныеОтпуска.ДатаНачала КАК ДатаНачала,
| ОтпускДополнительныеОтпуска.ДатаОкончания КАК ДатаОкончания,
| ОтпускДополнительныеОтпуска.ВидРасчета КАК ВидРасчета
|ИЗ
| ВТДанныеДокумента КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Отпуск.ДополнительныеОтпуска КАК ОтпускДополнительныеОтпуска
| ПО ДанныеДокумента.Ссылка = ОтпускДополнительныеОтпуска.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ОтпускПериодыПриостановкиОтпуска.ДатаНачалаПериода КАК ДатаНачалаПериода,
| ОтпускПериодыПриостановкиОтпуска.ДатаОкончанияПериода КАК ДатаОкончанияПериода,
| ОтпускПериодыПриостановкиОтпуска.Ссылка КАК Ссылка
|ИЗ
| Документ.Отпуск.ПериодыПриостановкиОтпуска КАК ОтпускПериодыПриостановкиОтпуска
|ГДЕ
| ОтпускПериодыПриостановкиОтпуска.Ссылка В(&МассивСсылок)";
Результат = Запрос.ВыполнитьПакет();
Выборка = Результат[1].Выбрать();
ПериодыПриостановкиОтпусков = Результат[2].Выгрузить();
Пока Выборка.СледующийПоЗначениюПоля("Ссылка") Цикл
ДанныеДляРегистрацииВУчетеПоДокументу = УчетСтажаПФР.ДанныеДляРегистрацииВУчетеСтажаПФР();
ДанныеДляРегистрацииВУчете.Вставить(Выборка.Ссылка, ДанныеДляРегистрацииВУчетеПоДокументу);
Отбор = Новый Структура("Ссылка", Выборка.Ссылка);
ПериодыПриостановкиОтпуска = ПериодыПриостановкиОтпусков.Скопировать(Отбор);
Если Выборка.ПредоставитьОсновнойОтпуск Тогда
Если ЗначениеЗаполнено(Выборка.ВидСтажаОтпускОсновной) Тогда
ПериодыНачислений = Новый Массив;
ПериодОтпуска = Новый Структура;
ПериодОтпуска.Вставить("ДатаНачалаПериода", Выборка.ДатаНачалаОсновногоОтпуска);
ПериодОтпуска.Вставить("ДатаОкончанияПериода", Выборка.ДатаОкончанияОсновногоОтпуска);
ПериодыНачислений.Добавить(ПериодОтпуска);
Если ПериодыПриостановкиОтпуска.Количество()> 0 Тогда
ПериодыНачислений = ИсключитьИнтервалыИзПериодов(ПериодОтпуска, ПериодыПриостановкиОтпуска);
КонецЕсли;
Для Каждого ПериодНачислений Из ПериодыНачислений Цикл
ОписаниеПериода = УчетСтажаПФР.ОписаниеРегистрируемогоПериода();
ОписаниеПериода.Сотрудник = Выборка.Сотрудник;
ОписаниеПериода.ДатаНачалаПериода = ПериодНачислений.ДатаНачалаПериода;
ОписаниеПериода.ДатаОкончанияПериода = ПериодНачислений.ДатаОкончанияПериода;
ОписаниеПериода.Состояние = Перечисления.СостоянияСотрудника.ОтпускОсновной;
РегистрируемыйПериод = УчетСтажаПФР.ДобавитьЗаписьВДанныеДляРегистрацииВУчета(ДанныеДляРегистрацииВУчетеПоДокументу, ОписаниеПериода);
УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "ВидСтажаПФР", Выборка.ВидСтажаОтпускОсновной);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если Выборка.ПредоставитьДополнительныйОтпуск Тогда
Пока Выборка.Следующий() Цикл
Если Не ЗначениеЗаполнено(Выборка.ДатаНачала)
Или Не ЗначениеЗаполнено(Выборка.ДатаОкончания)
Или Не ЗначениеЗаполнено(Выборка.ВидРасчета) Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(Выборка.ВидСтажаДополнительныйОтпуск) Тогда
ПериодыНачисленияДопОтпусков = Новый Массив;
ПериодДопОтпуска = Новый Структура;
ПериодДопОтпуска.Вставить("ДатаНачалаПериода", Выборка.ДатаНачала);
ПериодДопОтпуска.Вставить("ДатаОкончанияПериода", Выборка.ДатаОкончания);
ПериодыНачисленияДопОтпусков.Добавить(ПериодДопОтпуска);
Если ПериодыПриостановкиОтпуска.Количество()> 0 Тогда
ПериодыНачисленияДопОтпусков = ИсключитьИнтервалыИзПериодов(ПериодДопОтпуска, ПериодыПриостановкиОтпуска);
КонецЕсли;
Для Каждого ПериодНачисленияДопОтпуска Из ПериодыНачисленияДопОтпусков Цикл
ОписаниеПериода = УчетСтажаПФР.ОписаниеРегистрируемогоПериода();
ОписаниеПериода.Сотрудник = Выборка.Сотрудник;
ОписаниеПериода.ДатаНачалаПериода = ПериодНачисленияДопОтпуска.ДатаНачалаПериода;
ОписаниеПериода.ДатаОкончанияПериода = ПериодНачисленияДопОтпуска.ДатаОкончанияПериода;
ОписаниеПериода.Состояние = СостоянияСотрудников.СостояниеПоВидуОтпуска(Выборка.ВидОтпуска);
РегистрируемыйПериод = УчетСтажаПФР.ДобавитьЗаписьВДанныеДляРегистрацииВУчета(ДанныеДляРегистрацииВУчетеПоДокументу, ОписаниеПериода);
УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "ВидСтажаПФР", Выборка.ВидСтажаДополнительныйОтпуск);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ДанныеДляРегистрацииВУчете;
КонецФункции
Функция РабочиеПериодыДляОтпусков(Объект)
РабочиеПериодыДляОтпусков = Новый Соответствие;
Если Объект.ПредоставитьОсновнойОтпуск Или Объект.ПредоставитьКомпенсациюОсновногоОтпуска Тогда
РабочиеПериодыДляОтпусков.Вставить(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"),
Новый Структура("РабочийПериодС, РабочийПериодПо", Объект.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск, Объект.КонецПериодаЗаКоторыйПредоставляетсяОтпуск));
КонецЕсли;
Если Объект.ПредоставитьДополнительныйОтпуск Тогда
Для каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
РабочиеПериодыДляОтпусков.Вставить(ДополнительныйОтпуск.ВидОтпуска,
Новый Структура("РабочийПериодС, РабочийПериодПо", ДополнительныйОтпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск, ДополнительныйОтпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск));
КонецЦикла;
КонецЕсли;
Возврат РабочиеПериодыДляОтпусков;
КонецФункции
Функция ОснованияДляОтпусков(Объект)
ОснованияДляОтпусков = Новый Соответствие;
Если Объект.ПредоставитьОсновнойОтпуск Или Объект.ПредоставитьКомпенсациюОсновногоОтпуска Тогда
ОснованияДляОтпусков.Вставить(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"), Объект.Основание);
КонецЕсли;
Если Объект.ПредоставитьДополнительныйОтпуск Тогда
Для каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
ОснованияДляОтпусков.Вставить(ДополнительныйОтпуск.ВидОтпуска, ДополнительныйОтпуск.Основание);
КонецЦикла;
КонецЕсли;
Возврат ОснованияДляОтпусков;
КонецФункции
Процедура ЗаполнитьСведенияОПособиях(РеквизитыДляПроведения, ДанныеДляПроведения)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = ДанныеДляПроведения.МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаНачислений.Ссылка,
| ТаблицаНачислений.Начисление,
| ТаблицаНачислений.Сотрудник,
| ТаблицаНачислений.ВидЗанятости КАК ВидЗанятости,
| ЛОЖЬ КАК Сторно,
| ТаблицаНачислений.ОплаченоДней,
| ТаблицаНачислений.Результат,
| 0 КАК РезультатВТомЧислеЗаСчетФБ
|ПОМЕСТИТЬ ВТНачисленияДляУчетаПособий
|ИЗ
| Документ.Отпуск.Начисления КАК ТаблицаНачислений
|ГДЕ
| ТаблицаНачислений.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ТаблицаНачислений.Сторно
| ТОГДА ТаблицаНачислений.СторнируемыйДокумент
| ИНАЧЕ ТаблицаНачислений.Ссылка
| КОНЕЦ,
| ТаблицаНачислений.Начисление,
| ТаблицаНачислений.Сотрудник,
| ТаблицаНачислений.ВидЗанятости,
| ТаблицаНачислений.Сторно,
| ТаблицаНачислений.ОплаченоДней,
| ТаблицаНачислений.Результат,
| 0
|ИЗ
| Документ.Отпуск.НачисленияПерерасчет КАК ТаблицаНачислений
|ГДЕ
| ТаблицаНачислений.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", РеквизитыДляПроведения.Ссылка);
Запрос.Выполнить();
ПособиеПлатитУчастникПилотногоПроекта = ПрямыеВыплатыПособийСоциальногоСтрахования.ПособиеПлатитУчастникПилотногоПроекта(РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации);
УчетПособийСоциальногоСтрахованияРасширенный.ЗаполнитьСведенияОПособиях(ДанныеДляПроведения, ПособиеПлатитУчастникПилотногоПроекта);
КонецПроцедуры
Функция ПериодОтсутствия(ПериодыОтсутствий) Экспорт
ПериодОтсутствия = Новый Структура("НачалоПериода,ОкончаниеПериода", '00010101', '00010101');
Для каждого Период Из ПериодыОтсутствий Цикл
Если ЗначениеЗаполнено(Период.НачалоПериода) Тогда
Если НЕ ЗначениеЗаполнено(ПериодОтсутствия.НачалоПериода) Тогда
ПериодОтсутствия.НачалоПериода = Период.НачалоПериода;
Иначе
ПериодОтсутствия.НачалоПериода = Мин(ПериодОтсутствия.НачалоПериода, Период.НачалоПериода);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Период.ОкончаниеПериода) Тогда
ПериодОтсутствия.ОкончаниеПериода = Макс(ПериодОтсутствия.ОкончаниеПериода, Период.ОкончаниеПериода);
КонецЕсли;
КонецЦикла;
Возврат ПериодОтсутствия;
КонецФункции
Функция ПериодыОтсутствий(Объект) Экспорт
ПериодыОтсутствий = Новый ТаблицаЗначений;
ПериодыОтсутствий.Колонки.Добавить("НачалоПериода");
ПериодыОтсутствий.Колонки.Добавить("ОкончаниеПериода");
КонецИнтервала = Дата(1,1,1);
Если Объект.ПредоставитьОсновнойОтпуск Тогда
ПериодОтсутствия = ПериодыОтсутствий.Добавить();
ПериодОтсутствия.НачалоПериода = Объект.ДатаНачалаОсновногоОтпуска;
ПериодОтсутствия.ОкончаниеПериода = Объект.ДатаОкончанияОсновногоОтпуска;
КонецИнтервала = Макс(КонецИнтервала, ПериодОтсутствия.ОкончаниеПериода);
КонецЕсли;
Если Объект.ПредоставитьДополнительныйОтпуск Тогда
Для каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
ПериодОтсутствия = ПериодыОтсутствий.Добавить();
ПериодОтсутствия.НачалоПериода = ДополнительныйОтпуск.ДатаНачала;
ПериодОтсутствия.ОкончаниеПериода = ДополнительныйОтпуск.ДатаОкончания;
КонецИнтервала = Макс(КонецИнтервала, ПериодОтсутствия.ОкончаниеПериода);
КонецЦикла;
КонецЕсли;
Если Объект.ПредоставитьОтгул Тогда
ПериодОтсутствия = ПериодыОтсутствий.Добавить();
ПериодОтсутствия.НачалоПериода = КонецДня(КонецИнтервала) + 1;
ПериодОтсутствия.ОкончаниеПериода = УчетРабочегоВремениРасширенный.ДатаОкончанияПоГрафикуРаботыСотрудника(Объект.Сотрудник, ПериодОтсутствия.НачалоПериода, Объект.КоличествоДнейОтгула);
КонецЕсли;
Возврат ПериодыОтсутствий;
КонецФункции
Функция ВидыОтпусковОбъекта(ТекущийОбъект) Экспорт
МассивВидовОтпусков = Новый Массив;
Если ТекущийОбъект.ПредоставитьОсновнойОтпуск ИЛИ ТекущийОбъект.ПредоставитьКомпенсациюОсновногоОтпуска Тогда
МассивВидовОтпусков.Добавить(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"));
КонецЕсли;
Если ТекущийОбъект.ПредоставитьДополнительныйОтпуск Тогда
МассивДополнительныхОтпусков = ТекущийОбъект.ДополнительныеОтпуска.Выгрузить().ВыгрузитьКолонку("ВидОтпуска");
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивВидовОтпусков, МассивДополнительныхОтпусков, Истина);
КонецЕсли;
Возврат МассивВидовОтпусков;
КонецФункции
Функция ОписаниеДокумента() Экспорт
ОписаниеДокумента = ЗарплатаКадрыРасширенныйКлиентСервер.СтруктураОписанияДокумента();
ОписаниеДокумента.КраткоеНазваниеИменительныйПадеж = НСтр("ru = 'отпуск'");
ОписаниеДокумента.КраткоеНазваниеРодительныйПадеж = НСтр("ru = 'отпуска'");
ОписаниеДокумента.ИмяРеквизитаСотрудник = "Сотрудник";
ОписаниеДокумента.ИмяРеквизитаОтсутствующийСотрудник = "Сотрудник";
ОписаниеДокумента.ИмяРеквизитаДатаНачалаСобытия = "ДатаНачалаПериодаОтсутствия";
ОписаниеДокумента.ИмяРеквизитаДатаОкончанияСобытия = "ДатаОкончанияПериодаОтсутствия";
Возврат ОписаниеДокумента;
КонецФункции
Функция ДанныеДляБухучетаЗарплатыПервичныхДокументов(Объект) Экспорт
ДанныеДляБухучета = Новый Структура;
ДанныеДляБухучета.Вставить("ДокументОснование", Объект.Ссылка);
ВРОтпускаКомпенсации = Новый Массив;
Если ЗначениеЗаполнено(Объект.ВидРасчетаОсновногоОтпуска) Тогда
ВРОтпускаКомпенсации.Добавить(Объект.ВидРасчетаОсновногоОтпуска);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ВидРасчетаКомпенсацииОсновногоОтпуска) Тогда
ВРОтпускаКомпенсации.Добавить(Объект.ВидРасчетаКомпенсацииОсновногоОтпуска);
КонецЕсли;
Для каждого СтрокаТЧ Из Объект.ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.ВидРасчета) И ВРОтпускаКомпенсации.Найти(СтрокаТЧ.ВидРасчета) = Неопределено Тогда
ВРОтпускаКомпенсации.Добавить(СтрокаТЧ.ВидРасчета);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТЧ.ВидРасчетаКомпенсации) И ВРОтпускаКомпенсации.Найти(СтрокаТЧ.ВидРасчетаКомпенсации) = Неопределено Тогда
ВРОтпускаКомпенсации.Добавить(СтрокаТЧ.ВидРасчетаКомпенсации);
КонецЕсли;
КонецЦикла;
ТаблицаБухучетЗарплаты = ОтражениеЗарплатыВБухучетеРасширенный.ДанныеДляБухучетаЗарплатыПервичныхДокументов(Объект, ВРОтпускаКомпенсации);
ДанныеДляБухучета.Вставить("ТаблицаБухучетЗарплаты", ТаблицаБухучетЗарплаты);
Возврат ДанныеДляБухучета;
КонецФункции
#Область ПараметрыВыбораНачислений
Функция ДополнительныеПараметрыВыбораНачислений(Документ, ПутьКРеквизиту) Экспорт
Результат = Новый Соответствие;
Если ПутьКРеквизиту = "ВидРасчетаОсновногоОтпуска" Тогда
Категория = КатегорияНачисленияОтпуск(Документ);
ИначеЕсли ПутьКРеквизиту = "ВидРасчетаКомпенсацииОсновногоОтпуска" Тогда
Категория = КатегорияНачисленияКомпенсацияОтпуска(Документ);
ИначеЕсли ПутьКРеквизиту = "ВидРасчетаЕдиновременнойВыплатыКОтпуску" Тогда
Категория = КатегорияНачисленияЕдиновременнойВыплаты(Документ);
ИначеЕсли ПутьКРеквизиту = "ВидРасчетаМатериальнойПомощиПриОтпуске" Тогда
Категория = КатегорияНачисленияМатериальнойПомощи(Документ);
ИначеЕсли ПутьКРеквизиту = "ДополнительныеОтпуска.ВидРасчета" Тогда
МассивКатегорий = Новый Массив;
МассивКатегорий.Добавить(КатегорияНачисленияОтпуск(Документ));
МассивКатегорий.Добавить(КатегорияНачисленияОтпускБезОплаты());
Категория = Новый ФиксированныйМассив(МассивКатегорий);
ИначеЕсли ПутьКРеквизиту = "ДополнительныеОтпуска.ВидРасчетаКомпенсации" Тогда
Категория = КатегорияНачисленияКомпенсацияОтпуска(Документ);
КонецЕсли;
Результат.Вставить("Отбор.КатегорияНачисленияИлиНеоплаченногоВремени", Категория);
Если Документ.РасчетДенежногоСодержания
И ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
Результат.Вставить("ОтборНачисленийГосслужбы", Модуль.НачисленияКомпенсацииГосслужащим(Категория, Документ.ДатаНачалаСобытия, ПутьКРеквизиту = "ВидРасчетаКомпенсацииОсновногоОтпуска"));
КонецЕсли;
Возврат Результат;
КонецФункции
Функция КатегорияНачисленияКомпенсацияОтпуска(Документ) Экспорт
Если Документ.РасчетДенежногоСодержания Тогда
Возврат Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДенежноеСодержаниеКомпенсацияОтпуска;
Иначе
Возврат Перечисления.КатегорииНачисленийИНеоплаченногоВремени.КомпенсацияОтпуска;
КонецЕсли;
КонецФункции
Функция КатегорияНачисленияОтпуск(Документ) Экспорт
Если Документ.РасчетДенежногоСодержания Тогда
Возврат Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДенежноеСодержаниеНаПериодОтпуска;
Иначе
Возврат Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаОтпуска;
КонецЕсли;
КонецФункции
Функция КатегорияНачисленияОтпускБезОплаты() Экспорт
Возврат Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОтпускБезОплаты;
КонецФункции
Функция КатегорияНачисленияЕдиновременнойВыплаты(Документ)
Если Документ.РасчетДенежногоСодержания Тогда
Возврат Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ЕдиновременнаяВыплатаКОтпускуГосслужащего;
Иначе
Возврат Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ЕдиновременнаяВыплатаКОтпуску;
КонецЕсли;
КонецФункции
Функция КатегорияНачисленияМатериальнойПомощи(Документ)
Если Документ.РасчетДенежногоСодержания Тогда
Возврат Перечисления.КатегорииНачисленийИНеоплаченногоВремени.МатериальнаяПомощьПриОтпускеГосслужащего;
Иначе
Возврат Перечисления.КатегорииНачисленийИНеоплаченногоВремени.МатериальнаяПомощьПриОтпуске;
КонецЕсли;
КонецФункции
#КонецОбласти
Процедура ЗаполнитьДатуЗапретаРедактирования(ОбъектДокумента) Экспорт
ЗарплатаКадры.ЗаполнитьДатуЗапретаРедактирования(ОбъектДокумента, "ДатаНачалаСобытия");
КонецПроцедуры
Процедура ЗаполнитьДатыЗапрета(ПараметрыОбновления) Экспорт
ОбновлениеВыполнено = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 100
| Отпуск.Ссылка КАК Ссылка,
| Отпуск.Дата КАК Дата
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.ДатаЗапрета = ДАТАВРЕМЯ(1, 1, 1)
|
|УПОРЯДОЧИТЬ ПО
| Отпуск.Дата УБЫВ";
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
ОбновлениеВыполнено = Ложь;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(
ПараметрыОбновления, Выборка.Ссылка.Метаданные().ПолноеИмя(), "Ссылка", Выборка.Ссылка) Тогда
Продолжить;
КонецЕсли;
ОбъектДокумента = Выборка.Ссылка.ПолучитьОбъект();
МенеджерДокумента = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Выборка.Ссылка);
МенеджерДокумента.ЗаполнитьДатуЗапретаРедактирования(ОбъектДокумента);
ОбъектДокумента.ДополнительныеСвойства.Вставить("ОтключитьПроверкуДатыЗапретаИзменения", Истина);
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбъектДокумента);
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
КонецЦикла;
КонецЕсли;
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", ОбновлениеВыполнено);
КонецПроцедуры
Процедура ЗаполнитьДатуРасчетаДенежногоСодержания(ПараметрыОбновления = Неопределено) Экспорт
ОбновлениеВыполнено = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 100
| Отпуск.Ссылка КАК Ссылка,
| Отпуск.ДатаНачалаСобытия КАК ДатаРасчетаДенежногоСодержания
|ИЗ
| Документ.Отпуск КАК Отпуск
|ГДЕ
| Отпуск.ДатаРасчетаДенежногоСодержания = ДАТАВРЕМЯ(1, 1, 1)
| И Отпуск.ДатаНачалаСобытия <> ДАТАВРЕМЯ(1, 1, 1)
|
|УПОРЯДОЧИТЬ ПО
| Отпуск.Дата УБЫВ";
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
ОбновлениеВыполнено = Ложь;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(
ПараметрыОбновления, Выборка.Ссылка.Метаданные().ПолноеИмя(), "Ссылка", Выборка.Ссылка) Тогда
Продолжить;
КонецЕсли;
ОбъектДокумента = Выборка.Ссылка.ПолучитьОбъект();
ОбъектДокумента.ДатаРасчетаДенежногоСодержания = Выборка.ДатаРасчетаДенежногоСодержания;
ОбъектДокумента.ДополнительныеСвойства.Вставить("ОтключитьПроверкуДатыЗапретаИзменения", Истина);
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбъектДокумента);
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
КонецЦикла;
КонецЕсли;
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", ОбновлениеВыполнено);
КонецПроцедуры
Процедура ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления) Экспорт
ПараметрыЗаполнения = ПерерасчетЗарплаты.ПараметрыЗаполненияИсходныхДанныхПерерасчетов();
ПерерасчетЗарплаты.ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления, Метаданные.Документы.Отпуск, ПараметрыЗаполнения);
КонецПроцедуры
Процедура ЗаполнитьДвиженияЗанятостьПозицийШтатногоРасписания(ПараметрыОбновления = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
| ТаблицаДокумента.Ссылка КАК Регистратор,
| ТаблицаДокумента.Сотрудник КАК Сотрудник,
| ТаблицаДокумента.ДатаНачалаПериодаОтсутствия КАК ДатаНачала,
| ТаблицаДокумента.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончания,
| ЕСТЬNULL(ТаблицаДокументаИсправления.Ссылка, ТаблицаДокументаСторнирование.Ссылка) КАК РегистраторИзмерение
|ИЗ
| Документ.Отпуск КАК ТаблицаДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
| ПО ТаблицаДокумента.Сотрудник = КадроваяИсторияСотрудников.Сотрудник
| И (КОНЕЦПЕРИОДА(ТаблицаДокумента.ДатаНачалаПериодаОтсутствия, ДЕНЬ) >= КадроваяИсторияСотрудников.Период)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписания КАК ЗанятостьПозицийШтатногоРасписания
| ПО ТаблицаДокумента.Ссылка = ЗанятостьПозицийШтатногоРасписания.Регистратор
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Отпуск КАК ТаблицаДокументаИсправления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписанияИспр КАК ЗанятостьПозицийШтатногоРасписанияИспр
| ПО ТаблицаДокументаИсправления.Ссылка = ЗанятостьПозицийШтатногоРасписанияИспр.РегистраторИзмерение
| ПО ТаблицаДокумента.Ссылка = ТаблицаДокументаИсправления.ИсправленныйДокумент
| И (ТаблицаДокументаИсправления.Проведен)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СторнированиеНачислений КАК ТаблицаДокументаСторнирование
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписанияИспр КАК ЗанятостьПозицийШтатногоРасписанияСторнирование
| ПО ТаблицаДокументаСторнирование.Ссылка = ЗанятостьПозицийШтатногоРасписанияСторнирование.РегистраторИзмерение
| ПО ТаблицаДокумента.Ссылка = ТаблицаДокументаСторнирование.СторнируемыйДокумент
| И (ТаблицаДокументаСторнирование.Проведен)
|ГДЕ
| ТаблицаДокумента.Проведен
| И ТаблицаДокумента.ОсвобождатьСтавку
| И ЗанятостьПозицийШтатногоРасписания.Регистратор ЕСТЬ NULL
| И ЗанятостьПозицийШтатногоРасписанияИспр.РегистраторИзмерение ЕСТЬ NULL
| И ЗанятостьПозицийШтатногоРасписанияСторнирование.РегистраторИзмерение ЕСТЬ NULL
| И НЕ КадроваяИсторияСотрудников.Сотрудник ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО
| ДатаНачала,
| Регистратор,
| Сотрудник";
Если ПараметрыОбновления = Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПЕРВЫЕ 1000", "");
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
РегистрыСведений.ЗанятостьПозицийШтатногоРасписания.ЗаполнитьДвиженияПоДаннымВыборкиРегистраторов(Выборка, Ложь, ПараметрыОбновления);
КонецПроцедуры
Функция КоличествоДнейОтпускаАвансом(КоличествоДнейОтпуска, ОстатокОтпуска) Экспорт
Остаток = ?(ОстатокОтпуска = Неопределено, 0, ОстатокОтпуска);
Возврат Мин(КоличествоДнейОтпуска, Макс(КоличествоДнейОтпуска - Остаток, 0));
КонецФункции
Функция ОстаткиВРазрезеВидовОтпусков(Сотрудник, ДатаНачалаСобытия, ИсключаемыеРегистраторы) Экспорт
ОстатокОтпуска = ОстаткиОтпусков.ОстатокОтпускаСотрудникаНаДату(Сотрудник, ДатаНачалаСобытия - 86400, ИсключаемыеРегистраторы);
ОстаткиВРазрезеВидовОтпусков = Новый Соответствие;
Для Каждого ДанныеВидаОтпуска Из ОстатокОтпуска.ОстаткиВРазрезеВидовОтпусков Цикл
ОстаткиВРазрезеВидовОтпусков.Вставить(ДанныеВидаОтпуска.ВидЕжегодногоОтпуска, ДанныеВидаОтпуска.КоличествоДней);
КонецЦикла;
Возврат ОстаткиВРазрезеВидовОтпусков;
КонецФункции
Процедура ИсправитьДвиженияЗанятостьПозицийШтатногоРасписания(ПараметрыОбновления = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
| ЗанятостьПозицийШтатногоРасписания.Регистратор КАК Регистратор
|ПОМЕСТИТЬ ВТРегистраторы
|ИЗ
| РегистрСведений.ЗанятостьПозицийШтатногоРасписания КАК ЗанятостьПозицийШтатногоРасписания
|ГДЕ
| ЗанятостьПозицийШтатногоРасписания.КоличествоСтавок = 0
| И ЗанятостьПозицийШтатногоРасписания.ДействуетДо <> ДАТАВРЕМЯ(1, 1, 1)
| И ТИПЗНАЧЕНИЯ(ЗанятостьПозицийШтатногоРасписания.Регистратор) = ТИП(Документ.Отпуск)
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| Регистраторы.Регистратор КАК Регистратор
|ИЗ
| ВТРегистраторы КАК Регистраторы";
Если ПараметрыОбновления = Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПЕРВЫЕ 1000", "");
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбработчик(ПараметрыОбновления);
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПродолжитьОбработчик(ПараметрыОбновления);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаДокумента.Ссылка КАК Регистратор,
| ТаблицаДокумента.Сотрудник КАК Сотрудник,
| ТаблицаДокумента.ДатаНачалаПериодаОтсутствия КАК ДатаНачала,
| ТаблицаДокумента.ДатаОкончанияПериодаОтсутствия КАК ДатаОкончания,
| ЕСТЬNULL(ТаблицаДокументаИсправления.Ссылка, ТаблицаДокументаСторнирование.Ссылка) КАК РегистраторИзмерение
|ИЗ
| ВТРегистраторы КАК Регистраторы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Отпуск КАК ТаблицаДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Отпуск КАК ТаблицаДокументаИсправления
| ПО ТаблицаДокумента.Ссылка = ТаблицаДокументаИсправления.ИсправленныйДокумент
| И (ТаблицаДокументаИсправления.Проведен)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СторнированиеНачислений КАК ТаблицаДокументаСторнирование
| ПО ТаблицаДокумента.Ссылка = ТаблицаДокументаСторнирование.СторнируемыйДокумент
| И (ТаблицаДокументаСторнирование.Проведен)
| ПО Регистраторы.Регистратор = ТаблицаДокумента.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| ДатаНачала,
| Регистратор,
| Сотрудник";
Выборка = Запрос.Выполнить().Выбрать();
РегистрыСведений.ЗанятостьПозицийШтатногоРасписания.ЗаполнитьДвиженияПоДаннымВыборкиРегистраторов(Выборка, Ложь, ПараметрыОбновления);
КонецПроцедуры
Процедура ЗаполнитьКоличествоДнейПриостановки(ДокументОбъект, СтрокаПериодов) Экспорт
ОтпускВРабочихДняхПоДоговору = ОстаткиОтпусков.ОтпускСотрудникаВРабочихДняхПоДоговору(
ДокументОбъект.Сотрудник, ДокументОбъект.ДатаНачалаСобытия);
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(
ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"), ОтпускВРабочихДняхПоДоговору);
СтрокаПериодов.КоличествоДнейПриостановки = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(ДокументОбъект.Сотрудник,
СтрокаПериодов.ДатаНачалаПериода, СтрокаПериодов.ДатаОкончанияПериода,
ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням, ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
КонецПроцедуры
#КонецОбласти
#Область СозданиеНовогоДокумента
Функция ДанныеНовогоДокумента() Экспорт
ДанныеДокумента = Новый Структура();
ДанныеДокумента.Вставить("ПериодРегистрации", НачалоМесяца(ТекущаяДатаСеанса()));
ДанныеДокумента.Вставить("Дата", ТекущаяДатаСеанса());
ДанныеДокумента.Вставить("Организация", Справочники.Организации.ПустаяСсылка());
ДанныеДокумента.Вставить("Сотрудник", Справочники.Сотрудники.ПустаяСсылка());
ДанныеДокумента.Вставить("ОсвобождатьСтавку", Ложь);
ДанныеДокумента.Вставить("ВидРасчетаЕдиновременнойВыплатыКОтпуску", Справочники.Сотрудники.ПустаяСсылка());
ДанныеДокумента.Вставить("ВидРасчетаМатериальнойПомощиПриОтпуске", Справочники.Сотрудники.ПустаяСсылка());
ПараметрыРасчета = Новый Структура();
ПараметрыРасчета.Вставить("УчитыватьМРОТПриОплатеПоСреднемуЗаработку", Ложь);
ПараметрыРасчета.Вставить("ДоначислитьЗарплатуПриНеобходимости", Ложь);
ПараметрыРасчета.Вставить("РассчитатьЗарплату", Ложь);
ПараметрыРасчета.Вставить("РасчетДенежногоСодержания", Неопределено);
ПараметрыРасчета.Вставить("ДоходПолученНаТерриторииРФ", Ложь);
ДанныеДокумента.Вставить("ПараметрыРасчета", ПараметрыРасчета);
Выплата = Новый Структура();
Выплата.Вставить("ПланируемаяДатаВыплаты", '00010101');
Выплата.Вставить("ПорядокВыплаты", Перечисления.ХарактерВыплатыЗарплаты.ПустаяСсылка());
ДанныеДокумента.Вставить("Выплата", Выплата);
ОсновнойОтпуск = Новый Структура();
ОсновнойОтпуск.Вставить("ВидРасчета", ПланыВидовРасчета.Начисления.ПустаяСсылка());
ОсновнойОтпуск.Вставить("ДатаНачала", '00010101');
ОсновнойОтпуск.Вставить("ДатаОкончания", '00010101');
ДанныеДокумента.Вставить("ОсновнойОтпуск", ОсновнойОтпуск);
КомпенсацияОтпуска = Новый Структура();
КомпенсацияОтпуска.Вставить("ВидРасчета", ПланыВидовРасчета.Начисления.ПустаяСсылка());
КомпенсацияОтпуска.Вставить("КоличествоДней", '00010101');
ДанныеДокумента.Вставить("КомпенсацияОтпуска", КомпенсацияОтпуска);
ПериодЗаКоторыйПредоставляетсяОтпуск = Новый Структура();
ПериодЗаКоторыйПредоставляетсяОтпуск.Вставить("Начало", '00010101');
ПериодЗаКоторыйПредоставляетсяОтпуск.Вставить("Окончание", '00010101');
ДанныеДокумента.Вставить("ПериодЗаКоторыйПредоставляетсяОтпуск", ПериодЗаКоторыйПредоставляетсяОтпуск);
ДополнительныеОтпуска = Новый ТаблицаЗначений();
ДополнительныеОтпуска.Колонки.Добавить("ВидОтпуска", Новый ОписаниеТипов("СправочникСсылка.ВидыОтпусков"));
ДополнительныеОтпуска.Колонки.Добавить("ВидРасчета", Новый ОписаниеТипов("ПланВидовРасчетаСсылка.Начисления"));
ДополнительныеОтпуска.Колонки.Добавить("НачалоПериодаЗаКоторыйПредоставляетсяОтпуск", Новый ОписаниеТипов("Дата"));
ДополнительныеОтпуска.Колонки.Добавить("КонецПериодаЗаКоторыйПредоставляетсяОтпуск", Новый ОписаниеТипов("Дата"));
ДополнительныеОтпуска.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
ДополнительныеОтпуска.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
ДополнительныеОтпуска.Колонки.Добавить("ВидРасчетаКомпенсации", Новый ОписаниеТипов("ПланВидовРасчетаСсылка.Начисления"));
ДополнительныеОтпуска.Колонки.Добавить("КоличествоДнейКомпенсации", Новый ОписаниеТипов("Число"));
ДанныеДокумента.Вставить("ДополнительныеОтпуска", ДополнительныеОтпуска);
Отгул = Новый Структура();
Отгул.Вставить("КоличествоДней", 0);
Отгул.Вставить("РасходДней", 0);
Отгул.Вставить("РасходЧасов", 0);
ДанныеДокумента.Вставить("Отгул", Отгул);
Возврат ДанныеДокумента;
КонецФункции
Процедура ЗаполнитьИсходныеДанныеДокумента(Документ, ДанныеНовогоДокумента)
Документ.ПериодРегистрации = ДанныеНовогоДокумента.ПериодРегистрации;
Документ.Дата = ДанныеНовогоДокумента.Дата;
Документ.Организация = ДанныеНовогоДокумента.Организация;
Документ.ПланируемаяДатаВыплаты = ДанныеНовогоДокумента.Выплата.ПланируемаяДатаВыплаты;
Документ.ПорядокВыплаты = ДанныеНовогоДокумента.Выплата.ПорядокВыплаты;
Документ.Сотрудник = ДанныеНовогоДокумента.Сотрудник;
Документ.ОсвобождатьСтавку = ДанныеНовогоДокумента.ОсвобождатьСтавку;
Если ЗначениеЗаполнено(ДанныеНовогоДокумента.ВидРасчетаЕдиновременнойВыплатыКОтпуску) Тогда
Документ.ПредоставитьЕдиновременнуюВыплатуКОтпуску = Истина;
Документ.ВидРасчетаЕдиновременнойВыплатыКОтпуску = ДанныеНовогоДокумента.ВидРасчетаЕдиновременнойВыплатыКОтпуску;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеНовогоДокумента.ВидРасчетаМатериальнойПомощиПриОтпуске) Тогда
Документ.ПредоставитьМатериальнуюПомощьПриОтпуске = Истина;
Документ.ВидРасчетаМатериальнойПомощиПриОтпуске = ДанныеНовогоДокумента.ВидРасчетаМатериальнойПомощиПриОтпуске;
КонецЕсли;
Документ.УчитыватьМРОТПриОплатеПоСреднемуЗаработку = ДанныеНовогоДокумента.ПараметрыРасчета.УчитыватьМРОТПриОплатеПоСреднемуЗаработку;
Документ.ДоначислитьЗарплатуПриНеобходимости = ДанныеНовогоДокумента.ПараметрыРасчета.ДоначислитьЗарплатуПриНеобходимости;
Документ.РассчитатьЗарплату = ДанныеНовогоДокумента.ПараметрыРасчета.РассчитатьЗарплату;
Документ.РасчетДенежногоСодержания = ДанныеНовогоДокумента.ПараметрыРасчета.РасчетДенежногоСодержания;
Документ.ДоходПолученНаТерриторииРФ = ДанныеНовогоДокумента.ПараметрыРасчета.ДоходПолученНаТерриторииРФ;
Если ЗначениеЗаполнено(ДанныеНовогоДокумента.ОсновнойОтпуск.ВидРасчета) Тогда
Документ.ПредоставитьОсновнойОтпуск = Истина;
Документ.ВидРасчетаОсновногоОтпуска = ДанныеНовогоДокумента.ОсновнойОтпуск.ВидРасчета;
Документ.ДатаНачалаОсновногоОтпуска = ДанныеНовогоДокумента.ОсновнойОтпуск.ДатаНачала;
Документ.ДатаОкончанияОсновногоОтпуска = ДанныеНовогоДокумента.ОсновнойОтпуск.ДатаОкончания;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеНовогоДокумента.КомпенсацияОтпуска.ВидРасчета) Тогда
Документ.ПредоставитьКомпенсациюОсновногоОтпуска= Истина;
Документ.ВидРасчетаКомпенсацииОсновногоОтпуска = ДанныеНовогоДокумента.КомпенсацияОтпуска.ВидРасчета;
Документ.КоличествоДнейКомпенсацииОсновногоОтпуска = ДанныеНовогоДокумента.КомпенсацияОтпуска.КоличествоДней;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеНовогоДокумента.Отгул.КоличествоДней) Тогда
Документ.ПредоставитьОтгул = Истина;
Документ.КоличествоДнейОтгула = ДанныеНовогоДокумента.Отгул.КоличествоДней;
Документ.РасходДнейОтгула = ДанныеНовогоДокумента.Отгул.РасходДней;
Документ.РасходЧасовОтгула = ДанныеНовогоДокумента.Отгул.РасходЧасов;
КонецЕсли;
Документ.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = ДанныеНовогоДокумента.ПериодЗаКоторыйПредоставляетсяОтпуск.Начало;
Документ.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = ДанныеНовогоДокумента.ПериодЗаКоторыйПредоставляетсяОтпуск.Окончание;
Для Каждого ДанныеДополнительногоОтпуска Из ДанныеНовогоДокумента.ДополнительныеОтпуска Цикл
СтрокаДокумента = Документ.ДополнительныеОтпуска.Добавить();
СтрокаДокумента.ВидОтпуска = ДанныеДополнительногоОтпуска.ВидОтпуска;
СтрокаДокумента.ВидРасчета = ДанныеДополнительногоОтпуска.ВидРасчета;
СтрокаДокумента.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = ДанныеДополнительногоОтпуска.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск;
СтрокаДокумента.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = ДанныеДополнительногоОтпуска.КонецПериодаЗаКоторыйПредоставляетсяОтпуск;
СтрокаДокумента.ДатаНачала = ДанныеДополнительногоОтпуска.ДатаНачала;
СтрокаДокумента.ДатаОкончания = ДанныеДополнительногоОтпуска.ДатаОкончания;
СтрокаДокумента.ВидРасчетаКомпенсации = ДанныеДополнительногоОтпуска.ВидРасчетаКомпенсации;
СтрокаДокумента.КоличествоДнейКомпенсации = ДанныеДополнительногоОтпуска.КоличествоДнейКомпенсации;
КонецЦикла;
КонецПроцедуры
Функция СоздатьНовыйДокумент(ДанныеНовогоДокумента) Экспорт
Документ = Документы.Отпуск.СоздатьДокумент();
ЗаполнитьИсходныеДанныеДокумента(Документ, ДанныеНовогоДокумента);
ЗаполнитьДанныеСотрудника(Документ);
УстановитьДатуНачалаСобытия(Документ);
ОтпускВРабочихДняхПоДоговору = ОстаткиОтпусков.ОтпускСотрудникаВРабочихДняхПоДоговору(Документ.Сотрудник, Документ.ДатаНачалаСобытия);
ОбновитьДлительностьИнтервалов(Документ, ОтпускВРабочихДняхПоДоговору);
ОстатокОтпускаСотрудника = РассчитатьОстаткиОтпусков(Документ);
УстановитьКоличествоДнейОсновногоОтпуска(Документ, ОтпускВРабочихДняхПоДоговору);
УстановитьКоличествоДнейДополнительныхОтпусков(Документ, ОтпускВРабочихДняхПоДоговору);
УстановитьКоличествоДнейОтпускаАвансом(Документ, ОстатокОтпускаСотрудника);
УстановитьОбщийПериодОтпуска(Документ);
Если ДанныеНовогоДокумента.ПараметрыРасчета.РасчетДенежногоСодержания = Неопределено Тогда
Документ.РасчетДенежногоСодержания = Ложь;
ЗарплатаКадрыРасширенный.УстановитьВариантРасчетаДокументаПоСреднемуЗаработку(Документ);
КонецЕсли;
ЗаполнитьПериодРасчетаСреднегоЗаработка(Документ);
Возврат Документ;
КонецФункции
Процедура ЗаполнитьПериодРасчетаСреднегоЗаработка(Объект) Экспорт
Если Объект.ФиксПериодРасчетаСреднегоЗаработка Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ДатаНачалаСобытия)
Или Не ЗначениеЗаполнено(Объект.Сотрудник) Тогда
Возврат;
КонецЕсли;
ВидРасчета = ?(ТолькоКомпенсация(Объект), Объект.ВидРасчетаКомпенсацииОсновногоОтпуска, Объект.ВидРасчетаОсновногоОтпуска);
ПериодРасчетаСреднего = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(Объект.ДатаНачалаСобытия, Объект.Сотрудник, ВидРасчета);
Если ПериодРасчетаСреднегоЗаработкаИзменился(Объект, ПериодРасчетаСреднего) Тогда
Объект.ПериодРасчетаСреднегоЗаработкаНачало = ПериодРасчетаСреднего.ДатаНачала;
Объект.ПериодРасчетаСреднегоЗаработкаОкончание = ПериодРасчетаСреднего.ДатаОкончания;
ОбновитьДанныеДляРасчетаСреднего = Истина;
КонецЕсли;
КонецПроцедуры
Функция ПериодРасчетаСреднегоЗаработкаИзменился(Объект, ПериодРасчетаСреднего)
Возврат НачалоМесяца(Объект.ПериодРасчетаСреднегоЗаработкаНачало) <> НачалоМесяца(ПериодРасчетаСреднего.ДатаНачала)
Или НачалоМесяца(Объект.ПериодРасчетаСреднегоЗаработкаОкончание) <> НачалоМесяца(ПериодРасчетаСреднего.ДатаОкончания);
КонецФункции
Функция ТолькоКомпенсация(Объект) Экспорт
Возврат Объект.ПредоставитьКомпенсациюОсновногоОтпуска И Не Объект.ПредоставитьОсновнойОтпуск И Не Объект.ПредоставитьДополнительныйОтпуск
Или (Не Объект.ПредоставитьОсновнойОтпуск И Объект.ПредоставитьДополнительныйОтпуск
И Объект.ДополнительныеОтпуска.Итог("КоличествоДней") = 0 И Объект.ДополнительныеОтпуска.Итог("КоличествоДнейКомпенсации") > 0);
КонецФункции
Процедура ОбновитьДлительностьИнтервалов(Объект, ОтпускВРабочихДняхПоДоговору) Экспорт
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"), ОтпускВРабочихДняхПоДоговору);
Объект.КоличествоДнейОсновногоОтпуска = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(Объект.Сотрудник, Объект.ДатаНачалаОсновногоОтпуска, Объект.ДатаОкончанияОсновногоОтпуска,ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням, ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
Для каждого Строка Из Объект.ДополнительныеОтпуска Цикл
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(Строка.ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
Строка.КоличествоДней = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(Объект.Сотрудник, Строка.ДатаНачала, Строка.ДатаОкончания, ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням, ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
КонецЦикла;
КонецПроцедуры
Функция РассчитатьОстаткиОтпусков(Объект) Экспорт
Если Не ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении") Тогда
Возврат Неопределено;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Сотрудник) Или Не ЗначениеЗаполнено(Объект.ДатаНачалаСобытия) Тогда
Возврат Неопределено;
КонецЕсли;
ИсключаемыеРегистраторы = Новый Массив;
ИсключаемыеРегистраторы.Добавить(Объект.Ссылка);
ИсключаемыеРегистраторы.Добавить(Объект.ИсправленныйДокумент);
ОстаткиВРазрезеВидовОтпусков = Документы.Отпуск.ОстаткиВРазрезеВидовОтпусков(Объект.Сотрудник, Объект.ДатаНачалаСобытия, ИсключаемыеРегистраторы);
Возврат ОстаткиВРазрезеВидовОтпусков;
КонецФункции
Процедура УстановитьКоличествоДнейОтпускаАвансом(Объект, ОстатокОтпускаСотрудника) Экспорт
УстановитьКоличествоДнейОсновногоОтпускаАвансом(Объект, ОстатокОтпускаСотрудника);
ДополнительныеОтпускаСотрудника = Объект.ДополнительныеОтпуска.Выгрузить( , "ВидОтпуска").ВыгрузитьКолонку("ВидОтпуска");
МассивДополнительныхОтпусков = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ДополнительныеОтпускаСотрудника);
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивДополнительныхОтпусков, Справочники.ВидыОтпусков.ПустаяСсылка());
ЕжегодностьОтпусков = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивДополнительныхОтпусков, "ОтпускЯвляетсяЕжегодным");
Для Каждого СтрокаОтпуска Из Объект.ДополнительныеОтпуска Цикл
УстановитьКоличествоДнейДополнительногоОтпускаАвансом(СтрокаОтпуска, ОстатокОтпускаСотрудника, ЕжегодностьОтпусков[СтрокаОтпуска.ВидОтпуска]);
КонецЦикла;
КонецПроцедуры
Процедура УстановитьКоличествоДнейОсновногоОтпускаАвансом(Объект, ОстатокОтпускаСотрудника) Экспорт
Если ОстатокОтпускаСотрудника = Неопределено Тогда
Объект.КоличествоДнейОсновногоОтпускаАвансом = 0;
Возврат;
КонецЕсли;
ОстатокОтпуска = ОстатокОтпускаСотрудника.Получить(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"));
Объект.КоличествоДнейОсновногоОтпускаАвансом = КоличествоДнейОтпускаАвансом(Объект.КоличествоДнейОсновногоОтпуска, ОстатокОтпуска);
КонецПроцедуры
Процедура УстановитьКоличествоДнейДополнительныхОтпусков(Объект, ОтпускВРабочихДняхПоДоговору)
Для Каждого СтрокаОтпуска Из Объект.ДополнительныеОтпуска Цикл
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(СтрокаОтпуска.ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
СтрокаОтпуска.КоличествоДней = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(
Объект.Сотрудник,
СтрокаОтпуска.ДатаНачала,
СтрокаОтпуска.ДатаОкончания,
ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням,
ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
КонецЦикла;
КонецПроцедуры
Процедура УстановитьКоличествоДнейДополнительногоОтпускаАвансом(СтрокаОтпуска, ОстатокОтпускаСотрудника, ЭтоЕжегодныйОтпуск) Экспорт
Если Не ЭтоЕжегодныйОтпуск Тогда
СтрокаОтпуска.КоличествоДнейАвансом = 0;
Возврат;
КонецЕсли;
Если ОстатокОтпускаСотрудника = Неопределено Тогда
СтрокаОтпуска.КоличествоДнейАвансом = 0;
Возврат;
КонецЕсли;
ОстатокОтпуска = ОстатокОтпускаСотрудника.Получить(СтрокаОтпуска.ВидОтпуска);
СтрокаОтпуска.КоличествоДнейАвансом = КоличествоДнейОтпускаАвансом(СтрокаОтпуска.КоличествоДней, ОстатокОтпуска);
КонецПроцедуры
Процедура УстановитьДатуНачалаСобытия(Объект) Экспорт
Объект.ДатаНачалаСобытия = Неопределено;
Если Объект.ПредоставитьОсновнойОтпуск Тогда
Если ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска) Тогда
Объект.ДатаНачалаСобытия = Объект.ДатаНачалаОсновногоОтпуска;
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
Если Объект.ПредоставитьДополнительныйОтпуск И Объект.ДополнительныеОтпуска.Количество() > 0 Тогда
Для каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) Тогда
Если Не ЗначениеЗаполнено(Объект.ДатаНачалаСобытия) Или Объект.ДатаНачалаСобытия > ДополнительныйОтпуск.ДатаНачала Тогда
Объект.ДатаНачалаСобытия = ДополнительныйОтпуск.ДатаНачала;
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(ДополнительныйОтпуск.КоличествоДнейКомпенсации) Тогда
Продолжить;
Иначе
Объект.ДатаНачалаСобытия = Неопределено;
Возврат;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ДатаНачалаСобытия) Тогда
Если Объект.ПредоставитьКомпенсациюОсновногоОтпуска И ЗначениеЗаполнено(Объект.ИсправленныйДокумент) Тогда
Объект.ДатаНачалаСобытия = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ИсправленныйДокумент, "ДатаНачалаСобытия");
ИначеЕсли ТолькоКомпенсация(Объект) Тогда
ДатаВыплаты = ?(ЗначениеЗаполнено(Объект.ПланируемаяДатаВыплаты), Объект.ПланируемаяДатаВыплаты + 86400, Объект.Дата);
Объект.ДатаНачалаСобытия = Документы.Отпуск.ДатаКомпенсацииОтпуска(ДатаВыплаты, Объект.ПериодРегистрации);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ДатаНачалаСобытия) Тогда
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Объект.Сотрудник, "ДатаПриема");
Если КадровыеДанные.Количество() > 0
И ЗначениеЗаполнено(КадровыеДанные[0].ДатаПриема)
И НачалоМесяца(КадровыеДанные[0].ДатаПриема) = НачалоМесяца(Объект.ПериодРегистрации)
И КадровыеДанные[0].ДатаПриема > Объект.ПериодРегистрации Тогда
Объект.ДатаНачалаСобытия = КадровыеДанные[0].ДатаПриема;
Иначе
Объект.ДатаНачалаСобытия = Объект.ПериодРегистрации;
КонецЕсли;
КонецЕсли;
Объект.ДатаРасчетаДенежногоСодержания = Объект.ДатаНачалаСобытия;
КонецПроцедуры
Процедура УстановитьКоличествоДнейОсновногоОтпуска(Объект, ОтпускВРабочихДняхПоДоговору) Экспорт
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"), ОтпускВРабочихДняхПоДоговору);
Если ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска) И ЗначениеЗаполнено(Объект.ДатаОкончанияОсновногоОтпуска)
И Объект.ДатаНачалаОсновногоОтпуска <= Объект.ДатаОкончанияОсновногоОтпуска Тогда
Объект.КоличествоДнейОсновногоОтпуска = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(Объект.Сотрудник, Объект.ДатаНачалаОсновногоОтпуска, Объект.ДатаОкончанияОсновногоОтпуска, ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням, ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
ИначеЕсли ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска)
И ЗначениеЗаполнено(Объект.КоличествоДнейОсновногоОтпуска) Тогда
Объект.ДатаОкончанияОсновногоОтпуска = ОстаткиОтпусковКлиентСервер.ДатаОкончанияОтпуска(Объект.Сотрудник, Объект.ДатаНачалаОсновногоОтпуска, Объект.КоличествоДнейОсновногоОтпуска, ОписаниеВидаОтпуска);
Иначе
Объект.КоличествоДнейОсновногоОтпуска = 0;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьОбщийПериодОтпуска(Объект) Экспорт
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьОбщийПериодОтпускаВДокументах") Тогда
Возврат;
КонецЕсли;
Объект.НачалоОтпуска = Неопределено;
Объект.ОкончаниеОтпуска = Неопределено;
Если Объект.ПредоставитьОсновнойОтпуск
И ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска)
И ЗначениеЗаполнено(Объект.ДатаОкончанияОсновногоОтпуска) Тогда
Объект.НачалоОтпуска = Объект.ДатаНачалаОсновногоОтпуска;
Объект.ОкончаниеОтпуска = Объект.ДатаОкончанияОсновногоОтпуска;
КонецЕсли;
Если Объект.ПредоставитьДополнительныйОтпуск Тогда
Для Каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
Если Не ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала)
Или Не ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания) Тогда
Продолжить;
КонецЕсли;
Объект.НачалоОтпуска = ?(ЗначениеЗаполнено(Объект.НачалоОтпуска), Мин(Объект.НачалоОтпуска, ДополнительныйОтпуск.ДатаНачала), ДополнительныйОтпуск.ДатаНачала);
Объект.ОкончаниеОтпуска = ?(ЗначениеЗаполнено(Объект.ОкончаниеОтпуска), Макс(Объект.ОкончаниеОтпуска, ДополнительныйОтпуск.ДатаОкончания), ДополнительныйОтпуск.ДатаОкончания);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДанныеСотрудника(Документ)
Документ.ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ.Сотрудник, "ФизическоеЛицо");
КонецПроцедуры
#КонецОбласти
#Область ЗаполнениеИРасчет
Функция ОписаниеДокументаРасчета() Экспорт
Описание = РасчетДокументовБЗК.ОписаниеДокумента();
Описание.МесяцНачисленияИмя = "ПериодРегистрации";
Описание.НачисленияПерерасчетИмя = "НачисленияПерерасчет";
Описание.ДатаНачалаСобытияИмя = "ДатаНачалаСобытия";
Описание.СпособыРасчетаСреднегоЗаработка = СпособыРасчетаСреднегоЗаработка();
Возврат Описание;
КонецФункции
Процедура ОчиститьРассчитанныеДанные(ДанныеОбъекта, ПерезаполнитьНачисления = Истина, ОчищатьДенежноеСодержание = Истина) Экспорт
Если ПерезаполнитьНачисления Тогда
ДанныеОбъекта.Начисления.Очистить();
ДанныеОбъекта.НачисленияПерерасчет.Очистить();
ДанныеОбъекта.НачисленияПерерасчетНулевыеСторно.Очистить();
ДанныеОбъекта.РаспределениеПоТерриториямУсловиямТруда.Очистить();
ДанныеОбъекта.РаспределениеРезультатовНачислений.Очистить();
Если ОчищатьДенежноеСодержание Тогда
ДанныеОбъекта.Показатели.Очистить();
Иначе
Показателей = ДанныеОбъекта.Показатели.Количество();
Для Сч = 1 По Показателей Цикл
СтрокаПоказателя = ДанныеОбъекта.Показатели[Показателей-Сч];
Если ДанныеОбъекта.ДенежноеСодержание.Найти(СтрокаПоказателя.ИдентификаторСтрокиВидаРасчета,"ИдентификаторСтрокиВидаРасчета") = Неопределено Тогда
ДанныеОбъекта.Показатели.Удалить(СтрокаПоказателя);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ДанныеОбъекта.ПогашениеЗаймов.Очистить();
ДанныеОбъекта.УправленческиеНачисления.Очистить();
КонецЕсли;
ДанныеОбъекта.Удержания.Очистить();
ДанныеОбъекта.РаспределениеРезультатовУдержаний.Очистить();
ДанныеОбъекта.НДФЛ.Очистить();
ДанныеОбъекта.КорректировкиВыплаты.Очистить();
ДанныеОбъекта.ПримененныеВычетыНаДетейИИмущественные.Очистить();
КонецПроцедуры
Функция НачальныйПериодРасчетаЗарплаты(ДанныеОбъекта) Экспорт
Результат = Новый Структура();
Результат.Вставить("ДатаНачала", ДанныеОбъекта.ПериодРегистрации);
Результат.Вставить("ЭтоПериодИсправленногоДокумента", Ложь);
Результат.Вставить("ВыполнялсяРасчетЗарплаты", Неопределено);
Если ЗначениеЗаполнено(ДанныеОбъекта.ИсправленныйДокумент) Тогда
ПервичныйДокумент = ИсправлениеДокументовЗарплатаКадры.ПервыйДокументЦепочкиИсправлений(ДанныеОбъекта.ИсправленныйДокумент);
Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПервичныйДокумент, "ПериодРегистрации, РассчитатьЗарплату");
Результат.ЭтоПериодИсправленногоДокумента = Истина;
Результат.ДатаНачала = Значения.ПериодРегистрации;
Результат.ВыполнялсяРасчетЗарплаты = Значения.РассчитатьЗарплату;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ПериодРасчетаЗарплатыДоНачалаОтпуска(ДанныеОбъекта, НачалоПериода = Неопределено) Экспорт
Если Не ДанныеОбъекта.РассчитатьЗарплату Тогда
Возврат Неопределено;
КонецЕсли;
Если НачалоПериода = Неопределено Тогда
НачалоПериода = НачальныйПериодРасчетаЗарплаты(ДанныеОбъекта).ДатаНачала;
КонецЕсли;
Если ДанныеОбъекта.ДатаНачалаСобытия <= НачалоПериода Тогда
Возврат Неопределено;
КонецЕсли;
ПериодВыявления = Новый СтандартныйПериод(
НачалоПериода,
Мин(КонецМесяца(НачалоПериода), НачалоДня(ДанныеОбъекта.ДатаНачалаСобытия) - 1));
Возврат ПериодВыявления;
КонецФункции
Функция ОтпускНачинаетсяВСледующемМесяце(ДанныеДокумента, НачалоПериода) Экспорт
Возврат ДанныеДокумента.ДатаНачалаСобытия > КонецМесяца(НачалоПериода);
КонецФункции
Функция СпособыРасчетаСреднегоЗаработка() Экспорт
СпособыРасчетаСреднегоЗаработка = Новый Структура;
СпособыРасчетаСреднегоЗаработка.Вставить("СреднийЗаработок", Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням);
СпособыРасчетаСреднегоЗаработка.Вставить("СреднийЗаработокПоРабочимДням", Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоШестидневке);
Возврат СпособыРасчетаСреднегоЗаработка;
КонецФункции
Функция ОписаниеТаблицыНачислений() Экспорт
ОписаниеТаблицы = РасчетДокументовБЗК.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "Начисления";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыПерерасчетов() Экспорт
ОписаниеТаблицы = РасчетДокументовБЗК.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияПерерасчет";
ОписаниеТаблицы.НомерТаблицы = 1;
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыПерерасчетовНулевыеСторно() Экспорт
ОписаниеТаблицы = РасчетДокументовБЗК.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияПерерасчетНулевыеСторно";
ОписаниеТаблицы.НомерТаблицы = 1.1;
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыУдержаний() Экспорт
ОписаниеТаблицы = РасчетДокументовБЗК.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "Удержания";
ОписаниеТаблицы.ИмяРеквизитаВидРасчета = "Удержание";
ОписаниеТаблицы.НомерТаблицы = 2;
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыНДФЛ() Экспорт
ОписаниеТаблицы = РасчетДокументовБЗК.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НДФЛ";
ОписаниеТаблицы.НомерТаблицы = 3;
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтрокиНДФЛ";
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыПогашениеЗаймов() Экспорт
ОписаниеТаблицы = РасчетДокументовБЗК.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "ПогашениеЗаймов";
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.НомерТаблицы = 5;
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтроки";
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыКорректировкиВыплаты() Экспорт
ОписаниеТаблицы = РасчетДокументовБЗК.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "КорректировкиВыплаты";
ОписаниеТаблицы.НомерТаблицы = РасчетЗарплатыКлиентСервер.НомерТаблицыКорректировкиВыплаты();
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтроки";
Возврат ОписаниеТаблицы;
КонецФункции
Функция ПараметрыРасчета() Экспорт
ПараметрыРасчета = Новый Структура;
ПараметрыРасчета.Вставить("СохранятьИсправления", Истина);
ПараметрыРасчета.Вставить("ПерезаполнитьНачисления", Истина);
ПараметрыРасчета.Вставить("ОбновитьДанныеДляРасчетаСреднего", Ложь);
ПараметрыРасчета.Вставить("ОбновитьРасчетДенежногоСодержания", Ложь);
ПараметрыРасчета.Вставить("СкорректированСреднийЗаработок", Ложь);
Возврат ПараметрыРасчета;
КонецФункции
#КонецОбласти
#КонецЕсли