#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Процедура ПровестиПоУчетам(ДокументСсылка, РежимПроведения, Отказ, ВидыУчетов = Неопределено, Движения = Неопределено, Объект = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
СтруктураВидовУчета = ПроведениеСервер.СтруктураВидовУчета();
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвиженийПоВидамУчета(РежимПроведения, ДокументСсылка, СтруктураВидовУчета, ВидыУчетов, Движения, Объект, Отказ);
РеквизитыДляПроведения = РеквизитыДляПроведения(ДокументСсылка);
Кэш = Новый Соответствие;
ДанныеДляПроведения = ДанныеДляПроведения(РеквизитыДляПроведения, СтруктураВидовУчета, Кэш);
РезультатИсправления = ИсправлениеДокументовЗарплатаКадры.ПриПроведенииИсправления(ДокументСсылка,
Движения, РежимПроведения, Отказ, РеквизитыДляПроведения, СтруктураВидовУчета, Объект);
Если РеквизитыДляПроведения.ДокументРассчитан Тогда
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
РасчетЗарплатыРасширенный.СформироватьДвиженияНачислений(Движения, Отказ, РеквизитыДляПроведения.Организация, КонецМесяца(РеквизитыДляПроведения.ПериодРегистрации), ДанныеДляПроведения.Начисления, ДанныеДляПроведения.ПоказателиНачислений, Истина);
ПерерасчетЗарплаты.СформироватьДвиженияИсходныеДанныхПерерасчетов(Движения, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.Начисления);
РасчетЗарплатыРасширенный.СформироватьДвиженияРаспределенияПоТерриториямУсловиямТруда(Движения, Отказ, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.РаспределениеПоТерриториямУсловиямТруда);
РасчетЗарплатыРасширенный.СформироватьДвиженияРаспределенияРезультатовНачислений(Движения, Отказ, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.РаспределениеРезультатовНачислений);
РасчетЗарплатыРасширенный.СформироватьДвиженияУдержаний(Движения, Отказ, РеквизитыДляПроведения.Организация, КонецМесяца(РеквизитыДляПроведения.ПериодРегистрации), ДанныеДляПроведения.Удержания, ДанныеДляПроведения.ПоказателиУдержаний);
ИсполнительныеЛисты.СформироватьУдержанияПоИсполнительнымДокументам(Движения, ДанныеДляПроведения.УдержанияПоИсполнительнымДокументам);
РасчетЗарплатыРасширенный.СформироватьДвиженияУдержанийДоПределаПоСотрудникам(Движения, Отказ, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.УдержанияДоПределаПоСотрудникам);
РасчетЗарплатыРасширенный.СформироватьЗадолженностьПоУдержаниямФизическихЛиц(Движения, ДанныеДляПроведения.ЗадолженностьПоУдержаниям);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.СформироватьДвиженияНачислений(Движения, Отказ, ДанныеДляПроведения, РеквизитыДляПроведения.ПериодРегистрации);
КонецЕсли;
ПроверитьПересечениеФактическогоПериодаДействия(ДокументСсылка, Отказ);
ДанныеДляПроведенияУчетЗарплаты = ОтражениеЗарплатыВУчете.ОписаниеДанныеДляПроведения();
ДанныеДляПроведенияУчетЗарплаты.Движения = Движения;
ДанныеДляПроведенияУчетЗарплаты.Организация = РеквизитыДляПроведения.Организация;
ДанныеДляПроведенияУчетЗарплаты.ПериодРегистрации = РеквизитыДляПроведения.ПериодРегистрации;
ДанныеДляПроведенияУчетЗарплаты.ПланируемаяДатаВыплаты = РеквизитыДляПроведения.ПланируемаяДатаВыплаты;
ДанныеДляПроведенияУчетЗарплаты.ПорядокВыплаты = РеквизитыДляПроведения.ПорядокВыплаты;
ДанныеДляПроведенияУчетЗарплаты.МенеджерВременныхТаблиц = ДанныеДляПроведения.МенеджерВременныхТаблиц;
УчетНачисленнойЗарплаты.ЗарегистрироватьНачисления(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.НачисленияПоСотрудникам, Неопределено);
УчетНачисленнойЗарплаты.ЗарегистрироватьОтработанноеВремя(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.ОтработанноеВремяПоСотрудникам, Истина);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ЗарегистрироватьНачисленияУдержания(Движения, Отказ, ДанныеДляПроведения, РеквизитыДляПроведения.ПериодРегистрации,
РеквизитыДляПроведения.ПорядокВыплаты, РеквизитыДляПроведения.ПланируемаяДатаВыплаты);
Модуль.ЗарегистрироватьОтработанноеВремя(Движения, Отказ, ДанныеДляПроведения, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты);
КонецЕсли;
УчетНачисленнойЗарплаты.СоздатьВТРаспределениеНачисленийТекущегоДокумента(ДанныеДляПроведенияУчетЗарплаты);
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
ДанныеДляПроведения.НачисленияПоСотрудникам, ДанныеДляПроведения.УдержанияПоСотрудникам, Неопределено);
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
Неопределено, ДанныеДляПроведения.УдержанияЗаймов, Неопределено);
ДатаОперацииПоНалогам = НачалоДня(РеквизитыДляПроведения.ДатаНачалаСобытия) - 1;
УчетНДФЛ.СформироватьДоходыНДФЛПоКодамДоходовИзТаблицыЗначений(Движения, Отказ, РеквизитыДляПроведения.Организация, ДатаОперацииПоНалогам,
ДанныеДляПроведения.МатериальнаяВыгода, Ложь, , ДокументСсылка, РеквизитыДляПроведения.ДоходПолученНаТерриторииРФ);
ЗасчитыватьДанныеАвансов = РеквизитыДляПроведения.РассчитатьЗарплату;
Если ЗасчитыватьДанныеАвансов
И РезультатИсправления.ИсправлениеВТекущемПериоде
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РеквизитыДляПроведения.ИсправленныйДокумент, "РассчитатьЗарплату") Тогда
ЗасчитыватьДанныеАвансов = Ложь
КонецЕсли;
УчетНДФЛРасширенный.ЗарегистрироватьДоходыИСуммыНДФЛПоВременнойТаблицеНачислений(
РеквизитыДляПроведения.Ссылка, Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.Дата,
РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты, РеквизитыДляПроведения.ПланируемаяДатаВыплаты, ДанныеДляПроведения,
Истина, Истина, РеквизитыДляПроведения.ДоходПолученНаТерриторииРФ, , , "ВТНачисленияДляУчетаДоходовНДФЛ", ЗасчитыватьДанныеАвансов);
РасчетЗарплатыРасширенный.СформироватьДвиженияКорректировкиВыплатыПоВременнойТаблицеНачислений(Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты, ДанныеДляПроведения, Истина, Истина);
УчетНДФЛ.СформироватьНалогиВычеты(Движения, Отказ, РеквизитыДляПроведения.Организация, ДатаОперацииПоНалогам, ДанныеДляПроведения.НалогНаМатериальнуюВыгоду);
УчетНачисленнойЗарплатыРасширенный.ЗарегистрироватьУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ, ДанныеДляПроведения.УдержанияПоСотрудникам);
УчетНачисленнойЗарплаты.ПодготовитьДанныеНДФЛКРегистрации(ДанныеДляПроведения.НалогНаМатериальнуюВыгоду, РеквизитыДляПроведения.Организация, ДатаОперацииПоНалогам);
УчетНачисленнойЗарплатыРасширенный.ЗарегистрироватьЗаймы(ДанныеДляПроведенияУчетЗарплаты, Отказ,
ДанныеДляПроведения.УдержанияЗаймов, ДанныеДляПроведения.НалогНаМатериальнуюВыгоду);
УчетСтраховыхВзносов.СформироватьПособия(Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.Пособия, Неопределено);
ЗаймыСотрудникам.ЗарегистрироватьВзаиморасчетыПоЗаймам(Движения, ДанныеДляПроведения.ВзаиморасчетыПоЗаймам, Отказ);
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
Неопределено, Неопределено, ДанныеДляПроведения.НДФЛПоСотрудникам);
Если ЗасчитыватьДанныеАвансов Тогда
УчетНачисленнойЗарплатыРасширенный.ЗаполнитьЗачетАвансаНДФЛВНаборахЗаписей(Движения, РеквизитыДляПроведения.ПериодРегистрации);
КонецЕсли;
ОтражениеЗарплатыВБухучетеРасширенный.ЗарегистрироватьНачисленияУдержания(ДанныеДляПроведенияУчетЗарплаты, Отказ,
Неопределено, Неопределено, ДанныеДляПроведения.НалогНаМатериальнуюВыгоду);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
Модуль.ЗарегистрироватьНачисленияСоставМесячногоДенежногоСодержания(Движения, Отказ, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.СоставМесячногоДенежногоСодержания);
КонецЕсли;
КонецЕсли;
Если СтруктураВидовУчета.СтраховыеВзносы Тогда
УчетСтраховыхВзносов.СформироватьСведенияОДоходахСтраховыеВзносы(Движения, Отказ, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.МенеджерВременныхТаблиц, Ложь, Истина, РеквизитыДляПроведения.Ссылка);
КонецЕсли;
Если СтруктураВидовУчета.ДанныеДляРасчетаСреднего Тогда
ПараметрыКорректировок = УчетПособийСоциальногоСтрахованияРасширенный.ПараметрыЗаписиКорректировокСреднегоЗаработкаФСС();
ЗаполнитьТаблицыКорректировок(РеквизитыДляПроведения.Ссылка, ПараметрыКорректировок);
УчетПособийСоциальногоСтрахованияРасширенный.ЗаписатьКорректировкиСреднегоЗаработкаФСС(
РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.Сотрудник, РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаНачало, РеквизитыДляПроведения.ПериодРасчетаСреднегоЗаработкаОкончание, ПараметрыКорректировок);
УчетСреднегоЗаработка.ЗарегистрироватьДанныеСреднегоЗаработка(Движения, Отказ, ДанныеДляПроведения.НачисленияДляСреднегоЗаработка);
КонецЕсли;
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
ПараметрыДвиженийОтпусков = ОстаткиОтпусков.ПараметрыДляСформироватьДвиженияФактическихОтпусков();
ПараметрыДвиженийОтпусков.ДатаРегистрации = РеквизитыДляПроведения.Дата;
ПараметрыДвиженийОтпусков.Начисления = ДанныеДляПроведения.Начисления;
ПараметрыДвиженийОтпусков.ПериодНачисления = РеквизитыДляПроведения.ПериодРегистрации;
ОстаткиОтпусков.СформироватьДвиженияФактическихОтпусков(Движения, Отказ, ПараметрыДвиженийОтпусков);
ОстаткиОтпусков.СформироватьДвиженияПериодовОтпусков(Движения, РеквизитыДляПроведения.Ссылка, ДанныеДляПроведения.ПериодыОтпусков);
СостоянияСотрудников.ЗарегистрироватьСостоянияСотрудников(Движения, РеквизитыДляПроведения.Ссылка, ДанныеДляПроведения.ДанныеСостоянийСотрудников);
ПериодыСтажаПФР = ПериодыСтажаПФР(РеквизитыДляПроведения, Кэш);
УчетСтажаПФР.ЗарегистрироватьПериодыВУчетеСтажаПФР(Движения, ПериодыСтажаПФР);
Если РеквизитыДляПроведения.ОсвобождатьСтавку Тогда
ВсеСотрудники = ДанныеДляПроведения.ВсеСотрудники;
ЗарплатаКадрыРасширенный.УстановитьВремяРегистрацииДокумента(
Движения, КадровыйУчетРасширенный.ТаблицаСотрудникиДатыСобытия(ВсеСотрудники, РеквизитыДляПроведения.ДатаНачала),
РеквизитыДляПроведения.Ссылка);
КадровыйУчетРасширенный.СформироватьДвиженияЗанятостиВременноОсвобожденныхПозицииШтатногоРасписания(
Движения, ВсеСотрудники, РеквизитыДляПроведения.ДатаНачала, РеквизитыДляПроведения.ДатаОкончания, Ложь);
КонецЕсли;
ОграничениеВзысканий.ЗарегистрироватьДанныеСохраняемогоЗаработка(Движения, Отказ, РеквизитыДляПроведения.ПериодРегистрации, РеквизитыДляПроведения.ПорядокВыплаты);
УчетСреднегоЗаработка.УдалитьПричиныПерерасчетов(РеквизитыДляПроведения.Ссылка, ДополнительныеПараметры);
ПерерасчетЗарплаты.УдалитьПерерасчетыПоДополнительнымПараметрам(РеквизитыДляПроведения.Ссылка, ДополнительныеПараметры);
Если Перечисления.ПричиныНетрудоспособности.ЭтоУходЗаРодственником(РеквизитыДляПроведения.ПричинаНетрудоспособности) Тогда
УчетПособийСоциальногоСтрахованияРасширенный.СформироватьДвиженияПериодовУходаЗаБольнымиРодственниками(Движения, ДанныеДляПроведения.ПериодыУходаЗаРодственниками);
КонецЕсли;
КонецЕсли;
ПроведениеРасширенныйСервер.ВыполнитьЗапланированныеКорректировкиДвижений(Движения);
ПроведениеСервер.ЗаписьДвиженийПоУчетам(Движения, СтруктураВидовУчета);
КонецПроцедуры
Функция СторнироватьПоУчетам(Движения, Регистратор, ИсправленныйДокумент, СтруктураВидовУчета, ДополнительныеПараметры) Экспорт
Если (ДополнительныеПараметры.ОтменаДокумента Или ДополнительныеПараметры.ИсправлениеВТекущемПериоде)
И Не ДополнительныеПараметры.ИсправлениеДоначислением Тогда
СторнироватьРасчеты = ДополнительныеПараметры.ОтменаДокумента Или ДополнительныеПараметры.РеквизитыДляПроведения.ДокументРассчитан;
Если СтруктураВидовУчета.ДанныеДляРасчетаСреднего И СторнироватьРасчеты Тогда
УчетСреднегоЗаработка.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент);
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
УправлениеШтатнымРасписанием.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент);
КонецЕсли;
Если СтруктураВидовУчета.СтраховыеВзносы И СторнироватьРасчеты Тогда
УчетСтраховыхВзносовРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета И СторнироватьРасчеты Тогда
Если ДополнительныеПараметры.ИсправлениеВТекущемПериоде Тогда
Если Не ДополнительныеПараметры.Свойство("СторнироватьЗарегистрированноеПриНачисленииАванса")
И (ДополнительныеПараметры.ОтменаДокумента Или Не ДополнительныеПараметры.РеквизитыДляПроведения.РассчитатьЗарплату)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ИсправленныйДокумент, "РассчитатьЗарплату") Тогда
ДополнительныеПараметры.Вставить("СторнироватьЗарегистрированноеПриНачисленииАванса", Истина)
КонецЕсли;
Если Не ДополнительныеПараметры.ОтменаДокумента
И ДополнительныеПараметры.РеквизитыДляПроведения.ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Аванс Тогда
РеквизитыИсправленного = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ИсправленныйДокумент, "ПорядокВыплаты");
Если ДополнительныеПараметры.РеквизитыДляПроведения.ПорядокВыплаты <> РеквизитыИсправленного.ПорядокВыплаты Тогда
УчетНачисленнойЗарплатыРасширенный.ЗапланироватьКопированиеСторноВАванс(Движения);
КонецЕсли;
КонецЕсли;
КонецЕсли;
УчетНДФЛРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
РасчетЗарплатыРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
ОтражениеЗарплатыВБухучетеРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент);
УчетНачисленнойЗарплатыРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, ДополнительныеПараметры);
УчетПособийСоциальногоСтрахованияРасширенный.СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент);
ИсправлениеДокументовЗарплатаКадры.СторнироватьДвиженияБезСпецификиУчетов(
Движения, ИсправленныйДокумент, ДополнительныеПараметры);
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
УчетПособийСоциальногоСтрахованияРасширенный.ДобавитьКомандуПечатиРасчетаСреднегоЗаработка(КомандыПечати, "Документ.БольничныйЛист");
Если Пользователи.РолиДоступны("ПолныеПрава,ДобавлениеИзменениеРабочегоВремениНачисленнойЗарплаты,ЧтениеРабочегоВремениНачисленнойЗарплаты", , Ложь) Тогда
Макеты = Метаданные.Документы.БольничныйЛист.Макеты;
Если ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная") Тогда
Макет = Макеты.ПФ_MXL_РасчетПособия;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.МенеджерПечати = "Документ.БольничныйЛист";
КомандаПечати.Идентификатор = Макет.Имя;
КомандаПечати.Представление = Макет.Представление();
КомандаПечати.Порядок = 1;
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "РасчетПоПравилам2010Года", Ложь);
Макет = Макеты.ПФ_MXL_ЛистокНетрудоспособности;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.МенеджерПечати = "Документ.БольничныйЛист";
КомандаПечати.Идентификатор = Макет.Имя;
КомандаПечати.Представление = Макет.Представление();
КомандаПечати.Порядок = 2;
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "РасчетПоПравилам2010Года", Ложь);
Макет = Макеты.ПФ_MXL_ЗаменаЛетРасчетногоПериода_2024;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.МенеджерПечати = "Документ.БольничныйЛист";
КомандаПечати.Идентификатор = Макет.Имя;
КомандаПечати.Представление = Макет.Представление();
КомандаПечати.Порядок = 3;
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ФиксПериодРасчетаСреднегоЗаработка", Истина);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьДоплатуЗаДниБолезни") Тогда
Макет = Макеты.ПФ_MXL_ДоплатаЗаДниНетрудоспособности;
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
КомандаПечати.МенеджерПечати = "Документ.БольничныйЛист";
КомандаПечати.Идентификатор = Макет.Имя;
КомандаПечати.Представление = Макет.Представление();
КомандаПечати.Порядок = 10;
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры.Вставить("ТребуетсяЧтениеБезОграничений", Истина);
ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ДоплачиватьДоСреднегоЗаработка", Истина);
КонецЕсли;
КонецЕсли;
РасчетЗарплатыРасширенный.ДобавитьКомандуПечатиПодробногоРасчетаНачислений(КомандыПечати);
КадровыйУчетРасширенный.ДобавитьКомандуПечатиПриказаОПредоставленииОтпуска(КомандыПечати);
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
УправлениеПечатьюБЗК.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, Документы.БольничныйЛист);
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РасчетСреднегоЗаработка") Тогда
ДанныеДокументов = ДанныеДокументовДляПечатиРасчетаСреднегоЗаработкаФСС(МассивОбъектов);
ТабличныйДокумент = Обработки.ПечатьРасчетаСреднегоЗаработкаФСС.ТабличныйДокументРасчетаСреднегоЗаработка(ДанныеДокументов, ОбъектыПечати);
Если ТабличныйДокумент <> Неопределено Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"РасчетСреднегоЗаработка",
НСтр("ru = 'Расчет среднего заработка'"),
ТабличныйДокумент);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриФормированииПечатнойФормы(КонтекстПечати) Экспорт
Макеты = Метаданные.Документы.БольничныйЛист.Макеты;
Если КонтекстПечати.МетаданныеМакета = Макеты.ПФ_MXL_РасчетПособия Тогда
ПриПечатиРасчетаПособия(КонтекстПечати);
ИначеЕсли КонтекстПечати.МетаданныеМакета = Макеты.ПФ_MXL_ЛистокНетрудоспособности Тогда
ПриПечатиЛисткаНетрудоспособностиСРасчетомПособия(КонтекстПечати);
ИначеЕсли КонтекстПечати.МетаданныеМакета = Макеты.ПФ_MXL_ДоплатаЗаДниНетрудоспособности Тогда
ПриПечатиДоплатыЗаДниНетрудоспособности(КонтекстПечати);
ИначеЕсли КонтекстПечати.МетаданныеМакета = Макеты.ПФ_MXL_ЗаменаЛетРасчетногоПериода_2024 Тогда
ПриПечатиЗаменыЛетРасчетногоПериода(КонтекстПечати);
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)
| И ЗначениеРазрешено(ФизическоеЛицо)";
КонецПроцедуры
Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт
МетаданныеВЗ = Метаданные.Документы.ВходящийЗапросФССДляРасчетаПособия;
МетаданныеОЗ = Метаданные.Документы.ОтветНаЗапросФССДляРасчетаПособия;
МетаданныеБЛ = Метаданные.Документы.БольничныйЛист;
ЕстьПравоИзмененияОЗ = ПравоДоступа("Изменение", МетаданныеОЗ);
ЕстьПравоЧтенияВЗ = ПравоДоступа("Чтение", МетаданныеВЗ);
ЕстьПравоЧтенияБЛ = ПравоДоступа("Чтение", МетаданныеБЛ) И ЕстьПравоЧтенияВЗ;
ЕстьПравоИзмененияБЛ = ПравоДоступа("Изменение", МетаданныеБЛ);
Если Не ЕстьПравоЧтенияБЛ Или (Не ЕстьПравоИзмененияОЗ И Не ЕстьПравоИзмененияБЛ) Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапросаВТБольничныеСЗаработкомСФР() +
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| Больничные.Ссылка КАК Ссылка
|ИЗ
| ВТБольничныеСЗаработкомСФР КАК Больничные
|ГДЕ
| Больничные.Заработок <> Больничные.ЗаработокСФР";
ТаблицаОЗ = Неопределено;
ТаблицаБЛ = Неопределено;
Если ЕстьПравоИзмененияОЗ Тогда
Запрос.Текст = Запрос.Текст + ЗарплатаКадрыОбщиеНаборыДанных.РазделительЗапросов() +
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ОтветНаЗапросФСС.Ссылка КАК Ссылка,
| Больничные.Заработок <> Больничные.ЗаработокСФР КАК ИсправитьБольничный
|ИЗ
| ВТБольничныеСЗаработкомСФР КАК Больничные
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтветНаЗапросФССДляРасчетаПособия КАК ОтветНаЗапросФСС
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтветНаЗапросФССДляРасчетаПособия.ФиксацияИзменений КАК Фиксация1
| ПО ОтветНаЗапросФСС.Ссылка = Фиксация1.Ссылка
| И (Фиксация1.ИмяРеквизита = ""ПервыйРасчетныйГодЗаработок"")
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтветНаЗапросФССДляРасчетаПособия.ФиксацияИзменений КАК Фиксация2
| ПО ОтветНаЗапросФСС.Ссылка = Фиксация2.Ссылка
| И (Фиксация2.ИмяРеквизита = ""ВторойРасчетныйГодЗаработок"")
| ПО Больничные.Ссылка = ОтветНаЗапросФСС.ПервичныйДокумент
| И (НЕ ОтветНаЗапросФСС.ПриоритетУДанныхВходящегоЗапроса)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОбЭЛН КАК СведенияОбЭЛН
| ПО (ОтветНаЗапросФСС.Ссылка = СведенияОбЭЛН.ОтветНаЗапрос)
|ГДЕ
| ВЫБОР
| КОГДА Больничные.РасчетныйГод = ОтветНаЗапросФСС.ПервыйРасчетныйГод
| ТОГДА Больничные.ЗаработокСФР <> ОтветНаЗапросФСС.ПервыйРасчетныйГодЗаработок
| И Фиксация1.Ссылка ЕСТЬ NULL
| КОГДА Больничные.РасчетныйГод = ОтветНаЗапросФСС.ВторойРасчетныйГод
| ТОГДА Больничные.ЗаработокСФР <> ОтветНаЗапросФСС.ВторойРасчетныйГодЗаработок
| И Фиксация2.Ссылка ЕСТЬ NULL
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ";
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ТаблицаОЗ = РезультатыЗапроса[РезультатыЗапроса.Количество() - 1].Выгрузить();
Если ЕстьПравоИзмененияБЛ Тогда
ТаблицаБЛ = РезультатыЗапроса[РезультатыЗапроса.Количество() - 2].Выгрузить();
КонецЕсли;
Иначе
Если ЕстьПравоИзмененияБЛ Тогда
ТаблицаБЛ = Запрос.Выполнить().Выгрузить();
КонецЕсли;
КонецЕсли;
МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер");
Если ТаблицаБЛ <> Неопределено Тогда
Количество = ТаблицаБЛ.Количество();
Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(МетаданныеБЛ.ПолноеИмя());
Для Каждого Раздел Из Разделы Цикл
ПолноеИмяРаздела = СтрЗаменить(Раздел.ПолноеИмя(), ".", "_");
Дело = ТекущиеДела.Добавить();
Дело.Идентификатор = "БольничныеТребующиеПерерасчета_" + ПолноеИмяРаздела;
Дело.ЕстьДела = (Количество > 0);
Дело.Важное = Истина;
Дело.Владелец = Раздел;
Дело.Представление = НСтр("ru = 'Перерасчитать больничные листы'");
Дело.Количество = Количество;
Дело.ПараметрыФормы = Новый Структура("Отбор", Новый Структура("Ссылка", ТаблицаБЛ.ВыгрузитьКолонку("Ссылка")));
Дело.Форма = "Документ." + МетаданныеБЛ.Имя + ".ФормаСписка";
КонецЦикла;
КонецЕсли;
Если ТаблицаОЗ <> Неопределено Тогда
Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(МетаданныеОЗ.ПолноеИмя());
ТаблицаОЗ1 = ТаблицаОЗ.Скопировать(Новый Структура("ИсправитьБольничный", Истина));
ТаблицаОЗ2 = ТаблицаОЗ.Скопировать(Новый Структура("ИсправитьБольничный", Ложь));
Количество1 = ТаблицаОЗ1.Количество();
Количество2 = ТаблицаОЗ2.Количество();
Для Каждого Раздел Из Разделы Цикл
ПолноеИмяРаздела = СтрЗаменить(Раздел.ПолноеИмя(), ".", "_");
Дело = ТекущиеДела.Добавить();
Дело.Идентификатор = "ОтветыНаЗапросТребующиеПерерасчета_" + ПолноеИмяРаздела + "_1";
Дело.ЕстьДела = (Количество1 > 0);
Дело.Важное = Истина;
Дело.Владелец = Раздел;
Дело.Представление = НСтр("ru = 'Исправить заработок в ответах на запросы после перерасчета больничных'");
Дело.Количество = Количество1;
Дело.ПараметрыФормы = Новый Структура("Отбор", Новый Структура("Ссылка", ТаблицаОЗ1.ВыгрузитьКолонку("Ссылка")));
Дело.Форма = "Документ." + МетаданныеОЗ.Имя + ".ФормаСписка";
Дело = ТекущиеДела.Добавить();
Дело.Идентификатор = "ОтветыНаЗапросТребующиеПерерасчета_" + ПолноеИмяРаздела + "_2";
Дело.ЕстьДела = (Количество2 > 0);
Дело.Важное = Истина;
Дело.Владелец = Раздел;
Дело.Представление = НСтр("ru = 'Исправить заработок в ответах на запросы'");
Дело.Количество = Количество2;
Дело.ПараметрыФормы = Новый Структура("Отбор", Новый Структура("Ссылка", ТаблицаОЗ2.ВыгрузитьКолонку("Ссылка")));
Дело.Форма = "Документ." + МетаданныеОЗ.Имя + ".ФормаСписка";
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция ОписаниеРазделовДанных() Экспорт
ВсеРазделы = МногофункциональныеДокументыБЗККлиентСервер.РазделыДанных();
ОписаниеРазделовДанных = Новый Соответствие();
ОписаниеРаздела = МногофункциональныеДокументыБЗККлиентСервер.НовыйОписаниеРазделаДанных();
ОписаниеРазделовДанных.Вставить(ВсеРазделы.КадровыеДанные, ОписаниеРаздела);
ОписаниеРаздела.РеквизитСостояние = "Проведен";
ОписаниеРаздела.РеквизитОтветсвенный = "Ответственный";
ОписаниеРаздела = МногофункциональныеДокументыБЗККлиентСервер.НовыйОписаниеРазделаДанных();
ОписаниеРазделовДанных.Вставить(ВсеРазделы.НачисленнаяЗарплата, ОписаниеРаздела);
ОписаниеРаздела.РеквизитСостояние = "ДокументРассчитан";
ОписаниеРаздела.РеквизитОтветсвенный = "Рассчитал";
ОписаниеРаздела.ТребуетсяУтверждениеПриПроведении = Истина;
ОписаниеРаздела.СообщениеДокументНеУтвержден = НСтр("ru = '%1 - документ не рассчитан.'");
Возврат ОписаниеРазделовДанных;
КонецФункции
Функция ЗначенияДоступа(ДокументОбъект) Экспорт
Возврат МногофункциональныеДокументыБЗК.ЗначенияДоступаПоСоставуДокумента(
ДокументОбъект,
ДокументОбъект.Организация);
КонецФункции
#КонецОбласти
#Область УстаревшиеПроцедурыИФункции
Функция ДанныеПервичногоБольничногоЛиста(ПервичныйБольничныйЛист, ИсключаемыеДокументы = Неопределено) Экспорт
ДанныеБольничного = УчетПособийСоциальногоСтрахования.ДанныеБольничногоЛиста(ПервичныйБольничныйЛист);
ДатаНачала = УчетПособийСоциальногоСтрахования.ПоследнийДеньБолезни(ДанныеБольничного.Ссылка, ИсключаемыеДокументы) + 86400;
ДанныеБольничного.Вставить("ДатаНачала", ДатаНачала);
ДанныеБольничного.Вставить("ДатаНачалаОплаты", ДатаНачала);
Если Не ДанныеБольничного.ЯвляетсяПродолжениемБолезни Тогда
ДанныеБольничного.ПервичныйБольничныйЛист = ДанныеБольничного.Ссылка;
КонецЕсли;
Возврат ДанныеБольничного;
КонецФункции
Функция ПоследнийДеньБолезни(ПервичныйБольничныйЛист, ИсключаемыеДокументы = Неопределено) Экспорт
Возврат УчетПособийСоциальногоСтрахования.ПоследнийДеньБолезни(ПервичныйБольничныйЛист, ИсключаемыеДокументы);
КонецФункции
Функция МаксимальноеКоличествоОплачиваемыхДнейПоПричинеНетрудоспособности(ПричинаНетрудоспособности, СлучайУходаЗаБольнымРебенком) Экспорт
Возврат УчетПособийСоциальногоСтрахования.ДнейОплатыЗаСлучайНетрудоспособности(ПричинаНетрудоспособности, СлучайУходаЗаБольнымРебенком);
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
#Область ОбработчикиПравилРегистрации
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОтбораПоОрганизации(Настройки);
ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОбъектаСПрисоединеннымиФайлами(Настройки);
КонецПроцедуры
#КонецОбласти
Функция ЗапросПоБольничным(Отбор, ПоляУпорядочивания, КоличествоПервых) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| БольничныйЛист.Ссылка КАК Ссылка,
| БольничныйЛист.ПометкаУдаления КАК ПометкаУдаления,
| БольничныйЛист.Номер КАК Номер,
| БольничныйЛист.Дата КАК Дата,
| БольничныйЛист.Проведен КАК Проведен,
| БольничныйЛист.АдресМедицинскойОрганизации КАК АдресМедицинскойОрганизации,
| БольничныйЛист.ВидНеоплачиваемогоВремени КАК ВидНеоплачиваемогоВремени,
| БольничныйЛист.ВидОплатыЗаСчетРаботодателя КАК ВидОплатыЗаСчетРаботодателя,
| БольничныйЛист.ВидОплатыПособия КАК ВидОплатыПособия,
| БольничныйЛист.ВидРасчетаДоплаты КАК ВидРасчетаДоплаты,
| БольничныйЛист.ВторойКодПричиныНетрудоспособности КАК ВторойКодПричиныНетрудоспособности,
| БольничныйЛист.ГруппаИнвалидности КАК ГруппаИнвалидности,
| БольничныйЛист.УтратаТрудоспобности КАК УтратаТрудоспобности,
| БольничныйЛист.ДатаАктаН1 КАК ДатаАктаН1,
| БольничныйЛист.ДатаВыдачиЛисткаНетрудоспособности КАК ДатаВыдачиЛисткаНетрудоспособности,
| БольничныйЛист.ДатаИзмененияКодаПричиныНетрудоспособности КАК ДатаИзмененияКодаПричиныНетрудоспособности,
| БольничныйЛист.ДатаНаправленияВБюроМСЭ КАК ДатаНаправленияВБюроМСЭ,
| БольничныйЛист.ДатаНарушенияРежима КАК ДатаНарушенияРежима,
| БольничныйЛист.ДатаНачала КАК ДатаНачала,
| БольничныйЛист.ДатаНачалаОплаты КАК ДатаНачалаОплаты,
| БольничныйЛист.ДатаНачалаПоловиннойОплаты КАК ДатаНачалаПоловиннойОплаты,
| БольничныйЛист.ДатаНачалаРаботы КАК ДатаНачалаРаботы,
| БольничныйЛист.ДатаНачалаРодственник1 КАК ДатаНачалаРодственник1,
| БольничныйЛист.ДатаНачалаРодственник2 КАК ДатаНачалаРодственник2,
| БольничныйЛист.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| БольничныйЛист.ДатаНовыйСтатусНетрудоспособного КАК ДатаНовыйСтатусНетрудоспособного,
| БольничныйЛист.ДатаОкончания КАК ДатаОкончания,
| БольничныйЛист.ДатаОкончанияОплаты КАК ДатаОкончанияОплаты,
| БольничныйЛист.ДатаОкончанияПутевки КАК ДатаОкончанияПутевки,
| БольничныйЛист.ДатаОкончанияРодственник1 КАК ДатаОкончанияРодственник1,
| БольничныйЛист.ДатаОкончанияРодственник2 КАК ДатаОкончанияРодственник2,
| БольничныйЛист.ДатаОсвидетельствованияМСЭ КАК ДатаОсвидетельствованияМСЭ,
| БольничныйЛист.ДатаРегистрацииДокументовМСЭ КАК ДатаРегистрацииДокументовМСЭ,
| БольничныйЛист.ДнейОплаты КАК ДнейОплаты,
| БольничныйЛист.ДокументРассчитан КАК ДокументРассчитан,
| БольничныйЛист.ДолжностьРуководителя КАК ДолжностьРуководителя,
| БольничныйЛист.ДоляНеполногоВремени КАК ДоляНеполногоВремени,
| БольничныйЛист.ДоначислитьЗарплатуПриНеобходимости КАК ДоначислитьЗарплатуПриНеобходимости,
| БольничныйЛист.ДоплачиватьДоДенежногоСодержания КАК ДоплачиватьДоДенежногоСодержания,
| БольничныйЛист.ДоплачиватьДоСреднегоЗаработка КАК ДоплачиватьДоСреднегоЗаработка,
| БольничныйЛист.ДополнительныйКодПричиныНетрудоспособности КАК ДополнительныйКодПричиныНетрудоспособности,
| БольничныйЛист.ДоходПолученНаТерриторииРФ КАК ДоходПолученНаТерриторииРФ,
| БольничныйЛист.ИсправленныйДокумент КАК ИсправленныйДокумент,
| БольничныйЛист.КодНарушенияРежима КАК КодНарушенияРежима,
| БольничныйЛист.КодПричиныНетрудоспособности КАК КодПричиныНетрудоспособности,
| БольничныйЛист.Комментарий КАК Комментарий,
| БольничныйЛист.МедицинскаяОрганизация КАК МедицинскаяОрганизация,
| БольничныйЛист.МинимальныйСреднедневнойЗаработок КАК МинимальныйСреднедневнойЗаработок,
| БольничныйЛист.НазначитьПособие КАК НазначитьПособие,
| БольничныйЛист.НаименованиеМедицинскойОрганизации КАК НаименованиеМедицинскойОрганизации,
| БольничныйЛист.НаименованиеОрганизацииВЛисткеНетрудоспособности КАК НаименованиеОрганизацииВЛисткеНетрудоспособности,
| БольничныйЛист.Начислено КАК Начислено,
| БольничныйЛист.НовыйСтатусНетрудоспособного КАК НовыйСтатусНетрудоспособного,
| БольничныйЛист.НомерЛисткаНетрудоспособности КАК НомерЛисткаНетрудоспособности,
| БольничныйЛист.НомерЛисткаПоОсновномуМестуРаботы КАК НомерЛисткаПоОсновномуМестуРаботы,
| БольничныйЛист.НомерЛисткаПродолжения КАК НомерЛисткаПродолжения,
| БольничныйЛист.НомерПервичногоЛисткаНетрудоспособности КАК НомерПервичногоЛисткаНетрудоспособности,
| БольничныйЛист.НомерПутевки КАК НомерПутевки,
| БольничныйЛист.ОграничениеПособия КАК ОграничениеПособия,
| БольничныйЛист.ОграничениеПособияБезЛьгот КАК ОграничениеПособияБезЛьгот,
| БольничныйЛист.ОГРН_Санатория КАК ОГРН_Санатория,
| БольничныйЛист.ОГРНМедицинскойОрганизации КАК ОГРНМедицинскойОрганизации,
| БольничныйЛист.Организация КАК Организация,
| БольничныйЛист.ОсвобождатьСтавку КАК ОсвобождатьСтавку,
| БольничныйЛист.ОсвобождениеДатаНачала1 КАК ОсвобождениеДатаНачала1,
| БольничныйЛист.ОсвобождениеДатаНачала2 КАК ОсвобождениеДатаНачала2,
| БольничныйЛист.ОсвобождениеДатаНачала3 КАК ОсвобождениеДатаНачала3,
| БольничныйЛист.ОсвобождениеДатаОкончания1 КАК ОсвобождениеДатаОкончания1,
| БольничныйЛист.ОсвобождениеДатаОкончания2 КАК ОсвобождениеДатаОкончания2,
| БольничныйЛист.ОсвобождениеДатаОкончания3 КАК ОсвобождениеДатаОкончания3,
| БольничныйЛист.ОсвобождениеДолжностьВрача1 КАК ОсвобождениеДолжностьВрача1,
| БольничныйЛист.ОсвобождениеДолжностьВрача2 КАК ОсвобождениеДолжностьВрача2,
| БольничныйЛист.ОсвобождениеДолжностьВрача3 КАК ОсвобождениеДолжностьВрача3,
| БольничныйЛист.ОсвобождениеДолжностьВрачаПредседателяВК1 КАК ОсвобождениеДолжностьВрачаПредседателяВК1,
| БольничныйЛист.ОсвобождениеДолжностьВрачаПредседателяВК2 КАК ОсвобождениеДолжностьВрачаПредседателяВК2,
| БольничныйЛист.ОсвобождениеДолжностьВрачаПредседателяВК3 КАК ОсвобождениеДолжностьВрачаПредседателяВК3,
| БольничныйЛист.ОсвобождениеИдентификационныйНомерВрача1 КАК ОсвобождениеИдентификационныйНомерВрача1,
| БольничныйЛист.ОсвобождениеИдентификационныйНомерВрача2 КАК ОсвобождениеИдентификационныйНомерВрача2,
| БольничныйЛист.ОсвобождениеИдентификационныйНомерВрача3 КАК ОсвобождениеИдентификационныйНомерВрача3,
| БольничныйЛист.ОсвобождениеИдентификационныйНомерВрачаПредседателяВК1 КАК ОсвобождениеИдентификационныйНомерВрачаПредседателяВК1,
| БольничныйЛист.ОсвобождениеИдентификационныйНомерВрачаПредседателяВК2 КАК ОсвобождениеИдентификационныйНомерВрачаПредседателяВК2,
| БольничныйЛист.ОсвобождениеИдентификационныйНомерВрачаПредседателяВК3 КАК ОсвобождениеИдентификационныйНомерВрачаПредседателяВК3,
| БольничныйЛист.ОсвобождениеФИОВрача1 КАК ОсвобождениеФИОВрача1,
| БольничныйЛист.ОсвобождениеФИОВрача2 КАК ОсвобождениеФИОВрача2,
| БольничныйЛист.ОсвобождениеФИОВрача3 КАК ОсвобождениеФИОВрача3,
| БольничныйЛист.ОсвобождениеФИОВрачаПредседателяВК1 КАК ОсвобождениеФИОВрачаПредседателяВК1,
| БольничныйЛист.ОсвобождениеФИОВрачаПредседателяВК2 КАК ОсвобождениеФИОВрачаПредседателяВК2,
| БольничныйЛист.ОсвобождениеФИОВрачаПредседателяВК3 КАК ОсвобождениеФИОВрачаПредседателяВК3,
| БольничныйЛист.ОснованиеПодписиРуководителя КАК ОснованиеПодписиРуководителя,
| БольничныйЛист.ОсновноеМестоРаботы КАК ОсновноеМестоРаботы,
| БольничныйЛист.Ответственный КАК Ответственный,
| БольничныйЛист.ПервичныйБольничныйЛист КАК ПервичныйБольничныйЛист,
| БольничныйЛист.ПериодНахожденияВСтационареСРебенкомПо КАК ПериодНахожденияВСтационареСРебенкомПо,
| БольничныйЛист.ПериодНахожденияВСтационареСРебенкомС КАК ПериодНахожденияВСтационареСРебенкомС,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаВторойГод КАК ПериодРасчетаСреднегоЗаработкаВторойГод,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаНачало КАК ПериодРасчетаСреднегоЗаработкаНачало,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаОкончание КАК ПериодРасчетаСреднегоЗаработкаОкончание,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаПервыйГод КАК ПериодРасчетаСреднегоЗаработкаПервыйГод,
| БольничныйЛист.ПериодРегистрации КАК ПериодРегистрации,
| БольничныйЛист.ПланируемаяДатаВыплаты КАК ПланируемаяДатаВыплаты,
| БольничныйЛист.ПорядокВыплаты КАК ПорядокВыплаты,
| БольничныйЛист.ПособиеВыплачиваетсяФСС КАК ПособиеВыплачиваетсяФСС,
| БольничныйЛист.ПоставленаНаУчетВРанниеСрокиБеременности КАК ПоставленаНаУчетВРанниеСрокиБеременности,
| БольничныйЛист.ПоУходуВозрастЛет1 КАК ПоУходуВозрастЛет1,
| БольничныйЛист.ПоУходуВозрастЛет2 КАК ПоУходуВозрастЛет2,
| БольничныйЛист.ПоУходуВозрастМесяцев1 КАК ПоУходуВозрастМесяцев1,
| БольничныйЛист.ПоУходуВозрастМесяцев2 КАК ПоУходуВозрастМесяцев2,
| БольничныйЛист.ПоУходуИспользованоДней1 КАК ПоУходуИспользованоДней1,
| БольничныйЛист.ПоУходуИспользованоДней2 КАК ПоУходуИспользованоДней2,
| БольничныйЛист.ПоУходуРодственнаяСвязь1 КАК ПоУходуРодственнаяСвязь1,
| БольничныйЛист.ПоУходуРодственнаяСвязь2 КАК ПоУходуРодственнаяСвязь2,
| БольничныйЛист.ПоУходуФИО1 КАК ПоУходуФИО1,
| БольничныйЛист.ПоУходуФИО2 КАК ПоУходуФИО2,
| БольничныйЛист.ПредоставленДубликатЛисткаНетрудоспособности КАК ПредоставленДубликатЛисткаНетрудоспособности,
| БольничныйЛист.ПредставлениеПериода КАК ПредставлениеПериода,
| БольничныйЛист.ПрименятьЛьготыПриНачисленииПособия КАК ПрименятьЛьготыПриНачисленииПособия,
| БольничныйЛист.ПриступитьКРаботеС КАК ПриступитьКРаботеС,
| БольничныйЛист.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| БольничныйЛист.ПроцентДоплатыЗаДниНетрудоспособности КАК ПроцентДоплатыЗаДниНетрудоспособности,
| БольничныйЛист.ПроцентОплаты КАК ПроцентОплаты,
| БольничныйЛист.ПроцентОплатыБезЛьгот КАК ПроцентОплатыБезЛьгот,
| БольничныйЛист.РайонныйКоэффициентРФнаНачалоСобытия КАК РайонныйКоэффициентРФнаНачалоСобытия,
| БольничныйЛист.Рассчитал КАК Рассчитал,
| БольничныйЛист.РассчитатьЗарплату КАК РассчитатьЗарплату,
| БольничныйЛист.РасчетПоПравилам2010Года КАК РасчетПоПравилам2010Года,
| БольничныйЛист.РодственникЗаКоторымОсуществляетсяУход1 КАК РодственникЗаКоторымОсуществляетсяУход1,
| БольничныйЛист.РодственникЗаКоторымОсуществляетсяУход2 КАК РодственникЗаКоторымОсуществляетсяУход2,
| БольничныйЛист.Руководитель КАК Руководитель,
| БольничныйЛист.СдвигатьПериодОплаты КАК СдвигатьПериодОплаты,
| БольничныйЛист.НачалоВПериодПриостановленияТД КАК НачалоВПериодПриостановленияТД,
| БольничныйЛист.СлучайУходаЗаБольнымРебенком КАК СлучайУходаЗаБольнымРебенком,
| БольничныйЛист.Сотрудник КАК Сотрудник,
| БольничныйЛист.СотрудникСлужащий КАК СотрудникСлужащий,
| БольничныйЛист.СохраняемоеДенежноеСодержание КАК СохраняемоеДенежноеСодержание,
| БольничныйЛист.СреднийДневнойЗаработок КАК СреднийДневнойЗаработок,
| БольничныйЛист.СтажЛет КАК СтажЛет,
| БольничныйЛист.СтажМесяцев КАК СтажМесяцев,
| БольничныйЛист.СтажРасширенныйЛет КАК СтажРасширенныйЛет,
| БольничныйЛист.СтажРасширенныйМесяцев КАК СтажРасширенныйМесяцев,
| БольничныйЛист.Удержано КАК Удержано,
| БольничныйЛист.УсловияИсчисленияКод1 КАК УсловияИсчисленияКод1,
| БольничныйЛист.УсловияИсчисленияКод2 КАК УсловияИсчисленияКод2,
| БольничныйЛист.УсловияИсчисленияКод3 КАК УсловияИсчисленияКод3,
| БольничныйЛист.УчитыватьЗаработокПредыдущихСтрахователей КАК УчитыватьЗаработокПредыдущихСтрахователей,
| БольничныйЛист.ФизическоеЛицо КАК ФизическоеЛицо,
| БольничныйЛист.ФиксПериодРасчетаСреднегоЗаработка КАК ФиксПериодРасчетаСреднегоЗаработка,
| БольничныйЛист.ФинансированиеФедеральнымБюджетом КАК ФинансированиеФедеральнымБюджетом,
| БольничныйЛист.ЯвляетсяПродолжениемБолезни КАК ЯвляетсяПродолжениемБолезни,
| БольничныйЛист.ПрерывистыйМетод КАК ПрерывистыйМетод,
| БольничныйЛист.НомерЗаменяемогоЛН КАК НомерЗаменяемогоЛН,
| БольничныйЛист.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
| БольничныйЛист.Представление КАК Представление
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист";
Если КоличествоПервых <> 1 Тогда
Если КоличествоПервых = 0 Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ ПЕРВЫЕ 1", "ВЫБРАТЬ");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ ПЕРВЫЕ 1", "ВЫБРАТЬ ПЕРВЫЕ " + Формат(КоличествоПервых, "ЧГ="));
КонецЕсли;
КонецЕсли;
Если Отбор.Количество() > 0 Тогда
ФрагментыУсловий = ФрагментыУсловийОтбора(Запрос, "БольничныйЛист", Отбор);
Запрос.Текст = Запрос.Текст + "
|ГДЕ
| " + СтрСоединить(ФрагментыУсловий, " И ");
КонецЕсли;
Если ЗначениеЗаполнено(ПоляУпорядочивания) Тогда
Запрос.Текст = Запрос.Текст + "
|
|УПОРЯДОЧИТЬ ПО
| " + ПоляУпорядочивания;
КонецЕсли;
Возврат Запрос;
КонецФункции
Функция ОписаниеДокумента() Экспорт
ОписаниеДокумента = ЗарплатаКадрыРасширенныйКлиентСервер.СтруктураОписанияДокумента();
ОписаниеДокумента.КраткоеНазваниеИменительныйПадеж = НСтр("ru = 'болезнь'");
ОписаниеДокумента.КраткоеНазваниеРодительныйПадеж = НСтр("ru = 'болезни'");
ОписаниеДокумента.ИмяРеквизитаСотрудник = "Сотрудник";
ОписаниеДокумента.ИмяРеквизитаОтсутствующийСотрудник = "Сотрудник";
ОписаниеДокумента.ИмяРеквизитаДатаНачалаСобытия = "ДатаНачала";
ОписаниеДокумента.ИмяРеквизитаДатаОкончанияСобытия = "ДатаОкончания";
Возврат ОписаниеДокумента;
КонецФункции
Функция ОписаниеСоставаОбъекта() Экспорт
ОписаниеСостава = ЗарплатаКадрыСоставДокументов.НовоеОписаниеСоставаОбъекта();
ОписаниеСостава.ИспользоватьКраткийСостав = Ложь;
ОписаниеСостава.ЗаполнятьТабличнуюЧастьФизическиеЛицаДокумента = Ложь;
ОписаниеСостава.ЗаполнятьФизическиеЛицаПоСотрудникам = Истина;
ОписаниеХранения = ЗарплатаКадрыСоставДокументов.ОписаниеХраненияСотрудниковФизическихЛиц();
ОписаниеХранения.ПолеСотрудник = "Сотрудник";
ОписаниеХранения.ПолеФизическоеЛицо = "ФизическоеЛицо";
ОписаниеСостава.ОписаниеХраненияСотрудниковФизическихЛиц.Добавить(ОписаниеХранения);
ОписаниеЗаполнения = ЗарплатаКадрыСоставДокументов.ОписаниеХраненияСотрудниковФизическихЛиц();
ОписаниеЗаполнения.ПолеСотрудник = "Сотрудник";
ОписаниеЗаполнения.ПолеФизическоеЛицо = "ФизическоеЛицо";
ОписаниеСостава.ОписаниеЗаполненияФизическихЛицПоСотрудникам.Добавить(ОписаниеЗаполнения);
Возврат ОписаниеСостава;
КонецФункции
Функция СвойстваИсправляемогоДокумента(ДокументСсылка) Экспорт
Реквизиты = ИсправлениеДокументовЗарплатаКадры.РеквизитыИсправляемогоРасчетногоДокумента();
Реквизиты.Вставить("ДокументРассчитан");
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, Реквизиты);
КонецФункции
Функция ПараметрыИсправляемогоДокумента(ДокументСсылка) Экспорт
Возврат ИсправлениеДокументовЗарплатаКадры.ПараметрыИсправляемогоДокумента(ДокументСсылка,
СвойстваИсправляемогоДокумента(ДокументСсылка));
КонецФункции
Функция ПараметрыСторнируемогоДокумента(ДокументСсылка) Экспорт
Свойства = ПараметрыИсправляемогоДокумента(ДокументСсылка);
Реквизиты = Новый Структура;
Реквизиты.Вставить("ЭЛНКарантинПоКоронавирусу");
Реквизиты.Вставить("ДатаВыплаты", "ПланируемаяДатаВыплаты");
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Свойства, ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, Реквизиты));
Параметры = ИсправлениеДокументовЗарплатаКадры.ПараметрыСторнируемогоДокумента(ДокументСсылка, Свойства);
ОписаниеТаблицы = ИсправлениеДокументовЗарплатаКадры.НовыйОписаниеТаблицыНачислений();
ОписаниеТаблицы.ИмяТаблицы = "Начисления";
ОписаниеТаблицы.ИмяПоляВидРасчета = "Начисление";
Параметры.ТаблицыНачислений.Добавить(ОписаниеТаблицы);
ОписаниеТаблицы = ИсправлениеДокументовЗарплатаКадры.НовыйОписаниеТаблицыНачислений();
ОписаниеТаблицы.ИмяТаблицы = "УправленческиеНачисления";
ОписаниеТаблицы.ИмяПоляВидРасчета = "Начисление";
Параметры.ТаблицыНачислений.Добавить(ОписаниеТаблицы);
Возврат Параметры;
КонецФункции
Процедура ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений) Экспорт
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.БольничныйЛист";
НовыеСведения.ПоляРегистрации = "Сотрудник,ФизическоеЛицо";
НовыеСведения.ПоляДоступа = "Удержано,Показатели.Значение,ПримененныеВычетыНаДетейИИмущественные.РазмерВычета";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.БольничныйЛист";
НовыеСведения.ПоляРегистрации = "Начисления.Сотрудник";
НовыеСведения.ПоляДоступа = "Начисления.РасчетнаяБазаЗаЕдиницуНормыВремени";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.БольничныйЛист";
НовыеСведения.ПоляРегистрации = "НачисленияПерерасчет.Сотрудник";
НовыеСведения.ПоляДоступа = "НачисленияПерерасчет.Результат,НачисленияПерерасчет.РасчетнаяБазаЗаЕдиницуНормыВремени,НачисленияПерерасчет.СуммаВычета,НачисленияПерерасчет.РезультатВТомЧислеЗаСчетФБ";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.БольничныйЛист";
НовыеСведения.ПоляРегистрации = "НДФЛ.ФизическоеЛицо";
НовыеСведения.ПоляДоступа = "НДФЛ.Налог,НДФЛ.ЗачтеноАвансовыхПлатежей,НДФЛ.ПримененныйВычетЛичный,НДФЛ.ПримененныйВычетЛичныйКЗачетуВозврату";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.БольничныйЛист";
НовыеСведения.ПоляРегистрации = "СреднийЗаработокДанныеСтрахователей.ФизическоеЛицо,СреднийЗаработокФСС.ФизическоеЛицо,Удержания.ФизическоеЛицо,РаспределениеРезультатовУдержаний.Сотрудник";
НовыеСведения.ПоляДоступа = "СреднийЗаработокДанныеСтрахователей.Сумма,СреднийЗаработокФСС.Сумма,Удержания.Результат,РаспределениеРезультатовНачислений.Результат,РаспределениеРезультатовУдержаний.Результат";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.БольничныйЛист";
НовыеСведения.ПоляРегистрации = "ФизическоеЛицо";
НовыеСведения.ПоляДоступа = "СреднийДневнойЗаработок,СреднийЗаработокБольничныйЗаСчетРаботодателя,СреднийПоДаннымОрганизации,СреднийПоДаннымУчетаФонда,СреднийИзВходящегоЗапросаФонда,СреднийДоплатыПоДаннымОрганизации,ПервыйРасчетныйГодЗаработок,ВторойРасчетныйГодЗаработок,СреднийДневнойЗаработокРК,СреднийДневнойЗаработокСН,СреднийЗаработокБольничныйЗаСчетРаботодателяРК,СреднийЗаработокБольничныйЗаСчетРаботодателяСН,СреднийПоДаннымОрганизацииРК,СреднийПоДаннымОрганизацииСН";
НовыеСведения.ОбластьДанных = "Доходы";
НовыеСведения = ТаблицаСведений.Добавить();
НовыеСведения.Объект = "Документ.БольничныйЛист";
НовыеСведения.ПоляРегистрации = "ФизическоеЛицо";
НовыеСведения.ПоляДоступа = "СотрудникСлужащий,ПриостановленияТрудовыхДоговоров.ДатаНачала,ПриостановленияТрудовыхДоговоров.ДатаОкончания,ПриостановленияТрудовыхДоговоров.КалендарныхДней,ПриостановленияТрудовыхДоговоров.ОснованиеНПА,НачалоВПериодПриостановленияТД";
НовыеСведения.ОбластьДанных = "ЛичныеДанные";
КонецПроцедуры
#Область ПрямыеВыплаты
Процедура ЗаполнитьЗаявлениеСотрудникаНаВыплатуПособияПоОснованию(Больничный, Заявление, РеквизитыДокумента, ДанныеДляРасчетаСреднегоЗаработка) Экспорт
НеобходимыеРеквизиты = "Организация, Сотрудник, ПричинаНетрудоспособности, НомерЛисткаНетрудоспособности, "
+ "ДатаНачала, ДатаОкончания, ФинансированиеФедеральнымБюджетом, "
+ "ДатаВыдачиЛисткаНетрудоспособности, СреднийДневнойЗаработок, МинимальныйСреднедневнойЗаработок, ИсправленныйДокумент, "
+ "Проведен, ДокументРассчитан, ПериодРасчетаСреднегоЗаработкаПервыйГод, ПериодРасчетаСреднегоЗаработкаВторойГод, "
+ "ПоставленаНаУчетВРанниеСрокиБеременности, Дата, Номер, РайонныйКоэффициентРФнаНачалоСобытия, ДатаНачалаСобытия";
РеквизитыБольничного = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Больничный, НеобходимыеРеквизиты);
РеквизитыДокумента.Вставить("ВидПособия", ВидПособия(РеквизитыБольничного));
Если РеквизитыБольничного.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
РеквизитыДокумента.Вставить("ДатаПриказаОПредоставленииОтпускаПоУходуЗаРебенком", РеквизитыБольничного.Дата);
РеквизитыДокумента.Вставить("НомерПриказаОПредоставленииОтпускаПоУходуЗаРебенком", ЗарплатаКадрыОтчеты.НомерНаПечать(РеквизитыБольничного.Номер));
КонецЕсли;
РеквизитыДокумента.Вставить("Организация", РеквизитыБольничного.Организация);
РеквизитыДокумента.Вставить("Сотрудник", РеквизитыБольничного.Сотрудник);
РеквизитыДокумента.Вставить("НомерЛисткаНетрудоспособности", РеквизитыБольничного.НомерЛисткаНетрудоспособности);
РеквизитыДокумента.Вставить("ДатаЛисткаНетрудоспособности", РеквизитыБольничного.ДатаВыдачиЛисткаНетрудоспособности);
МинимальныйСреднедневнойДляСравненияСМРОТ = УчетПособийСоциальногоСтрахования.МинимальныйСреднедневнойЗаработокДляСравненияСМРОТ(
РеквизитыБольничного.МинимальныйСреднедневнойЗаработок,
РеквизитыБольничного.РайонныйКоэффициентРФнаНачалоСобытия,
РеквизитыБольничного.ДатаНачалаСобытия);
РеквизитыДокумента.Вставить("СреднийДневнойЗаработок", РеквизитыБольничного.СреднийДневнойЗаработок);
РеквизитыДокумента.Вставить("СреднийЗаработокЗаРасчетныйПериод", Макс(РеквизитыБольничного.СреднийДневнойЗаработок, МинимальныйСреднедневнойДляСравненияСМРОТ));
РеквизитыДокумента.Вставить("ДатаПредставленияПакетаДокументов", РеквизитыБольничного.Дата);
РеквизитыДокумента.Вставить("ДатаНачалаОтпускаПоУходуЗаРебенком", РеквизитыБольничного.ДатаНачала);
РеквизитыДокумента.Вставить("ДатаОкончанияОтпускаПоУходуЗаРебенком", РеквизитыБольничного.ДатаОкончания);
РеквизитыДокумента.Вставить("ФинансированиеФедеральнымБюджетом", РеквизитыБольничного.ФинансированиеФедеральнымБюджетом);
Если ЗначениеЗаполнено(РеквизитыБольничного.ИсправленныйДокумент) Тогда
РеквизитыДокумента.Вставить("Перерасчет", Истина);
РеквизитыДокумента.Вставить("КодПричиныПерерасчета", "01");
КонецЕсли;
Если РеквизитыБольничного.ДокументРассчитан
И ЗначениеЗаполнено(РеквизитыБольничного.ПериодРасчетаСреднегоЗаработкаПервыйГод)
И ЗначениеЗаполнено(РеквизитыБольничного.ПериодРасчетаСреднегоЗаработкаВторойГод) Тогда
Массив = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Больничный);
ДанныеДляРасчетаСреднегоЗаработка = ДанныеДокументовДляРасчетаСреднегоЗаработкаФСС(Массив).Получить(Больничный);
КонецЕсли;
КонецПроцедуры
Функция ВидПособия(Больничный) Экспорт
ПричинаНетрудоспособности = Больничный.ПричинаНетрудоспособности;
Если ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
Если Больничный.ПоставленаНаУчетВРанниеСрокиБеременности = Перечисления.ПостановкаНаУчетВРанниеСрокиБеременности.Поставлена
И УчетПособийСоциальногоСтрахования.ДоступноПособиеВставшимНаУчетВРанниеСроки(Больничный.ДатаНачалаСобытия) Тогда
Возврат Перечисления.ПособияНазначаемыеФСС.ПособиеПоБеременностиИРодамВставшимНаУчетВРанниеСроки;
Иначе
Возврат Перечисления.ПособияНазначаемыеФСС.ПособиеПоБеременностиИРодам;
КонецЕсли;
ИначеЕсли ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ТравмаНаПроизводстве
Или ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.Профзаболевание Тогда
Возврат Перечисления.ПособияНазначаемыеФСС.ПособиеВСвязиСНесчастнымСлучаемНаПроизводстве;
Иначе
Возврат Перечисления.ПособияНазначаемыеФСС.ПособиеПоВременнойНетрудоспособности;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область СЭДО
Процедура ПриПолученииОсновныхСведенийОДокументеДляСЭДО(БольничныйСсылка, ДокументСЭДО, ОсновныеСведения) Экспорт
ИменаРеквизитов = "Представление, Проведен, ДокументРассчитан, Рассчитал,
|ГоловнаяОрганизация, Организация, Сотрудник, ФизическоеЛицо";
Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(БольничныйСсылка, ИменаРеквизитов);
ЗаполнитьЗначенияСвойств(ОсновныеСведения, Значения);
ОсновныеСведения.Рассчитан = Значения.ДокументРассчитан;
ОсновныеСведения.Утвержден = Значения.ДокументРассчитан И ЗначениеЗаполнено(Значения.Рассчитал);
КонецПроцедуры
Процедура ЗаполнитьПервичныйДокументДляРасчетаПособияФСС(ДокументСЭДО, Реквизиты) Экспорт
Если ТипЗнч(ДокументСЭДО.ПервичныйДокумент) = Тип("ДокументСсылка.БольничныйЛист")
И ЗначениеЗаполнено(ДокументСЭДО.ПервичныйДокумент) Тогда
ИменаРеквизитов = "ГоловнаяОрганизация, ФизическоеЛицо";
Больничный = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСЭДО.ПервичныйДокумент, ИменаРеквизитов);
Если Больничный.ГоловнаяОрганизация = ДокументСЭДО.ГоловнаяОрганизация
И Больничный.ФизическоеЛицо = ДокументСЭДО.ФизическоеЛицо Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Отбор = Новый Структура;
Отбор.Вставить("ФизическоеЛицо", ДокументСЭДО.ФизическоеЛицо);
Больничный = ПоследнийДокументВЦепочкеИсправлений(ДокументСЭДО.НомерЛН, ДокументСЭДО.ГоловнаяОрганизация, Отбор);
Если Больничный <> Неопределено Тогда
Реквизиты.Вставить("ПервичныйДокумент", Больничный.Ссылка);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьОтветНаЗапросФССДляРасчетаПособия(БольничныйСсылка, ДокументСЭДО, Реквизиты, ДанныеДляРасчетаСреднегоЗаработка) Экспорт
Больничный = БольничныйСсылка.ПолучитьОбъект();
ПричинаНетрудоспособности = Больничный.ПричинаНетрудоспособности;
Если ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
Реквизиты.Вставить("ВидПособия", Перечисления.ПособияНазначаемыеФСС.ПособиеПоБеременностиИРодам);
ИначеЕсли ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ТравмаНаПроизводстве
Или ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.Профзаболевание Тогда
Реквизиты.Вставить("ВидПособия", Перечисления.ПособияНазначаемыеФСС.ПособиеВСвязиСНесчастнымСлучаемНаПроизводстве);
Иначе
Реквизиты.Вставить("ВидПособия", Перечисления.ПособияНазначаемыеФСС.ПособиеПоВременнойНетрудоспособности);
КонецЕсли;
НомерНаПечать = ЗарплатаКадрыОтчеты.НомерНаПечать(Больничный.Номер);
Реквизиты.Вставить("Организация", Больничный.Организация);
Реквизиты.Вставить("Сотрудник", Больничный.Сотрудник);
Реквизиты.Вставить("НомерЛН", Больничный.НомерЛисткаНетрудоспособности);
Реквизиты.Вставить("ДатаНачалаСобытия", Больничный.ДатаНачалаСобытия);
Реквизиты.Вставить("РайонныйКоэффициент", Больничный.РайонныйКоэффициентРФНаНачалоСобытия);
ОтпускПоУходуДатаНачала = Больничный.ДатаНачала;
ОтпускПоУходуДатаОкончания = Больничный.ДатаОкончания;
Для Каждого ИсключенныйПериод Из Больничный.ИсключаемыеПериоды Цикл
Если ОтпускПоУходуДатаНачала = ИсключенныйПериод.ДатаНачала Тогда
ОтпускПоУходуДатаНачала = ИсключенныйПериод.ДатаОкончания + 86400;
КонецЕсли;
Если ОтпускПоУходуДатаОкончания = ИсключенныйПериод.ДатаОкончания Тогда
ОтпускПоУходуДатаОкончания = ИсключенныйПериод.ДатаНачала - 86400;
КонецЕсли;
КонецЦикла;
Реквизиты.Вставить("ОтпускПоУходуДата", Больничный.Дата);
Реквизиты.Вставить("ОтпускПоУходуДатаНачала", ОтпускПоУходуДатаНачала);
Реквизиты.Вставить("ОтпускПоУходуДатаОкончания", ОтпускПоУходуДатаОкончания);
Реквизиты.Вставить("ОтпускПоУходуНомер", НомерНаПечать);
ДатаНачалаОплатыСФРПоОбщимПравилам = Макс(
УчетПособийСоциальногоСтрахования.ДатаНачалаОплатыЗаСчетФСС(
Больничный.ДатаНачалаСобытия, Больничный.ПричинаНетрудоспособности, Больничный.НачалоВПериодПриостановленияТД),
Больничный.ДатаНачала);
Если Не Больничный.СдвигатьПериодОплаты И Больничный.ИсключаемыеПериоды.Количество() > 0 Тогда
ОбратныйИндекс = Больничный.ИсключаемыеПериоды.Количество();
Пока ОбратныйИндекс > 0 Цикл
ОбратныйИндекс = ОбратныйИндекс - 1;
ИсключаемыйПериод = Больничный.ИсключаемыеПериоды[ОбратныйИндекс];
Если ИсключаемыйПериод.ДатаНачала < ДатаНачалаОплатыСФРПоОбщимПравилам Тогда
ИсключаемыйПериод.ДатаНачала = ДатаНачалаОплатыСФРПоОбщимПравилам;
КонецЕсли;
Если ИсключаемыйПериод.ДатаНачала > ИсключаемыйПериод.ДатаОкончания Тогда
Больничный.ИсключаемыеПериоды.Удалить(ИсключаемыйПериод);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЕстьОплатаЗаСчетСФР = Больничный.Начисления.Найти(Больничный.ВидОплатыПособия, "Начисление") <> Неопределено;
Реквизиты.Вставить("ОтказВНазначенииПособия", Больничный.ДокументРассчитан И Не ЕстьОплатаЗаСчетСФР);
Реквизиты.Вставить("ОтказВНазначенииПособияПричина", "");
Если Реквизиты.ОтказВНазначенииПособия Тогда
ПредставленияИсключаемыхПериодов = Новый Массив;
Для Каждого ИсключаемыйПериод Из Больничный.ИсключаемыеПериоды Цикл
Представление = ОбщегоНазначенияБЗК.НаименованиеПериода(ИсключаемыйПериод.ДатаНачала, ИсключаемыйПериод.ДатаОкончания);
Если ЗначениеЗаполнено(ИсключаемыйПериод.Причина) Тогда
Представление = Представление + " (" + ИсключаемыйПериод.Причина + ")";
КонецЕсли;
ПредставленияИсключаемыхПериодов.Добавить(Представление);
КонецЦикла;
Если ПредставленияИсключаемыхПериодов.Количество() > 0 Тогда
ТекстПричины = СтрШаблон(НСтр("ru = 'Исключаемые периоды (%1): %2'"),
ЗарплатаКадрыКлиентСервер.ПредставлениеДней(Больничный.ИсключаемыеПериоды.Итог("КалендарныхДней")),
СтрСоединить(ПредставленияИсключаемыхПериодов, ", "));
Иначе
ТекстПричины = НСтр("ru = 'Нет дней оплачиваемых за счет СФР'");
КонецЕсли;
Реквизиты.ОтказВНазначенииПособияПричина = ТекстПричины;
КонецЕсли;
Если ЕстьОплатаЗаСчетСФР Тогда
ДатаНачалаОплатыСФР = ДатаНачалаОплатыСФРПоОбщимПравилам;
ДатыНачислений = ДатыНачислений(Больничный, Новый Соответствие);
Фильтр = Новый Структура("ВидРасчета", Больничный.ВидОплатыЗаСчетРаботодателя);
ДатыОплатыЗаСчетРаботодателя = ДатыНачислений.Скопировать(Фильтр);
Количество = ДатыОплатыЗаСчетРаботодателя.Количество();
Если Количество > 0 Тогда
ДатыОплатыЗаСчетРаботодателя.Сортировать("Дата");
ДатаОкончанияОплатыЗаСчетРаботодателя = ДатыОплатыЗаСчетРаботодателя[Количество-1].Дата;
Если ДатаОкончанияОплатыЗаСчетРаботодателя >= ДатаНачалаОплатыСФР Тогда
ДатаНачалаОплатыСФР = ДатаОкончанияОплатыЗаСчетРаботодателя + 86400;
КонецЕсли;
КонецЕсли;
ДатаНачалаОплатыСФРБезУчетаФлажков = Макс(
УчетПособийСоциальногоСтрахования.ДатаНачалаОплатыЗаСчетФСС(
Больничный.ДатаНачалаСобытия, Больничный.ПричинаНетрудоспособности, Ложь),
Больничный.ДатаНачала);
Если ЗначениеЗаполнено(ДатаНачалаОплатыСФР) И ДатаНачалаОплатыСФР <> ДатаНачалаОплатыСФРБезУчетаФлажков Тогда
Реквизиты.Вставить("ОплатаФССДатаНачала", ДатаНачалаОплатыСФР);
КонецЕсли;
КонецЕсли;
Если Больничный.НачалоВПериодПриостановленияТД Тогда
Реквизиты.Вставить("СотрудникКатегория", "ENDOFMILITARY");
КонецЕсли;
Реквизиты.Вставить("ПричинаПредоставленияЛьготы", Больничный.ФинансированиеФедеральнымБюджетом);
Реквизиты.Вставить("УсловияИсчисленияКод1", Больничный.УсловияИсчисленияКод1);
Реквизиты.Вставить("УсловияИсчисленияКод2", Больничный.УсловияИсчисленияКод2);
Реквизиты.Вставить("УсловияИсчисленияКод3", Больничный.УсловияИсчисленияКод3);
Реквизиты.Вставить("ИсключаемыеПериоды", Больничный.ИсключаемыеПериоды.Выгрузить());
Реквизиты.Вставить("ПериодыПростоя", Больничный.ПериодыПростоя.Выгрузить());
Реквизиты.Вставить("ПриостановленияТрудовыхДоговоров", Больничный.ПриостановленияТрудовыхДоговоров.Выгрузить());
МинимальныйСреднедневной = УчетПособийСоциальногоСтрахования.МинимальныйСреднедневнойЗаработокДляСравненияСМРОТ(
Больничный.МинимальныйСреднедневнойЗаработок,
Больничный.РайонныйКоэффициентРФнаНачалоСобытия,
Больничный.ДатаНачалаСобытия);
Среднедневной = Макс(Больничный.СреднийДневнойЗаработок, МинимальныйСреднедневной);
Реквизиты.Вставить("СреднемесячныйЗаработок", Окр(Среднедневной * 30.4, 2));
Реквизиты.Вставить("ПервыйРасчетныйГод", Больничный.ПериодРасчетаСреднегоЗаработкаПервыйГод);
Реквизиты.Вставить("ВторойРасчетныйГод", Больничный.ПериодРасчетаСреднегоЗаработкаВторойГод);
НестраховойСтаж = УчетПособийСоциальногоСтрахования.НестраховойСтаж(Больничный);
Если НестраховойСтаж.Лет <> 0 Или НестраховойСтаж.Месяцев <> 0 Тогда
Реквизиты.Вставить("СтраховойСтажЛет", Больничный.СтажРасширенныйЛет);
Реквизиты.Вставить("СтраховойСтажМесяцев", Больничный.СтажРасширенныйМесяцев);
Реквизиты.Вставить("НестраховойСтажЛет", НестраховойСтаж.Лет);
Реквизиты.Вставить("НестраховойСтажМесяцев", НестраховойСтаж.Месяцев);
Иначе
Реквизиты.Вставить("СтраховойСтажЛет", Больничный.СтажЛет);
Реквизиты.Вставить("СтраховойСтажМесяцев", Больничный.СтажМесяцев);
Реквизиты.Вставить("НестраховойСтажЛет", 0);
Реквизиты.Вставить("НестраховойСтажМесяцев", 0);
КонецЕсли;
Если Больничный.ДокументРассчитан
И ЗначениеЗаполнено(Больничный.ПериодРасчетаСреднегоЗаработкаПервыйГод)
И ЗначениеЗаполнено(Больничный.ПериодРасчетаСреднегоЗаработкаВторойГод) Тогда
ДанныеДляРасчетаСреднегоЗаработка = ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС(Больничный);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьИсходящееСообщениеОСтраховомСлучаеФСС(Больничный, ДокументСЭДО, Реквизиты) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БольничныйЛист.Организация КАК Организация,
| БольничныйЛист.Сотрудник КАК Сотрудник,
| БольничныйЛист.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| БольничныйЛист.НомерЛисткаНетрудоспособности КАК НомерЛисткаНетрудоспособности,
| БольничныйЛист.ДатаНачала КАК ДатаНачала,
| БольничныйЛист.ДатаОкончания КАК ДатаОкончания,
| БольничныйЛист.ДатаНачалаСобытия КАК ДатаНачалаСобытия
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист
|ГДЕ
| БольничныйЛист.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Больничный);
РеквизитыБольничного = Запрос.Выполнить().Выгрузить()[0];
Причина = РеквизитыБольничного.ПричинаНетрудоспособности;
Реквизиты.ВидПособия = Перечисления.ПособияНазначаемыеФСС.НайтиПоПричинеНетрудоспособности(Причина);
Реквизиты.Организация = РеквизитыБольничного.Организация;
Реквизиты.Сотрудник = РеквизитыБольничного.Сотрудник;
Реквизиты.НомерЛН = РеквизитыБольничного.НомерЛисткаНетрудоспособности;
Реквизиты.ДатаНачалаСобытия = РеквизитыБольничного.ДатаНачалаСобытия;
Реквизиты.ОтпускПоУходуДатаНачала = РеквизитыБольничного.ДатаНачала;
Реквизиты.ОтпускПоУходуДатаОкончания = РеквизитыБольничного.ДатаОкончания;
КонецПроцедуры
#КонецОбласти
#Область ЭЛН
Процедура ПослеЗагрузкиЭЛН(ДокументОбъект, ДанныеИзСервиса) Экспорт
Возврат;
КонецПроцедуры
Функция ПредыдущийПроведенныйДокументИзЦепочкиИсправлений(БольничныйОбъект, НомерЛН, ГоловнаяОрганизация, Знач Поля = Неопределено) Экспорт
Если Не ЗначениеЗаполнено(НомерЛН) Тогда
Возврат Неопределено;
КонецЕсли;
НайденныйДокумент = БольничныйОбъект.ИсправленныйДокумент;
Если Не ЗначениеЗаполнено(НайденныйДокумент) Тогда
Возврат Неопределено;
КонецЕсли;
Если Поля = Неопределено Тогда
Поля = "Ссылка, ИсправленныйДокумент, Проведен";
Иначе
Поля = Поля + ", Ссылка, ИсправленныйДокумент, Проведен";
Поля = СтрСоединить(СтроковыеФункцииБЗККлиентСервер.РазделитьИменаСвойств(Поля), ", ");
КонецЕсли;
Пока Истина Цикл
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(НайденныйДокумент, Поля);
Если ЗначенияРеквизитов.Проведен Тогда
Возврат ЗначенияРеквизитов;
ИначеЕсли Не ЗначениеЗаполнено(ЗначенияРеквизитов.ИсправленныйДокумент) Тогда
Возврат Неопределено;
Иначе
НайденныйДокумент = ЗначенияРеквизитов.ИсправленныйДокумент;
КонецЕсли;
КонецЦикла;
КонецФункции
Функция ПоследнийДокументВЦепочкеИсправлений(НомерЛН, ГоловнаяОрганизация, Отбор = Неопределено, Поля = "") Экспорт
Если Не ЗначениеЗаполнено(НомерЛН) Тогда
Возврат Неопределено;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| &ТекстДополнительныхПолей КАК ТекстДополнительныхПолей,
| Найденный.Ссылка КАК Ссылка,
| Найденный.Проведен КАК Проведен,
| Найденный.ДокументРассчитан КАК ДокументРассчитан,
| Найденный.Дата КАК Дата,
| Найденный.ПериодРегистрации КАК ПериодРегистрации
|ИЗ
| Документ.БольничныйЛист КАК Найденный
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК Исправляющий
| ПО Найденный.Ссылка = Исправляющий.ИсправленныйДокумент
|ГДЕ
| Найденный.НомерЛисткаНетрудоспособности = &НомерЛН
| И Найденный.ГоловнаяОрганизация = &ГоловнаяОрганизация
| И &ТекстДополнительныхУсловий
| И НЕ Найденный.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| НЕ Исправляющий.Ссылка ЕСТЬ NULL,
| Проведен УБЫВ,
| Ссылка УБЫВ";
Запрос.УстановитьПараметр("НомерЛН", НомерЛН);
Запрос.УстановитьПараметр("ГоловнаяОрганизация", ГоловнаяОрганизация);
УжеВыбранныеПоля = "Ссылка, Проведен, Дата, ПериодРегистрации";
ТекстДополнительныхПолей = ЗапросыБЗК.ТекстЗапросаПолей(Поля, "Найденный", УжеВыбранныеПоля);
Если ТекстДополнительныхПолей <> "" Тогда
ТекстДополнительныхПолей = ТекстДополнительныхПолей + ",";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстДополнительныхПолей КАК ТекстДополнительныхПолей,", ТекстДополнительныхПолей);
ТекстДополнительныхУсловий = "";
Если Отбор <> Неопределено Тогда
ОтборКД = Новый ОтборКомпоновкиДанных;
ЗапросыБЗК.ДополнитьОтбор(ОтборКД, Отбор);
ФрагментыУсловий = ЗапросыБЗК.ФрагментыУсловийОтбора(Запрос, ОтборКД, "Найденный");
Если ФрагментыУсловий.Количество() > 0 Тогда
ТекстДополнительныхУсловий = "И " + СтрСоединить(ФрагментыУсловий, Символы.ПС + Символы.Таб + "И ");
КонецЕсли;
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И &ТекстДополнительныхУсловий", ТекстДополнительныхУсловий);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
#КонецОбласти
#Область УходЗаДетьми
Процедура ОчиститьСлучайУходаПриНеобходимости(Больничный) Экспорт
Если Больничный.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком Тогда
Возврат;
КонецЕсли;
Больничный.СлучайУходаЗаБольнымРебенком = Неопределено;
Если Больничный.ПричинаНетрудоспособности <> Перечисления.ПричиныНетрудоспособности.ПоУходуЗаВзрослым Тогда
Больничный.РодственникЗаКоторымОсуществляетсяУход1 = Неопределено;
Больничный.РодственникЗаКоторымОсуществляетсяУход2 = Неопределено;
Больничный.ДатаНачалаРодственник1 = Неопределено;
Больничный.ДатаНачалаРодственник2 = Неопределено;
Больничный.ДатаОкончанияРодственник1 = Неопределено;
Больничный.ДатаОкончанияРодственник2 = Неопределено;
Больничный.ПериодыУходаЗаРодственниками.Очистить();
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьТаблицуУходаЗаРодственниками(Больничный, ДанныеЭЛН) Экспорт
Больничный.ПериодыУходаЗаРодственниками.Очистить();
ОбменЛисткамиНетрудоспособностиФСС.ЗаполнитьДатыУходаЗаРодственниками(
ДанныеЭЛН,
Больничный.ГоловнаяОрганизация,
Больничный.ФизическоеЛицо);
ДатыУхода = ДанныеЭЛН.ДатыУхода;
Измерения = "НомерРодственника, Родственник, Год, КодПричины, РежимЛечения";
Ресурсы = "";
Реквизиты = "";
ПериодыУхода = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ДатыУхода, Измерения, Ресурсы, Реквизиты, Истина);
Для Каждого ПериодУхода Из ПериодыУхода Цикл
СтрокаТаблицы = Больничный.ПериодыУходаЗаРодственниками.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ПериодУхода, "ДатаНачала, ДатаОкончания, КодПричины, РежимЛечения");
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ПериодУхода.Родственник, "КодСвязи, Фамилия, Имя, Отчество, СНИЛС, ДатаРождения, ВозрастЛет, ВозрастМесяцев");
СтрокаТаблицы.Родственник = ПериодУхода.Родственник.Ссылка;
СтрокаТаблицы.СлучайУхода = УчетПособийСоциальногоСтрахования.СлучайУхода(
Больничный.ДатаНачалаСобытия,
СтрокаТаблицы.КодПричины,
СтрокаТаблицы.ВозрастЛет,
СтрокаТаблицы.РежимЛечения);
ПараметрыОплаты = УчетПособийСоциальногоСтрахования.ПроцентОплатыИОграничениеПособия(
Больничный,
СтрокаТаблицы.СлучайУхода);
ИменаПолей = "ПроцентОплаты, ПроцентОплатыБезЛьгот, ОграничениеПособия, ОграничениеПособияБезЛьгот";
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ПараметрыОплаты, ИменаПолей);
КонецЦикла;
КонецПроцедуры
Функция ДобавитьПериодУхода(Больничный, Родственник) Экспорт
ИменаПолей = "Фамилия, Имя, Отчество, СНИЛС, ДатаРождения, КодСвязи";
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Родственник, ИменаПолей);
ПериодУхода = Больничный.ПериодыУходаЗаРодственниками.Добавить();
ПериодУхода.Родственник = Родственник;
ПериодУхода.КодПричины = Больничный.КодПричиныНетрудоспособности;
ПериодУхода.ДатаНачала = Больничный.ДатаНачала;
ПериодУхода.ДатаОкончания = Больничный.ДатаОкончания;
ПериодУхода.КодСвязи = Реквизиты.КодСвязи;
ПериодУхода.Фамилия = Реквизиты.Фамилия;
ПериодУхода.Имя = Реквизиты.Имя;
ПериодУхода.Отчество = Реквизиты.Отчество;
ПериодУхода.СНИЛС = Реквизиты.СНИЛС;
ПериодУхода.ДатаРождения = Реквизиты.ДатаРождения;
ПериодУхода.РежимЛечения = Перечисления.РежимыЛечения.НайтиПоСлучаюУхода(Больничный.СлучайУходаЗаБольнымРебенком);
Если ЗначениеЗаполнено(ПериодУхода.ДатаРождения) И ЗначениеЗаполнено(Больничный.ДатаНачалаСобытия) Тогда
РазмерПериода = ОбщегоНазначенияБЗК.РазмерПериода(ПериодУхода.ДатаРождения, Больничный.ДатаНачалаСобытия);
ПериодУхода.ВозрастЛет = РазмерПериода.Лет;
ПериодУхода.ВозрастМесяцев = РазмерПериода.Месяцев;
КонецЕсли;
ПериодУхода.СлучайУхода = УчетПособийСоциальногоСтрахования.СлучайУхода(
Больничный.ДатаНачалаСобытия,
ПериодУхода.КодПричины,
ПериодУхода.ВозрастЛет,
ПериодУхода.РежимЛечения);
Возврат ПериодУхода;
КонецФункции
#КонецОбласти
#Область ПечатьПодробногоРасчетаНачислений
Процедура ЗаполнитьОписаниеДокументаРасчетаНачислений(ОписаниеДокумента) Экспорт
КатегорииСпециализированногоНачисления = Новый Массив;
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.БолезньБезОплаты);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДоплатаДоСреднегоЗаработкаЗаДниБолезни);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛиста);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛистаЗаСчетРаботодателя);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоНесчастныйСлучайНаПроизводстве);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоПрофзаболевание);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиРайонногоКоэффициентаВСреднемЗаработке);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиСевернойНадбавкиВСреднемЗаработке);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиРайонногоКоэффициентаВСДС);
КатегорииСпециализированногоНачисления.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиСевернойНадбавкиВСДС);
МетаданныеДокумента = ПустаяСсылка().Метаданные();
ОписаниеДокумента.Вставить("ИмяДокумента", МетаданныеДокумента.Имя);
ОписаниеДокумента.Вставить("СинонимДокумента", МетаданныеДокумента.Синоним);
ОписаниеДокумента.Вставить("ЕстьРасчетСреднегоЗаработка", Истина);
ОписаниеДокумента.Вставить("СреднийЗаработокОбщий", Ложь);
ОписаниеДокумента.Вставить("ЕстьРасчетСпециализированныхНачислений", Истина);
ОписаниеДокумента.Вставить("ЕстьРасчетЗарплаты", Истина);
ОписаниеДокумента.Вставить("КатегорииСпециализированногоНачисления", КатегорииСпециализированногоНачисления);
ОписаниеДокумента.Вставить("НазваниеСпециализированногоНачисления", НСтр("ru = 'Больничный лист'"));
КонецПроцедуры
Процедура ЗаполнитьДанныеДокументовДляПодробногоРасчетаНачислений(МассивСсылок, ДанныеДокументов) Экспорт
РасчетЗарплатыРасширенный.ЗаполнитьДанныеДокументовДляПодробногоРасчетаНачислений(МассивСсылок, ПустаяСсылка().Метаданные().Имя, ДанныеДокументов);
КонецПроцедуры
Функция НачисленияПоказателиДокументов(МассивСсылок) Экспорт
Возврат РасчетЗарплатыРасширенный.НачисленияПоказателиДокументов(МассивСсылок, ПустаяСсылка().Метаданные().Имя);
КонецФункции
#КонецОбласти
Функция ИспользоватьПериодыУходаВШапке(Больничный) Экспорт
Возврат Больничный.ПериодыУходаЗаРодственниками.Количество() = 0
И Перечисления.ПричиныНетрудоспособности.ЭтоУходЗаРодственником(Больничный.ПричинаНетрудоспособности)
И (ЗначениеЗаполнено(Больничный.РодственникЗаКоторымОсуществляетсяУход1)
Или ЗначениеЗаполнено(Больничный.РодственникЗаКоторымОсуществляетсяУход2));
КонецФункции
Функция ОбъектЗаблокирован(СсылкаНаОбъект) Экспорт
Возврат Ложь;
КонецФункции
Функция ДатаНачалаОплатыЗаСчетСФР(Больничный) Экспорт
Если Больничный.СдвигатьПериодОплаты И Больничный.ИсключаемыеПериоды.Количество() > 0 Тогда
Если Больничный.Начисления.Количество() > 0 И Не Больничный.ЯвляетсяПродолжениемБолезни Тогда
ДатаНачалаОплатыЗаСчетСФР = '39991231235959';
Отбор = Новый Структура("Начисление", Больничный.ВидОплатыПособия);
Начисления = Больничный.Начисления.НайтиСтроки(Отбор);
Для Каждого СтрокаНачисления Из Начисления Цикл
ДатаНачалаОплатыЗаСчетСФР = Мин(ДатаНачалаОплатыЗаСчетСФР, СтрокаНачисления.ДатаНачала);
КонецЦикла;
Если ДатаНачалаОплатыЗаСчетСФР <> '39991231235959' Тогда
Возврат ДатаНачалаОплатыЗаСчетСФР;
КонецЕсли;
КонецЕсли;
Кэш = Новый Соответствие;
ДатыНачислений(Больничный, Кэш);
ДатаНачалаОплатыЗаСчетСФР = Кэш["ДатаНачалаОплатыЗаСчетСФР"];
Если ДатаНачалаОплатыЗаСчетСФР <> Неопределено Тогда
Возврат ДатаНачалаОплатыЗаСчетСФР;
КонецЕсли;
КонецЕсли;
Возврат УчетПособийСоциальногоСтрахования.ДатаНачалаОплатыЗаСчетФСС(
Больничный.ДатаНачалаСобытия, Больничный.ПричинаНетрудоспособности, Больничный.НачалоВПериодПриостановленияТД);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ДобавитьКомандыСозданияДокументов(КомандыСозданияДокументов, ДополнительныеПараметры) Экспорт
ЗарплатаКадрыРасширенный.ДобавитьВКоллекциюКомандуСозданияДокументаПоМетаданнымДокумента(
КомандыСозданияДокументов, Метаданные.Документы.БольничныйЛист);
КонецФункции
Процедура ЗаполнитьСведенияОПособиях(РеквизитыДляПроведения, ДанныеДляПроведения)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = ДанныеДляПроведения.МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаНачислений.Ссылка,
| ТаблицаНачислений.Начисление,
| ТаблицаНачислений.Сотрудник,
| ТаблицаНачислений.ВидЗанятости КАК ВидЗанятости,
| ЛОЖЬ КАК Сторно,
| ТаблицаНачислений.ОплаченоДней,
| ТаблицаНачислений.Результат,
| ТаблицаНачислений.РезультатВТомЧислеЗаСчетФБ
|ПОМЕСТИТЬ ВТНачисленияДляУчетаПособий
|ИЗ
| Документ.БольничныйЛист.Начисления КАК ТаблицаНачислений
|ГДЕ
| ТаблицаНачислений.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ТаблицаНачислений.Сторно
| ТОГДА ТаблицаНачислений.СторнируемыйДокумент
| ИНАЧЕ ТаблицаНачислений.Ссылка
| КОНЕЦ,
| ТаблицаНачислений.Начисление,
| ТаблицаНачислений.Сотрудник,
| ТаблицаНачислений.ВидЗанятости,
| ТаблицаНачислений.Сторно,
| ТаблицаНачислений.ОплаченоДней,
| ТаблицаНачислений.Результат,
| ТаблицаНачислений.РезультатВТомЧислеЗаСчетФБ
|ИЗ
| Документ.БольничныйЛист.НачисленияПерерасчет КАК ТаблицаНачислений
|ГДЕ
| ТаблицаНачислений.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ТаблицаНачислений.Сторно
| ТОГДА ТаблицаНачислений.СторнируемыйДокумент
| ИНАЧЕ ТаблицаНачислений.Ссылка
| КОНЕЦ,
| ТаблицаНачислений.Начисление,
| ТаблицаНачислений.Сотрудник,
| ТаблицаНачислений.ВидЗанятости,
| ТаблицаНачислений.Сторно,
| 0,
| 0,
| 0
|ИЗ
| Документ.БольничныйЛист.НачисленияПерерасчетНулевыеСторно КАК ТаблицаНачислений
|ГДЕ
| ТаблицаНачислений.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", РеквизитыДляПроведения.Ссылка);
Запрос.Выполнить();
ПособиеПлатитУчастникПилотногоПроекта = ПрямыеВыплатыПособийСоциальногоСтрахования.ПособиеПлатитУчастникПилотногоПроекта(
РеквизитыДляПроведения.Организация,
РеквизитыДляПроведения.ПериодРегистрации,
РеквизитыДляПроведения.ЭЛНКарантинПоКоронавирусу);
УчетПособийСоциальногоСтрахованияРасширенный.ЗаполнитьСведенияОПособиях(ДанныеДляПроведения, ПособиеПлатитУчастникПилотногоПроекта);
КонецПроцедуры
Функция ДанныеСостоянийСотрудников(РеквизитыДляПроведения, ДругиеСотрудники, Кэш) Экспорт
ДанныеСостояний = СостоянияСотрудников.ПустаяТаблицаДанныхСостоянийСотрудника();
КадровыеДанные = КадровыеДанныеСотрудника(РеквизитыДляПроведения.Сотрудник, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ДатаНачалаСобытия);
Если ЗначениеЗаполнено(КадровыеДанные)
И КадровыеДанные.ЕстьДоговорыГПХ Тогда
Если (НЕ ЗначениеЗаполнено(КадровыеДанные.ВидЗанятости))
ИЛИ (ЗначениеЗаполнено(КадровыеДанные.ДатаУвольнения)
И КадровыеДанные.ДатаУвольнения < РеквизитыДляПроведения.ДатаНачалаСобытия) Тогда
Возврат ДанныеСостояний;
КонецЕсли
КонецЕсли;
Если РеквизитыДляПроведения.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
НоваяСтрока = ДанныеСостояний.Добавить();
НоваяСтрока.Сотрудник = РеквизитыДляПроведения.Сотрудник;
НоваяСтрока.Состояние = Перечисления.СостоянияСотрудника.ОтпускПоБеременностиИРодам;
НоваяСтрока.Начало = РеквизитыДляПроведения.ДатаНачала;
НоваяСтрока.Окончание = РеквизитыДляПроведения.ДатаОкончания;
Иначе
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная") Тогда
НоваяСтрока = ДанныеСостояний.Добавить();
НоваяСтрока.Сотрудник = РеквизитыДляПроведения.Сотрудник;
НоваяСтрока.Состояние = Перечисления.СостоянияСотрудника.Болезнь;
НоваяСтрока.Начало = РеквизитыДляПроведения.ДатаНачала;
НоваяСтрока.Окончание = РеквизитыДляПроведения.ДатаОкончания;
Иначе
ПериодыСостояний = ПериодыСостояний(РеквизитыДляПроведения, Кэш);
Для Каждого Период Из ПериодыСостояний Цикл
Если Не ЗначениеЗаполнено(Период.Состояние) Тогда
Продолжить;
КонецЕсли;
СтрокаСотрудника = ДанныеСостояний.Добавить();
СтрокаСотрудника.Сотрудник = РеквизитыДляПроведения.Сотрудник;
СтрокаСотрудника.Состояние = Период.Состояние;
СтрокаСотрудника.Начало = Период.ДатаНачала;
СтрокаСотрудника.Окончание = Период.ДатаОкончания;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ОбратныйИндекс = ДанныеСостояний.Количество();
Пока ОбратныйИндекс > 0 Цикл
ОбратныйИндекс = ОбратныйИндекс - 1;
СтрокаСотрудника = ДанныеСостояний[ОбратныйИндекс];
Для Каждого ДругойСотрудник Из ДругиеСотрудники Цикл
СтрокаСовместителя = ДанныеСостояний.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСовместителя, СтрокаСотрудника);
СтрокаСовместителя.Сотрудник = ДругойСотрудник;
Если РеквизитыДляПроведения.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
СтрокаСовместителя.Состояние = Перечисления.СостоянияСотрудника.ОтпускПоБеременностиИРодам;
Иначе
СтрокаСовместителя.Состояние = Перечисления.СостоянияСотрудника.БолезньБезОплаты;
СтрокаСовместителя.ВидВремени = Справочники.ВидыИспользованияРабочегоВремени.Болезнь;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ДанныеСостояний;
КонецФункции
Функция ДанныеДляПроведения(Больничный, СтруктураВидовУчета, Кэш)
ДанныеДляПроведения = РасчетЗарплаты.СоздатьДанныеДляПроведенияНачисленияЗарплаты();
Если СтруктураВидовУчета.ОстальныеВидыУчета Или СтруктураВидовУчета.СтраховыеВзносы Тогда
РасчетЗарплатыРасширенный.ЗаполнитьНачисления(
ДанныеДляПроведения,
Больничный.Ссылка,
"Начисления,НачисленияПерерасчет,НачисленияПерерасчетНулевыеСторно",
"Ссылка.ПериодРегистрации");
Если Больничный.ДокументРассчитан Тогда
ОтражениеЗарплатыВБухучете.СоздатьВТНачисленияСДаннымиЕНВД(Больничный.Организация, Больничный.ПериодРегистрации, ДанныеДляПроведения.МенеджерВременныхТаблиц, ДанныеДляПроведения.НачисленияПоСотрудникам);
КонецЕсли;
КонецЕсли;
Если СтруктураВидовУчета.ОстальныеВидыУчета Тогда
Если Больничный.ДокументРассчитан Тогда
РасчетЗарплатыРасширенный.ЗаполнитьУдержания(ДанныеДляПроведения, Больничный.Ссылка);
РасчетЗарплаты.ЗаполнитьСписокФизическихЛиц(ДанныеДляПроведения, Больничный.Ссылка, Больничный.ИсправленныйДокумент);
РасчетЗарплаты.ЗаполнитьДанныеНДФЛ(ДанныеДляПроведения, Больничный.Ссылка);
РасчетЗарплатыРасширенный.ЗаполнитьДанныеКорректировкиВыплаты(ДанныеДляПроведения, Больничный.Ссылка, Больничный.ФизическоеЛицо);
ЗаполнитьСведенияОПособиях(Больничный.Ссылка, ДанныеДляПроведения);
РасчетЗарплатыРасширенный.ЗаполнитьПогашениеЗадолженностиПоУдержаниям(ДанныеДляПроведения, Больничный.Ссылка, Больничный.ПериодРегистрации);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
ПараметрыУправленческаяЗарплата = Модуль.ДополнительныеПараметрыПодготовкиДанныхДляПроведения();
ПараметрыУправленческаяЗарплата.ПолеДатыДействия = "Ссылка.ПериодРегистрации";
ПараметрыУправленческаяЗарплата.ПолеВидаНачисления = "Начисление";
Модуль.ПриПодготовкеДанныхДляПроведенияДокументаРасчетаЗарплаты(ДанныеДляПроведения, Больничный.Ссылка, ПараметрыУправленческаяЗарплата);
КонецЕсли;
ЗаймыСотрудникам.ЗаполнитьДанныеДляПроведенияПоЗаймам(ДанныеДляПроведения, Больничный.Ссылка, Больничный.ПланируемаяДатаВыплаты, "Ссылка.ПериодРегистрации");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
СоставМесячногоДенежногоСодержания = Модуль.СведенияОСоставеМесячногоДенежногоСодержания(Больничный.Ссылка, "ДенежноеСодержание,ДенежноеСодержаниеФактическиеНачисления");
ДанныеДляПроведения.Вставить("СоставМесячногоДенежногоСодержания", СоставМесячногоДенежногоСодержания);
КонецЕсли;
КонецЕсли;
ДругиеСотрудники = КадровыйУчетРасширенный.ДругиеСотрудникиФизическогоЛица(
Больничный.ФизическоеЛицо,
Больничный.Организация,
Больничный.Сотрудник,
Больничный.ДатаНачала,
Больничный.ДатаОкончания);
ДанныеДляПроведения.ДанныеСостоянийСотрудников = ДанныеСостоянийСотрудников(Больничный, ДругиеСотрудники, Кэш);
ДругиеСотрудники.Вставить(0, Больничный.Сотрудник);
ДанныеДляПроведения.Вставить("ВсеСотрудники", ДругиеСотрудники);
ЗаполнитьПериодыОтпусков(Больничный, ДанныеДляПроведения);
ДанныеДляПроведения.Вставить("ПериодыУходаЗаРодственниками", ТаблицаДвиженийПоУходу(Больничный, Кэш));
КонецЕсли;
Если Больничный.ДокументРассчитан И СтруктураВидовУчета.ДанныеДляРасчетаСреднего Тогда
ДополнительныеПараметры = УчетСреднегоЗаработка.ДополнительныеПараметрыРегистрацииДанныхСреднегоЗаработка();
ДополнительныеПараметры.МесяцНачисления = "Ссылка.ПериодРегистрации";
УчетСреднегоЗаработка.ЗаполнитьТаблицыДляРегистрацииДанныхСреднегоЗаработка(ДанныеДляПроведения, Больничный.Ссылка, ДополнительныеПараметры);
КонецЕсли;
Возврат ДанныеДляПроведения;
КонецФункции
Процедура ЗаполнитьПериодыОтпусков(РеквизитыДляПроведения, ДанныеДляПроведения)
ПериодыОтпусков = ОстаткиОтпусков.ПустаяТаблицаПериодовОтпусков();
Если Не РеквизитыДляПроведения.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
ДанныеДляПроведения.Вставить("ПериодыОтпусков", ПериодыОтпусков);
Возврат;
КонецЕсли;
ИсходныйДокумент = РеквизитыДляПроведения.Ссылка;
ИсходныйДокументДата = РеквизитыДляПроведения.Дата;
ИсходныйДокументНомер = ЗарплатаКадрыОтчеты.НомерНаПечать(РеквизитыДляПроведения.Номер, РеквизитыДляПроведения.НомерПервичногоДокумента);
Если ЗначениеЗаполнено(РеквизитыДляПроведения.ИсправленныйДокумент) Тогда
ИсходныйДокумент = ИсправлениеДокументовЗарплатаКадры.ПервыйДокументЦепочкиИсправлений(РеквизитыДляПроведения.ИсправленныйДокумент);
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ИсходныйДокумент, "Дата, Номер, НомерПервичногоДокумента");
ИсходныйДокументДата = ЗначенияРеквизитов["Дата"];
ИсходныйДокументНомер = ЗарплатаКадрыОтчеты.НомерНаПечать(ЗначенияРеквизитов["Номер"], ЗначенияРеквизитов["НомерПервичногоДокумента"]);
КонецЕсли;
НоваяСтрока = ПериодыОтпусков.Добавить();
НоваяСтрока.Сотрудник = РеквизитыДляПроведения.Сотрудник;
НоваяСтрока.ДатаНачала = РеквизитыДляПроведения.ДатаНачала;
НоваяСтрока.ДатаОкончания = РеквизитыДляПроведения.ДатаОкончания;
НоваяСтрока.ПериодЗаписи = РеквизитыДляПроведения.ДатаНачала;
НоваяСтрока.КоличествоДней = ЗарплатаКадрыКлиентСервер.ДнейВПериоде(
РеквизитыДляПроведения.ДатаНачала, РеквизитыДляПроведения.ДатаОкончания);
НоваяСтрока.Состояние = Перечисления.СостоянияСотрудника.ОтпускПоБеременностиИРодам;
НоваяСтрока.ИсходныйДокумент = ИсходныйДокумент;
НоваяСтрока.ИсходныйДокументДата = ИсходныйДокументДата;
НоваяСтрока.ИсходныйДокументНомер = ИсходныйДокументНомер;
ДанныеДляПроведения.Вставить("ПериодыОтпусков", ПериодыОтпусков);
КонецПроцедуры
Процедура ЗаполнитьТаблицыКорректировок(РеквизитыДляПроведения, ПараметрыКорректировок)
ТекстЗапроса =
"ВЫБРАТЬ
| КорректировкиНачислений.ФизическоеЛицо КАК ФизическоеЛицо,
| КорректировкиНачислений.ПорядокРасчета КАК ПорядокРасчета,
| КорректировкиНачислений.Начисление КАК Начисление,
| КорректировкиНачислений.СтатьяФинансирования КАК СтатьяФинансирования,
| КорректировкиНачислений.Период КАК Период,
| КорректировкиНачислений.Сумма КАК Сумма
|ИЗ
| Документ.БольничныйЛист.СреднийЗаработокФСС КАК КорректировкиНачислений
|ГДЕ
| КорректировкиНачислений.Источник = ЗНАЧЕНИЕ(Перечисление.ИсточникиДанныхДляРасчетаСреднегоЗаработка.СведенияДоНачалаЭксплуатации)
| И КорректировкиНачислений.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| КорректировкиВремени.ФизическоеЛицо КАК ФизическоеЛицо,
| КорректировкиВремени.Период КАК Период,
| КорректировкиВремени.ОтработаноДнейКалендарных КАК ОтработаноДнейКалендарных,
| КорректировкиВремени.ДнейБолезниУходаЗаДетьми КАК ДнейБолезниУходаЗаДетьми
|ИЗ
| Документ.БольничныйЛист.ОтработанноеВремяДляСреднегоФСС КАК КорректировкиВремени
|ГДЕ
| КорректировкиВремени.Источник <> ЗНАЧЕНИЕ(Перечисление.ИсточникиДанныхДляРасчетаСреднегоЗаработка.Исправления)
| И КорректировкиВремени.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| ПериодыОтсутствий.Ссылка КАК Ссылка,
| ПериодыОтсутствий.НомерСтроки КАК НомерСтроки,
| ПериодыОтсутствий.Начало КАК Начало,
| ПериодыОтсутствий.Окончание КАК Окончание,
| ПериодыОтсутствий.Дни КАК Дни,
| ПериодыОтсутствий.ВидБолезниУходаЗаДетьми КАК ВидБолезниУходаЗаДетьми,
| ПериодыОтсутствий.Источник КАК Источник
|ИЗ
| Документ.БольничныйЛист.ПериодыБолезниУходаЗаДетьми КАК ПериодыОтсутствий
|ГДЕ
| ПериодыОтсутствий.Источник = ЗНАЧЕНИЕ(Перечисление.ИсточникиДанныхДляРасчетаСреднегоЗаработка.СведенияДоНачалаЭксплуатации)
| И ПериодыОтсутствий.Ссылка = &Ссылка";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Ссылка", РеквизитыДляПроведения.Ссылка);
РезультатыЗапроса = Запрос.ВыполнитьПакет();
ПараметрыКорректировок.КорректировкиНачислений = РезультатыЗапроса[0].Выгрузить();
ПараметрыКорректировок.КорректировкиВремени = РезультатыЗапроса[1].Выгрузить();
ПараметрыКорректировок.ПериодыОтсутствий = РезультатыЗапроса[2].Выгрузить();
КонецПроцедуры
Функция РеквизитыДляПроведения(ДокументСсылка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БольничныйЛист.Ссылка КАК Ссылка,
| БольничныйЛист.Организация КАК Организация,
| БольничныйЛист.ПериодРегистрации КАК ПериодРегистрации,
| БольничныйЛист.ДокументРассчитан КАК ДокументРассчитан,
| БольничныйЛист.ПорядокВыплаты КАК ПорядокВыплаты,
| БольничныйЛист.Дата КАК Дата,
| БольничныйЛист.ПланируемаяДатаВыплаты КАК ПланируемаяДатаВыплаты,
| БольничныйЛист.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| БольничныйЛист.Сотрудник КАК Сотрудник,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаНачало КАК ПериодРасчетаСреднегоЗаработкаНачало,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаОкончание КАК ПериодРасчетаСреднегоЗаработкаОкончание,
| БольничныйЛист.ОсвобождатьСтавку КАК ОсвобождатьСтавку,
| БольничныйЛист.КодПричиныНетрудоспособности КАК КодПричиныНетрудоспособности,
| БольничныйЛист.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| БольничныйЛист.ДатаНачала КАК ДатаНачала,
| БольничныйЛист.ДатаОкончания КАК ДатаОкончания,
| БольничныйЛист.НазначитьПособие КАК НазначитьПособие,
| БольничныйЛист.ДатаНачалаОплаты КАК ДатаНачалаОплаты,
| БольничныйЛист.ДатаОкончанияОплаты КАК ДатаОкончанияОплаты,
| БольничныйЛист.ФизическоеЛицо КАК ФизическоеЛицо,
| БольничныйЛист.ИсправленныйДокумент КАК ИсправленныйДокумент,
| БольничныйЛист.Номер КАК Номер,
| БольничныйЛист.ОсвобождениеДатаНачала1 КАК ОсвобождениеДатаНачала1,
| БольничныйЛист.ОсвобождениеДатаНачала2 КАК ОсвобождениеДатаНачала2,
| БольничныйЛист.ОсвобождениеДатаНачала3 КАК ОсвобождениеДатаНачала3,
| БольничныйЛист.ОсвобождениеДатаОкончания1 КАК ОсвобождениеДатаОкончания1,
| БольничныйЛист.ОсвобождениеДатаОкончания2 КАК ОсвобождениеДатаОкончания2,
| БольничныйЛист.ОсвобождениеДатаОкончания3 КАК ОсвобождениеДатаОкончания3,
| БольничныйЛист.СлучайУходаЗаБольнымРебенком КАК СлучайУходаЗаБольнымРебенком,
| БольничныйЛист.РодственникЗаКоторымОсуществляетсяУход1 КАК РодственникЗаКоторымОсуществляетсяУход1,
| БольничныйЛист.ДатаНачалаРодственник1 КАК ДатаНачалаРодственник1,
| БольничныйЛист.ДатаОкончанияРодственник1 КАК ДатаОкончанияРодственник1,
| БольничныйЛист.РодственникЗаКоторымОсуществляетсяУход2 КАК РодственникЗаКоторымОсуществляетсяУход2,
| БольничныйЛист.ДатаНачалаРодственник2 КАК ДатаНачалаРодственник2,
| БольничныйЛист.ДатаОкончанияРодственник2 КАК ДатаОкончанияРодственник2,
| БольничныйЛист.РассчитатьЗарплату КАК РассчитатьЗарплату,
| БольничныйЛист.ДоходПолученНаТерриторииРФ КАК ДоходПолученНаТерриторииРФ,
| БольничныйЛист.ДатаНачалаПоловиннойОплаты КАК ДатаНачалаПоловиннойОплаты,
| БольничныйЛист.ДатаНарушенияРежима КАК ДатаНарушенияРежима,
| БольничныйЛист.ВидНеоплачиваемогоВремени КАК ВидНеоплачиваемогоВремени,
| БольничныйЛист.ВидОплатыЗаСчетРаботодателя КАК ВидОплатыЗаСчетРаботодателя,
| БольничныйЛист.ВидОплатыПособия КАК ВидОплатыПособия,
| БольничныйЛист.ПрименятьЛьготыПриНачисленииПособия КАК ПрименятьЛьготыПриНачисленииПособия,
| БольничныйЛист.ФинансированиеФедеральнымБюджетом КАК ФинансированиеФедеральнымБюджетом,
| БольничныйЛист.УсловияИсчисленияКод1 КАК УсловияИсчисленияКод1,
| БольничныйЛист.УсловияИсчисленияКод2 КАК УсловияИсчисленияКод2,
| БольничныйЛист.УсловияИсчисленияКод3 КАК УсловияИсчисленияКод3,
| БольничныйЛист.ПрерывистыйМетод КАК ПрерывистыйМетод,
| БольничныйЛист.СтажЛет КАК СтажЛет,
| БольничныйЛист.СтажМесяцев КАК СтажМесяцев,
| БольничныйЛист.СтажРасширенныйЛет КАК СтажРасширенныйЛет,
| БольничныйЛист.СтажРасширенныйМесяцев КАК СтажРасширенныйМесяцев,
| БольничныйЛист.ПроцентОплаты КАК ПроцентОплаты,
| БольничныйЛист.ПроцентОплатыБезЛьгот КАК ПроцентОплатыБезЛьгот,
| БольничныйЛист.ОграничениеПособия КАК ОграничениеПособия,
| БольничныйЛист.ОграничениеПособияБезЛьгот КАК ОграничениеПособияБезЛьгот,
| БольничныйЛист.СдвигатьПериодОплаты КАК СдвигатьПериодОплаты,
| БольничныйЛист.НачалоВПериодПриостановленияТД КАК НачалоВПериодПриостановленияТД,
| БольничныйЛист.ЯвляетсяПродолжениемБолезни КАК ЯвляетсяПродолжениемБолезни,
| БольничныйЛист.ПервичныйБольничныйЛист КАК ПервичныйБольничныйЛист,
| БольничныйЛист.НомерПервичногоДокумента КАК НомерПервичногоДокумента
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист
|ГДЕ
| БольничныйЛист.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.НомерСтроки КАК НомерСтроки,
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.ИдентификаторСтроки КАК ИдентификаторСтроки,
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.Территория КАК Территория,
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.УсловияТруда КАК УсловияТруда,
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.ДоляРаспределения КАК ДоляРаспределения,
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.Результат КАК Результат,
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.ИдентификаторСтрокиПоказателей КАК ИдентификаторСтрокиПоказателей,
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.СуммаВычета КАК СуммаВычета,
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.СкидкаПоВзносам КАК СкидкаПоВзносам,
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.РанееНачислено КАК РанееНачислено
|ИЗ
| Документ.БольничныйЛист.РаспределениеПоТерриториямУсловиямТруда КАК БольничныйЛистРаспределениеПоТерриториямУсловиямТруда
|ГДЕ
| БольничныйЛистРаспределениеПоТерриториямУсловиямТруда.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| БольничныйЛистРаспределениеРезультатовНачислений.ИдентификаторСтроки КАК ИдентификаторСтроки,
| БольничныйЛистРаспределениеРезультатовНачислений.Территория КАК Территория,
| БольничныйЛистРаспределениеРезультатовНачислений.СтатьяФинансирования КАК СтатьяФинансирования,
| БольничныйЛистРаспределениеРезультатовНачислений.СтатьяРасходов КАК СтатьяРасходов,
| БольничныйЛистРаспределениеРезультатовНачислений.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| БольничныйЛистРаспределениеРезультатовНачислений.ОблагаетсяЕНВД КАК ОблагаетсяЕНВД,
| СУММА(БольничныйЛистРаспределениеРезультатовНачислений.Результат) КАК Результат,
| БольничныйЛистРаспределениеРезультатовНачислений.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат
|ИЗ
| Документ.БольничныйЛист.РаспределениеРезультатовНачислений КАК БольничныйЛистРаспределениеРезультатовНачислений
|ГДЕ
| БольничныйЛистРаспределениеРезультатовНачислений.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| БольничныйЛистРаспределениеРезультатовНачислений.Территория,
| БольничныйЛистРаспределениеРезультатовНачислений.СтатьяФинансирования,
| БольничныйЛистРаспределениеРезультатовНачислений.СтатьяРасходов,
| БольничныйЛистРаспределениеРезультатовНачислений.СпособОтраженияЗарплатыВБухучете,
| БольничныйЛистРаспределениеРезультатовНачислений.ОблагаетсяЕНВД,
| БольничныйЛистРаспределениеРезультатовНачислений.ПодразделениеУчетаЗатрат,
| БольничныйЛистРаспределениеРезультатовНачислений.ИдентификаторСтроки
|;
|
|
|ВЫБРАТЬ
| БольничныйЛистИсключаемыеПериоды.Ссылка КАК Ссылка,
| БольничныйЛистИсключаемыеПериоды.НомерСтроки КАК НомерСтроки,
| БольничныйЛистИсключаемыеПериоды.ДатаНачала КАК ДатаНачала,
| БольничныйЛистИсключаемыеПериоды.ДатаОкончания КАК ДатаОкончания,
| БольничныйЛистИсключаемыеПериоды.КалендарныхДней КАК КалендарныхДней,
| БольничныйЛистИсключаемыеПериоды.Регистрировать КАК Регистрировать,
| БольничныйЛистИсключаемыеПериоды.Изменил КАК Изменил,
| БольничныйЛистИсключаемыеПериоды.Комментарий КАК Комментарий,
| БольничныйЛистИсключаемыеПериоды.Причина КАК Причина
|ИЗ
| Документ.БольничныйЛист.ИсключаемыеПериоды КАК БольничныйЛистИсключаемыеПериоды
|ГДЕ
| БольничныйЛистИсключаемыеПериоды.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| БольничныйЛистПериодыУходаЗаРодственниками.Ссылка КАК Ссылка,
| БольничныйЛистПериодыУходаЗаРодственниками.НомерСтроки КАК НомерСтроки,
| БольничныйЛистПериодыУходаЗаРодственниками.Родственник КАК Родственник,
| БольничныйЛистПериодыУходаЗаРодственниками.КодПричины КАК КодПричины,
| БольничныйЛистПериодыУходаЗаРодственниками.ДатаНачала КАК ДатаНачала,
| БольничныйЛистПериодыУходаЗаРодственниками.ДатаОкончания КАК ДатаОкончания,
| БольничныйЛистПериодыУходаЗаРодственниками.ИспользованоДней КАК ИспользованоДней,
| БольничныйЛистПериодыУходаЗаРодственниками.ДнейПоловиннойОплаты КАК ДнейПоловиннойОплаты,
| БольничныйЛистПериодыУходаЗаРодственниками.КодСвязи КАК КодСвязи,
| БольничныйЛистПериодыУходаЗаРодственниками.Фамилия КАК Фамилия,
| БольничныйЛистПериодыУходаЗаРодственниками.Имя КАК Имя,
| БольничныйЛистПериодыУходаЗаРодственниками.Отчество КАК Отчество,
| БольничныйЛистПериодыУходаЗаРодственниками.СНИЛС КАК СНИЛС,
| БольничныйЛистПериодыУходаЗаРодственниками.ДатаРождения КАК ДатаРождения,
| БольничныйЛистПериодыУходаЗаРодственниками.РежимЛечения КАК РежимЛечения,
| БольничныйЛистПериодыУходаЗаРодственниками.ВозрастЛет КАК ВозрастЛет,
| БольничныйЛистПериодыУходаЗаРодственниками.ВозрастМесяцев КАК ВозрастМесяцев,
| БольничныйЛистПериодыУходаЗаРодственниками.СлучайУхода КАК СлучайУхода,
| БольничныйЛистПериодыУходаЗаРодственниками.КоличествоДнейИзменено КАК КоличествоДнейИзменено,
| БольничныйЛистПериодыУходаЗаРодственниками.ПроцентОплаты КАК ПроцентОплаты,
| БольничныйЛистПериодыУходаЗаРодственниками.ПроцентОплатыБезЛьгот КАК ПроцентОплатыБезЛьгот,
| БольничныйЛистПериодыУходаЗаРодственниками.ОграничениеПособия КАК ОграничениеПособия,
| БольничныйЛистПериодыУходаЗаРодственниками.ОграничениеПособияБезЛьгот КАК ОграничениеПособияБезЛьгот
|ИЗ
| Документ.БольничныйЛист.ПериодыУходаЗаРодственниками КАК БольничныйЛистПериодыУходаЗаРодственниками
|ГДЕ
| БольничныйЛистПериодыУходаЗаРодственниками.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| БольничныйЛистПериодыПростоя.ДатаНачала КАК ДатаНачала,
| БольничныйЛистПериодыПростоя.ДатаОкончания КАК ДатаОкончания,
| БольничныйЛистПериодыПростоя.СреднийЗаработок КАК СреднийЗаработок
|ИЗ
| Документ.БольничныйЛист.ПериодыПростоя КАК БольничныйЛистПериодыПростоя
|ГДЕ
| БольничныйЛистПериодыПростоя.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Результаты = Запрос.ВыполнитьПакет();
МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(Результаты[0].Выгрузить());
РеквизитыДляПроведения = МассивСтруктур[0];
РеквизитыДляПроведения.Вставить("РаспределениеПоТерриториямУсловиямТруда", Результаты[1].Выгрузить());
РеквизитыДляПроведения.Вставить("РаспределениеРезультатовНачислений", Результаты[2].Выгрузить());
РеквизитыДляПроведения.Вставить("ИсключаемыеПериоды", Результаты[3].Выгрузить());
РеквизитыДляПроведения.Вставить("ПериодыУходаЗаРодственниками", Результаты[4].Выгрузить());
РеквизитыДляПроведения.Вставить("ПериодыПростоя", Результаты[5].Выгрузить());
Возврат РеквизитыДляПроведения;
КонецФункции
Процедура ПроверитьПересечениеФактическогоПериодаДействия(ДокументСсылка, Отказ)
Если Отказ Тогда
Возврат;
КонецЕсли;
ИменаРеквизитов =
"ПериодРегистрации,
|Организация,
|ИсправленныйДокумент,
|ВидОплатыПособия,
|ВидОплатыЗаСчетРаботодателя,
|ВидНеоплачиваемогоВремени,
|ВидРасчетаДоплаты";
РеквизитыДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументСсылка, ИменаРеквизитов);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст = "ВЫБРАТЬ
| Начисления.*
|ИЗ
| Документ.БольничныйЛист.Начисления КАК Начисления
|ГДЕ
| Начисления.Ссылка = &Ссылка";
Начисления = Запрос.Выполнить().Выгрузить();
ПараметрыПроверки = РасчетЗарплатыРасширенный.ПараметрыПроверкиПересеченияФактическогоПериодаДействия();
ПараметрыПроверки.Организация = РеквизитыДокумента.Организация;
ПараметрыПроверки.ПериодРегистрации = РеквизитыДокумента.ПериодРегистрации;
ПараметрыПроверки.Документ = ДокументСсылка;
ПараметрыПроверки.Начисления = Начисления;
ПараметрыПроверки.ИсправленныйДокумент = РеквизитыДокумента.ИсправленныйДокумент;
ОсновныеНачисления = Новый Массив;
ОсновныеНачисления.Добавить(РеквизитыДокумента.ВидОплатыПособия);
ОсновныеНачисления.Добавить(РеквизитыДокумента.ВидОплатыЗаСчетРаботодателя);
ОсновныеНачисления.Добавить(РеквизитыДокумента.ВидНеоплачиваемогоВремени);
ОсновныеНачисления.Добавить(РеквизитыДокумента.ВидРасчетаДоплаты);
ПараметрыПроверки.ОсновныеНачисления = ОсновныеНачисления;
РасчетЗарплатыРасширенный.ПроверитьПересечениеФактическогоПериодаДействия(ПараметрыПроверки, Отказ);
КонецПроцедуры
#Область Печать
#Область ПечатьРасчетаСреднегоЗаработка
Функция ДанныеДокументовДляПечатиРасчетаСреднегоЗаработкаФСС(МассивСсылок) Экспорт
ДанныеДокументов = Новый Массив;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
УчетПособийСоциальногоСтрахования.СоздатьВТДанныеДокументовДляРасчетаСреднегоЗаработкаФСС(Запрос.МенеджерВременныхТаблиц, МассивСсылок);
СоздатьВТКадровыеДанныеСотрудниковБольничныхЛистов(Запрос, МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокументов.Ссылка КАК Ссылка,
| ДанныеДокументов.Сотрудник КАК Сотрудник,
| ДанныеДокументов.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| ДанныеДокументов.ПрименятьПредельнуюВеличину КАК ПрименятьПредельнуюВеличину,
| ДанныеДокументов.ИспользоватьДниБолезниУходаЗаДетьми КАК ИспользоватьДниБолезниУходаЗаДетьми,
| ДанныеДокументов.УчитыватьДниПриостановленияТД КАК УчитыватьДниПриостановленияТД,
| ДанныеДокументов.ДнейПриостановленияТДЗаГод1 КАК ДнейПриостановленияТДЗаГод1,
| ДанныеДокументов.ДнейПриостановленияТДЗаГод2 КАК ДнейПриостановленияТДЗаГод2,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаНачало КАК ПериодРасчетаСреднегоЗаработкаНачало,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаОкончание КАК ПериодРасчетаСреднегоЗаработкаОкончание,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаПервыйГод КАК ПериодРасчетаСреднегоЗаработкаПервыйГод,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаВторойГод КАК ПериодРасчетаСреднегоЗаработкаВторойГод,
| ДанныеДокументов.УчитыватьЗаработокПредыдущихСтрахователей КАК УчитыватьЗаработокПредыдущихСтрахователей,
| ДанныеДокументов.РасчетПоПравилам2010Года КАК РасчетПоПравилам2010Года,
| ДанныеДокументов.ДоляНеполногоВремени КАК ДоляНеполногоВремени,
| ДанныеДокументов.РайонныйКоэффициентРФ КАК РайонныйКоэффициентРФ,
| ДанныеДокументов.МинимальныйРазмерОплатыТрудаРФ КАК МинимальныйРазмерОплатыТрудаРФ,
| БольничныйЛист.Организация КАК Организация,
| БольничныйЛист.Дата КАК ДатаДокумента,
| БольничныйЛист.Номер КАК НомерДокумента,
| БольничныйЛист.ДатаНачала КАК ДатаНачалаОтсутствия,
| БольничныйЛист.ДатаОкончания КАК ДатаОкончанияОтсутствия,
| БольничныйЛист.ИсточникСреднего КАК ИсточникСреднего,
| Организации.НаименованиеПолное КАК ПолноеНаименованиеОрганизации,
| Организации.Наименование КАК НаименованиеОрганизации,
| ВТКадровыеДанныеСотрудников.Организация КАК Страхователь,
| ВТКадровыеДанныеСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
| ВТКадровыеДанныеСотрудников.ФИОПолные КАК ФИОПолные,
| ВТКадровыеДанныеСотрудников.ТабельныйНомер КАК ТабельныйНомер,
| ВТКадровыеДанныеСотрудников.Подразделение КАК Подразделение,
| ВТКадровыеДанныеСотрудников.Должность КАК Должность,
| ВТКадровыеДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
| БольничныйЛист.НомерПервичногоДокумента КАК НомерПервичногоДокумента
|ИЗ
| ВТДанныеДокументовДляРасчетаСреднегоЗаработкаФСС КАК ДанныеДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК БольничныйЛист
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
| ПО БольничныйЛист.Организация = Организации.Ссылка
| ПО ДанныеДокументов.Ссылка = БольничныйЛист.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК ВТКадровыеДанныеСотрудников
| ПО ДанныеДокументов.Сотрудник = ВТКадровыеДанныеСотрудников.Сотрудник
| И ДанныеДокументов.ДатаНачалаСобытия = ВТКадровыеДанныеСотрудников.Период";
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
ТаблицыДанныхОСреднем = УчетПособийСоциальногоСтрахования.ТаблицыДанныхСреднегоЗаработкаФСС("БольничныйЛист", МассивСсылок);
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеДокумента = Обработки.ПечатьРасчетаСреднегоЗаработкаФСС.ПустаяСтруктураДанныхДляПечатиСреднегоЗаработка();
ЗаполнитьЗначенияСвойств(ДанныеДокумента.РеквизитыДокумента, Выборка);
ЗаполнитьЗначенияСвойств(ДанныеДокумента.КадровыеДанныеСотрудника, Выборка);
РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС = УчетПособийСоциальногоСтрахования.РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС();
ЗаполнитьЗначенияСвойств(РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС, Выборка);
ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС = УчетПособийСоциальногоСтрахования.ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС(
РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС,
ТаблицыДанныхОСреднем);
ДанныеДокумента.ПараметрыРасчета = ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС.ПараметрыРасчета;
ДанныеДокумента.ДанныеРасчетаСреднего = ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС.ДанныеРасчетаСреднего;
ДанныеДокументов.Добавить(ДанныеДокумента);
КонецЦикла;
КонецЕсли;
Возврат ДанныеДокументов;
КонецФункции
Процедура СоздатьВТКадровыеДанныеСотрудниковБольничныхЛистов(Запрос, МассивСсылок)
Запрос.Текст =
"ВЫБРАТЬ
| БольничныйЛист.Сотрудник,
| БольничныйЛист.ДатаНачалаСобытия КАК Период
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист
|ГДЕ
| БольничныйЛист.Ссылка В(&МассивСсылок)";
Запрос.Выполнить();
Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудники");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(Описатель, Истина, "Организация,ФизическоеЛицо,ФИОПолные,ТабельныйНомер,Подразделение,Должность,ВидЗанятости");
КонецПроцедуры
#КонецОбласти
#Область ПФ_MXL_РасчетПособия
Функция ВыборкаПериодовУхода(МассивСсылок)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодыУхода.Ссылка КАК Ссылка,
| ПериодыУхода.НомерСтроки КАК НомерСтроки,
| ПериодыУхода.Родственник КАК Родственник,
| ПериодыУхода.КодПричины КАК КодПричины,
| ПериодыУхода.ДатаНачала КАК ДатаНачала,
| ПериодыУхода.ДатаОкончания КАК ДатаОкончания,
| ПериодыУхода.ИспользованоДней КАК ИспользованоДней,
| ПериодыУхода.ДнейПоловиннойОплаты КАК ДнейПоловиннойОплаты,
| ПериодыУхода.КодСвязи КАК КодСвязи,
| ПериодыУхода.Фамилия КАК Фамилия,
| ПериодыУхода.Имя КАК Имя,
| ПериодыУхода.Отчество КАК Отчество,
| ПериодыУхода.СНИЛС КАК СНИЛС,
| ПериодыУхода.ДатаРождения КАК ДатаРождения,
| ПериодыУхода.РежимЛечения КАК РежимЛечения,
| ПериодыУхода.ВозрастЛет КАК ВозрастЛет,
| ПериодыУхода.ВозрастМесяцев КАК ВозрастМесяцев,
| ПериодыУхода.СлучайУхода КАК СлучайУхода,
| ПериодыУхода.КоличествоДнейИзменено КАК КоличествоДнейИзменено
|ИЗ
| Документ.БольничныйЛист.ПериодыУходаЗаРодственниками КАК ПериодыУхода
|ГДЕ
| ПериодыУхода.Ссылка В(&МассивСсылок)
|
|УПОРЯДОЧИТЬ ПО
| ПериодыУхода.Ссылка,
| ПериодыУхода.НомерСтроки";
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Возврат Запрос.Выполнить().Выбрать();
КонецФункции
Процедура ПриПечатиРасчетаПособия(КонтекстПечати)
ТабличныйДокумент = КонтекстПечати.ТабличныйДокумент;
ОбъектыПечати = КонтекстПечати.ОбъектыПечати;
МассивОбъектов = КонтекстПечати.МассивОбъектов;
УправлениеПечатьюБЗК.УстановитьОтступ(ТабличныйДокумент, 0, 0, 0, 0);
ДанныеДляПечатиРасчетаПособия = ДанныеДляПечатиРасчетаПособия(МассивОбъектов);
ВыборкаДляШапки = ДанныеДляПечатиРасчетаПособия.ВыборкаДляШапки;
КадровыеДанныеСотрудников = ДанныеДляПечатиРасчетаПособия.КадровыеДанныеСотрудников;
Пока ВыборкаДляШапки.Следующий() Цикл
Если ВыборкаДляШапки.РасчетПоПравилам2010Года Тогда
Продолжить;
КонецЕсли;
УправлениеПечатьюБЗК.ПередПечатьюОчередногоОбъекта(КонтекстПечати);
ВывестиШапкуРасчетаПособия(КонтекстПечати, ВыборкаДляШапки, КадровыеДанныеСотрудников);
ВывестиТаблицыРасчетаПособия(КонтекстПечати, ВыборкаДляШапки, ДанныеДляПечатиРасчетаПособия);
УправлениеПечатьюБЗК.ПослеПечатиОчередногоОбъекта(КонтекстПечати, ВыборкаДляШапки.Ссылка);
КонецЦикла;
КонецПроцедуры
Функция ДанныеДляПечатиРасчетаПособия(МассивСсылок, НомерТаблицыРазделителяСреднегоЗаработка = Неопределено)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.УстановитьПараметр("ДатаВключенияРКПриРасчетеБольничного", УчетПособийСоциальногоСтрахования.ДатаВключенияРКПриРасчетеБольничного());
Запрос.Текст =
"ВЫБРАТЬ
| БольничныеЛисты.Ссылка КАК Ссылка,
| БольничныеЛисты.АдресМедицинскойОрганизации КАК АдресМедицинскойОрганизации,
| БольничныеЛисты.ВидНеоплачиваемогоВремени КАК ВидНеоплачиваемогоВремени,
| БольничныеЛисты.ВидОплатыЗаСчетРаботодателя КАК ВидОплатыЗаСчетРаботодателя,
| БольничныеЛисты.ВидОплатыПособия КАК ВидОплатыПособия,
| БольничныеЛисты.ВидРасчетаДоплаты КАК ВидРасчетаДоплаты,
| БольничныеЛисты.ВторойКодПричиныНетрудоспособности КАК ВторойКодПричиныНетрудоспособности,
| БольничныеЛисты.ГруппаИнвалидности КАК ГруппаИнвалидности,
| БольничныеЛисты.ДатаАктаН1 КАК ДатаАктаН1,
| БольничныеЛисты.ДатаВыдачиЛисткаНетрудоспособности КАК ДатаВыдачиЛисткаНетрудоспособности,
| БольничныеЛисты.ДатаИзмененияКодаПричиныНетрудоспособности КАК ДатаИзмененияКодаПричиныНетрудоспособности,
| БольничныеЛисты.ДатаНаправленияВБюроМСЭ КАК ДатаНаправленияВБюроМСЭ,
| БольничныеЛисты.ДатаНарушенияРежима КАК ДатаНарушенияРежима,
| БольничныеЛисты.ДатаНачала КАК ДатаНачала,
| БольничныеЛисты.ДатаНачалаОплаты КАК ДатаНачалаОплаты,
| БольничныеЛисты.ДатаНачалаПоловиннойОплаты КАК ДатаНачалаПоловиннойОплаты,
| БольничныеЛисты.ДатаНачалаРаботы КАК ДатаНачалаРаботы,
| БольничныеЛисты.ДатаНачалаРодственник1 КАК ДатаНачалаРодственник1,
| БольничныеЛисты.ДатаНачалаРодственник2 КАК ДатаНачалаРодственник2,
| БольничныеЛисты.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| БольничныеЛисты.ДатаНовыйСтатусНетрудоспособного КАК ДатаНовыйСтатусНетрудоспособного,
| БольничныеЛисты.ДатаОкончания КАК ДатаОкончания,
| БольничныеЛисты.ДатаОкончанияОплаты КАК ДатаОкончанияОплаты,
| БольничныеЛисты.ДатаОкончанияПутевки КАК ДатаОкончанияПутевки,
| БольничныеЛисты.ДатаОкончанияРодственник1 КАК ДатаОкончанияРодственник1,
| БольничныеЛисты.ДатаОкончанияРодственник2 КАК ДатаОкончанияРодственник2,
| БольничныеЛисты.ДатаОсвидетельствованияМСЭ КАК ДатаОсвидетельствованияМСЭ,
| БольничныеЛисты.ДатаРегистрацииДокументовМСЭ КАК ДатаРегистрацииДокументовМСЭ,
| БольничныеЛисты.ДнейОплаты КАК ДнейОплаты,
| БольничныеЛисты.ДокументРассчитан КАК ДокументРассчитан,
| БольничныеЛисты.ДолжностьРуководителя КАК ДолжностьРуководителя,
| БольничныеЛисты.ДоляНеполногоВремени КАК ДоляНеполногоВремени,
| БольничныеЛисты.ДоначислитьЗарплатуПриНеобходимости КАК ДоначислитьЗарплатуПриНеобходимости,
| БольничныеЛисты.ДоплачиватьДоДенежногоСодержания КАК ДоплачиватьДоДенежногоСодержания,
| БольничныеЛисты.ДоплачиватьДоСреднегоЗаработка КАК ДоплачиватьДоСреднегоЗаработка,
| БольничныеЛисты.ДополнительныйКодПричиныНетрудоспособности КАК ДополнительныйКодПричиныНетрудоспособности,
| БольничныеЛисты.ДоходПолученНаТерриторииРФ КАК ДоходПолученНаТерриторииРФ,
| БольничныеЛисты.ИсправленныйДокумент КАК ИсправленныйДокумент,
| БольничныеЛисты.КодНарушенияРежима КАК КодНарушенияРежима,
| БольничныеЛисты.КодПричиныНетрудоспособности КАК КодПричиныНетрудоспособности,
| БольничныеЛисты.Комментарий КАК Комментарий,
| БольничныеЛисты.МедицинскаяОрганизация КАК МедицинскаяОрганизация,
| БольничныеЛисты.МинимальныйСреднедневнойЗаработок КАК МинимальныйСреднедневнойЗаработок,
| ВЫБОР
| КОГДА БольничныеЛисты.ДатаНачалаСобытия >= &ДатаВключенияРКПриРасчетеБольничного
| ТОГДА БольничныеЛисты.МинимальныйСреднедневнойЗаработок * БольничныеЛисты.РайонныйКоэффициентРФнаНачалоСобытия
| ИНАЧЕ БольничныеЛисты.МинимальныйСреднедневнойЗаработок
| КОНЕЦ КАК МинимальныйСреднедневнойДляСравненияСМРОТ,
| БольничныеЛисты.НазначитьПособие КАК НазначитьПособие,
| БольничныеЛисты.НаименованиеМедицинскойОрганизации КАК НаименованиеМедицинскойОрганизации,
| БольничныеЛисты.НаименованиеОрганизацииВЛисткеНетрудоспособности КАК НаименованиеОрганизацииВЛисткеНетрудоспособности,
| БольничныеЛисты.Начислено КАК Начислено,
| БольничныеЛисты.НовыйСтатусНетрудоспособного КАК НовыйСтатусНетрудоспособного,
| БольничныеЛисты.НомерЛисткаНетрудоспособности КАК НомерЛисткаНетрудоспособности,
| БольничныеЛисты.НомерЛисткаПоОсновномуМестуРаботы КАК НомерЛисткаПоОсновномуМестуРаботы,
| БольничныеЛисты.НомерЛисткаПродолжения КАК НомерЛисткаПродолжения,
| БольничныеЛисты.НомерПервичногоЛисткаНетрудоспособности КАК НомерПервичногоЛисткаНетрудоспособности,
| БольничныеЛисты.НомерПутевки КАК НомерПутевки,
| БольничныеЛисты.ОграничениеПособия КАК ОграничениеПособия,
| БольничныеЛисты.ОграничениеПособияБезЛьгот КАК ОграничениеПособияБезЛьгот,
| БольничныеЛисты.ОГРН_Санатория КАК ОГРН_Санатория,
| БольничныеЛисты.ОГРНМедицинскойОрганизации КАК ОГРНМедицинскойОрганизации,
| БольничныеЛисты.Организация КАК Организация,
| БольничныеЛисты.ОсвобождатьСтавку КАК ОсвобождатьСтавку,
| БольничныеЛисты.ОсвобождениеДатаНачала1 КАК ОсвобождениеДатаНачала1,
| БольничныеЛисты.ОсвобождениеДатаНачала2 КАК ОсвобождениеДатаНачала2,
| БольничныеЛисты.ОсвобождениеДатаНачала3 КАК ОсвобождениеДатаНачала3,
| БольничныеЛисты.ОсвобождениеДатаОкончания1 КАК ОсвобождениеДатаОкончания1,
| БольничныеЛисты.ОсвобождениеДатаОкончания2 КАК ОсвобождениеДатаОкончания2,
| БольничныеЛисты.ОсвобождениеДатаОкончания3 КАК ОсвобождениеДатаОкончания3,
| БольничныеЛисты.ОсвобождениеДолжностьВрача1 КАК ОсвобождениеДолжностьВрача1,
| БольничныеЛисты.ОсвобождениеДолжностьВрача2 КАК ОсвобождениеДолжностьВрача2,
| БольничныеЛисты.ОсвобождениеДолжностьВрача3 КАК ОсвобождениеДолжностьВрача3,
| БольничныеЛисты.ОсвобождениеДолжностьВрачаПредседателяВК1 КАК ОсвобождениеДолжностьВрачаПредседателяВК1,
| БольничныеЛисты.ОсвобождениеДолжностьВрачаПредседателяВК2 КАК ОсвобождениеДолжностьВрачаПредседателяВК2,
| БольничныеЛисты.ОсвобождениеДолжностьВрачаПредседателяВК3 КАК ОсвобождениеДолжностьВрачаПредседателяВК3,
| БольничныеЛисты.ОсвобождениеИдентификационныйНомерВрача1 КАК ОсвобождениеИдентификационныйНомерВрача1,
| БольничныеЛисты.ОсвобождениеИдентификационныйНомерВрача2 КАК ОсвобождениеИдентификационныйНомерВрача2,
| БольничныеЛисты.ОсвобождениеИдентификационныйНомерВрача3 КАК ОсвобождениеИдентификационныйНомерВрача3,
| БольничныеЛисты.ОсвобождениеИдентификационныйНомерВрачаПредседателяВК1 КАК ОсвобождениеИдентификационныйНомерВрачаПредседателяВК1,
| БольничныеЛисты.ОсвобождениеИдентификационныйНомерВрачаПредседателяВК2 КАК ОсвобождениеИдентификационныйНомерВрачаПредседателяВК2,
| БольничныеЛисты.ОсвобождениеИдентификационныйНомерВрачаПредседателяВК3 КАК ОсвобождениеИдентификационныйНомерВрачаПредседателяВК3,
| БольничныеЛисты.ОсвобождениеФИОВрача1 КАК ОсвобождениеФИОВрача1,
| БольничныеЛисты.ОсвобождениеФИОВрача2 КАК ОсвобождениеФИОВрача2,
| БольничныеЛисты.ОсвобождениеФИОВрача3 КАК ОсвобождениеФИОВрача3,
| БольничныеЛисты.ОсвобождениеФИОВрачаПредседателяВК1 КАК ОсвобождениеФИОВрачаПредседателяВК1,
| БольничныеЛисты.ОсвобождениеФИОВрачаПредседателяВК2 КАК ОсвобождениеФИОВрачаПредседателяВК2,
| БольничныеЛисты.ОсвобождениеФИОВрачаПредседателяВК3 КАК ОсвобождениеФИОВрачаПредседателяВК3,
| БольничныеЛисты.ОснованиеПодписиРуководителя КАК ОснованиеПодписиРуководителя,
| БольничныеЛисты.ОсновноеМестоРаботы КАК ОсновноеМестоРаботы,
| БольничныеЛисты.Ответственный КАК Ответственный,
| БольничныеЛисты.ПервичныйБольничныйЛист КАК ПервичныйБольничныйЛист,
| БольничныеЛисты.ПериодНахожденияВСтационареСРебенкомПо КАК ПериодНахожденияВСтационареСРебенкомПо,
| БольничныеЛисты.ПериодНахожденияВСтационареСРебенкомС КАК ПериодНахожденияВСтационареСРебенкомС,
| БольничныеЛисты.ПериодРасчетаСреднегоЗаработкаВторойГод КАК ПериодРасчетаСреднегоЗаработкаВторойГод,
| БольничныеЛисты.ПериодРасчетаСреднегоЗаработкаНачало КАК ПериодРасчетаСреднегоЗаработкаНачало,
| БольничныеЛисты.ПериодРасчетаСреднегоЗаработкаОкончание КАК ПериодРасчетаСреднегоЗаработкаОкончание,
| БольничныеЛисты.ПериодРасчетаСреднегоЗаработкаПервыйГод КАК ПериодРасчетаСреднегоЗаработкаПервыйГод,
| БольничныеЛисты.ПериодРегистрации КАК ПериодРегистрации,
| БольничныеЛисты.ПланируемаяДатаВыплаты КАК ПланируемаяДатаВыплаты,
| БольничныеЛисты.ПорядокВыплаты КАК ПорядокВыплаты,
| БольничныеЛисты.ПособиеВыплачиваетсяФСС КАК ПособиеВыплачиваетсяФСС,
| БольничныеЛисты.ПоставленаНаУчетВРанниеСрокиБеременности КАК ПоставленаНаУчетВРанниеСрокиБеременности,
| БольничныеЛисты.ПоУходуВозрастЛет1 КАК ПоУходуВозрастЛет1,
| БольничныеЛисты.ПоУходуВозрастЛет2 КАК ПоУходуВозрастЛет2,
| БольничныеЛисты.ПоУходуВозрастМесяцев1 КАК ПоУходуВозрастМесяцев1,
| БольничныеЛисты.ПоУходуВозрастМесяцев2 КАК ПоУходуВозрастМесяцев2,
| БольничныеЛисты.ПоУходуИспользованоДней1 КАК ПоУходуИспользованоДней1,
| БольничныеЛисты.ПоУходуИспользованоДней2 КАК ПоУходуИспользованоДней2,
| БольничныеЛисты.ПоУходуРодственнаяСвязь1 КАК ПоУходуРодственнаяСвязь1,
| БольничныеЛисты.ПоУходуРодственнаяСвязь2 КАК ПоУходуРодственнаяСвязь2,
| БольничныеЛисты.ПоУходуФИО1 КАК ПоУходуФИО1,
| БольничныеЛисты.ПоУходуФИО2 КАК ПоУходуФИО2,
| БольничныеЛисты.ПредоставленДубликатЛисткаНетрудоспособности КАК ПредоставленДубликатЛисткаНетрудоспособности,
| БольничныеЛисты.ПредставлениеПериода КАК ПредставлениеПериода,
| БольничныеЛисты.ПрерывистыйМетод КАК ПрерывистыйМетод,
| БольничныеЛисты.ПрименятьЛьготыПриНачисленииПособия КАК ПрименятьЛьготыПриНачисленииПособия,
| БольничныеЛисты.ПриступитьКРаботеС КАК ПриступитьКРаботеС,
| БольничныеЛисты.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| БольничныеЛисты.ПроцентДоплатыЗаДниНетрудоспособности КАК ПроцентДоплатыЗаДниНетрудоспособности,
| БольничныеЛисты.ПроцентОплаты КАК ПроцентОплаты,
| БольничныеЛисты.ПроцентОплатыБезЛьгот КАК ПроцентОплатыБезЛьгот,
| ВЫБОР
| КОГДА БольничныеЛисты.РайонныйКоэффициентРФнаНачалоСобытия < 1
| ТОГДА 1
| ИНАЧЕ БольничныеЛисты.РайонныйКоэффициентРФнаНачалоСобытия
| КОНЕЦ КАК РайонныйКоэффициентРФнаНачалоСобытия,
| БольничныеЛисты.Рассчитал КАК Рассчитал,
| БольничныеЛисты.РассчитатьЗарплату КАК РассчитатьЗарплату,
| БольничныеЛисты.РасчетПоПравилам2010Года КАК РасчетПоПравилам2010Года,
| БольничныеЛисты.РодственникЗаКоторымОсуществляетсяУход1 КАК РодственникЗаКоторымОсуществляетсяУход1,
| БольничныеЛисты.РодственникЗаКоторымОсуществляетсяУход2 КАК РодственникЗаКоторымОсуществляетсяУход2,
| БольничныеЛисты.Руководитель КАК Руководитель,
| БольничныеЛисты.СлучайУходаЗаБольнымРебенком КАК СлучайУходаЗаБольнымРебенком,
| БольничныеЛисты.Сотрудник КАК Сотрудник,
| БольничныеЛисты.СохраняемоеДенежноеСодержание КАК СохраняемоеДенежноеСодержание,
| БольничныеЛисты.СреднийДневнойЗаработок КАК СреднийДневнойЗаработок,
| БольничныеЛисты.СтажЛет КАК СтажЛет,
| БольничныеЛисты.СтажМесяцев КАК СтажМесяцев,
| БольничныеЛисты.СтажДней КАК СтажДней,
| ВЫБОР
| КОГДА БольничныеЛисты.СтажРасширенныйЛет = 0
| И БольничныеЛисты.СтажРасширенныйМесяцев = 0
| ТОГДА БольничныеЛисты.СтажЛет
| ИНАЧЕ БольничныеЛисты.СтажРасширенныйЛет
| КОНЕЦ КАК СтажРасширенныйЛет,
| ВЫБОР
| КОГДА БольничныеЛисты.СтажРасширенныйЛет = 0
| И БольничныеЛисты.СтажРасширенныйМесяцев = 0
| ТОГДА БольничныеЛисты.СтажМесяцев
| ИНАЧЕ БольничныеЛисты.СтажРасширенныйМесяцев
| КОНЕЦ КАК СтажРасширенныйМесяцев,
| ВЫБОР
| КОГДА БольничныеЛисты.СтажРасширенныйЛет = 0
| И БольничныеЛисты.СтажРасширенныйМесяцев = 0
| ТОГДА БольничныеЛисты.СтажДней
| ИНАЧЕ БольничныеЛисты.СтажРасширенныйДней
| КОНЕЦ КАК СтажРасширенныйДней,
| БольничныеЛисты.УдалитьПоставленаНаУчетВРанниеСрокиБеременности КАК УдалитьПоставленаНаУчетВРанниеСрокиБеременности,
| БольничныеЛисты.УдалитьХеш КАК УдалитьХеш,
| БольничныеЛисты.Удержано КАК Удержано,
| БольничныеЛисты.УсловияИсчисленияКод1 КАК УсловияИсчисленияКод1,
| БольничныеЛисты.УсловияИсчисленияКод2 КАК УсловияИсчисленияКод2,
| БольничныеЛисты.УсловияИсчисленияКод3 КАК УсловияИсчисленияКод3,
| БольничныеЛисты.УчитыватьЗаработокПредыдущихСтрахователей КАК УчитыватьЗаработокПредыдущихСтрахователей,
| БольничныеЛисты.ФизическоеЛицо КАК ФизическоеЛицо,
| БольничныеЛисты.ФиксПериодРасчетаСреднегоЗаработка КАК ФиксПериодРасчетаСреднегоЗаработка,
| БольничныеЛисты.ФинансированиеФедеральнымБюджетом КАК ФинансированиеФедеральнымБюджетом,
| БольничныеЛисты.ЯвляетсяПродолжениемБолезни КАК ЯвляетсяПродолжениемБолезни,
| БольничныеЛисты.ДнейПоловиннойОплаты КАК ДнейПоловиннойОплаты,
| ВЫБОР
| КОГДА ОрганизацияСправочник.НаименованиеПолное ПОДОБНО """"
| ТОГДА ОрганизацияСправочник.Наименование
| ИНАЧЕ ОрганизацияСправочник.НаименованиеПолное
| КОНЕЦ КАК НаименованиеОрганизации
|ПОМЕСТИТЬ ВТБольничныеЛисты
|ИЗ
| Документ.БольничныйЛист КАК БольничныеЛисты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК ОрганизацияСправочник
| ПО БольничныеЛисты.Организация = ОрганизацияСправочник.Ссылка
|ГДЕ
| БольничныеЛисты.Ссылка В(&МассивСсылок)
|;
|
|
|ВЫБРАТЬ
| БольничныйЛистНачисления.ДатаНачала КАК Период
|ПОМЕСТИТЬ ВТБольничныеЛистыДатыНачалаНачислений
|ИЗ
| ВТБольничныеЛисты КАК БольничныеЛисты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.БольничныйЛист.Начисления КАК БольничныйЛистНачисления
| ПО БольничныеЛисты.Ссылка = БольничныйЛистНачисления.Ссылка";
Запрос.Текст = Запрос.Текст + ЗарплатаКадрыОбщиеНаборыДанных.РазделительЗапросов() +
"ВЫБРАТЬ * ИЗ ВТБольничныеЛисты УПОРЯДОЧИТЬ ПО ДатаНачала, ДатаНачалаСобытия";
ВыборкаДляШапки = Запрос.Выполнить().Выбрать();
ОписаниеФильтра = ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТБольничныеЛистыДатыНачалаНачислений");
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних(
"МинимальнаяОплатаТрудаРФ",
Запрос.МенеджерВременныхТаблиц,
Истина,
ОписаниеФильтра,
,
"ВТМинимальнаяОплатаТруда");
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистраСрезПоследних(
"МаксимальныйРазмерЕжемесячнойСтраховойВыплаты",
Запрос.МенеджерВременныхТаблиц,
Истина,
ОписаниеФильтра,
,
"ВТМаксимальнаяОплатаТруда");
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| БольничныеЛисты.Сотрудник КАК Сотрудник
|ИЗ
| ВТБольничныеЛисты КАК БольничныеЛисты
|;
|
|
|ВЫБРАТЬ
| БольничныйЛистНачисления.ДатаНачала КАК ПериодДействияНачало,
| БольничныйЛистНачисления.ДатаОкончания КАК ПериодДействияКонец,
| БольничныйЛистНачисления.Результат + ЕСТЬNULL(БольничныйЛистНачисленияРК.Результат, 0) + ЕСТЬNULL(БольничныйЛистНачисленияСН.Результат, 0) КАК Результат,
| БольничныйЛистНачисления.ОплаченоДней КАК ОплаченоВремени,
| БольничныйЛистНачисления.Ссылка КАК Ссылка,
| МинимальнаяОплатаТруда.Размер КАК МРОТ,
| ВЫБОР
| КОГДА БольничныеЛисты.ОграничениеПособия = ЗНАЧЕНИЕ(Перечисление.ВидыОграниченияПособия.ОграничениеВРазмереММОТ)
| ИЛИ БольничныеЛисты.ДатаНарушенияРежима <> ДАТАВРЕМЯ(1, 1, 1)
| И БольничныйЛистНачисления.ДатаНачала >= БольничныеЛисты.ДатаНарушенияРежима
| ТОГДА МинимальнаяОплатаТруда.Размер / ДЕНЬ(КОНЕЦПЕРИОДА(БольничныйЛистНачисления.ДатаНачала, МЕСЯЦ)) * ВЫБОР
| КОГДА БольничныеЛисты.РайонныйКоэффициентРФнаНачалоСобытия < 1
| ТОГДА 1
| ИНАЧЕ БольничныеЛисты.РайонныйКоэффициентРФнаНачалоСобытия
| КОНЕЦ
| КОГДА БольничныеЛисты.ОграничениеПособия = ЗНАЧЕНИЕ(Перечисление.ВидыОграниченияПособия.МаксимальныйРазмерЕжемесячнойСтраховойВыплаты)
| ТОГДА МаксимальнаяОплатаТруда.Размер * 4 / ДЕНЬ(КОНЕЦПЕРИОДА(БольничныйЛистНачисления.ДатаНачала, МЕСЯЦ)) * ВЫБОР
| КОГДА БольничныеЛисты.РайонныйКоэффициентРФнаНачалоСобытия < 1
| ТОГДА 1
| ИНАЧЕ БольничныеЛисты.РайонныйКоэффициентРФнаНачалоСобытия
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ КАК МаксимальныйРазмерДневногоПособия,
| ВЫБОР
| КОГДА ПВРНачисления.КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛистаЗаСчетРаботодателя)
| ТОГДА БольничныйЛистНачисления.Результат + ЕСТЬNULL(БольничныйЛистНачисленияРК.Результат, 0) + ЕСТЬNULL(БольничныйЛистНачисленияСН.Результат, 0)
| ИНАЧЕ 0
| КОНЕЦ КАК НачисленоРаботодателем,
| ВЫБОР
| КОГДА ПВРНачисления.КатегорияНачисленияИлиНеоплаченногоВремени <> ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛистаЗаСчетРаботодателя)
| ТОГДА БольничныйЛистНачисления.Результат + ЕСТЬNULL(БольничныйЛистНачисленияРК.Результат, 0) + ЕСТЬNULL(БольничныйЛистНачисленияСН.Результат, 0)
| ИНАЧЕ 0
| КОНЕЦ КАК НачисленоФСС,
| БольничныйЛистНачисления.ПроцентОплаты КАК ПроцентОплаты,
| БольничныйЛистНачисления.ПроцентОплатыБезЛьгот КАК ПроцентОплатыБезЛьгот,
| БольничныйЛистНачисления.ОграничениеПособия КАК ОграничениеПособия,
| БольничныйЛистНачисления.ОграничениеПособияБезЛьгот КАК ОграничениеПособияБезЛьгот
|ИЗ
| ВТБольничныеЛисты КАК БольничныеЛисты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.БольничныйЛист.Начисления КАК БольничныйЛистНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления КАК ПВРНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления КАК ПВРНачисленияРК
| ПО ПВРНачисления.Ссылка = ПВРНачисленияРК.ОсновнойВидРасчета
| И (ПВРНачисленияРК.КатегорияНачисленияИлиНеоплаченногоВремени В (ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиРайонногоКоэффициентаВСреднемЗаработке), ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиРайонногоКоэффициентаВСДС), ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиРайонногоКоэффициентаВСДД)))
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления КАК ПВРНачисленияСН
| ПО ПВРНачисления.Ссылка = ПВРНачисленияСН.ОсновнойВидРасчета
| И (ПВРНачисленияСН.КатегорияНачисленияИлиНеоплаченногоВремени В (ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиСевернойНадбавкиВСреднемЗаработке), ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиСевернойНадбавкиВСДС), ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаДолиСевернойНадбавкиВСДД)))
| ПО БольничныйЛистНачисления.Начисление = ПВРНачисления.Ссылка
| ПО БольничныеЛисты.Ссылка = БольничныйЛистНачисления.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТМинимальнаяОплатаТруда КАК МинимальнаяОплатаТруда
| ПО (БольничныйЛистНачисления.ДатаНачала = МинимальнаяОплатаТруда.Период)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТМаксимальнаяОплатаТруда КАК МаксимальнаяОплатаТруда
| ПО БольничныеЛисты.ДатаНачалаСобытия = МаксимальнаяОплатаТруда.Период
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист.Начисления КАК БольничныйЛистНачисленияРК
| ПО (БольничныйЛистНачисления.Ссылка = БольничныйЛистНачисленияРК.Ссылка)
| И (БольничныйЛистНачисления.ДатаНачала = БольничныйЛистНачисленияРК.ДатаНачала)
| И (БольничныйЛистНачисления.ДатаОкончания = БольничныйЛистНачисленияРК.ДатаОкончания)
| И (НЕ ПВРНачисленияРК.Ссылка ЕСТЬ NULL)
| И (ПВРНачисленияРК.Ссылка = БольничныйЛистНачисленияРК.Начисление)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист.Начисления КАК БольничныйЛистНачисленияСН
| ПО (БольничныйЛистНачисления.Ссылка = БольничныйЛистНачисленияСН.Ссылка)
| И (БольничныйЛистНачисления.ДатаНачала = БольничныйЛистНачисленияСН.ДатаНачала)
| И (БольничныйЛистНачисления.ДатаОкончания = БольничныйЛистНачисленияСН.ДатаОкончания)
| И (НЕ ПВРНачисленияСН.Ссылка ЕСТЬ NULL)
| И (ПВРНачисленияСН.Ссылка = БольничныйЛистНачисленияСН.Начисление)
|ГДЕ
| ПВРНачисления.КатегорияНачисленияИлиНеоплаченногоВремени В (ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛиста), ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛистаЗаСчетРаботодателя), ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоПрофзаболевание), ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоНесчастныйСлучайНаПроизводстве), ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОтпускПоБеременностиИРодам))
|
|УПОРЯДОЧИТЬ ПО
| БольничныеЛисты.ДатаНачала
|ИТОГИ
| СУММА(Результат),
| СУММА(НачисленоРаботодателем),
| СУММА(НачисленоФСС)
|ПО
| Ссылка";
Результат = Запрос.ВыполнитьПакет();
КоличествоРезультатов = Результат.Количество();
СписокСотрудников = Результат[КоличествоРезультатов - 2].Выгрузить().ВыгрузитьКолонку("Сотрудник");
ИменаПолей = "ФИОПолные,ИНН,СтраховойНомерПФР,Подразделение,Должность,ТабельныйНомер,Пол,ДатаРождения";
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаПолей);
ВыборкаНачислений = Результат[КоличествоРезультатов - 1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ДанныеДляПечатиРасчетаСреднегоЗаработка = ДанныеДокументовДляПечатиРасчетаСреднегоЗаработкаФСС(МассивСсылок);
ОбластиДляВстраиванияСреднегоЗаработка = Обработки.ПечатьРасчетаСреднегоЗаработкаФСС.ОбластиДляВстраивания(
ДанныеДляПечатиРасчетаСреднегоЗаработка,
Ложь,
,
НомерТаблицыРазделителяСреднегоЗаработка);
ДанныеДляПечатиРасчетаПособия = Новый Структура;
ДанныеДляПечатиРасчетаПособия.Вставить("ВыборкаДляШапки", ВыборкаДляШапки);
ДанныеДляПечатиРасчетаПособия.Вставить("ВыборкаНачислений", ВыборкаНачислений);
ДанныеДляПечатиРасчетаПособия.Вставить("КадровыеДанныеСотрудников", КадровыеДанныеСотрудников);
ДанныеДляПечатиРасчетаПособия.Вставить("ОбластиДляВстраиванияСреднегоЗаработка", ОбластиДляВстраиванияСреднегоЗаработка);
ДанныеДляПечатиРасчетаПособия.Вставить("ДанныеДляПечатиРасчетаСреднегоЗаработка", ДанныеДляПечатиРасчетаСреднегоЗаработка);
ДанныеДляПечатиРасчетаПособия.Вставить("ВалютаУчета", ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты());
Возврат ДанныеДляПечатиРасчетаПособия;
КонецФункции
Процедура ВывестиШапкуРасчетаПособия(КонтекстПечати, ВыборкаДляШапки, КадровыеДанныеСотрудников)
ТабличныйДокумент = КонтекстПечати.ТабличныйДокумент;
Макет = КонтекстПечати.Макет;
ИменаПараметровОбластей = КонтекстПечати.ИменаПараметровОбластей;
КадровыеДанныеСотрудника = КадровыеДанныеСотрудников.Найти(ВыборкаДляШапки.Сотрудник);
ИмяОбласти = ?(ВыборкаДляШапки.ДатаНачала < '20220101', "ЗаголовокШапки", "ЗаголовокШапки2022");
СекцияЗаголовокШапки = Макет.ПолучитьОбласть(ИмяОбласти);
ТабличныйДокумент.Вывести(СекцияЗаголовокШапки);
ПараметрыШапки = Новый Структура(ИменаПараметровОбластей.Шапка);
ЗаполнитьЗначенияСвойств(ПараметрыШапки, ВыборкаДляШапки);
ЗаполнитьШапкуРасчетаПособия(ПараметрыШапки, ВыборкаДляШапки, КадровыеДанныеСотрудника);
СекцияШапка = Макет.ПолучитьОбласть("Шапка");
СекцияШапка.Параметры.Заполнить(ПараметрыШапки);
ТабличныйДокумент.Вывести(СекцияШапка);
КонецПроцедуры
Процедура ЗаполнитьШапкуРасчетаПособия(ПараметрыШапки, ВыборкаДляШапки, КадровыеДанныеСотрудника)
ЗаполнитьЗначенияСвойств(ПараметрыШапки, КадровыеДанныеСотрудника);
ПараметрыШапки.ПредставлениеПериодаОтсутствия = ПредставлениеПериодаОтсутствия(
КадровыеДанныеСотрудника.Пол,
ВыборкаДляШапки.ДатаНачала,
ВыборкаДляШапки.ДатаОкончания);
ПараметрыШапки.ТабельныйНомер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(
КадровыеДанныеСотрудника.ТабельныйНомер,
Истина,
Истина);
ПараметрыШапки.ПредставлениеСтраховогоСтажа = ПредставлениеВозраста(
ВыборкаДляШапки.СтажРасширенныйЛет,
ВыборкаДляШапки.СтажРасширенныйМесяцев);
Если ВыборкаДляШапки.ФинансированиеФедеральнымБюджетом = Перечисления.ОснованияФинансированияПособияФедеральнымБюджетом.ЗачетНестраховыхПериодов Тогда
НестраховойСтаж = УчетПособийСоциальногоСтрахования.НестраховойСтаж(ВыборкаДляШапки);
Если НестраховойСтаж.Лет > 0 Или НестраховойСтаж.Месяцев > 0 Тогда
ПараметрыШапки.ПредставлениеНестраховыхПериодов = ПредставлениеВозраста(
НестраховойСтаж.Лет,
НестраховойСтаж.Месяцев);
КонецЕсли;
КонецЕсли;
ПараметрыШапки.ОписаниеНазначениеПособия = ПредставлениеНазначенияПособия(ВыборкаДляШапки);
ПараметрыШапки.НаименованиеОрганизации = СокрЛП(ПараметрыШапки.НаименованиеОрганизации);
Если ВыборкаДляШапки.РайонныйКоэффициентРФнаНачалоСобытия > 1 Тогда
ПараметрыШапки.РайонныйКоэффициент = ВыборкаДляШапки.РайонныйКоэффициентРФнаНачалоСобытия;
Иначе
ПараметрыШапки.РайонныйКоэффициент = "-";
КонецЕсли;
КонецПроцедуры
Процедура ВывестиТаблицыРасчетаПособия(КонтекстПечати, ВыборкаДляШапки, ДанныеДляПечатиРасчетаПособия)
ТабличныйДокумент = КонтекстПечати.ТабличныйДокумент;
Макет = КонтекстПечати.Макет;
ИменаПараметровОбластей = КонтекстПечати.ИменаПараметровОбластей;
ВыборкаНачислений = ДанныеДляПечатиРасчетаПособия.ВыборкаНачислений;
КадровыеДанныеСотрудников = ДанныеДляПечатиРасчетаПособия.КадровыеДанныеСотрудников;
ОбластиСреднегоЗаработка = ДанныеДляПечатиРасчетаПособия.ОбластиДляВстраиванияСреднегоЗаработка;
ДанныеСреднегоЗаработка = ДанныеДляПечатиРасчетаПособия.ДанныеДляПечатиРасчетаСреднегоЗаработка;
ВалютаУчета = ДанныеДляПечатиРасчетаПособия.ВалютаУчета;
ТабличныйДокумент.Вывести(Макет.ПолучитьОбласть("СреднийЗаработокЗаголовок"));
УправлениеПечатьюБЗК.ВывестиОбластьСФорматомСтрок(
ТабличныйДокумент,
ОбластиСреднегоЗаработка.ТабличныйДокумент,
Обработки.ПечатьРасчетаСреднегоЗаработка.ИмяВстраиваемойОбласти(
ОбластиСреднегоЗаработка.ОбъектыПечати,
ВыборкаДляШапки.Ссылка));
ПоказыватьМинимальныйРазмерДневногоПособия = УчетПособийСоциальногоСтрахования.ОграничиватьПособиеСнизуМРОТ(
ВыборкаДляШапки.ПричинаНетрудоспособности,
ВыборкаДляШапки.ДатаОкончания);
Если ПоказыватьМинимальныйРазмерДневногоПособия Тогда
СекцияШапкиТаблицы = Макет.ПолучитьОбласть("РасчетПособияШапка2020");
СекцияСтрокиТаблицы = Макет.ПолучитьОбласть("РасчетПособияСтрока2020");
ПараметрыШапкиТаблицы = Новый Структура(ИменаПараметровОбластей.РасчетПособияШапка2020);
ПараметрыСтрокиТаблицы = Новый Структура(ИменаПараметровОбластей.РасчетПособияСтрока2020);
ИначеЕсли ЭтоПособиеПоМатеринству(ВыборкаДляШапки) Тогда
СекцияШапкиТаблицы = Макет.ПолучитьОбласть("РасчетПособияШапка2013");
СекцияСтрокиТаблицы = Макет.ПолучитьОбласть("РасчетПособияСтрока2013");
ПараметрыШапкиТаблицы = Новый Структура(ИменаПараметровОбластей.РасчетПособияШапка2013);
ПараметрыСтрокиТаблицы = Новый Структура(ИменаПараметровОбластей.РасчетПособияСтрока2013);
Для Каждого Элемент Из ДанныеСреднегоЗаработка Цикл
Если ВыборкаДляШапки.Ссылка = Элемент.РеквизитыДокумента.Ссылка Тогда
ПараметрыСтрокиТаблицы.СреднийПредельный = УчетПособийСоциальногоСтрахованияКлиентСервер.МаксимальныйСреднедневнойЗаработокДляОплатыПособияПоМатеринству(
Элемент.ПараметрыРасчета);
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
СекцияШапкиТаблицы = Макет.ПолучитьОбласть("РасчетПособияШапка2011");
СекцияСтрокиТаблицы = Макет.ПолучитьОбласть("РасчетПособияСтрока2011");
ПараметрыШапкиТаблицы = Новый Структура(ИменаПараметровОбластей.РасчетПособияШапка2011);
ПараметрыСтрокиТаблицы = Новый Структура(ИменаПараметровОбластей.РасчетПособияСтрока2011);
КонецЕсли;
ТабличныйДокумент.Вывести(Макет.ПолучитьОбласть("РасчетПособияЗаголовок"));
Если ВыборкаДляШапки.РайонныйКоэффициентРФнаНачалоСобытия > 1 Тогда
ПараметрыШапкиТаблицы.УчетРК = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'с учетом РК: %1'"),
ВыборкаДляШапки.РайонныйКоэффициентРФнаНачалоСобытия);
Если ВыборкаДляШапки.ДатаНачалаСобытия >= УчетПособийСоциальногоСтрахования.ДатаВключенияРКПриРасчетеБольничного()
И ПараметрыШапкиТаблицы.Свойство("УчетРКМинимальныйСреднедневной") Тогда
ПараметрыШапкиТаблицы.УчетРКМинимальныйСреднедневной = ПараметрыШапкиТаблицы.УчетРК;
КонецЕсли;
КонецЕсли;
СекцияШапкиТаблицы.Параметры.Заполнить(ПараметрыШапкиТаблицы);
ТабличныйДокумент.Вывести(СекцияШапкиТаблицы);
ЗаполнитьЗначенияСвойств(ПараметрыСтрокиТаблицы, ВыборкаДляШапки);
НачисленоФСС = 0;
НачисленоРаботодателем = 0;
НачисленоВсего = 0;
ВыборкаНачислений.Сбросить();
Если ВыборкаНачислений.НайтиСледующий(Новый Структура("Ссылка", ВыборкаДляШапки.Ссылка)) Тогда
ВыборкаНачисленийПоДокументу = ВыборкаНачислений.Выбрать();
НачисленоФСС = ВыборкаНачислений.НачисленоФСС;
НачисленоРаботодателем = ВыборкаНачислений.НачисленоРаботодателем;
НачисленоВсего = НачисленоФСС + НачисленоРаботодателем;
Пока ВыборкаНачисленийПоДокументу.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ПараметрыСтрокиТаблицы, ВыборкаНачисленийПоДокументу);
РазмерПособияВПроцентах = РазмерПособияВПроцентах(ВыборкаДляШапки, ВыборкаНачисленийПоДокументу);
Если ВыборкаДляШапки.СреднийДневнойЗаработок < ВыборкаДляШапки.МинимальныйСреднедневнойДляСравненияСМРОТ Тогда
РазмерДневногоПособия = Окр(ВыборкаДляШапки.МинимальныйСреднедневнойЗаработок * РазмерПособияВПроцентах / 100,2);
Иначе
РазмерДневногоПособия = Окр(ВыборкаДляШапки.СреднийДневнойЗаработок * РазмерПособияВПроцентах / 100,2);
КонецЕсли;
Если ПоказыватьМинимальныйРазмерДневногоПособия Тогда
ПараметрыСтрокиТаблицы.МинимальныйРазмерДневногоПособия = УчетПособийСоциальногоСтрахования.ОграничениеПособияСнизуМРОТ(
ВыборкаДляШапки.ПричинаНетрудоспособности,
ВыборкаНачисленийПоДокументу.ПериодДействияНачало,
1,
ВыборкаДляШапки.РайонныйКоэффициентРФнаНачалоСобытия,
ВыборкаДляШапки.ДоляНеполногоВремени,
ВыборкаНачисленийПоДокументу.МРОТ);
КонецЕсли;
ПараметрыСтрокиТаблицы.РазмерПособияВПроцентах = РазмерПособияВПроцентах;
ПараметрыСтрокиТаблицы.РазмерДневногоПособия = РазмерДневногоПособия;
СекцияСтрокиТаблицы.Параметры.Заполнить(ПараметрыСтрокиТаблицы);
ТабличныйДокумент.Вывести(СекцияСтрокиТаблицы);
КонецЦикла;
КонецЕсли;
ТабличныйДокумент.Вывести(Макет.ПолучитьОбласть("РасчетПособияПодвал"));
СекцияИтоговТаблицы = Макет.ПолучитьОбласть("РасчетПособияИтоги");
ПараметрыИтоговТаблицы = Новый Структура(ИменаПараметровОбластей.РасчетПособияИтоги);
ПараметрыИтоговТаблицы.НачисленоФСС = НачисленоФСС;
ПараметрыИтоговТаблицы.НачисленоФССПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(НачисленоФСС, ВалютаУчета);
ПараметрыИтоговТаблицы.НачисленоРаботодателем = НачисленоРаботодателем;
ПараметрыИтоговТаблицы.НачисленоРаботодателемПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(НачисленоРаботодателем, ВалютаУчета);
ПараметрыИтоговТаблицы.НачисленоВсего = НачисленоВсего;
ПараметрыИтоговТаблицы.НачисленоВсегоПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(НачисленоВсего, ВалютаУчета);
ПараметрыИтоговТаблицы.ПериодРегистрации = ВыборкаДляШапки.ПериодРегистрации;
СекцияИтоговТаблицы.Параметры.Заполнить(ПараметрыИтоговТаблицы);
ТабличныйДокумент.Вывести(СекцияИтоговТаблицы);
КонецПроцедуры
Процедура ВывестиШапкуЛисткаНетрудоспособности(КонтекстПечати, ВыборкаДляШапки, КадровыеДанныеСотрудников, ВыборкаПериодовУхода)
ТабличныйДокумент = КонтекстПечати.ТабличныйДокумент;
Макет = КонтекстПечати.Макет;
ИменаПараметровОбластей = КонтекстПечати.ИменаПараметровОбластей;
КадровыеДанныеСотрудника = КадровыеДанныеСотрудников.Найти(ВыборкаДляШапки.Сотрудник);
ПараметрыОбласти = Новый Структура(ИменаПараметровОбластей.Шапка);
ЗаполнитьЗначенияСвойств(ПараметрыОбласти, ВыборкаДляШапки);
ЗаполнитьЗначенияСвойств(ПараметрыОбласти, КадровыеДанныеСотрудника);
Если ВыборкаДляШапки.ЯвляетсяПродолжениемБолезни Тогда
ПараметрыОбласти.ЭтоПродолжение = "V";
Иначе
ПараметрыОбласти.Первичный = "V";
КонецЕсли;
Если ВыборкаДляШапки.ПредоставленДубликатЛисткаНетрудоспособности Тогда
ПараметрыОбласти.Дубликат = "V";
КонецЕсли;
МассивСтрок = РазделитьПоШирине(ВыборкаДляШапки.НаименованиеМедицинскойОрганизации, " ", 50);
Если МассивСтрок.Количество() = 1 Тогда
ПараметрыОбласти.НаименованиеМедицинскойОрганизации1 = ВыборкаДляШапки.НаименованиеМедицинскойОрганизации;
Иначе
ПараметрыОбласти.НаименованиеМедицинскойОрганизации1 = СокрП(МассивСтрок[0]);
МассивСтрок.Удалить(0);
ПараметрыОбласти.НаименованиеМедицинскойОрганизации2 = СокрЛ(СтрСоединить(МассивСтрок, " "));
КонецЕсли;
МассивСтрок = РазделитьПоШирине(ВыборкаДляШапки.АдресМедицинскойОрганизации, ",", 50);
Если МассивСтрок.Количество() = 1 Тогда
ПараметрыОбласти.АдресМедицинскойОрганизации1 = ВыборкаДляШапки.АдресМедицинскойОрганизации;
Иначе
ПараметрыОбласти.АдресМедицинскойОрганизации1 = СокрП(МассивСтрок[0]);
МассивСтрок.Удалить(0);
ПараметрыОбласти.АдресМедицинскойОрганизации2 = СокрЛ(СтрСоединить(МассивСтрок, " "));
КонецЕсли;
Секция = Макет.ПолучитьОбласть("Шапка");
Секция.Параметры.Заполнить(ПараметрыОбласти);
ТабличныйДокумент.Вывести(Секция);
ЭтоУходЗаРодственником = Перечисления.ПричиныНетрудоспособности.ЭтоУходЗаРодственником(
ВыборкаДляШапки.ПричинаНетрудоспособности);
Если ЭтоУходЗаРодственником Тогда
ПериодыУхода = Новый Массив;
ИменаПолей = "КодСвязи, Фамилия, Имя, Отчество, СНИЛС, ДатаРождения, ВозрастЛет, ВозрастМесяцев,
|КодПричины, РежимЛечения, ДатаНачала, ДатаОкончания, ИспользованоДней";
ВыборкаПериодовУхода.Сбросить();
Пока ВыборкаПериодовУхода.НайтиСледующий(ВыборкаДляШапки.Ссылка, "Ссылка") Цикл
ПериодУхода = ОбщегоНазначенияБЗК.ЗначенияСвойств(ВыборкаПериодовУхода, ИменаПолей);
ПериодыУхода.Добавить(ПериодУхода);
КонецЦикла;
Если ПериодыУхода.Количество() = 0 Тогда
ПараметрыОбласти = Новый Структура(ИменаПараметровОбластей.УходЗаДвумяРодственниками);
ЗаполнитьЗначенияСвойств(ПараметрыОбласти, ВыборкаДляШапки);
ПараметрыОбласти.ЭтоПособиеПоУходу = "V";
Если ВыборкаДляШапки.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком Тогда
СлучайУходаЗаБольнымРебенком = ВыборкаДляШапки.СлучайУходаЗаБольнымРебенком;
Иначе
СлучайУходаЗаБольнымРебенком = Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(ВыборкаДляШапки.РодственникЗаКоторымОсуществляетсяУход1) Тогда
ПараметрыОбласти.ПоУходу1_Возраст = ПредставлениеВозраста(
ВыборкаДляШапки.ПоУходуВозрастЛет1,
ВыборкаДляШапки.ПоУходуВозрастМесяцев1);
ПараметрыОбласти.ПоУходу1_Связь = ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ПредставлениеРодственнойСвязи(
ВыборкаДляШапки.ПоУходуРодственнаяСвязь1);
ПараметрыОбласти.ПоУходу1_Родственник = ВыборкаДляШапки.ПоУходуФИО1;
ПараметрыОбласти.ПоУходу1_Дней = УчетПособийСоциальногоСтрахованияРасширенный.ОстатокОплачиваемыхДнейУходаЗаБольнымРодственником(
ВыборкаДляШапки.РодственникЗаКоторымОсуществляетсяУход1,
Макс(ВыборкаДляШапки.ДатаНачалаРодственник1, ВыборкаДляШапки.ДатаНачалаОплаты),
СлучайУходаЗаБольнымРебенком,
ВыборкаДляШапки.Ссылка);
КонецЕсли;
Если ЗначениеЗаполнено(ВыборкаДляШапки.РодственникЗаКоторымОсуществляетсяУход2) Тогда
ПараметрыОбласти.ПоУходу2_Возраст = ПредставлениеВозраста(
ВыборкаДляШапки.ПоУходуВозрастЛет2,
ВыборкаДляШапки.ПоУходуВозрастМесяцев2);
ПараметрыОбласти.ПоУходу2_Связь = ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ПредставлениеРодственнойСвязи(
ВыборкаДляШапки.ПоУходуРодственнаяСвязь2);
ПараметрыОбласти.ПоУходу2_Родственник = ВыборкаДляШапки.ПоУходуФИО2;
ПараметрыОбласти.ПоУходу2_Дней = УчетПособийСоциальногоСтрахованияРасширенный.ОстатокОплачиваемыхДнейУходаЗаБольнымРодственником(
ВыборкаДляШапки.РодственникЗаКоторымОсуществляетсяУход2,
Макс(ВыборкаДляШапки.ДатаНачалаРодственник2, ВыборкаДляШапки.ДатаНачалаОплаты),
СлучайУходаЗаБольнымРебенком,
ВыборкаДляШапки.Ссылка);
КонецЕсли;
Секция = Макет.ПолучитьОбласть("УходЗаДвумяРодственниками");
Секция.Параметры.Заполнить(ПараметрыОбласти);
ТабличныйДокумент.Вывести(Секция);
Иначе
ПараметрыОбласти = Новый Структура(ИменаПараметровОбластей.Уход_Шапка);
ЗаполнитьЗначенияСвойств(ПараметрыОбласти, ВыборкаДляШапки);
ПараметрыОбласти.ЭтоПособиеПоУходу = "V";
Секция = Макет.ПолучитьОбласть("Уход_Шапка");
Секция.Параметры.Заполнить(ПараметрыОбласти);
ТабличныйДокумент.Вывести(Секция);
Для Каждого ПериодУхода Из ПериодыУхода Цикл
ПериодЛечения = Формат(ПериодУхода.ДатаНачала, "ДЛФ=D") + " - " + Формат(ПериодУхода.ДатаОкончания, "ДЛФ=D");
ПараметрыОбласти = Новый Структура(ИменаПараметровОбластей.Уход_Строка);
ПараметрыОбласти.Родственник = ПредставлениеРодственникаПоУходу(ПериодУхода);
ПараметрыОбласти.РежимЛечения = "(" + ПериодУхода.КодПричины + ") " + ПериодУхода.РежимЛечения;
ПараметрыОбласти.ПериодЛечения = ПериодЛечения;
Секция = Макет.ПолучитьОбласть("Уход_Строка");
Секция.Параметры.Заполнить(ПараметрыОбласти);
ТабличныйДокумент.Вывести(Секция);
КонецЦикла;
КонецЕсли;
Иначе
ТабличныйДокумент.Вывести(Макет.ПолучитьОбласть("УходЗаДвумяРодственниками"));
КонецЕсли;
ПараметрыОбласти = Новый Структура(ИменаПараметровОбластей.Подвал);
ЗаполнитьЗначенияСвойств(ПараметрыОбласти, ВыборкаДляШапки);
ЗаполнитьШапкуРасчетаПособия(ПараметрыОбласти, ВыборкаДляШапки, КадровыеДанныеСотрудника);
ПараметрыОбласти.ПредставлениеВрача1 = ПредставлениеВрача(ВыборкаДляШапки, "1");
ПараметрыОбласти.ПредставлениеВрача2 = ПредставлениеВрача(ВыборкаДляШапки, "2");
ПараметрыОбласти.ПредставлениеВрача3 = ПредставлениеВрача(ВыборкаДляШапки, "3");
ПараметрыОбласти.ПредставлениеПредседателяВК1 = ПредставлениеВрача(ВыборкаДляШапки, "ПредседателяВК1");
ПараметрыОбласти.ПредставлениеПредседателяВК2 = ПредставлениеВрача(ВыборкаДляШапки, "ПредседателяВК2");
ПараметрыОбласти.ПредставлениеПредседателяВК3 = ПредставлениеВрача(ВыборкаДляШапки, "ПредседателяВК3");
Если ВыборкаДляШапки.ПоставленаНаУчетВРанниеСрокиБеременности = Перечисления.ПостановкаНаУчетВРанниеСрокиБеременности.Поставлена Тогда
ПараметрыОбласти.УчетВРанниеСроки_Поставлена = "V";
ИначеЕсли ВыборкаДляШапки.ПоставленаНаУчетВРанниеСрокиБеременности = Перечисления.ПостановкаНаУчетВРанниеСрокиБеременности.НеПоставлена Тогда
ПараметрыОбласти.УчетВРанниеСроки_НеПоставлена = "V";
ИначеЕсли ВыборкаДляШапки.ПоставленаНаУчетВРанниеСрокиБеременности = Перечисления.ПостановкаНаУчетВРанниеСрокиБеременности.НеИзвестно Тогда
ПараметрыОбласти.УчетВРанниеСроки_НеИзвестно = "V";
КонецЕсли;
Если ЗначениеЗаполнено(ВыборкаДляШапки.ДатаНарушенияРежима)
Или ЗначениеЗаполнено(ВыборкаДляШапки.КодНарушенияРежима) Тогда
ПараметрыОбласти.ЭтоНарушениеРежима = "V";
КонецЕсли;
Если ЗначениеЗаполнено(ВыборкаДляШапки.ПериодНахожденияВСтационареСРебенкомС)
Или ЗначениеЗаполнено(ВыборкаДляШапки.ПериодНахожденияВСтационареСРебенкомПо) Тогда
ПараметрыОбласти.НаходилсяВСтационаре = "V";
КонецЕсли;
Если ЗначениеЗаполнено(ВыборкаДляШапки.ДатаНаправленияВБюроМСЭ)
Или ЗначениеЗаполнено(ВыборкаДляШапки.ДатаОсвидетельствованияМСЭ)
Или ЗначениеЗаполнено(ВыборкаДляШапки.ДатаРегистрацииДокументовМСЭ) Тогда
ПараметрыОбласти.МедикоСоциальнаяЭкспертиза = "V";
КонецЕсли;
Если ВыборкаДляШапки.ОсновноеМестоРаботы Тогда
ПараметрыОбласти.ФлажокОсновноеМестоРаботы = "V";
Иначе
ПараметрыОбласти.ФлажокСовместительство = "V";
КонецЕсли;
Секция = Макет.ПолучитьОбласть("Подвал");
Секция.Параметры.Заполнить(ПараметрыОбласти);
ТабличныйДокумент.Вывести(Секция);
КонецПроцедуры
Функция РазделитьПоШирине(Строка, Разделитель, МаксимальнаяШирина)
МассивСтрок = Новый Массив;
КоличествоСтрок = СтрЧислоСтрок(Строка);
Для НомерСтроки = 1 По КоличествоСтрок Цикл
Подстрока = СтрПолучитьСтроку(Строка, НомерСтроки);
Пока СтрДлина(Подстрока) > МаксимальнаяШирина Цикл
Позиция = СтрНайти(Подстрока, Разделитель, НаправлениеПоиска.СКонца, МаксимальнаяШирина);
Если Позиция = 0 Тогда
Позиция = СтрНайти(Подстрока, Разделитель, НаправлениеПоиска.СНачала, МаксимальнаяШирина);
Если Позиция = 0 Тогда
Прервать;
КонецЕсли;
КонецЕсли;
МассивСтрок.Добавить(Лев(Подстрока, Позиция));
Подстрока = Сред(Подстрока, Позиция + 1);
КонецЦикла;
МассивСтрок.Добавить(Подстрока);
КонецЦикла;
Возврат МассивСтрок;
КонецФункции
Функция ПредставлениеВрача(ВыборкаДляШапки, СуффиксПолей)
Должность = ВыборкаДляШапки["ОсвобождениеДолжностьВрача" + СуффиксПолей];
ФИО = ВыборкаДляШапки["ОсвобождениеФИОВрача" + СуффиксПолей];
ИдентификационныйНомер = ВыборкаДляШапки["ОсвобождениеИдентификационныйНомерВрача" + СуффиксПолей];
Представления = Новый Массив;
Если ЗначениеЗаполнено(Должность) Тогда
Представления.Добавить(Должность);
КонецЕсли;
Если ЗначениеЗаполнено(ФИО) Тогда
Представления.Добавить(ФИО);
КонецЕсли;
Если ЗначениеЗаполнено(ИдентификационныйНомер) Тогда
Представления.Добавить(ИдентификационныйНомер);
КонецЕсли;
Возврат СтрСоединить(Представления, ", ");
КонецФункции
Функция ПредставлениеПериодаОтсутствия(Пол, ДатаНачала, ДатаОкончания)
Если Пол = Перечисления.ПолФизическогоЛица.Женский Тогда
Представление = НСтр("ru = 'Не работала c [ДатаНачала] по [ДатаОкончания]'");
Иначе
Представление = НСтр("ru = 'Не работал c [ДатаНачала] по [ДатаОкончания]'");
КонецЕсли;
Представление = СтрЗаменить(Представление, "[ДатаНачала]", Формат(ДатаНачала, "ДЛФ=D"));
Представление = СтрЗаменить(Представление, "[ДатаОкончания]", Формат(ДатаОкончания, "ДЛФ=D"));
Возврат Представление;
КонецФункции
Функция ПредставлениеРодственникаПоУходу(ПериодУхода)
Результат = СокрП(ПериодУхода.Фамилия + " " + ПериодУхода.Имя + " " + ПериодУхода.Отчество);
Если ЗначениеЗаполнено(ПериодУхода.КодСвязи) Тогда
Результат = Результат + " (" + ПериодУхода.КодСвязи + ")";
КонецЕсли;
Если ЗначениеЗаполнено(ПериодУхода.ВозрастЛет) Или ЗначениеЗаполнено(ПериодУхода.ВозрастМесяцев) ТОгда
Результат = Результат + ", " + ЗарплатаКадрыКлиентСервер.ПредставлениеЛет(ПериодУхода.ВозрастЛет);
КонецЕсли;
Если ЗначениеЗаполнено(ПериодУхода.ДатаРождения) ТОгда
Результат = Результат + ", " + Формат(ПериодУхода.ДатаРождения, "ДЛФ=D");
КонецЕсли;
Если ЗначениеЗаполнено(ПериодУхода.СНИЛС) ТОгда
Результат = Результат + ", " + ПериодУхода.СНИЛС;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ПредставлениеВозраста(ЧислоЛет, ЧислоМесяцев)
Возврат ЗарплатаКадрыКлиентСервер.ПредставлениеВозраста(ЧислоЛет, ЧислоМесяцев);
КонецФункции
Функция ПредставлениеНазначенияПособия(ВыборкаДляШапки)
Если Не ВыборкаДляШапки.НазначитьПособие Тогда
Возврат НСтр("ru = 'Пособие не начислялось.'");
КонецЕсли;
ДнейВПолномРазмере = Макс(ВыборкаДляШапки.ДнейОплаты - ВыборкаДляШапки.ДнейПоловиннойОплаты, 0);
ДнейПо50процентов = ВыборкаДляШапки.ДнейПоловиннойОплаты;
ПроцентОплаты = ВыборкаДляШапки.ПроцентОплаты;
Если Не ЗначениеЗаполнено(ДнейПо50процентов) Тогда
Представление = НСтр("ru = 'Назначено пособие [НаименованиеПособия] в размере [ПроцентОплаты]% за [ДнейВПолномРазмере]'");
ИначеЕсли Не ЗначениеЗаполнено(ДнейВПолномРазмере) Тогда
Представление = НСтр("ru = 'Назначено пособие [НаименованиеПособия] в размере 50% за [ДнейПо50процентов]'");
Иначе
Представление = НСтр("ru = 'Назначено пособие [НаименованиеПособия] в размере [ПроцентОплаты]% за [ДнейВПолномРазмере] и 50% за [ДнейПо50процентов]'");
КонецЕсли;
Представление = СтрЗаменить(Представление, "[НаименованиеПособия]", ПричинаНетрудоспособностиСтрокой(ВыборкаДляШапки.ПричинаНетрудоспособности));
Представление = СтрЗаменить(Представление, "[ПроцентОплаты]", ПроцентОплаты);
Представление = СтрЗаменить(Представление, "[ДнейВПолномРазмере]", Формат(ДнейВПолномРазмере, "ЧН=-; ЧГ=") + ФормаМножественногоЧислаДней(ДнейВПолномРазмере));
Представление = СтрЗаменить(Представление, "[ДнейПо50процентов]", Формат(ДнейПо50процентов, "ЧН=-; ЧГ=") + ФормаМножественногоЧислаДней(ДнейПо50процентов));
Возврат Представление;
КонецФункции
Функция ПричинаНетрудоспособностиСтрокой(ПричинаНетрудоспособности)
ПричинаНетрудоспособностиСтрокой = НСтр("ru = 'по временной нетрудоспособности'");
Если ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
ПричинаНетрудоспособностиСтрокой = НСтр("ru = 'по беременности и родам'");
ИначеЕсли ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком Тогда
ПричинаНетрудоспособностиСтрокой = НСтр("ru = 'по уходу за больным ребенком'");
ИначеЕсли ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаВзрослым Тогда
ПричинаНетрудоспособностиСтрокой = НСтр("ru = 'по уходу за больным членом семьи'");
КонецЕсли;
Возврат ПричинаНетрудоспособностиСтрокой;
КонецФункции
Функция ЭтоПособиеПоМатеринству(ВыборкаДляШапки)
ДатаОтдельногоРасчетаПособийПоМатеринству = УчетПособийСоциальногоСтрахованияКлиентСервер.ДатаОтдельногоРасчетаПособийПоМатеринству();
Возврат ВыборкаДляШапки.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам
И ВыборкаДляШапки.ДатаНачалаСобытия >= ДатаОтдельногоРасчетаПособийПоМатеринству
И ВыборкаДляШапки.ПериодРегистрации >= ДатаОтдельногоРасчетаПособийПоМатеринству;
КонецФункции
Функция РазмерПособияВПроцентах(ВыборкаДляШапки, ВыборкаНачисленийПоДокументу)
Если ЗначениеЗаполнено(ВыборкаНачисленийПоДокументу.ОграничениеПособия) Тогда
РазмерПособияВПроцентах = ВыборкаНачисленийПоДокументу.ПроцентОплаты;
Иначе
РазмерПособияВПроцентах = ВыборкаДляШапки.ПроцентОплаты;
Если ВыборкаДляШапки.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком
И ЗначениеЗаполнено(ВыборкаДляШапки.ДатаНачалаПоловиннойОплаты)
И ВыборкаНачисленийПоДокументу.ПериодДействияНачало >= ВыборкаДляШапки.ДатаНачалаПоловиннойОплаты Тогда
РазмерПособияВПроцентах = 50;
КонецЕсли;
КонецЕсли;
Возврат РазмерПособияВПроцентах;
КонецФункции
Функция ФормаМножественногоЧислаДней(КоличествоДней)
Возврат ПерсонифицированныйУчет.ФормаМножественногоЧисла(НСтр("ru = ' календарный день'"), НСтр("ru = ' календарных дня'"), НСтр("ru = ' календарных дней'"), КоличествоДней);
КонецФункции
#КонецОбласти
#Область ПФ_MXL_ЛистокНетрудоспособности
Процедура ПриПечатиЛисткаНетрудоспособностиСРасчетомПособия(КонтекстПечати)
ТабличныйДокумент = КонтекстПечати.ТабличныйДокумент;
УправлениеПечатьюБЗК.УстановитьОтступ(ТабличныйДокумент, 0, 10, 0, 10);
ДанныеДляПечатиРасчетаПособия = ДанныеДляПечатиРасчетаПособия(КонтекстПечати.МассивОбъектов, 0);
ВыборкаДляШапки = ДанныеДляПечатиРасчетаПособия.ВыборкаДляШапки;
КадровыеДанныеСотрудников = ДанныеДляПечатиРасчетаПособия.КадровыеДанныеСотрудников;
ВыборкаПериодовУхода = ВыборкаПериодовУхода(КонтекстПечати.МассивОбъектов);
КонтекстПечатиРасчетаПособия = УправлениеПечатьюБЗК.КонтекстПечати(
Метаданные.Документы.БольничныйЛист.Макеты.ПФ_MXL_РасчетПособия,
,
,
ТабличныйДокумент);
Пока ВыборкаДляШапки.Следующий() Цикл
Если ВыборкаДляШапки.РасчетПоПравилам2010Года Тогда
Продолжить;
КонецЕсли;
УправлениеПечатьюБЗК.ПередПечатьюОчередногоОбъекта(КонтекстПечати);
ВывестиШапкуЛисткаНетрудоспособности(КонтекстПечати, ВыборкаДляШапки, КадровыеДанныеСотрудников, ВыборкаПериодовУхода);
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ВывестиТаблицыРасчетаПособия(КонтекстПечатиРасчетаПособия, ВыборкаДляШапки, ДанныеДляПечатиРасчетаПособия);
УправлениеПечатьюБЗК.ПослеПечатиОчередногоОбъекта(КонтекстПечати, ВыборкаДляШапки.Ссылка);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ПФ_MXL_ДоплатаЗаДниНетрудоспособности
Процедура ПриПечатиДоплатыЗаДниНетрудоспособности(КонтекстПечати)
ТабличныйДокумент = КонтекстПечати.ТабличныйДокумент;
Макет = КонтекстПечати.Макет;
ДанныеДляПечатиРасчетаПособия = ДанныеДляПечатиДоплатыЗаДниНетрудоспособности(КонтекстПечати.МассивОбъектов);
ДанныеЛН = ДанныеДляПечатиРасчетаПособия.ДанныеЛН;
КадровыеДанныеСотрудников = ДанныеДляПечатиРасчетаПособия.КадровыеДанныеСотрудников;
Пока ДанныеЛН.Следующий() Цикл
Если НЕ ДанныеЛН.ДоплачиватьДоСреднегоЗаработка Тогда
ТекстСообщения = НСтр("ru = '%1: Доплата за дни временной нетрудоспособности не производится.'");
ОбщегоНазначения.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДанныеЛН.Ссылка));
Продолжить;
КонецЕсли;
УправлениеПечатьюБЗК.ПередПечатьюОчередногоОбъекта(КонтекстПечати);
СекцияПриказ = Макет.ПолучитьОбласть("Приказ");
ЗаполняемыеСвойства = "НаименованиеОрганизации,ПроцентДоплаты,НомерДокумента,ДатаДокумента,НомерЛН,ДатаНачала,ДатаОкончания,ДатаНачалаОплаты,ДатаОкончанияОплаты,РуководительРасшифровкаПодписи,ДолжностьРуководителя";
ЗаполнитьЗначенияСвойств(СекцияПриказ.Параметры, ДанныеЛН, ЗаполняемыеСвойства);
ФорматнаяСтрокаДаты = "ДЛФ=D";
СекцияПриказ.Параметры.НаименованиеОрганизации = СокрЛП(СекцияПриказ.Параметры.НаименованиеОрганизации);
СекцияПриказ.Параметры.ДатаДокумента = Формат(СекцияПриказ.Параметры.ДатаДокумента, ФорматнаяСтрокаДаты);
СекцияПриказ.Параметры.ДатаНачала = Формат(СекцияПриказ.Параметры.ДатаНачала, ФорматнаяСтрокаДаты);
СекцияПриказ.Параметры.ДатаОкончания = Формат(СекцияПриказ.Параметры.ДатаОкончания, ФорматнаяСтрокаДаты);
СекцияПриказ.Параметры.ДатаНачалаОплаты = Формат(СекцияПриказ.Параметры.ДатаНачалаОплаты, ФорматнаяСтрокаДаты);
СекцияПриказ.Параметры.ДатаОкончанияОплаты = Формат(СекцияПриказ.Параметры.ДатаОкончанияОплаты, ФорматнаяСтрокаДаты);
ЗаполняемыеСвойства = "ФамилияИО,Подразделение,Должность,ТабельныйНомер";
КадровыеДанныеСотрудника = КадровыеДанныеСотрудников.Найти(ДанныеЛН.Сотрудник);
ЗаполнитьЗначенияСвойств(СекцияПриказ.Параметры, КадровыеДанныеСотрудника, ЗаполняемыеСвойства);
СекцияПриказ.Параметры.ФамилияИО = ФизическиеЛицаЗарплатаКадрыРасширенный.ПросклонятьФамилиюИнициалы(
КадровыеДанныеСотрудника,
2);
СекцияПриказ.Параметры.СотрудникРасшифровкаПодписи = КадровыеДанныеСотрудника.ИОФамилия;
ТабличныйДокумент.Вывести(СекцияПриказ);
УправлениеПечатьюБЗК.ПослеПечатиОчередногоОбъекта(КонтекстПечати, ДанныеЛН.Ссылка);
КонецЦикла;
КонецПроцедуры
Функция ДанныеДляПечатиДоплатыЗаДниНетрудоспособности(МассивСсылок)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| БольничныеЛисты.Ссылка,
| БольничныеЛисты.Руководитель,
| БольничныеЛисты.ДатаНачала КАК Дата
|ПОМЕСТИТЬ ВТДанныеДокументов
|ИЗ
| Документ.БольничныйЛист КАК БольничныеЛисты
|ГДЕ
| БольничныеЛисты.Ссылка В(&МассивСсылок)";
Запрос.Выполнить();
ЗарплатаКадры.СоздатьВТФИООтветственныхЛиц(Запрос.МенеджерВременныхТаблиц, Истина, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Руководитель"), "ВТДанныеДокументов");
Запрос.Текст =
"ВЫБРАТЬ
| БольничныеЛисты.Ссылка,
| БольничныеЛисты.Сотрудник,
| БольничныеЛисты.ФизическоеЛицо,
| БольничныеЛисты.ПроцентДоплатыЗаДниНетрудоспособности КАК ПроцентДоплаты,
| БольничныеЛисты.ДоплачиватьДоСреднегоЗаработка,
| БольничныеЛисты.Номер КАК НомерДокумента,
| БольничныеЛисты.Дата КАК ДатаДокумента,
| БольничныеЛисты.НомерЛисткаНетрудоспособности КАК НомерЛН,
| БольничныеЛисты.ДатаНачала,
| БольничныеЛисты.ДатаОкончания,
| БольничныеЛисты.ДатаНачалаОплаты,
| БольничныеЛисты.ДатаОкончанияОплаты,
| ВЫБОР
| КОГДА ОрганизацияСправочник.НаименованиеПолное ПОДОБНО """"
| ТОГДА ОрганизацияСправочник.Наименование
| ИНАЧЕ ОрганизацияСправочник.НаименованиеПолное
| КОНЕЦ КАК НаименованиеОрганизации,
| ФИООтветственныхЛиц.РасшифровкаПодписи КАК РуководительРасшифровкаПодписи,
| БольничныеЛисты.ДолжностьРуководителя
|ИЗ
| ВТДанныеДокументов КАК ВТДанныеДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК БольничныеЛисты
| ПО ВТДанныеДокументов.Ссылка = БольничныеЛисты.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТФИООтветственныхЛиц КАК ФИООтветственныхЛиц
| ПО (БольничныеЛисты.Ссылка = ФИООтветственныхЛиц.Ссылка)
| И (БольничныеЛисты.ДатаНачала = ФИООтветственныхЛиц.Дата)
| И (БольничныеЛисты.Руководитель = ФИООтветственныхЛиц.ФизическоеЛицо)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК ОрганизацияСправочник
| ПО (БольничныеЛисты.Организация = ОрганизацияСправочник.Ссылка)";
Результат = Запрос.Выполнить();
СписокСотрудников = Результат.Выгрузить().ВыгрузитьКолонку("Сотрудник");
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, "ФамилияИО,ИОФамилия,Подразделение,Должность,ТабельныйНомер,Пол,ФИОПолные");
Возврат Новый Структура("ДанныеЛН, КадровыеДанныеСотрудников", Результат.Выбрать(), КадровыеДанныеСотрудников);
КонецФункции
#КонецОбласти
#Область ПФ_MXL_ЗаменаЛетРасчетногоПериода
Процедура ПриПечатиЗаменыЛетРасчетногоПериода(КонтекстПечати)
СЭДОФСС.УстановитьСтандартныйОтступПечати(КонтекстПечати);
ТаблицаДанных = ДанныеДляПечатиЗаменыЛетРасчетногоПериода(КонтекстПечати.МассивОбъектов);
Для Каждого СтрокаТаблицы Из ТаблицаДанных Цикл
Данные = Обработки.ОбщиеФормыСЭДОФСС.ПустаяСтруктураДанныхДляПечатиЗаменыЛет();
ЗаполнитьЗначенияСвойств(Данные, СтрокаТаблицы);
Данные.УполномоченныйПредставительДолжность = СокрЛП(СтрокаТаблицы.ДолжностьРуководителя);
Данные.УполномоченныйПредставительФИО = СокрЛП(СтрокаТаблицы.РуководительФИО);
Данные.ВидПособия = ВидПособия(СтрокаТаблицы);
Обработки.ОбщиеФормыСЭДОФСС.НапечататьЗаменуЛет(КонтекстПечати, Данные);
КонецЦикла;
КонецПроцедуры
Функция ДанныеДляПечатиЗаменыЛетРасчетногоПериода(МассивСсылок)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокументов.Ссылка КАК Ссылка,
| ДанныеДокументов.Дата КАК ДатаПодачи,
| ДанныеДокументов.Организация КАК Организация,
| ДанныеДокументов.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаПервыйГод КАК ПервыйРасчетныйГод,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаВторойГод КАК ВторойРасчетныйГод,
| ДанныеДокументов.ФиксПериодРасчетаСреднегоЗаработка КАК ФиксПериодРасчетаСреднегоЗаработка,
| ДанныеДокументов.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| ДанныеДокументов.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| ДанныеДокументов.ПоставленаНаУчетВРанниеСрокиБеременности КАК ПоставленаНаУчетВРанниеСрокиБеременности,
| ДанныеДокументов.Руководитель КАК Руководитель,
| ДанныеДокументов.ДолжностьРуководителя КАК ДолжностьРуководителя
|ПОМЕСТИТЬ ВТДанныеДокументов
|ИЗ
| Документ.БольничныйЛист КАК ДанныеДокументов
|ГДЕ
| ДанныеДокументов.Ссылка В(&МассивСсылок)
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДанныеДокументов.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеДокументов.ДатаНачалаСобытия КАК ДатаНачалаСобытия
|ПОМЕСТИТЬ ВТФизлица
|ИЗ
| ВТДанныеДокументов КАК ДанныеДокументов
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ВТДанныеДокументов.Руководитель,
| ВТДанныеДокументов.ДатаНачалаСобытия
|ИЗ
| ВТДанныеДокументов КАК ВТДанныеДокументов";
Запрос.Выполнить();
Описатель = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеФизическихЛиц(
Запрос.МенеджерВременныхТаблиц,
"ВТФизлица",
"ФизическоеЛицо,ДатаНачалаСобытия");
ИменаПолей = "СтраховойНомерПФР, Фамилия, Имя, Отчество, ФИОПолные, ИОФамилия";
КадровыйУчет.СоздатьВТКадровыеДанныеФизическихЛиц(Описатель, Истина, ИменаПолей);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокументов.Ссылка КАК Ссылка,
| ДанныеДокументов.ДатаПодачи КАК ДатаПодачи,
| ДанныеДокументов.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеДокументов.ПервыйРасчетныйГод КАК ПервыйРасчетныйГод,
| ДанныеДокументов.ВторойРасчетныйГод КАК ВторойРасчетныйГод,
| ДанныеДокументов.ФиксПериодРасчетаСреднегоЗаработка КАК ФиксПериодРасчетаСреднегоЗаработка,
| ДанныеДокументов.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| ДанныеДокументов.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| ДанныеДокументов.ПоставленаНаУчетВРанниеСрокиБеременности КАК ПоставленаНаУчетВРанниеСрокиБеременности,
| ДанныеДокументов.Руководитель КАК Руководитель,
| ДанныеДокументов.ДолжностьРуководителя КАК ДолжностьРуководителя,
| ВЫБОР
| КОГДА ОрганизацияСправочник.НаименованиеПолное ПОДОБНО """"
| ТОГДА ОрганизацияСправочник.Наименование
| ИНАЧЕ ОрганизацияСправочник.НаименованиеПолное
| КОНЕЦ КАК СтраховательНаименование,
| РуководительКадровыеДанные.ИОФамилия КАК РуководительРасшифровкаПодписи,
| РуководительКадровыеДанные.ФИОПолные КАК РуководительФИО,
| ФизическоеЛицоКадровыеДанные.СтраховойНомерПФР КАК СНИЛС,
| ФизическоеЛицоКадровыеДанные.Фамилия КАК Фамилия,
| ФизическоеЛицоКадровыеДанные.Имя КАК Имя,
| ФизическоеЛицоКадровыеДанные.Отчество КАК Отчество
|ИЗ
| ВТДанныеДокументов КАК ДанныеДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК ОрганизацияСправочник
| ПО ДанныеДокументов.Организация = ОрганизацияСправочник.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеФизическихЛиц КАК РуководительКадровыеДанные
| ПО ДанныеДокументов.Руководитель = РуководительКадровыеДанные.ФизическоеЛицо
| И ДанныеДокументов.ДатаНачалаСобытия = РуководительКадровыеДанные.Период
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеФизическихЛиц КАК ФизическоеЛицоКадровыеДанные
| ПО ДанныеДокументов.ФизическоеЛицо = ФизическоеЛицоКадровыеДанные.ФизическоеЛицо
| И ДанныеДокументов.ДатаНачалаСобытия = ФизическоеЛицоКадровыеДанные.Период";
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
#КонецОбласти
#КонецОбласти
#Область ДанныеДляРасчетаСреднегоЗаработка
Функция ДанныеДокументовДляРасчетаСреднегоЗаработкаФСС(МассивСсылок) Экспорт
ДанныеДокументов = Новый Соответствие;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
УчетПособийСоциальногоСтрахования.СоздатьВТДанныеДокументовДляРасчетаСреднегоЗаработкаФСС(Запрос.МенеджерВременныхТаблиц, МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДокументов.Ссылка КАК Ссылка,
| ДанныеДокументов.ФизическоеЛицо КАК ФизическоеЛицо,
| ДанныеДокументов.Сотрудник КАК Сотрудник,
| ДанныеДокументов.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| ДанныеДокументов.ПрименятьПредельнуюВеличину КАК ПрименятьПредельнуюВеличину,
| ДанныеДокументов.ИспользоватьДниБолезниУходаЗаДетьми КАК ИспользоватьДниБолезниУходаЗаДетьми,
| ДанныеДокументов.УчитыватьДниПриостановленияТД КАК УчитыватьДниПриостановленияТД,
| ДанныеДокументов.ДнейПриостановленияТДЗаГод1 КАК ДнейПриостановленияТДЗаГод1,
| ДанныеДокументов.ДнейПриостановленияТДЗаГод2 КАК ДнейПриостановленияТДЗаГод2,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаНачало КАК ПериодРасчетаСреднегоЗаработкаНачало,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаОкончание КАК ПериодРасчетаСреднегоЗаработкаОкончание,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаПервыйГод КАК ПериодРасчетаСреднегоЗаработкаПервыйГод,
| ДанныеДокументов.ПериодРасчетаСреднегоЗаработкаВторойГод КАК ПериодРасчетаСреднегоЗаработкаВторойГод,
| ДанныеДокументов.УчитыватьЗаработокПредыдущихСтрахователей КАК УчитыватьЗаработокПредыдущихСтрахователей,
| ДанныеДокументов.ИсточникСреднего КАК ИсточникСреднего,
| ДанныеДокументов.РасчетПоПравилам2010Года КАК РасчетПоПравилам2010Года,
| ДанныеДокументов.ДоляНеполногоВремени КАК ДоляНеполногоВремени,
| ДанныеДокументов.РайонныйКоэффициентРФ КАК РайонныйКоэффициентРФ,
| ДанныеДокументов.МинимальныйРазмерОплатыТрудаРФ КАК МинимальныйРазмерОплатыТрудаРФ
|ИЗ
| ВТДанныеДокументовДляРасчетаСреднегоЗаработкаФСС КАК ДанныеДокументов";
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
ТаблицыДанныхОСреднем = УчетПособийСоциальногоСтрахования.ТаблицыДанныхСреднегоЗаработкаФСС("БольничныйЛист", МассивСсылок);
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС = УчетПособийСоциальногоСтрахования.РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС();
ЗаполнитьЗначенияСвойств(РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС, Выборка);
ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС = УчетПособийСоциальногоСтрахования.ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС(РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС, ТаблицыДанныхОСреднем);
ДанныеДокументов.Вставить(Выборка.Ссылка, ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС);
КонецЦикла;
КонецЕсли;
Возврат ДанныеДокументов;
КонецФункции
Функция ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС(БольничныйОбъект) Экспорт
Попытка
ТаблицыДанныхОСреднем = ТаблицыДанныхОСреднем(БольничныйОбъект);
РеквизитыДокумента = РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС(БольничныйОбъект);
Возврат УчетПособийСоциальногоСтрахования.ДанныеДокументаДляРасчетаСреднегоЗаработкаФСС(РеквизитыДокумента, ТаблицыДанныхОСреднем);
Исключение
Суть = СтрШаблон(
НСтр("ru = 'Не удалось рассчитать средний заработок по документу ""%1"". Вероятно, документ заполнен не полностью.'"),
БольничныйОбъект);
Кратко = Суть + " " + НСтр("ru = 'Подробности в журнале регистрации.'");
Подробно = Суть + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
СообщенияБЗК.СообщитьОПроблеме(Кратко, БольничныйОбъект.Ссылка, "ДатаНачала");
УчетПособийСоциальногоСтрахования.ЗаписатьОшибкуВЖурнал(Подробно, БольничныйОбъект.Ссылка);
Возврат Неопределено;
КонецПопытки;
КонецФункции
Функция ТаблицыДанныхОСреднем(БольничныйОбъект)
ДанныеОНачислениях = БольничныйОбъект.СреднийЗаработокФСС.Выгрузить();
ДанныеОНачислениях.Колонки.Удалить("УдалитьСотрудник");
ДанныеОНачислениях.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("ДокументСсылка.БольничныйЛист"));
ДанныеОНачислениях.ЗаполнитьЗначения(БольничныйОбъект.Ссылка, "Ссылка");
ДанныеВремени = БольничныйОбъект.ОтработанноеВремяДляСреднегоФСС.Выгрузить();
ДанныеВремени.Колонки.Удалить("УдалитьСотрудник");
ДанныеВремени.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("ДокументСсылка.БольничныйЛист"));
ДанныеВремени.ЗаполнитьЗначения(БольничныйОбъект.Ссылка, "Ссылка");
ДанныеСтрахователей = БольничныйОбъект.СреднийЗаработокДанныеСтрахователей.Выгрузить();
ДанныеСтрахователей.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("ДокументСсылка.БольничныйЛист"));
ДанныеСтрахователей.ЗаполнитьЗначения(БольничныйОбъект.Ссылка, "Ссылка");
ПриостановленияТД = БольничныйОбъект.ПриостановленияТрудовыхДоговоров.Выгрузить();
ПриостановленияТД.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("ДокументСсылка.БольничныйЛист"));
ПриостановленияТД.ЗаполнитьЗначения(БольничныйОбъект.Ссылка, "Ссылка");
СреднийЗаработокСЭДО = БольничныйОбъект.СреднийЗаработокСЭДО.Выгрузить();
СреднийЗаработокСЭДО.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("ДокументСсылка.БольничныйЛист"));
СреднийЗаработокСЭДО.ЗаполнитьЗначения(БольничныйОбъект.Ссылка, "Ссылка");
ТаблицыДанныхОСреднем = Новый Структура;
ТаблицыДанныхОСреднем.Вставить("ДанныеОНачислениях", ДанныеОНачислениях);
ТаблицыДанныхОСреднем.Вставить("ДанныеОВремени", ДанныеВремени);
ТаблицыДанныхОСреднем.Вставить("ДанныеСтрахователей", ДанныеСтрахователей);
ТаблицыДанныхОСреднем.Вставить("ПриостановленияТрудовыхДоговоров", ПриостановленияТД);
ТаблицыДанныхОСреднем.Вставить("СреднийЗаработокСЭДО", СреднийЗаработокСЭДО);
Возврат ТаблицыДанныхОСреднем;
КонецФункции
Функция РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС(БольничныйОбъект)
РеквизитыДокумента = УчетПособийСоциальногоСтрахования.РеквизитыДокументаДляРасчетаСреднегоЗаработкаФСС();
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, БольничныйОбъект);
РеквизитыДокумента.РайонныйКоэффициентРФ = БольничныйОбъект.РайонныйКоэффициентРФНаНачалоСобытия;
РеквизитыДокумента.ПрименятьПредельнуюВеличину =
БольничныйОбъект.ПричинаНетрудоспособности <> Перечисления.ПричиныНетрудоспособности.ТравмаНаПроизводстве
И БольничныйОбъект.ПричинаНетрудоспособности <> Перечисления.ПричиныНетрудоспособности.Профзаболевание;
РеквизитыДокумента.ИспользоватьДниБолезниУходаЗаДетьми = ИспользоватьДниБолезниУходаЗаДетьми(БольничныйОбъект);
РеквизитыДокумента.УчитыватьДниПриостановленияТД = УчитыватьДниПриостановленияТД(БольничныйОбъект);
РеквизитыДокумента.ДнейПриостановленияТДЗаГод1 = БольничныйОбъект.ДнейПриостановленияТДЗаГод1;
РеквизитыДокумента.ДнейПриостановленияТДЗаГод2 = БольничныйОбъект.ДнейПриостановленияТДЗаГод2;
РеквизитыДокумента.МинимальныйРазмерОплатыТрудаРФ = ЗарплатаКадры.МинимальныйРазмерОплатыТрудаРФ(БольничныйОбъект.ДатаНачалаСобытия);
Возврат РеквизитыДокумента;
КонецФункции
Функция ИспользоватьДниБолезниУходаЗаДетьми(Больничный) Экспорт
Возврат Больничный.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам
И Больничный.ДатаНачалаСобытия >= УчетПособийСоциальногоСтрахованияКлиентСервер.ДатаОтдельногоРасчетаПособийПоМатеринству();
КонецФункции
#КонецОбласти
Функция ДанныеДляРегистрацииВУчетаСтажаПФР(МассивСсылок) Экспорт
ДанныеДляРегистрацииВУчете = Новый Соответствие;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| БольничныйЛист.Ссылка КАК Ссылка,
| БольничныйЛист.Организация КАК Организация,
| БольничныйЛист.ПериодРегистрации КАК ПериодРегистрации,
| БольничныйЛист.ДокументРассчитан КАК ДокументРассчитан,
| БольничныйЛист.ПорядокВыплаты КАК ПорядокВыплаты,
| БольничныйЛист.Дата КАК Дата,
| БольничныйЛист.ПланируемаяДатаВыплаты КАК ПланируемаяДатаВыплаты,
| БольничныйЛист.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| БольничныйЛист.Сотрудник КАК Сотрудник,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаНачало КАК ПериодРасчетаСреднегоЗаработкаНачало,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаОкончание КАК ПериодРасчетаСреднегоЗаработкаОкончание,
| БольничныйЛист.ОсвобождатьСтавку КАК ОсвобождатьСтавку,
| БольничныйЛист.КодПричиныНетрудоспособности КАК КодПричиныНетрудоспособности,
| БольничныйЛист.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| БольничныйЛист.ДатаНачала КАК ДатаНачала,
| БольничныйЛист.ДатаОкончания КАК ДатаОкончания,
| БольничныйЛист.НазначитьПособие КАК НазначитьПособие,
| БольничныйЛист.ДатаНачалаОплаты КАК ДатаНачалаОплаты,
| БольничныйЛист.ДатаОкончанияОплаты КАК ДатаОкончанияОплаты,
| БольничныйЛист.ФизическоеЛицо КАК ФизическоеЛицо,
| БольничныйЛист.ИсправленныйДокумент КАК ИсправленныйДокумент,
| БольничныйЛист.Номер КАК Номер,
| БольничныйЛист.ОсвобождениеДатаНачала1 КАК ОсвобождениеДатаНачала1,
| БольничныйЛист.ОсвобождениеДатаНачала2 КАК ОсвобождениеДатаНачала2,
| БольничныйЛист.ОсвобождениеДатаНачала3 КАК ОсвобождениеДатаНачала3,
| БольничныйЛист.ОсвобождениеДатаОкончания1 КАК ОсвобождениеДатаОкончания1,
| БольничныйЛист.ОсвобождениеДатаОкончания2 КАК ОсвобождениеДатаОкончания2,
| БольничныйЛист.ОсвобождениеДатаОкончания3 КАК ОсвобождениеДатаОкончания3,
| БольничныйЛист.СлучайУходаЗаБольнымРебенком КАК СлучайУходаЗаБольнымРебенком,
| БольничныйЛист.РодственникЗаКоторымОсуществляетсяУход1 КАК РодственникЗаКоторымОсуществляетсяУход1,
| БольничныйЛист.ДатаНачалаРодственник1 КАК ДатаНачалаРодственник1,
| БольничныйЛист.ДатаОкончанияРодственник1 КАК ДатаОкончанияРодственник1,
| БольничныйЛист.РодственникЗаКоторымОсуществляетсяУход2 КАК РодственникЗаКоторымОсуществляетсяУход2,
| БольничныйЛист.ДатаНачалаРодственник2 КАК ДатаНачалаРодственник2,
| БольничныйЛист.ДатаОкончанияРодственник2 КАК ДатаОкончанияРодственник2,
| БольничныйЛист.РассчитатьЗарплату КАК РассчитатьЗарплату,
| БольничныйЛист.ДоходПолученНаТерриторииРФ КАК ДоходПолученНаТерриторииРФ,
| БольничныйЛист.ДатаНачалаПоловиннойОплаты КАК ДатаНачалаПоловиннойОплаты,
| БольничныйЛист.ДатаНарушенияРежима КАК ДатаНарушенияРежима,
| БольничныйЛист.ВидНеоплачиваемогоВремени КАК ВидНеоплачиваемогоВремени,
| БольничныйЛист.ВидОплатыЗаСчетРаботодателя КАК ВидОплатыЗаСчетРаботодателя,
| БольничныйЛист.ВидОплатыПособия КАК ВидОплатыПособия,
| БольничныйЛист.ПрименятьЛьготыПриНачисленииПособия КАК ПрименятьЛьготыПриНачисленииПособия,
| БольничныйЛист.ФинансированиеФедеральнымБюджетом КАК ФинансированиеФедеральнымБюджетом,
| БольничныйЛист.УсловияИсчисленияКод1 КАК УсловияИсчисленияКод1,
| БольничныйЛист.УсловияИсчисленияКод2 КАК УсловияИсчисленияКод2,
| БольничныйЛист.УсловияИсчисленияКод3 КАК УсловияИсчисленияКод3,
| БольничныйЛист.ПрерывистыйМетод КАК ПрерывистыйМетод,
| БольничныйЛист.СтажЛет КАК СтажЛет,
| БольничныйЛист.СтажМесяцев КАК СтажМесяцев,
| БольничныйЛист.СтажРасширенныйЛет КАК СтажРасширенныйЛет,
| БольничныйЛист.СтажРасширенныйМесяцев КАК СтажРасширенныйМесяцев,
| БольничныйЛист.СдвигатьПериодОплаты КАК СдвигатьПериодОплаты,
| БольничныйЛист.НачалоВПериодПриостановленияТД КАК НачалоВПериодПриостановленияТД,
| БольничныйЛист.ЯвляетсяПродолжениемБолезни КАК ЯвляетсяПродолжениемБолезни,
| БольничныйЛист.ПервичныйБольничныйЛист КАК ПервичныйБольничныйЛист,
| БольничныйЛист.ПроцентОплаты КАК ПроцентОплаты,
| БольничныйЛист.ПроцентОплатыБезЛьгот КАК ПроцентОплатыБезЛьгот,
| БольничныйЛист.ОграничениеПособия КАК ОграничениеПособия,
| БольничныйЛист.ОграничениеПособияБезЛьгот КАК ОграничениеПособияБезЛьгот,
| БольничныйЛист.ВидОплатыПособия.ВидСтажаПФР2014 КАК ВидСтажаНаПериодСОплатой,
| БольничныйЛист.ВидНеоплачиваемогоВремени.ВидСтажаПФР2014 КАК ВидСтажаНаПериодБезОплаты,
| БольничныйЛист.ИсключаемыеПериоды КАК ИсключаемыеПериоды,
| БольничныйЛист.ПериодыПростоя КАК ПериодыПростоя,
| БольничныйЛист.ПериодыУходаЗаРодственниками КАК ПериодыУходаЗаРодственниками
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист
|ГДЕ
| БольничныйЛист.Ссылка В(&МассивСсылок)";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
МассивКолонок = Новый Массив;
Для Каждого Колонка Из Результат.Колонки Цикл
МассивКолонок.Добавить(Колонка.Имя);
КонецЦикла;
ИменаКолонок = СтрСоединить(МассивКолонок, ", ");
Пока Выборка.Следующий() Цикл
РеквизитыДляРегистрацииВУчетеСтажаПФР = Новый Структура(ИменаКолонок);
ЗаполнитьЗначенияСвойств(РеквизитыДляРегистрацииВУчетеСтажаПФР, Выборка);
РеквизитыДляРегистрацииВУчетеСтажаПФР.ИсключаемыеПериоды = Выборка.ИсключаемыеПериоды.Выгрузить();
РеквизитыДляРегистрацииВУчетеСтажаПФР.ПериодыУходаЗаРодственниками = Выборка.ПериодыУходаЗаРодственниками.Выгрузить();
РеквизитыДляРегистрацииВУчетеСтажаПФР.ПериодыПростоя = Выборка.ПериодыПростоя.Выгрузить();
Кэш = Новый Соответствие;
ДанныеДляРегистрацииВУчетеПоДокументу = ПериодыСтажаПФР(РеквизитыДляРегистрацииВУчетеСтажаПФР, Кэш);
ДанныеДляРегистрацииВУчете.Вставить(Выборка.Ссылка, ДанныеДляРегистрацииВУчетеПоДокументу);
КонецЦикла;
Возврат ДанныеДляРегистрацииВУчете;
КонецФункции
#Область ПериодыУходаЗаДетьми
Функция ТаблицаДвиженийПоУходу(Больничный, Кэш)
ТаблицаДвижений = УчетПособийСоциальногоСтрахованияРасширенный.ПустаяТаблицаДвиженийПериодовУходаЗаБольнымиРодственниками();
Если ИспользоватьПериодыУходаВШапке(Больничный) Тогда
ЗаполнитьТаблицуДвиженийПоУходуПоДаннымШапки(ТаблицаДвижений, Больничный);
Иначе
ЗаполнитьТаблицуДвиженийПоУходуПоТаблицеУхода(ТаблицаДвижений, Больничный, Кэш);
КонецЕсли;
Возврат ТаблицаДвижений;
КонецФункции
Процедура ЗаполнитьТаблицуДвиженийПоУходуПоТаблицеУхода(ТаблицаДвижений, Больничный, Кэш)
Если ЗначениеЗаполнено(Больничный.ИсправленныйДокумент) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодыУходаЗаБольнымиРодственниками.Период,
| ПериодыУходаЗаБольнымиРодственниками.ФизическоеЛицо,
| ПериодыУходаЗаБольнымиРодственниками.Родственник,
| ПериодыУходаЗаБольнымиРодственниками.СлучайУходаЗаБольнымРебенком,
| -ПериодыУходаЗаБольнымиРодственниками.КоличествоДней КАК КоличествоДней,
| -ПериодыУходаЗаБольнымиРодственниками.ОплаченоДней КАК ОплаченоДней,
| ПериодыУходаЗаБольнымиРодственниками.НачалоПериода,
| ПериодыУходаЗаБольнымиРодственниками.ОкончаниеПериода,
| ПериодыУходаЗаБольнымиРодственниками.НачалоПериодаОплаты,
| ПериодыУходаЗаБольнымиРодственниками.ОкончаниеПериодаОплаты,
| ПериодыУходаЗаБольнымиРодственниками.ДатаНачалаСобытия
|ИЗ
| РегистрНакопления.ПериодыУходаЗаБольнымиРодственниками КАК ПериодыУходаЗаБольнымиРодственниками
|ГДЕ
| ПериодыУходаЗаБольнымиРодственниками.Регистратор = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Больничный.ИсправленныйДокумент);
ДвиженияИсправленногоДокумента = Запрос.Выполнить().Выбрать();
Пока ДвиженияИсправленногоДокумента.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ТаблицаДвижений.Добавить(), ДвиженияИсправленногоДокумента);
КонецЦикла;
КонецЕсли;
Если Не Перечисления.ПричиныНетрудоспособности.ЭтоУходЗаРодственником(Больничный.ПричинаНетрудоспособности) Тогда
Возврат;
КонецЕсли;
ДатыУхода = ДатыУходаЗаРодственниками(Больничный, Кэш);
Измерения = "Год, Родственник, СлучайУхода, Оплачивать";
ПериодыУхода = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ДатыУхода, Измерения);
ПериодыУхода.Сортировать("Родственник, СлучайУхода, Год, ДатаНачала, Оплачивать Убыв, ДатаОкончания Убыв");
ПрошлыйПериод = Неопределено;
СтрокаДвижений = Неопределено;
Для Каждого ПериодУхода Из ПериодыУхода Цикл
Если СтрокаДвижений = Неопределено
Или ПрошлыйПериод.Родственник <> ПериодУхода.Родственник
Или ПрошлыйПериод.СлучайУхода <> ПериодУхода.СлучайУхода
Или ПрошлыйПериод.Год <> ПериодУхода.Год
Или ПрошлыйПериод.ДатаОкончания < НачалоДня(ПериодУхода.ДатаНачала - 86400)
Или (Не ПрошлыйПериод.Оплачивать И ПериодУхода.Оплачивать) Тогда
СтрокаДвижений = ТаблицаДвижений.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДвижений, ПериодУхода);
СтрокаДвижений.ДатаНачалаСобытия = Больничный.ДатаНачалаСобытия;
СтрокаДвижений.ФизическоеЛицо = Больничный.ФизическоеЛицо;
СтрокаДвижений.СлучайУходаЗаБольнымРебенком = ПериодУхода.СлучайУхода;
СтрокаДвижений.Период = ПериодУхода.ДатаНачала;
СтрокаДвижений.НачалоПериода = ПериодУхода.ДатаНачала;
КонецЕсли;
СтрокаДвижений.ОкончаниеПериода = ПериодУхода.ДатаОкончания;
СтрокаДвижений.КоличествоДней = СтрокаДвижений.КоличествоДней + ОбщегоНазначенияБЗК.КоличествоДнейВПериоде(
ПериодУхода.ДатаНачала,
ПериодУхода.ДатаОкончания);
Если ПериодУхода.Оплачивать Тогда
СтрокаДвижений.НачалоПериодаОплаты = СтрокаДвижений.НачалоПериода;
СтрокаДвижений.ОкончаниеПериодаОплаты = СтрокаДвижений.ОкончаниеПериода;
СтрокаДвижений.ОплаченоДней = СтрокаДвижений.ОплаченоДней + СтрокаДвижений.КоличествоДней;
КонецЕсли;
ПрошлыйПериод = ПериодУхода;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТаблицуДвиженийПоУходуПоДаннымШапки(ТаблицаДвижений, Больничный)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодыУходаЗаБольнымиРодственниками.Период,
| ПериодыУходаЗаБольнымиРодственниками.ФизическоеЛицо,
| ПериодыУходаЗаБольнымиРодственниками.Родственник,
| ПериодыУходаЗаБольнымиРодственниками.СлучайУходаЗаБольнымРебенком,
| -ПериодыУходаЗаБольнымиРодственниками.КоличествоДней КАК КоличествоДней,
| -ПериодыУходаЗаБольнымиРодственниками.ОплаченоДней КАК ОплаченоДней,
| ПериодыУходаЗаБольнымиРодственниками.НачалоПериода,
| ПериодыУходаЗаБольнымиРодственниками.ОкончаниеПериода,
| ПериодыУходаЗаБольнымиРодственниками.НачалоПериодаОплаты,
| ПериодыУходаЗаБольнымиРодственниками.ОкончаниеПериодаОплаты,
| ПериодыУходаЗаБольнымиРодственниками.ДатаНачалаСобытия
|ИЗ
| РегистрНакопления.ПериодыУходаЗаБольнымиРодственниками КАК ПериодыУходаЗаБольнымиРодственниками
|ГДЕ
| ПериодыУходаЗаБольнымиРодственниками.Регистратор = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Больничный.ИсправленныйДокумент);
ДвиженияИсправленногоДокумента = Запрос.Выполнить().Выбрать();
Пока ДвиженияИсправленногоДокумента.Следующий() Цикл
НоваяСтрока = ТаблицаДвижений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ДвиженияИсправленногоДокумента);
КонецЦикла;
Если Не Перечисления.ПричиныНетрудоспособности.ЭтоУходЗаРодственником(Больничный.ПричинаНетрудоспособности) Тогда
Возврат;
КонецЕсли;
Если Больничный.НазначитьПособие Тогда
ДатаНачалаОплаты = Больничный.ДатаНачалаОплаты;
ДатаОкончанияОплаты = Больничный.ДатаОкончанияОплаты;
Иначе
ДатаНачалаОплаты = Неопределено;
ДатаОкончанияОплаты = Неопределено;
КонецЕсли;
Если Больничный.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком Тогда
СлучайУходаЗаБольнымРебенком = Больничный.СлучайУходаЗаБольнымРебенком;
Иначе
СлучайУходаЗаБольнымРебенком = Перечисления.СлучаиУходаЗаБольнымиДетьми.ПустаяСсылка();
КонецЕсли;
СтруктураЗаполнения = Новый Структура;
СтруктураЗаполнения.Вставить("ФизическоеЛицо", Больничный.ФизическоеЛицо);
СтруктураЗаполнения.Вставить("СлучайУходаЗаБольнымРебенком", СлучайУходаЗаБольнымРебенком);
СтруктураЗаполнения.Вставить("ДатаНачалаСобытия", Больничный.ДатаНачалаСобытия);
Если ЗначениеЗаполнено(Больничный.РодственникЗаКоторымОсуществляетсяУход1) Тогда
ДатаНачала = ?(ЗначениеЗаполнено(Больничный.ДатаНачалаРодственник1), Больничный.ДатаНачалаРодственник1, Больничный.ДатаНачала);
ДатаОкончания = ?(ЗначениеЗаполнено(Больничный.ДатаОкончанияРодственник1), Больничный.ДатаОкончанияРодственник1, Больничный.ДатаОкончания);
ДобавитьПериодыУходаЗаРодственником(ТаблицаДвижений, СтруктураЗаполнения, Больничный.РодственникЗаКоторымОсуществляетсяУход1, ДатаНачала, ДатаОкончания, ДатаНачалаОплаты, ДатаОкончанияОплаты);
КонецЕсли;
Если ЗначениеЗаполнено(Больничный.РодственникЗаКоторымОсуществляетсяУход2) Тогда
ДатаНачала = ?(ЗначениеЗаполнено(Больничный.ДатаНачалаРодственник2), Больничный.ДатаНачалаРодственник2, Больничный.ДатаНачала);
ДатаОкончания = ?(ЗначениеЗаполнено(Больничный.ДатаОкончанияРодственник2), Больничный.ДатаОкончанияРодственник2, Больничный.ДатаОкончания);
ДобавитьПериодыУходаЗаРодственником(ТаблицаДвижений, СтруктураЗаполнения, Больничный.РодственникЗаКоторымОсуществляетсяУход2, ДатаНачала, ДатаОкончания, ДатаНачалаОплаты, ДатаОкончанияОплаты);
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьПериодыУходаЗаРодственником(ТаблицаДвижений, СтруктураЗаполнения, Родственник, ДатаНачала, ДатаОкончания, ДатаНачалаОплаты, ДатаОкончанияОплаты)
ОписаниеПериодовУходаЗаРодственником = ОписаниеПериодовУходаЗаРодственником(ДатаНачала, ДатаОкончания, ДатаНачалаОплаты, ДатаОкончанияОплаты);
Для каждого ОписаниеПериода Из ОписаниеПериодовУходаЗаРодственником Цикл
ПериодУхода = ТаблицаДвижений.Добавить();
ЗаполнитьЗначенияСвойств(ПериодУхода, СтруктураЗаполнения);
ПериодУхода.Родственник = Родственник;
ПериодУхода.Период = ОписаниеПериода.НачалоПериода;
ПериодУхода.КоличествоДней = ОписаниеПериода.КоличествоДней;
ПериодУхода.ОплаченоДней = ОписаниеПериода.ОплаченоДней;
ПериодУхода.НачалоПериода = ОписаниеПериода.НачалоПериода;
ПериодУхода.ОкончаниеПериода = ОписаниеПериода.ОкончаниеПериода;
ПериодУхода.НачалоПериодаОплаты = ОписаниеПериода.НачалоПериодаОплаты;
ПериодУхода.ОкончаниеПериодаОплаты = ОписаниеПериода.ОкончаниеПериодаОплаты;
КонецЦикла;
КонецПроцедуры
Функция ОписаниеПериодовУходаЗаРодственником(ДатаНачала, ДатаОкончания, ДатаНачалаОплаты, ДатаОкончанияОплаты)
ОписаниеПериодовУходаЗаРодственником = Новый Массив;
Если Год(ДатаНачала) = Год(ДатаОкончания) Тогда
ОписаниеПериода = ОписаниеПериодаУходаЗаБольнымРодственником(ДатаНачала, ДатаОкончания, ДатаНачалаОплаты, ДатаОкончанияОплаты);
ОписаниеПериодовУходаЗаРодственником.Добавить(ОписаниеПериода);
Иначе
НачалоПериодаПервогоГода = НачалоДня(ДатаНачала);
ОкончаниеПериодаПервогоГода = КонецГода(ДатаНачала);
ОписаниеПериода = ОписаниеПериодаУходаЗаБольнымРодственником(НачалоПериодаПервогоГода, ОкончаниеПериодаПервогоГода, ДатаНачалаОплаты, ДатаОкончанияОплаты);
ОписаниеПериодовУходаЗаРодственником.Добавить(ОписаниеПериода);
НачалоПериодаВторогоГода = НачалоГода(ДатаОкончания);
ОкончаниеПериодаВторогоГода = КонецДня(ДатаОкончания);
ОписаниеПериода = ОписаниеПериодаУходаЗаБольнымРодственником(НачалоПериодаВторогоГода, ОкончаниеПериодаВторогоГода, ДатаНачалаОплаты, ДатаОкончанияОплаты);
ОписаниеПериодовУходаЗаРодственником.Добавить(ОписаниеПериода);
КонецЕсли;
Возврат ОписаниеПериодовУходаЗаРодственником;
КонецФункции
Функция ОписаниеПериодаУходаЗаБольнымРодственником(Знач НачалоПериода, Знач ОкончаниеПериода, Знач НачалоПериодаОплаты, Знач ОкончаниеПериодаОплаты)
ДлинаСуток = 86400;
ПособиеОплачивается = ЗначениеЗаполнено(НачалоПериодаОплаты) И ЗначениеЗаполнено(ОкончаниеПериодаОплаты);
ОписаниеПериода = Новый Структура("НачалоПериода,ОкончаниеПериода,НачалоПериодаОплаты,ОкончаниеПериодаОплаты,ОплаченоДней,КоличествоДней");
ОписаниеПериода.НачалоПериода = НачалоПериода;
ОписаниеПериода.ОкончаниеПериода = ОкончаниеПериода;
ОписаниеПериода.КоличествоДней = (КонецДня(ОкончаниеПериода) - НачалоДня(НачалоПериода) + 1)/ ДлинаСуток;
ОписаниеПериода.НачалоПериодаОплаты = '00010101';
ОписаниеПериода.ОкончаниеПериодаОплаты = '00010101';
ОписаниеПериода.ОплаченоДней = 0;
Если ПособиеОплачивается Тогда
НачалоПериодаОплаты = Макс(НачалоПериодаОплаты, НачалоПериода);
ОкончаниеПериодаОплаты = Мин(ОкончаниеПериодаОплаты, ОкончаниеПериода);
Если НачалоПериодаОплаты <= ОкончаниеПериодаОплаты Тогда
ОписаниеПериода.НачалоПериодаОплаты = НачалоПериодаОплаты;
ОписаниеПериода.ОкончаниеПериодаОплаты = ОкончаниеПериодаОплаты;
ОписаниеПериода.ОплаченоДней = (КонецДня(ОкончаниеПериодаОплаты) - НачалоДня(НачалоПериодаОплаты) + 1)/ ДлинаСуток;
КонецЕсли;
КонецЕсли;
Возврат ОписаниеПериода;
КонецФункции
Процедура ЗаполнитьПериодыЛеченияПоДаннымБумажногоЛН(Больничный, ПериодыЛечения)
Если Не Перечисления.ПричиныНетрудоспособности.ЭтоУходЗаРодственником(Больничный.ПричинаНетрудоспособности) Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если Не ЗначениеЗаполнено(Больничный.КодПричиныНетрудоспособности) Тогда
Больничный.КодПричиныНетрудоспособности = Перечисления.ПричиныНетрудоспособности.КодПричины(
Больничный.ДатаНачалаСобытия,
Больничный.ПричинаНетрудоспособности,
Больничный.СлучайУходаЗаБольнымРебенком);
КонецЕсли;
ПериодыРежимовЛечения = ПериодыЛечения.СкопироватьКолонки("ДатаНачала, ДатаОкончания, РежимЛечения");
ЗаполнитьПериодыРежимовЛеченияПоДаннымШапки(Больничный, ПериодыРежимовЛечения);
РеквизитыРодственников = РеквизитыРодственниковИзШапки(Больничный);
ИменаПолейЗаполняемыхИзСведенийОРодственнике = "РодственникСсылка, ФИО, Фамилия, Имя, Отчество,
|ДатаРождения, ВозрастЛет, ВозрастМесяцев, КодСвязи, СНИЛС";
Для НомерРодственника = 1 По 2 Цикл
Номер = Формат(НомерРодственника, "ЧГ=");
СведенияОРодственнике = Новый Структура(ИменаПолейЗаполняемыхИзСведенийОРодственнике);
СведенияОРодственнике.РодственникСсылка = Больничный["РодственникЗаКоторымОсуществляетсяУход" + Номер];
СведенияОРодственнике.ФИО = Больничный["ПоУходуФИО" + Номер];
СведенияОРодственнике.ВозрастЛет = Больничный["ПоУходуВозрастЛет" + Номер];
СведенияОРодственнике.ВозрастМесяцев = Больничный["ПоУходуВозрастМесяцев" + Номер];
СведенияОРодственнике.КодСвязи = Больничный["ПоУходуРодственнаяСвязь" + Номер];
Если ЗначениеЗаполнено(СведенияОРодственнике.ФИО) Тогда
СтруктураФИО = ФизическиеЛицаКлиентСервер.ЧастиИмени(СведенияОРодственнике.ФИО);
ЗаполнитьЗначенияСвойств(СведенияОРодственнике, СтруктураФИО, "Фамилия, Имя, Отчество");
КонецЕсли;
РеквизитыРодственника = РеквизитыРодственников[СведенияОРодственнике.РодственникСсылка];
Если РеквизитыРодственника <> Неопределено Тогда
СведенияОРодственнике.ДатаРождения = РеквизитыРодственника.ДатаРождения;
СведенияОРодственнике.СНИЛС = РеквизитыРодственника.СНИЛС;
Если Не ЗначениеЗаполнено(СведенияОРодственнике.ФИО) Тогда
СведенияОРодственнике.ФИО = РеквизитыРодственника.Наименование;
СведенияОРодственнике.Фамилия = РеквизитыРодственника.Фамилия;
СведенияОРодственнике.Имя = РеквизитыРодственника.Имя;
СведенияОРодственнике.Отчество = РеквизитыРодственника.Отчество;
КонецЕсли;
Если Не ЗначениеЗаполнено(СведенияОРодственнике.ВозрастЛет)
И Не ЗначениеЗаполнено(СведенияОРодственнике.ВозрастМесяцев)
И ЗначениеЗаполнено(РеквизитыРодственника.ДатаРождения) Тогда
РазмерПериода = ОбщегоНазначенияБЗК.РазмерПериода(РеквизитыРодственника.ДатаРождения, Больничный.ДатаНачалаСобытия);
СведенияОРодственнике.ВозрастЛет = РазмерПериода.Лет;
СведенияОРодственнике.ВозрастМесяцев = РазмерПериода.Месяцев;
КонецЕсли;
Если Не ЗначениеЗаполнено(СведенияОРодственнике.КодСвязи) Тогда
СведенияОРодственнике.КодСвязи = РеквизитыРодственника.КодСвязи;
КонецЕсли;
КонецЕсли;
ДатаНачалаУхода = Больничный["ДатаНачалаРодственник" + Номер];
ДатаОкончанияУхода = Больничный["ДатаОкончанияРодственник" + Номер];
Если Не ЗначениеЗаполнено(ДатаНачалаУхода) Тогда
Продолжить;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДатаОкончанияУхода) Тогда
ДатаОкончанияУхода = Больничный.ДатаОкончания;
КонецЕсли;
Для Каждого ПериодРежимаЛечения Из ПериодыРежимовЛечения Цикл
ДатаНачала = Макс(ПериодРежимаЛечения.ДатаНачала, ДатаНачалаУхода);
ДатаОкончания = Мин(ПериодРежимаЛечения.ДатаОкончания, ДатаОкончанияУхода);
Если ДатаНачала > ДатаОкончания Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы = ПериодыЛечения.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СведенияОРодственнике, ИменаПолейЗаполняемыхИзСведенийОРодственнике);
СтрокаТаблицы.ДатаНачала = ДатаНачала;
СтрокаТаблицы.ДатаОкончания = ДатаОкончания;
СтрокаТаблицы.РежимЛечения = ПериодРежимаЛечения.РежимЛечения;
СтрокаТаблицы.КодПричины = Больничный.КодПричиныНетрудоспособности;
СтрокаТаблицы.СлучайУхода = Больничный.СлучайУходаЗаБольнымРебенком;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьПериодыРежимовЛеченияПоДаннымШапки(Больничный, ПериодыРежимовЛечения)
Если Больничный.ДатаНачала <= Больничный.ПериодНахожденияВСтационареСРебенкомС
И Больничный.ПериодНахожденияВСтационареСРебенкомС <= Больничный.ДатаОкончания Тогда
Если ЗначениеЗаполнено(Больничный.ПериодНахожденияВСтационареСРебенкомПо) Тогда
ДатаОкончанияСтационара = Мин(Больничный.ПериодНахожденияВСтационареСРебенкомПо, Больничный.ДатаОкончания);
Иначе
ДатаОкончанияСтационара = Больничный.ДатаОкончания;
КонецЕсли;
Если Больничный.ДатаНачала < Больничный.ПериодНахожденияВСтационареСРебенкомС Тогда
ПериодРежимаЛечения = ПериодыРежимовЛечения.Добавить();
ПериодРежимаЛечения.ДатаНачала = Больничный.ДатаНачала;
ПериодРежимаЛечения.ДатаОкончания = Больничный.ПериодНахожденияВСтационареСРебенкомС - 86400;
ПериодРежимаЛечения.РежимЛечения = Перечисления.РежимыЛечения.Амбулаторно;
РазбитьПоГодам(ПериодыРежимовЛечения, ПериодРежимаЛечения, "");
КонецЕсли;
ПериодРежимаЛечения = ПериодыРежимовЛечения.Добавить();
ПериодРежимаЛечения.ДатаНачала = Больничный.ПериодНахожденияВСтационареСРебенкомС;
ПериодРежимаЛечения.ДатаОкончания = ДатаОкончанияСтационара;
ПериодРежимаЛечения.РежимЛечения = Перечисления.РежимыЛечения.Стационар;
РазбитьПоГодам(ПериодыРежимовЛечения, ПериодРежимаЛечения, "");
Если ДатаОкончанияСтационара < Больничный.ДатаОкончания Тогда
ПериодРежимаЛечения = ПериодыРежимовЛечения.Добавить();
ПериодРежимаЛечения.ДатаНачала = ДатаОкончанияСтационара + 86400;
ПериодРежимаЛечения.ДатаОкончания = Больничный.ДатаОкончания;
ПериодРежимаЛечения.РежимЛечения = Перечисления.РежимыЛечения.Амбулаторно;
РазбитьПоГодам(ПериодыРежимовЛечения, ПериодРежимаЛечения, "");
КонецЕсли;
Иначе
ПериодРежимаЛечения = ПериодыРежимовЛечения.Добавить();
ПериодРежимаЛечения.ДатаНачала = Больничный.ДатаНачала;
ПериодРежимаЛечения.ДатаОкончания = Больничный.ДатаОкончания;
ПериодРежимаЛечения.РежимЛечения = Перечисления.РежимыЛечения.Амбулаторно;
РазбитьПоГодам(ПериодыРежимовЛечения, ПериодРежимаЛечения, "");
КонецЕсли;
КонецПроцедуры
Функция РеквизитыРодственниковИзШапки(Больничный)
МассивРодственников = Новый Массив;
Если ЗначениеЗаполнено(Больничный.РодственникЗаКоторымОсуществляетсяУход1) Тогда
ОбщегоНазначенияБЗК.ДобавитьЗначениеВМассив(МассивРодственников, Больничный.РодственникЗаКоторымОсуществляетсяУход1);
КонецЕсли;
Если ЗначениеЗаполнено(Больничный.РодственникЗаКоторымОсуществляетсяУход2) Тогда
ОбщегоНазначенияБЗК.ДобавитьЗначениеВМассив(МассивРодственников, Больничный.РодственникЗаКоторымОсуществляетсяУход2);
КонецЕсли;
Если МассивРодственников.Количество() > 0 Тогда
ИменаПолей = "Наименование, Фамилия, Имя, Отчество, ДатаРождения, СНИЛС, КодСвязи";
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивРодственников, ИменаПолей, Ложь);
Иначе
Возврат Новый Соответствие;
КонецЕсли;
КонецФункции
Процедура ВставитьСсылкиРодственниковВДанныеЭЛН(Больничный, ДанныеЭЛН)
ПоискПериодовЛечения = Новый Соответствие;
Для Каждого ПериодЛечения Из ДанныеЭЛН.ПериодыЛеченияРодственников Цикл
Ключи = ОбменЛисткамиНетрудоспособностиФСС.КлючиПоискаРодственника(ПериодЛечения);
Если ЗначениеЗаполнено(ПериодЛечения.РодственникСсылка) Тогда
Ключи.Вставить(0, ПериодЛечения.РодственникСсылка);
КонецЕсли;
Для Каждого Ключ Из Ключи Цикл
ПериодыЛеченияРодственника = ПоискПериодовЛечения[Ключ];
Если ПериодыЛеченияРодственника = Неопределено Тогда
ПериодыЛеченияРодственника = Новый Массив;
ПоискПериодовЛечения.Вставить(Ключ, ПериодыЛеченияРодственника);
КонецЕсли;
ОбщегоНазначенияБЗК.ДобавитьЗначениеВМассив(ПериодыЛеченияРодственника, ПериодЛечения);
КонецЦикла;
КонецЦикла;
Для НомерРодственника = 1 По 2 Цикл
Номер = Формат(НомерРодственника, "ЧГ=");
Родственник = Больничный["РодственникЗаКоторымОсуществляетсяУход" + Номер];
ФИО = Больничный["ПоУходуФИО" + Номер];
КодСвязи = Больничный["ПоУходуРодственнаяСвязь" + Номер];
Если Не ЗначениеЗаполнено(Родственник) Или Не ЗначениеЗаполнено(ФИО) Тогда
Продолжить;
КонецЕсли;
СтруктураФИО = ФизическиеЛицаКлиентСервер.ЧастиИмени(ФИО);
Реквизиты = Новый Структура("ФИО, Фамилия, Имя, Отчество, СНИЛС, ДатаРождения, КодСвязи");
ЗаполнитьЗначенияСвойств(Реквизиты, СтруктураФИО);
Реквизиты.ФИО = ФИО;
Реквизиты.КодСвязи = Больничный["ПоУходуРодственнаяСвязь" + Номер];
Ключи = ОбменЛисткамиНетрудоспособностиФСС.КлючиПоискаРодственника(Реквизиты);
Для Каждого Ключ Из Ключи Цикл
ПериодыЛеченияРодственника = ПоискПериодовЛечения[Ключ];
Если ПериодыЛеченияРодственника <> Неопределено Тогда
Для Каждого ПериодЛечения Из ПериодыЛеченияРодственника Цикл
Если Не ЗначениеЗаполнено(ПериодЛечения.РодственникСсылка) Тогда
ПериодЛечения.РодственникСсылка = Родственник;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Функция РазбитьПоГодам(Таблица, СтрокаТаблицы, ИгнорируемыеКолонки) Экспорт
ДобавленныеСтроки = Новый Массив;
ГодНачала = Год(СтрокаТаблицы.ДатаНачала);
ГодОкончания = Год(СтрокаТаблицы.ДатаОкончания);
Если ГодНачала = ГодОкончания Или ГодНачала > ГодОкончания Или ГодНачала + 100 < ГодОкончания Тогда
Возврат ДобавленныеСтроки;
КонецЕсли;
ДатаОкончания = СтрокаТаблицы.ДатаОкончания;
СтрокаТаблицы.ДатаОкончания = КонецГода(СтрокаТаблицы.ДатаНачала);
Индекс = Таблица.Индекс(СтрокаТаблицы);
Для Год = ГодНачала + 1 По ГодОкончания Цикл
Индекс = Индекс + 1;
ОчереднаяСтрока = Таблица.Вставить(Индекс);
ДобавленныеСтроки.Добавить(ОчереднаяСтрока);
ЗаполнитьЗначенияСвойств(ОчереднаяСтрока, СтрокаТаблицы, , ИгнорируемыеКолонки);
ОчереднаяСтрока.ДатаНачала = Дата(Год, 1, 1);
Если Год = ГодОкончания Тогда
ОчереднаяСтрока.ДатаОкончания = ДатаОкончания;
Иначе
ОчереднаяСтрока.ДатаОкончания = КонецГода(ОчереднаяСтрока.ДатаНачала);
КонецЕсли;
КонецЦикла;
Возврат ДобавленныеСтроки;
КонецФункции
#КонецОбласти
#Область ОбновлениеИнформационнойБазы
Процедура ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления) Экспорт
ПараметрыЗаполнения = ПерерасчетЗарплаты.ПараметрыЗаполненияИсходныхДанныхПерерасчетов();
ПерерасчетЗарплаты.ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления, Метаданные.Документы.БольничныйЛист, ПараметрыЗаполнения);
КонецПроцедуры
Процедура ЗаполнитьКоличествоДнейОплаты(ПараметрыОбновления = Неопределено) Экспорт
ОбработкаЗавершена = Истина;
ОбработчикОтложенный = (ПараметрыОбновления <> Неопределено);
МетаданныеДокумента = Метаданные.Документы.БольничныйЛист;
ПолеБлокировки = "Ссылка";
ТаблицаБлокировки = МетаданныеДокумента.ПолноеИмя();
РазмерПорции = ?(ОбработчикОтложенный, 1000, 0);
ПустаяСсылкаОрганизации = Справочники.Организации.ПустаяСсылка();
Отбор = Новый ОтборКомпоновкиДанных;
ЗапросыБЗК.ДобавитьОтбор(Отбор, "НазначитьПособие", "=", Истина);
ЗапросыБЗК.ДобавитьОтбор(Отбор, "ДнейПоловиннойОплаты", "=", 0);
ГруппаИли = ЗапросыБЗК.ДобавитьГруппуОтбора(Отбор, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли);
ЗапросыБЗК.ДобавитьОтбор(ГруппаИли, "ДнейОплаты", "=", 0);
ЗапросыБЗК.ДобавитьОтбор(ГруппаИли, "ДатаНачалаПоловиннойОплаты", ">", '00010101');
НастройкиЗапроса = ЗапросыБЗК.НастройкиЗапросаКТаблице();
НастройкиЗапроса.Отбор = Отбор;
НастройкиЗапроса.Порядок = "Дата УБЫВ, Проведен УБЫВ, Ссылка УБЫВ";
НастройкиЗапроса.Количество = РазмерПорции;
Запрос = ЗапросыБЗК.ЗапросКТаблице(ТаблицаБлокировки, ПолеБлокировки, НастройкиЗапроса);
МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(ПолеБлокировки);
Если ОбработчикОтложенный И МассивСсылок.Количество() = РазмерПорции Тогда
ОбработкаЗавершена = Ложь;
КонецЕсли;
Для Каждого Ссылка Из МассивСсылок Цикл
Если ОбработчикОтложенный Тогда
Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(
ПараметрыОбновления,
ТаблицаБлокировки,
ПолеБлокировки,
Ссылка) Тогда
ОбработкаЗавершена = Ложь;
Продолжить;
КонецЕсли;
КонецЕсли;
ДокументОбъект = Ссылка.ПолучитьОбъект();
ДнейОплатыДоИзменений = ДокументОбъект.ДнейОплаты;
ДнейПоловиннойОплатыДоИзменений = ДокументОбъект.ДнейПоловиннойОплаты;
Кэш = Новый Соответствие;
ОплачиваемыеДатыНачислений = ОплачиваемыеДатыНачислений(ДокументОбъект, Кэш);
Если ДокументОбъект.ДнейОплаты = 0 Тогда
ДокументОбъект.ДнейОплаты = ОплачиваемыеДатыНачислений.Количество();
КонецЕсли;
Если ДокументОбъект.ДнейПоловиннойОплаты = 0 Тогда
Фильтр = Новый Структура("ПоловинаОплаты", Истина);
ДокументОбъект.ДнейПоловиннойОплаты = ОплачиваемыеДатыНачислений.НайтиСтроки(Фильтр).Количество();
КонецЕсли;
ОбъектИзменен = (ДокументОбъект.ДнейОплаты <> ДнейОплатыДоИзменений
Или ДокументОбъект.ДнейПоловиннойОплаты <> ДнейПоловиннойОплатыДоИзменений);
Если ОбъектИзменен Тогда
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ДокументОбъект);
КонецЕсли;
Если ОбработчикОтложенный Тогда
Если ОбъектИзменен Тогда
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
Иначе
ОтменитьТранзакцию();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ОбработчикОтложенный Тогда
ПараметрыОбновления.ОбработкаЗавершена = ОбработкаЗавершена;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьСотрудникСлужащий(ПараметрыОбновления = Неопределено) Экспорт
ОбработкаЗавершена = Истина;
ОбработчикОтложенный = (ПараметрыОбновления <> Неопределено);
МетаданныеДокумента = Метаданные.Документы.БольничныйЛист;
ПолеБлокировки = "Ссылка";
ТаблицаБлокировки = МетаданныеДокумента.ПолноеИмя();
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1000
| БольничныйЛист.Ссылка КАК Ссылка,
| БольничныйЛист.Дата КАК Дата,
| БольничныйЛист.Сотрудник КАК Сотрудник,
| БольничныйЛист.Организация КАК Организация,
| БольничныйЛист.ФизическоеЛицо КАК ФизическоеЛицо,
| БольничныйЛист.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| БольничныйЛист.СотрудникСлужащий КАК СотрудникСлужащий
|ПОМЕСТИТЬ Больничные
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист
|ГДЕ
| БольничныйЛист.Дата <= &МинимальнаяДатаПредшествующейИтерации
| И НЕ БольничныйЛист.Ссылка В (&ОбработанныеПредшествующейИтерации)
| И БольничныйЛист.Ссылка < &МинимальнаяСсылкаПредшествующейИтерации
| И БольничныйЛист.Сотрудник <> ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)
| И БольничныйЛист.ПометкаУдаления = ЛОЖЬ
| И БольничныйЛист.СотрудникСлужащий = ЛОЖЬ
|
|УПОРЯДОЧИТЬ ПО
| Дата УБЫВ,
| Ссылка УБЫВ
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Больничные.Сотрудник КАК Сотрудник,
| Больничные.ДатаНачалаСобытия КАК ДатаНачалаСобытия
|ПОМЕСТИТЬ СотрудникиПериоды
|ИЗ
| Больничные КАК Больничные";
Если Не ОбработчикОтложенный Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ ПЕРВЫЕ 1000", "ВЫБРАТЬ");
КонецЕсли;
КлючОбъекта = "ОбновлениеИнформационнойБазы";
КлючНастроек = "БольничныйЛист_ЗаполнитьСотрудникСлужащий";
ИмяПользователя = "";
Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, , , ИмяПользователя);
Если Настройки = Неопределено Тогда
Настройки = Новый Структура("МинимальнаяДата, МинимальнаяСсылка, Обработанные", '39991231235959', , Новый Массив);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "БольничныйЛист.Дата <= &МинимальнаяДатаПредшествующейИтерации", "ИСТИНА");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И НЕ БольничныйЛист.Ссылка В (&ОбработанныеПредшествующейИтерации)", "");
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И БольничныйЛист.Ссылка < &МинимальнаяСсылкаПредшествующейИтерации", "");
Иначе
Запрос.УстановитьПараметр("МинимальнаяДатаПредшествующейИтерации", Настройки.МинимальнаяДата);
Запрос.УстановитьПараметр("ОбработанныеПредшествующейИтерации", Настройки.Обработанные);
Запрос.УстановитьПараметр("МинимальнаяСсылкаПредшествующейИтерации", Настройки.МинимальнаяСсылка);
КонецЕсли;
Запрос.Выполнить();
ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(
Запрос.МенеджерВременныхТаблиц,
"СотрудникиПериоды",
"Сотрудник,ДатаНачалаСобытия");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(
ОписательВременныхТаблиц,
Ложь,
"ВидДоговора");
Запрос.Текст =
"ВЫБРАТЬ
| БольничныйЛист.Ссылка КАК Ссылка,
| БольничныйЛист.Дата КАК Дата,
| БольничныйЛист.Сотрудник КАК Сотрудник,
| БольничныйЛист.Организация КАК Организация,
| БольничныйЛист.ФизическоеЛицо КАК ФизическоеЛицо,
| БольничныйЛист.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| БольничныйЛист.СотрудникСлужащий КАК СотрудникСлужащий,
| ЕСТЬNULL(КадровыеДанныеСотрудников.ВидДоговора, НЕОПРЕДЕЛЕНО) КАК ВидДоговора
|ИЗ
| Больничные КАК БольничныйЛист
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
| ПО БольничныйЛист.Сотрудник = КадровыеДанныеСотрудников.Сотрудник
| И БольничныйЛист.ДатаНачалаСобытия = КадровыеДанныеСотрудников.Период
|
|УПОРЯДОЧИТЬ ПО
| БольничныйЛист.Дата УБЫВ,
| БольничныйЛист.Ссылка УБЫВ";
ФильтрПоДатеОстановлен = Ложь;
Настройки.Обработанные.Очистить();
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если ОбработчикОтложенный И Выборка.Количество() >= 1000 Тогда
ОбработкаЗавершена = Ложь;
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ВидДоговора = Выборка.ВидДоговора;
Если Не ЗначениеЗаполнено(ВидДоговора) И ЗначениеЗаполнено(Выборка.Сотрудник) Тогда
ДанныеСотрудника = КадровыйУчет.КадровыеДанныеСотрудника(
Истина,
Выборка.Сотрудник,
"ВидДоговора",
Выборка.ДатаНачалаСобытия);
Если ДанныеСотрудника <> Неопределено Тогда
ВидДоговора = ДанныеСотрудника.ВидДоговора;
Иначе
Текст = НСтр("ru = 'Не удалось определить вид договора сотрудника ""%1"" на дату начала события ""%2"".'");
Текст = СтрШаблон(Текст, Выборка.Сотрудник, Выборка.ДатаНачалаСобытия);
УчетПособийСоциальногоСтрахования.ЗаписатьОшибкуВЖурнал(Текст, Выборка.Ссылка);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(ВидДоговора) И ЗначениеЗаполнено(Выборка.Организация) И ЗначениеЗаполнено(Выборка.ФизическоеЛицо) Тогда
ДанныеСотрудника = КадровыйУчет.КадровыеДанныеОсновногоСотрудникаФизическогоЛица(
Выборка.Организация,
Выборка.ФизическоеЛицо,
"ВидДоговора",
Выборка.ДатаНачалаСобытия,
Истина);
Если ДанныеСотрудника <> Неопределено Тогда
ВидДоговора = ДанныеСотрудника.ВидДоговора;
Иначе
Текст = НСтр("ru = 'Не удалось определить вид договора физлица ""%1"" организации ""%2"" на дату начала события ""%3"".'");
Текст = СтрШаблон(Текст, Выборка.ФизическоеЛицо, Выборка.Организация, Выборка.ДатаНачалаСобытия);
УчетПособийСоциальногоСтрахования.ЗаписатьОшибкуВЖурнал(Текст, Выборка.Ссылка);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ВидДоговора) Тогда
СотрудникСлужащий = Перечисления.ВидыДоговоровССотрудниками.ЭтоДоговорСлужащего(ВидДоговора);
Если СотрудникСлужащий <> Выборка.СотрудникСлужащий Тогда
Если ОбработчикОтложенный Тогда
Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(
ПараметрыОбновления,
ТаблицаБлокировки,
ПолеБлокировки,
Выборка.Ссылка) Тогда
ОбработкаЗавершена = Ложь;
Текст = НСтр("ru = 'Объект заблокирован, требуется повторная обработка'");
УчетПособийСоциальногоСтрахования.ЗаписатьОшибкуВЖурнал(Текст, Выборка.Ссылка);
ФильтрПоДатеОстановлен = Истина;
Продолжить;
КонецЕсли;
КонецЕсли;
Подробно = "";
Попытка
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.СотрудникСлужащий = СотрудникСлужащий;
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ДокументОбъект);
Если ОбработчикОтложенный Тогда
ЗафиксироватьТранзакцию();;
КонецЕсли;
Исключение
Подробно = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Если ОбработчикОтложенный Тогда
ОтменитьТранзакцию();
КонецЕсли;
КонецПопытки;
Если Подробно <> "" Тогда
ОбработкаЗавершена = Ложь;
Текст = НСтр("ru = '%1: При записи документа возникла ошибка: %2'");
Текст = СтрШаблон(Текст, Выборка.Ссылка, Подробно);
УчетПособийСоциальногоСтрахования.ЗаписатьОшибкуВЖурнал(Текст, Выборка.Ссылка);
ФильтрПоДатеОстановлен = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ОбработчикОтложенный Тогда
Если ФильтрПоДатеОстановлен Тогда
Настройки.Обработанные.Добавить(Выборка.Ссылка);
Иначе
Если Выборка.Дата < Настройки.МинимальнаяДата Тогда
Настройки.МинимальнаяДата = Выборка.Дата;
Настройки.МинимальнаяСсылка = Выборка.Ссылка;
Иначе
Настройки.МинимальнаяСсылка = Выборка.Ссылка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ОбработчикОтложенный Тогда
Если ОбработкаЗавершена Тогда
ОбщегоНазначения.ХранилищеОбщихНастроекУдалить(КлючОбъекта, КлючНастроек, ИмяПользователя);
Иначе
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек, Настройки, , ИмяПользователя);
КонецЕсли;
ПараметрыОбновления.ОбработкаЗавершена = ОбработкаЗавершена;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДниНетрудоспособностиПериодыУходаЗаБольнымиРодственниками(ПараметрыОбновления = Неопределено) Экспорт
ОбновлениеВыполнено = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодыУходаЗаБольнымиРодственниками.Регистратор КАК Регистратор
|ИЗ
| РегистрНакопления.ПериодыУходаЗаБольнымиРодственниками КАК ПериодыУходаЗаБольнымиРодственниками
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК БольничныйЛист
| ПО ПериодыУходаЗаБольнымиРодственниками.Регистратор = БольничныйЛист.Ссылка
|ГДЕ
| ПериодыУходаЗаБольнымиРодственниками.КоличествоДней < ПериодыУходаЗаБольнымиРодственниками.ОплаченоДней";
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", ОбновлениеВыполнено);
Возврат;
КонецЕсли;
ИмяДокумента = Метаданные.Документы.БольничныйЛист.ПолноеИмя();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПодготовитьОбновлениеДанных(
ПараметрыОбновления, ИмяДокумента, "Ссылка", Выборка.Регистратор) Тогда
Продолжить;
КонецЕсли;
Больничный = Выборка.Регистратор.ПолучитьОбъект();
ТаблицаДвижений = ТаблицаДвиженийПоУходу(Больничный, Новый Соответствие);
Если ТаблицаДвижений.Количество() = 0 Тогда
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
Продолжить;
КонецЕсли;
НаборЗаписей = Больничный.Движения.ПериодыУходаЗаБольнымиРодственниками;
НаборЗаписей.Прочитать();
Записывать = Ложь;
Для Каждого ЗаписьНабора Из НаборЗаписей Цикл
Отбор = Новый Структура("Период, ФизическоеЛицо, Родственник, СлучайУходаЗаБольнымРебенком, ДатаНачалаСобытия, ОплаченоДней");
ЗаполнитьЗначенияСвойств(Отбор, ЗаписьНабора);
НайденныеСтроки = ТаблицаДвижений.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() = 1 И ЗаписьНабора.КоличествоДней <> НайденныеСтроки[0].КоличествоДней Тогда
Записывать = Истина;
ЗаписьНабора.КоличествоДней = НайденныеСтроки[0].КоличествоДней;
КонецЕсли;
КонецЦикла;
Если Записывать Тогда
НаборЗаписей.Записывать = Истина;
Попытка
НаборЗаписей.Записать();
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбновлениеДанных(ПараметрыОбновления);
Исключение
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление информационной базы.Ошибка записи набора регистра ""Периоды ухода за больными родственниками""'",
ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Предупреждение, , Выборка.Регистратор, ИмяДокумента);
КонецПопытки;
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
КонецЦикла;
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", ОбновлениеВыполнено);
КонецПроцедуры
#КонецОбласти
#Область ТекущиеДела
Функция ТекстЗапросаВТБольничныеСЗаработкомСФР()
Возврат
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| БольничныйЛист.Ссылка КАК Ссылка,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаПервыйГод КАК ПервыйРасчетныйГод,
| БольничныйЛист.ПервыйРасчетныйГодЗаработок КАК ПервыйРасчетныйГодЗаработок,
| БольничныйЛист.ПервыйРасчетныйГодОснование КАК ПервыйРасчетныйГодОснование,
| БольничныйЛист.ПериодРасчетаСреднегоЗаработкаВторойГод КАК ВторойРасчетныйГод,
| БольничныйЛист.ВторойРасчетныйГодЗаработок КАК ВторойРасчетныйГодЗаработок,
| БольничныйЛист.ВторойРасчетныйГодОснование КАК ВторойРасчетныйГодОснование,
| БольничныйЛист.ИсточникСреднего КАК ИсточникСреднего,
| ВЫБОР
| КОГДА БольничныйЛист.УчитыватьЗаработокПредыдущихСтрахователей = ИСТИНА
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СпособыУчетаГодовогоЗаработкаСФР.ВсеСтрахователи)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СпособыУчетаГодовогоЗаработкаСФР.ТекущийСтрахователь)
| КОНЕЦ КАК ВидЗаработка,
| БольничныйЛист.УчитыватьЗаработокПредыдущихСтрахователей КАК УчитыватьЗаработокПредыдущихСтрахователей
|ПОМЕСТИТЬ ВсеБольничные
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист
|ГДЕ
| БольничныйЛист.ИсточникСреднего В (ЗНАЧЕНИЕ(Перечисление.ИсточникиСреднегоДляПособий.УчетФонда), ЗНАЧЕНИЕ(Перечисление.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда))
|;
|
|
|ВЫБРАТЬ
| ВсеБольничные.Ссылка КАК Ссылка,
| ВсеБольничные.ПервыйРасчетныйГод КАК РасчетныйГод,
| ВсеБольничные.ПервыйРасчетныйГодЗаработок КАК Заработок,
| ВсеБольничные.ПервыйРасчетныйГодОснование КАК Основание,
| ВсеБольничные.ИсточникСреднего КАК ИсточникСреднего,
| ВсеБольничные.ВидЗаработка КАК ВидЗаработка,
| ВсеБольничные.УчитыватьЗаработокПредыдущихСтрахователей КАК УчитыватьЗаработокПредыдущихСтрахователей
|ПОМЕСТИТЬ БольничныеПоГодам
|ИЗ
| ВсеБольничные КАК ВсеБольничные
|ГДЕ
| ВсеБольничные.ПервыйРасчетныйГод > 2000
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВсеБольничные.Ссылка,
| ВсеБольничные.ВторойРасчетныйГод,
| ВсеБольничные.ВторойРасчетныйГодЗаработок,
| ВсеБольничные.ВторойРасчетныйГодОснование,
| ВсеБольничные.ИсточникСреднего,
| ВсеБольничные.ВидЗаработка,
| ВсеБольничные.УчитыватьЗаработокПредыдущихСтрахователей
|ИЗ
| ВсеБольничные КАК ВсеБольничные
|ГДЕ
| ВсеБольничные.ВторойРасчетныйГод > 2000
|;
|
|
|УНИЧТОЖИТЬ ВсеБольничные
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| БольничныеПоГодам.Ссылка КАК Ссылка,
| БольничныеПоГодам.РасчетныйГод КАК РасчетныйГод,
| БольничныеПоГодам.Заработок КАК Заработок,
| БольничныеПоГодам.Основание КАК Основание,
| ВЫБОР
| КОГДА ВходящийЗапрос.Ссылка ЕСТЬ NULL
| ТОГДА 0
| КОГДА БольничныеПоГодам.РасчетныйГод = ВходящийЗапрос.ПервыйРасчетныйГод
| И БольничныеПоГодам.ВидЗаработка = ВходящийЗапрос.ПервыйРасчетныйГодВидЗаработка
| ТОГДА ВходящийЗапрос.ПервыйРасчетныйГодЗаработок
| КОГДА БольничныеПоГодам.РасчетныйГод = ВходящийЗапрос.ВторойРасчетныйГод
| И БольничныеПоГодам.ВидЗаработка = ВходящийЗапрос.ВторойРасчетныйГодВидЗаработка
| ТОГДА ВходящийЗапрос.ВторойРасчетныйГодЗаработок
| ИНАЧЕ 0
| КОНЕЦ КАК ЗаработокСФР
|ПОМЕСТИТЬ ВТБольничныеСЗаработкомСФР
|ИЗ
| БольничныеПоГодам КАК БольничныеПоГодам
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВходящийЗапросФССДляРасчетаПособия КАК ВходящийЗапрос
| ПО БольничныеПоГодам.Основание = ВходящийЗапрос.Ссылка
| И (БольничныеПоГодам.РасчетныйГод = ВходящийЗапрос.ПервыйРасчетныйГод
| ИЛИ БольничныеПоГодам.РасчетныйГод = ВходящийЗапрос.ВторойРасчетныйГод)
|ГДЕ
| БольничныеПоГодам.ИсточникСреднего = ЗНАЧЕНИЕ(Перечисление.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| БольничныеПоГодам.Ссылка,
| БольничныеПоГодам.РасчетныйГод,
| БольничныеПоГодам.Заработок,
| БольничныеПоГодам.Основание,
| ВЫБОР
| КОГДА СреднийЗаработокСЭДО.Ссылка ЕСТЬ NULL
| ТОГДА 0
| КОГДА БольничныеПоГодам.УчитыватьЗаработокПредыдущихСтрахователей = ИСТИНА
| ТОГДА СреднийЗаработокСЭДО.ЗаработокПоВсем
| ИНАЧЕ СреднийЗаработокСЭДО.ЗаработокПоТекущему
| КОНЕЦ
|ИЗ
| БольничныеПоГодам КАК БольничныеПоГодам
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СреднийЗаработокСЭДО.ДанныеОЗаработке КАК СреднийЗаработокСЭДО
| ПО БольничныеПоГодам.Основание = СреднийЗаработокСЭДО.Ссылка
| И БольничныеПоГодам.РасчетныйГод = СреднийЗаработокСЭДО.РасчетныйГод
|ГДЕ
| БольничныеПоГодам.ИсточникСреднего = ЗНАЧЕНИЕ(Перечисление.ИсточникиСреднегоДляПособий.УчетФонда)
|;
|
|
|УНИЧТОЖИТЬ БольничныеПоГодам"
+ "
|;
|
|////////////////////////////////////////////////////////////////////////////////
|";
КонецФункции
#КонецОбласти
#Область ЭЛН
Функция ФрагментыУсловийОтбора(Запрос, ИмяТаблицы, Отбор)
ФрагментыУсловий = Новый Массив;
Для Каждого КлючИЗначение Из Отбор Цикл
ИмяОтбора = КлючИЗначение.Ключ;
ЗначениеОтбора = КлючИЗначение.Значение;
Если ТипЗнч(ЗначениеОтбора) = Тип("ФиксированныйМассив") Тогда
ЗначениеОтбора = Новый Массив(ЗначениеОтбора);
КонецЕсли;
Запрос.УстановитьПараметр(ИмяОтбора, ЗначениеОтбора);
Если ТипЗнч(ЗначениеОтбора) = Тип("Массив") Тогда
ФрагментыУсловий.Добавить(СтрШаблон("%1.%2 В (&%2)", ИмяТаблицы, ИмяОтбора))
Иначе
ФрагментыУсловий.Добавить(СтрШаблон("%1.%2 = &%2", ИмяТаблицы, ИмяОтбора))
КонецЕсли;
КонецЦикла;
Возврат ФрагментыУсловий;
КонецФункции
Функция ДанныеЭЛНДляЗаполнения(Больничный) Экспорт
ТекстXML = РегистрыСведений.СведенияОбЭЛН.ИсходныйXML(
Больничный.НомерЛисткаНетрудоспособности,
Больничный.ГоловнаяОрганизация);
Если ЗначениеЗаполнено(ТекстXML) Тогда
ДанныеЭЛН = ЭЛНФСС.ДанныеЭЛНИзXML(ТекстXML);
Если Не ИспользоватьПериодыУходаВШапке(Больничный) Тогда
ВставитьСсылкиРодственниковВДанныеЭЛН(Больничный, ДанныеЭЛН);
КонецЕсли;
Иначе
ДанныеЭЛН = Неопределено;
КонецЕсли;
Если ДанныеЭЛН = Неопределено Тогда
ДанныеЭЛН = ЭЛНФСС.ПустыеДанныеЭЛН();
ЗаполнитьЗначенияСвойств(ДанныеЭЛН, Больничный);
ДанныеЭЛН.АктуальныйФормат = Ложь;
ПериодыЛечения = ЭЛНФСС.ПустаяТаблицаПериодовЛеченияРодственников();
ЗаполнитьПериодыЛеченияПоДаннымБумажногоЛН(Больничный, ПериодыЛечения);
КонецЕсли;
Возврат ДанныеЭЛН;
КонецФункции
#КонецОбласти
#Область ПараметрыВыбораНачислений
Функция ДополнительныеПараметрыВыбораНачислений(Документ, ПутьКРеквизиту) Экспорт
Результат = Новый Соответствие;
Если ПутьКРеквизиту = "ВидОплатыПособия" Тогда
Категория = Перечисления.ПричиныНетрудоспособности.КатегорияОплатыПособия(Документ.ПричинаНетрудоспособности);
ИначеЕсли ПутьКРеквизиту = "ВидНеоплачиваемогоВремени" Тогда
Категория = УчетПособийСоциальногоСтрахованияРасширенныйКлиентСервер.КатегорияНеоплачиваемогоВремениПоПричинеНетрудоспособности(Документ.ПричинаНетрудоспособности);
ИначеЕсли ПутьКРеквизиту = "ВидОплатыЗаСчетРаботодателя" Тогда
Категория = УчетПособийСоциальногоСтрахованияРасширенныйКлиентСервер.КатегорияНачисленияОплатаБольничногоЛистаЗаСчетРаботодателя();
ИначеЕсли ПутьКРеквизиту = "ВидРасчетаДоплаты" Тогда
Если Документ.ДоплачиватьДоДенежногоСодержания Тогда
Категория = Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДоплатаДоДенежногоСодержанияЗаДниБолезни;
Иначе
Категория = Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДоплатаДоСреднегоЗаработкаЗаДниБолезни;
КонецЕсли;
КонецЕсли;
Результат.Вставить("Отбор.КатегорияНачисленияИлиНеоплаченногоВремени", Категория);
Возврат Результат;
КонецФункции
#КонецОбласти
Процедура ЗаполнитьДвиженияЗанятостьПозицийШтатногоРасписания(ПараметрыОбновления = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
| ТаблицаДокумента.Ссылка КАК Регистратор,
| ТаблицаДокумента.Сотрудник КАК Сотрудник,
| ТаблицаДокумента.ДатаНачала КАК ДатаНачала,
| ТаблицаДокумента.ДатаОкончания КАК ДатаОкончания,
| ЕСТЬNULL(ТаблицаДокументаИсправления.Ссылка, ТаблицаДокументаСторнирование.Ссылка) КАК РегистраторИзмерение
|ИЗ
| Документ.БольничныйЛист КАК ТаблицаДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
| ПО ТаблицаДокумента.Сотрудник = КадроваяИсторияСотрудников.Сотрудник
| И (КОНЕЦПЕРИОДА(ТаблицаДокумента.ДатаНачала, ДЕНЬ) >= КадроваяИсторияСотрудников.Период)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписания КАК ЗанятостьПозицийШтатногоРасписания
| ПО ТаблицаДокумента.Ссылка = ЗанятостьПозицийШтатногоРасписания.Регистратор
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК ТаблицаДокументаИсправления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписанияИспр КАК ЗанятостьПозицийШтатногоРасписанияИспр
| ПО ТаблицаДокументаИсправления.Ссылка = ЗанятостьПозицийШтатногоРасписанияИспр.РегистраторИзмерение
| ПО ТаблицаДокумента.Ссылка = ТаблицаДокументаИсправления.ИсправленныйДокумент
| И (ТаблицаДокументаИсправления.Проведен)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СторнированиеНачислений КАК ТаблицаДокументаСторнирование
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписанияИспр КАК ЗанятостьПозицийШтатногоРасписанияСторнирование
| ПО ТаблицаДокументаСторнирование.Ссылка = ЗанятостьПозицийШтатногоРасписанияСторнирование.РегистраторИзмерение
| ПО ТаблицаДокумента.Ссылка = ТаблицаДокументаСторнирование.СторнируемыйДокумент
| И (ТаблицаДокументаСторнирование.Проведен)
|ГДЕ
| ТаблицаДокумента.Проведен
| И ТаблицаДокумента.ОсвобождатьСтавку
| И ЗанятостьПозицийШтатногоРасписания.Регистратор ЕСТЬ NULL
| И ЗанятостьПозицийШтатногоРасписанияИспр.РегистраторИзмерение ЕСТЬ NULL
| И ЗанятостьПозицийШтатногоРасписанияСторнирование.РегистраторИзмерение ЕСТЬ NULL
| И НЕ КадроваяИсторияСотрудников.Сотрудник ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО
| ДатаНачала,
| Регистратор,
| Сотрудник";
Если ПараметрыОбновления = Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПЕРВЫЕ 1000", "");
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
РегистрыСведений.ЗанятостьПозицийШтатногоРасписания.ЗаполнитьДвиженияПоДаннымВыборкиРегистраторов(Выборка, Ложь, ПараметрыОбновления);
КонецПроцедуры
Процедура ИсправитьДвиженияЗанятостьПозицийШтатногоРасписания(ПараметрыОбновления = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
| ЗанятостьПозицийШтатногоРасписания.Регистратор КАК Регистратор
|ПОМЕСТИТЬ ВТРегистраторы
|ИЗ
| РегистрСведений.ЗанятостьПозицийШтатногоРасписания КАК ЗанятостьПозицийШтатногоРасписания
|ГДЕ
| ЗанятостьПозицийШтатногоРасписания.КоличествоСтавок = 0
| И ЗанятостьПозицийШтатногоРасписания.ДействуетДо <> ДАТАВРЕМЯ(1, 1, 1)
| И ТИПЗНАЧЕНИЯ(ЗанятостьПозицийШтатногоРасписания.Регистратор) = ТИП(Документ.БольничныйЛист)
|;
|
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| Регистраторы.Регистратор КАК Регистратор
|ИЗ
| ВТРегистраторы КАК Регистраторы";
Если ПараметрыОбновления = Неопределено Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПЕРВЫЕ 1000", "");
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ЗавершитьОбработчик(ПараметрыОбновления);
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ПродолжитьОбработчик(ПараметрыОбновления);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаДокумента.Ссылка КАК Регистратор,
| ТаблицаДокумента.Сотрудник КАК Сотрудник,
| ТаблицаДокумента.ДатаНачала КАК ДатаНачала,
| ТаблицаДокумента.ДатаОкончания КАК ДатаОкончания,
| ЕСТЬNULL(ТаблицаДокументаИсправления.Ссылка, ТаблицаДокументаСторнирование.Ссылка) КАК РегистраторИзмерение
|ИЗ
| ВТРегистраторы КАК Регистраторы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК ТаблицаДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК ТаблицаДокументаИсправления
| ПО ТаблицаДокумента.Ссылка = ТаблицаДокументаИсправления.ИсправленныйДокумент
| И (ТаблицаДокументаИсправления.Проведен)
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СторнированиеНачислений КАК ТаблицаДокументаСторнирование
| ПО ТаблицаДокумента.Ссылка = ТаблицаДокументаСторнирование.СторнируемыйДокумент
| И (ТаблицаДокументаСторнирование.Проведен)
| ПО Регистраторы.Регистратор = ТаблицаДокумента.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| ДатаНачала,
| Регистратор,
| Сотрудник";
Выборка = Запрос.Выполнить().Выбрать();
РегистрыСведений.ЗанятостьПозицийШтатногоРасписания.ЗаполнитьДвиженияПоДаннымВыборкиРегистраторов(Выборка, Ложь, ПараметрыОбновления);
КонецПроцедуры
Функция ОтпускаПриостановленныеБольничными(БольничныеЛисты) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Отпуск.Ссылка КАК Ссылка,
| Отпуск.Представление КАК Представление,
| Отпуск.Проведен
| И Отпуск.ДокументРассчитан КАК ПроведенИРассчитан,
| Отпуск.ИсправленныйДокумент КАК ИсправленныйДокумент
|ИЗ
| Документ.Отпуск.ПериодыПриостановкиОтпуска КАК ОтпускПериодыПриостановки
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Отпуск КАК Отпуск
| ПО ОтпускПериодыПриостановки.Ссылка = Отпуск.Ссылка
|ГДЕ
| ОтпускПериодыПриостановки.Причина В(&БольничныеЛисты)
| И НЕ Отпуск.ПометкаУдаления";
Запрос.УстановитьПараметр("БольничныеЛисты", БольничныеЛисты);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
#Область ПериодыОплаты
Процедура ЗаполнитьПараметрыОплаты(Больничный, Кэш) Экспорт
Больничный.НазначитьПособие = Истина;
Больничный.ДатаНачалаОплаты = Больничный.ДатаНачала;
Больничный.ДатаОкончанияОплаты = Больничный.ДатаОкончания;
Кэш.Вставить("РассчитатьПериодыУхода", Истина);
Если Больничный.АвтозаполнениеПериодовОплаты Тогда
ЗаполнитьИсключаемыеПериоды(Больничный, Кэш);
ЗаполнитьПериодыПростоя(Больничный, Кэш);
КонецЕсли;
ОплачиваемыеДатыНачислений = ОплачиваемыеДатыНачислений(Больничный, Кэш);
Если Больничный.ИсключаемыеПериоды.Количество() > 0 Тогда
НеучтенныеИсключаемыеДаты = НеучтенныеИсключаемыеДаты(Больничный, Кэш);
НеучтенныеПериоды = ОбщегоНазначенияБЗК.ПериодыИзМассиваДат(НеучтенныеИсключаемыеДаты);
Для Каждого НеучтенныйПериод Из НеучтенныеПериоды Цикл
ИсключаемыйПериод = Больничный.ИсключаемыеПериоды.Добавить();
ИсключаемыйПериод.Регистрировать = Истина;
ИсключаемыйПериод.ДатаНачала = НачалоДня(Макс(НеучтенныйПериод.ДатаНачала, Больничный.ДатаНачала));
ИсключаемыйПериод.ДатаОкончания = НачалоДня(Мин(НеучтенныйПериод.ДатаОкончания, Больничный.ДатаОкончания));
ИсключаемыйПериод.КалендарныхДней = ОбщегоНазначенияБЗК.КоличествоДнейВПериоде(
ИсключаемыйПериод.ДатаНачала,
ИсключаемыйПериод.ДатаОкончания);
КонецЦикла;
КонецЕсли;
Больничный.ДнейОплаты = ОплачиваемыеДатыНачислений.Количество();
Если Больничный.ДнейОплаты = 0 Тогда
Больничный.НазначитьПособие = Ложь;
Больничный.ДатаНачалаОплаты = Неопределено;
Больничный.ДатаОкончанияОплаты = Неопределено;
Иначе
Больничный.НазначитьПособие = Истина;
Больничный.ДатаНачалаОплаты = ОплачиваемыеДатыНачислений[0].Дата;
Больничный.ДатаОкончанияОплаты = ОплачиваемыеДатыНачислений[Больничный.ДнейОплаты - 1].Дата;
КонецЕсли;
Фильтр = Новый Структура("ПоловинаОплаты", Истина);
Больничный.ДнейПоловиннойОплаты = ОплачиваемыеДатыНачислений.НайтиСтроки(Фильтр).Количество();
Если Перечисления.ПричиныНетрудоспособности.ЭтоУходЗаРодственником(Больничный.ПричинаНетрудоспособности)
И Не ИспользоватьПериодыУходаВШапке(Больничный) Тогда
ДатыУходаЗаРодственниками = Документы.БольничныйЛист.ДатыУходаЗаРодственниками(Больничный, Кэш);
Для НомерРодственника = 1 По 2 Цикл
Номер = Строка(НомерРодственника);
Родственник = Больничный["РодственникЗаКоторымОсуществляетсяУход" + Номер];
Если ЗначениеЗаполнено(Родственник) Тогда
Копия = ДатыУходаЗаРодственниками.Скопировать(Новый Структура("Родственник", Родственник));
Копия.Сортировать("Дата");
Если Копия.Количество() = 0 Тогда
Больничный["ДатаНачалаРодственник" + Номер] = '00010101';
Больничный["ДатаОкончанияРодственник" + Номер] = '00010101';
Иначе
Больничный["ДатаНачалаРодственник" + Номер] = Копия[0].Дата;
Больничный["ДатаОкончанияРодственник" + Номер] = Копия[Копия.Количество() - 1].Дата;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПроцентОплатыИОграничениеПособия(Больничный) Экспорт
Структура = УчетПособийСоциальногоСтрахования.ПроцентОплатыИОграничениеПособия(Больничный);
ЗаполнитьЗначенияСвойств(Больничный, Структура);
КонецПроцедуры
Функция ЗаполнитьСлучайУходаЗаБольнымРебенком(Больничный, ДатыУходаЗаРодственниками) Экспорт
ДатаУходаСМаксимальнойОплатой = ДатаУходаСМаксимальнойОплатой(ДатыУходаЗаРодственниками);
Если ДатаУходаСМаксимальнойОплатой = Неопределено Тогда
СлучайУхода = Перечисления.СлучаиУходаЗаБольнымиДетьми.ПустаяСсылка();
КодПричины = Больничный.КодПричиныНетрудоспособности;
ВозрастЛет = 0;
Иначе
СлучайУхода = ДатаУходаСМаксимальнойОплатой.СлучайУхода;
КодПричины = ДатаУходаСМаксимальнойОплатой.КодПричины;
ВозрастЛет = ДатаУходаСМаксимальнойОплатой.ВозрастЛет;
КонецЕсли;
ЕстьИзменения = Ложь;
Если Больничный.КодПричиныНетрудоспособности <> КодПричины Тогда
Больничный.КодПричиныНетрудоспособности = КодПричины;
ЕстьИзменения = Истина;
КонецЕсли;
Если Больничный.СлучайУходаЗаБольнымРебенком <> СлучайУхода Тогда
Больничный.СлучайУходаЗаБольнымРебенком = СлучайУхода;
ЕстьИзменения = Истина;
КонецЕсли;
Если ЕстьИзменения Тогда
Больничный.ПричинаНетрудоспособности = УчетПособийСоциальногоСтрахования.ПричинаНетрудоспособности(
КодПричины,
ВозрастЛет,
Больничный.ДатаНачалаСобытия,
Больничный.НомерЛисткаНетрудоспособности,
Больничный.ГоловнаяОрганизация);
КонецЕсли;
Возврат ЕстьИзменения;
КонецФункции
Процедура ЗаполнитьИсключаемыеПериоды(Больничный, Кэш)
Больничный.ИсключаемыеПериоды.Очистить();
ДатыКИсключению = ДатыКИсключению(Больничный, Кэш);
Если ДатыКИсключению.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ПериодыКИсключению = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ДатыКИсключению, "Причина", "", "");
Для Каждого Период Из ПериодыКИсключению Цикл
ИсключаемыйПериод = Больничный.ИсключаемыеПериоды.Добавить();
ИсключаемыйПериод.Регистрировать = Ложь;
ИсключаемыйПериод.ДатаНачала = НачалоДня(Макс(Период.ДатаНачала, Больничный.ДатаНачала));
ИсключаемыйПериод.ДатаОкончания = НачалоДня(Мин(Период.ДатаОкончания, Больничный.ДатаОкончания));
ИсключаемыйПериод.КалендарныхДней = ОбщегоНазначенияБЗК.КоличествоДнейВПериоде(
ИсключаемыйПериод.ДатаНачала,
ИсключаемыйПериод.ДатаОкончания);
ИсключаемыйПериод.Причина = Период.Причина;
КонецЦикла;
Больничный.ИсключаемыеПериоды.Сортировать("ДатаНачала, ДатаОкончания");
КонецПроцедуры
Функция ДатыКИсключению(Больничный, Кэш) Экспорт
Таблица = Кэш["ДатыКИсключению"];
Если Таблица <> Неопределено Тогда
Возврат Таблица;
КонецЕсли;
ДатыКИсключению = Новый ТаблицаЗначений;
ДатыКИсключению.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ДатыКИсключению.Колонки.Добавить("Регистратор");
ДатыКИсключению.Колонки.Добавить("Причина");
Кэш.Вставить("ДатыКИсключению", ДатыКИсключению);
Если Не ОбщегоНазначенияБЗК.ПериодСоответствуетТребованиям(Больничный.ДатаНачала, Больничный.ДатаОкончания) Тогда
Возврат ДатыКИсключению;
КонецЕсли;
ДобавитьДатыКИсключениюПоПричинеОтпуска(Больничный, ДатыКИсключению, Кэш);
Возврат ДатыКИсключению;
КонецФункции
Процедура ДобавитьДатыКИсключениюПоПричинеОтпуска(Больничный, ДатыКИсключению, Кэш)
Если Не Перечисления.ПричиныНетрудоспособности.ОтпускВытесняетБольничный(Больничный.ПричинаНетрудоспособности) Тогда
Возврат;
КонецЕсли;
СдвигатьПериодОплаты = Ложь;
ТаблицаДат = ПересеченияСостоянийСотрудника(Больничный, Кэш);
Для Каждого СтрокаТаблицы Из ТаблицаДат Цикл
Если ЗначениеЗаполнено(СтрокаТаблицы.Причина)
И ДатыКИсключению.Найти(СтрокаТаблицы.Дата, "Дата") = Неопределено Тогда
ДатаКИсключению = ДатыКИсключению.Добавить();
ДатаКИсключению.Дата = СтрокаТаблицы.Дата;
ДатаКИсключению.Причина = СтрокаТаблицы.Причина;
Если ТипЗнч(СтрокаТаблицы.Регистратор) = Тип("ДокументСсылка.ПростойСотрудников") Тогда
СдвигатьПериодОплаты = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если СдвигатьПериодОплаты Тогда
Больничный.СдвигатьПериодОплаты = Истина;
КонецЕсли;
КонецПроцедуры
Функция ОплачиваемыеДатыНачислений(Больничный, Кэш) Экспорт
Значение = Кэш["ОплачиваемыеДатыНачислений"];
Если Значение <> Неопределено Тогда
Возврат Значение;
КонецЕсли;
ДатыНачислений = ДатыНачислений(Больничный, Кэш);
ОплачиваемыеДатыНачислений = ДатыНачислений.Скопировать(Новый Структура("Оплачивать", Истина));
Кэш.Вставить("ОплачиваемыеДатыНачислений", ОплачиваемыеДатыНачислений);
Возврат ОплачиваемыеДатыНачислений;
КонецФункции
Функция НеучтенныеИсключаемыеДаты(Больничный, Кэш)
Значение = Кэш["НеучтенныеИсключаемыеДаты"];
Если Значение <> Неопределено Тогда
Возврат Значение;
КонецЕсли;
ДатыНачислений(Больничный, Кэш);
Возврат Кэш["НеучтенныеИсключаемыеДаты"];
КонецФункции
Функция ИсключенныеДаты(Больничный, Кэш) Экспорт
Таблица = Кэш["ИсключенныеДаты"];
Если Таблица <> Неопределено Тогда
Возврат Таблица;
КонецЕсли;
ИсключенныеДаты = ОбщегоНазначенияБЗК.ТаблицаДатИзТаблицыПериодов(
Больничный.ИсключаемыеПериоды,
Больничный.ДатаНачала,
Больничный.ДатаОкончания);
ИсключенныеДаты.Свернуть("Дата, Регистрировать, Причина");
ИсключенныеДаты.Сортировать("Дата");
Кэш.Вставить("ИсключенныеДаты", ИсключенныеДаты);
ДобавитьДатыИсключенныеПоПричинеРаботы(Больничный, ИсключенныеДаты);
Возврат ИсключенныеДаты;
КонецФункции
Процедура ДобавитьДатыИсключенныеПоПричинеРаботы(Больничный, ИсключенныеДаты)
Если Перечисления.ПричиныНетрудоспособности.ЭтоУходЗаРодственником(Больничный.ПричинаНетрудоспособности)
И Больничный.ПериодыУходаЗаРодственниками.Количество() > 0 Тогда
ДатыУхода = ОбщегоНазначенияБЗК.ТаблицаДатИзТаблицыПериодов(
Больничный.ПериодыУходаЗаРодственниками,
Больничный.ДатаНачала,
Больничный.ДатаОкончания);
ДатыБолезни = ДатыУхода.ВыгрузитьКолонку("Дата");
ИначеЕсли Больничный.ПрерывистыйМетод Тогда
ДатыБолезни = ОбщегоНазначенияБЗК.МассивДатИзПериода(
Больничный.ОсвобождениеДатаНачала1,
Больничный.ОсвобождениеДатаОкончания1);
ИспользованныеДаты2 = ОбщегоНазначенияБЗК.МассивДатИзПериода(
Больничный.ОсвобождениеДатаНачала2,
Больничный.ОсвобождениеДатаОкончания2);
ИспользованныеДаты3 = ОбщегоНазначенияБЗК.МассивДатИзПериода(
Больничный.ОсвобождениеДатаНачала3,
Больничный.ОсвобождениеДатаОкончания3);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ДатыБолезни, ИспользованныеДаты2, Ложь);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ДатыБолезни, ИспользованныеДаты3, Ложь);
Иначе
Возврат;
КонецЕсли;
Если ДатыБолезни.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ВсеДаты = ОбщегоНазначенияБЗК.МассивДатИзПериода(Больничный.ДатаНачала, Больничный.ДатаОкончания);
Для Каждого Дата Из ВсеДаты Цикл
Если ДатыБолезни.Найти(Дата) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если ИсключенныеДаты.Найти(Дата, "Дата") <> Неопределено Тогда
Продолжить;
КонецЕсли;
ИсключеннаяДата = ИсключенныеДаты.Добавить();
ИсключеннаяДата.Дата = Дата;
ИсключеннаяДата.Причина = Перечисления.ПричиныНеоплатыБольничных.Работа;
ИсключеннаяДата.Регистрировать = Ложь;
КонецЦикла;
КонецПроцедуры
Функция КатегорииБезОплаты()
КатегорииБезОплаты = Новый Массив;
КатегорииБезОплаты.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.БолезньБезОплаты);
КатегорииБезОплаты.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОтпускПоБеременностиИРодамБезОплаты);
Возврат КатегорииБезОплаты;
КонецФункции
Функция КатегорииСОплатой()
КатегорииСОплатой = Новый Массив;
КатегорииСОплатой.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛиста);
КатегорииСОплатой.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОтпускПоБеременностиИРодам);
КатегорииСОплатой.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛистаЗаСчетРаботодателя);
КатегорииСОплатой.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоНесчастныйСлучайНаПроизводстве);
КатегорииСОплатой.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоПрофзаболевание);
КатегорииСОплатой.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДоплатаДоСреднегоЗаработкаЗаДниБолезни);
КатегорииСОплатой.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДоплатаДоДенежногоСодержанияЗаДниБолезни);
Возврат КатегорииСОплатой;
КонецФункции
Функция ДатыНачислений(Больничный, Кэш) Экспорт
КлючКэша = "ДатыНачислений";
Таблица = Кэш[КлючКэша];
Если Таблица <> Неопределено Тогда
Возврат Таблица;
КонецЕсли;
ДатыНачислений = Новый ТаблицаЗначений;
ДатыНачислений.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ДатыНачислений.Колонки.Добавить("Год", Новый ОписаниеТипов("Число"));
ДатыНачислений.Колонки.Добавить("Родственник", Новый ОписаниеТипов("СправочникСсылка.РодственникиФизическихЛиц"));
ДатыНачислений.Колонки.Добавить("КодПричины", Новый ОписаниеТипов("Строка"));
ДатыНачислений.Колонки.Добавить("СлучайУхода", Новый ОписаниеТипов("ПеречислениеСсылка.СлучаиУходаЗаБольнымиДетьми"));
ДатыНачислений.Колонки.Добавить("Регистрировать", Новый ОписаниеТипов("Булево"));
ДатыНачислений.Колонки.Добавить("Оплачивать", Новый ОписаниеТипов("Булево"));
ДатыНачислений.Колонки.Добавить("ВидРасчета", Новый ОписаниеТипов("ПланВидовРасчетаСсылка.Начисления"));
ДатыНачислений.Колонки.Добавить("НарушениеРежима", Новый ОписаниеТипов("Булево"));
ДатыНачислений.Колонки.Добавить("Категория", Новый ОписаниеТипов("ПеречислениеСсылка.КатегорииНачисленийИНеоплаченногоВремени"));
ДатыНачислений.Колонки.Добавить("ВидСтажаПФР2014", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыСтажаПФР2014"));
ДатыНачислений.Колонки.Добавить("Состояние", Новый ОписаниеТипов("ПеречислениеСсылка.СостоянияСотрудника"));
ДатыНачислений.Колонки.Добавить("ПоловинаОплаты", Новый ОписаниеТипов("Булево"));
ДатыНачислений.Колонки.Добавить("ЛьготныйУходДо8Лет", Новый ОписаниеТипов("Булево"));
ДатыНачислений.Колонки.Добавить("ПроцентОплаты", ОбщегоНазначения.ОписаниеТипаЧисло(5, 2));
ДатыНачислений.Колонки.Добавить("ПроцентОплатыБезЛьгот", ОбщегоНазначения.ОписаниеТипаЧисло(5, 2));
ДатыНачислений.Колонки.Добавить("СреднийПростоя", ОбщегоНазначения.ОписаниеТипаЧисло(8, 2));
ДатыНачислений.Колонки.Добавить("ОграничениеПособия", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыОграниченияПособия"));
ДатыНачислений.Колонки.Добавить("ОграничениеПособияБезЛьгот", Новый ОписаниеТипов("ПеречислениеСсылка.ВидыОграниченияПособия"));
Кэш.Вставить(КлючКэша, ДатыНачислений);
НеучтенныеИсключаемыеДаты = Новый Массив;
Кэш.Вставить("НеучтенныеИсключаемыеДаты", НеучтенныеИсключаемыеДаты);
Если Не ОбщегоНазначенияБЗК.ПериодСоответствуетТребованиям(Больничный.ДатаНачала, Больничный.ДатаОкончания) Тогда
Возврат ДатыНачислений;
КонецЕсли;
ИсключенныеДаты = ИсключенныеДаты(Больничный, Кэш);
ДатыПростоя = ОбщегоНазначенияБЗК.ТаблицаДатИзТаблицыПериодов(
Больничный.ПериодыПростоя, Больничный.ДатаНачала, Больничный.ДатаОкончания);
ДатыУхода = ДатыУходаЗаРодственниками(Больничный, Кэш);
ЕстьДатыУхода = ДатыУхода.Количество() > 0;
МаксДата = '39991231235959';
Если Кэш["СдвигатьПериодОплаты"] = Истина Тогда
Больничный.СдвигатьПериодОплаты = Истина;
КонецЕсли;
ЭтоУходЗаРебенком = (Больничный.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком);
ДатаНачалаПоловиннойОплаты = Больничный.ДатаНачалаПоловиннойОплаты;
Если Не Больничный.НазначитьПособие
Или Больничный.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ОбщееЗаболевание
Или ДатаНачалаПоловиннойОплаты <= Больничный.ДатаНачалаОплаты
Или ДатаНачалаПоловиннойОплаты > Больничный.ДатаОкончанияОплаты Тогда
ДатаНачалаПоловиннойОплаты = МаксДата;
КонецЕсли;
ДатаНарушенияРежима = Больничный.ДатаНарушенияРежима;
Если Не Больничный.НазначитьПособие
Или ДатаНарушенияРежима = ДатаНачалаПоловиннойОплаты
Или ДатаНарушенияРежима <= Больничный.ДатаНачалаОплаты
Или ДатаНарушенияРежима > Больничный.ДатаОкончанияОплаты Тогда
ДатаНарушенияРежима = МаксДата;
КонецЕсли;
ДатаНачалаОплатыЗаСчетСФР = МаксДата;
КоличествоДнейЗаСчетРаботодателя = УчетПособийСоциальногоСтрахования.КоличествоДнейЗаСчетРаботодателя(
Больничный.ДатаНачалаСобытия, Больничный.ПричинаНетрудоспособности, Больничный.НачалоВПериодПриостановленияТД);
Если Больничный.СдвигатьПериодОплаты Тогда
Если Больничный.ЯвляетсяПродолжениемБолезни Тогда
КоличествоДнейЗаСчетРаботодателя = ОстатокДнейЗаСчетРаботодателяРекурсивно(
Больничный.ПервичныйБольничныйЛист, КоличествоДнейЗаСчетРаботодателя, ДатаНачалаОплатыЗаСчетСФР);
КонецЕсли;
Иначе
ДатаНачалаОплатыЗаСчетСФР = Больничный.ДатаНачалаСобытия + КоличествоДнейЗаСчетРаботодателя * 86400;
Если КоличествоДнейЗаСчетРаботодателя > 0 И Больничный.ДатаНачалаСобытия < Больничный.ДатаНачала Тогда
КоличествоДнейЗаСчетРаботодателя = Макс(КоличествоДнейЗаСчетРаботодателя - (Больничный.ДатаНачала - Больничный.ДатаНачалаСобытия) / 86400, 0);
КонецЕсли;
КонецЕсли;
ОпределятьДатуНачалаОплатыСФР = ДатаНачалаОплатыЗаСчетСФР = МаксДата;
СсылкиНачислений = Новый Массив;
МассивДат = ОбщегоНазначенияБЗК.МассивДатИзПериода(Больничный.ДатаНачала, Больничный.ДатаОкончания);
Для Каждого Дата Из МассивДат Цикл
ДатаНачисления = ДатыНачислений.Добавить();
ДатаНачисления.Дата = Дата;
ДатаНачисления.Год = Год(Дата);
ИсключеннаяДата = ИсключенныеДаты.Найти(Дата, "Дата");
Если ИсключеннаяДата <> Неопределено Тогда
ДатаНачисления.Регистрировать = ИсключеннаяДата.Регистрировать;
ДатаНачисления.Оплачивать = Ложь;
ИначеЕсли Не Больничный.НазначитьПособие
Или Дата < Больничный.ДатаНачалаОплаты
Или Дата > Больничный.ДатаОкончанияОплаты Тогда
ДатаНачисления.Регистрировать = Истина;
ДатаНачисления.Оплачивать = Ложь;
НеучтенныеИсключаемыеДаты.Добавить(Дата);
Иначе
ДатаНачисления.Регистрировать = Истина;
ДатаНачисления.Оплачивать = Истина;
КонецЕсли;
ДатаПростоя = ДатыПростоя.Найти(Дата, "Дата");
Если ДатаПростоя <> Неопределено Тогда
ДатаНачисления.СреднийПростоя = ДатаПростоя.СреднийЗаработок;
КонецЕсли;
Если ЕстьДатыУхода Тогда
ДатаУхода = ДатаУходаСМаксимальнойОплатой(ДатыУхода, Новый Структура("Дата", Дата));
Если ДатаУхода = Неопределено Тогда
Если ДатаНачисления.Оплачивать Тогда
ДатаНачисления.Регистрировать = Ложь;
ДатаНачисления.Оплачивать = Ложь;
НеучтенныеИсключаемыеДаты.Добавить(Дата);
КонецЕсли;
Иначе
ЗаполнитьЗначенияСвойств(ДатаНачисления, ДатаУхода, "Родственник, КодПричины, СлучайУхода,
|ПоловинаОплаты, ЛьготныйУходДо8Лет, Оплачивать,
|ПроцентОплаты, ПроцентОплатыБезЛьгот, ОграничениеПособия, ОграничениеПособияБезЛьгот");
КонецЕсли;
Иначе
ДатаНачисления.КодПричины = Больничный.КодПричиныНетрудоспособности;
ДатаНачисления.СлучайУхода = Больничный.СлучайУходаЗаБольнымРебенком;
ДатаНачисления.ПоловинаОплаты = (Дата >= ДатаНачалаПоловиннойОплаты И Дата <= Больничный.ДатаОкончанияОплаты);
ДатаНачисления.ЛьготныйУходДо8Лет = УчетПособийСоциальногоСтрахования.ЭтоПолностьюОплачиваемыйУходЗаРебенкомДо8Лет(
Больничный,
ДатаНачисления.СлучайУхода);
ЗаполнитьЗначенияСвойств(ДатаНачисления, Больничный, "ПроцентОплаты, ПроцентОплатыБезЛьгот, ОграничениеПособия, ОграничениеПособияБезЛьгот");
Если ЭтоУходЗаРебенком И ДатаНачисления.ПоловинаОплаты Тогда
ДатаНачисления.ПроцентОплаты = 50;
ДатаНачисления.ПроцентОплатыБезЛьгот = 50;
КонецЕсли;
КонецЕсли;
Если Не ДатаНачисления.Регистрировать Или Не ДатаНачисления.Оплачивать Тогда
ДатаНачисления.ВидРасчета = Больничный.ВидНеоплачиваемогоВремени;
ИначеЕсли КоличествоДнейЗаСчетРаботодателя > 0 Тогда
ДатаНачисления.ВидРасчета = Больничный.ВидОплатыЗаСчетРаботодателя;
Иначе
ДатаНачисления.ВидРасчета = Больничный.ВидОплатыПособия;
КонецЕсли;
Если ОпределятьДатуНачалаОплатыСФР И КоличествоДнейЗаСчетРаботодателя = 0 Тогда
ОпределятьДатуНачалаОплатыСФР = Ложь;
ДатаНачалаОплатыЗаСчетСФР = Дата;
КонецЕсли;
Если ДатаНачисления.Оплачивать Или Не Больничный.СдвигатьПериодОплаты Тогда
КоличествоДнейЗаСчетРаботодателя = КоличествоДнейЗаСчетРаботодателя - 1;
КонецЕсли;
ДатаНачисления.НарушениеРежима = (Дата >= ДатаНарушенияРежима И Дата <= Больничный.ДатаОкончанияОплаты);
Если ЗначениеЗаполнено(ДатаНачисления.ВидРасчета)
И СсылкиНачислений.Найти(ДатаНачисления.ВидРасчета) = Неопределено Тогда
СсылкиНачислений.Добавить(ДатаНачисления.ВидРасчета);
КонецЕсли;
КонецЦикла;
Если ОпределятьДатуНачалаОплатыСФР Тогда
ДатаНачалаОплатыЗаСчетСФР = Дата + ?(КоличествоДнейЗаСчетРаботодателя > 0, КоличествоДнейЗаСчетРаботодателя * 86400, 86400);
КонецЕсли;
Кэш.Вставить("ДатаНачалаОплатыЗаСчетСФР", ДатаНачалаОплатыЗаСчетСФР);
Если СсылкиНачислений.Количество() > 0 Тогда
ИменаРеквизитов = "КатегорияНачисленияИлиНеоплаченногоВремени, ВидСтажаПФР2014";
РеквизитыНачислений = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(СсылкиНачислений, ИменаРеквизитов);
КатегорииБезОплаты = КатегорииБезОплаты();
КатегорииСОплатой = КатегорииСОплатой();
Для Каждого КлючИЗначение Из РеквизитыНачислений Цикл
СсылкаНачисления = КлючИЗначение.Ключ;
РеквизитыНачисления = КлючИЗначение.Значение;
Категория = РеквизитыНачисления.КатегорияНачисленияИлиНеоплаченногоВремени;
Если КатегорииБезОплаты.Найти(Категория) <> Неопределено Тогда
Состояние = Перечисления.СостоянияСотрудника.БолезньБезОплаты;
ИначеЕсли КатегорииСОплатой.Найти(Категория) <> Неопределено Тогда
Состояние = Перечисления.СостоянияСотрудника.Болезнь;
Иначе
Состояние = Перечисления.СостоянияСотрудника.ПустаяСсылка();
КонецЕсли;
Найденные = ДатыНачислений.НайтиСтроки(Новый Структура("ВидРасчета", СсылкаНачисления));
Для Каждого СтрокаТаблицы Из Найденные Цикл
СтрокаТаблицы.Категория = Категория;
СтрокаТаблицы.Состояние = Состояние;
СтрокаТаблицы.ВидСтажаПФР2014 = РеквизитыНачисления.ВидСтажаПФР2014;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Возврат ДатыНачислений;
КонецФункции
Функция ДатыУходаЗаРодственниками(Больничный, Кэш) Экспорт
КлючКэша = "ДатыУходаЗаРодственниками";
ДатыУхода = Кэш[КлючКэша];
Если ДатыУхода <> Неопределено Тогда
Возврат ДатыУхода;
КонецЕсли;
ДатыУхода = КоллекцииБЗК.СкопироватьКолонки(Больничный.ПериодыУходаЗаРодственниками);
ДатыУхода.Колонки.Удалить("ДатаНачала");
ДатыУхода.Колонки.Удалить("ДатаОкончания");
ДатыУхода.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ДатыУхода.Колонки.Добавить("Оплачивать", Новый ОписаниеТипов("Булево"));
ДатыУхода.Колонки.Добавить("ПоловинаОплаты", Новый ОписаниеТипов("Булево"));
ДатыУхода.Колонки.Добавить("ЛьготныйУходДо8Лет", Новый ОписаниеТипов("Булево"));
Если ДатыУхода.Колонки.Найти("Год") = Неопределено Тогда
ДатыУхода.Колонки.Добавить("Год", Новый ОписаниеТипов("Число"));
КонецЕсли;
Кэш.Вставить(КлючКэша, ДатыУхода);
Если Не Перечисления.ПричиныНетрудоспособности.ЭтоУходЗаРодственником(Больничный.ПричинаНетрудоспособности) Тогда
Возврат ДатыУхода;
КонецЕсли;
ЗаполнитьОстаткиВФорме = ДатыУхода.Колонки.Найти("ОстатокДнейЗаГод") <> Неопределено;
ОстаткиДнейУхода = ОстаткиДнейУхода(Больничный);
Если ОстаткиДнейУхода = Неопределено Тогда
Возврат ДатыУхода;
КонецЕсли;
ОстаткиДнейУходаЗаГод = ОстаткиДнейУхода.ЗаГод;
ОстаткиДнейУходаЗаСлучай = ОстаткиДнейУхода.ЗаСлучай;
ФильтрПоГодуБезСлучая = Новый Структура("Год, Родственник");
ФильтрПоГоду = Новый Структура("Год, Родственник, СлучайУхода");
ФильтрПоСлучаю = Новый Структура("Родственник, СлучайУхода");
ФильтрПоДате = Новый Структура("Родственник, Дата");
РассчитатьПериодыУхода = Кэш["РассчитатьПериодыУхода"];
Если РассчитатьПериодыУхода = Неопределено Тогда
РассчитатьПериодыУхода = Ложь;
КонецЕсли;
РассчитыватьЧастьЗаСчетФБ = ЗначениеЗаполнено(Больничный.ПроцентОплатыБезЛьгот)
И ЗначениеЗаполнено(Больничный.ФинансированиеФедеральнымБюджетом);
ИсключенныеДаты = ИсключенныеДаты(Больничный, Кэш);
Для Каждого ПериодУхода Из Больничный.ПериодыУходаЗаРодственниками Цикл
ЗаполнитьЗначенияСвойств(ФильтрПоГоду, ПериодУхода);
ЗаполнитьЗначенияСвойств(ФильтрПоСлучаю, ПериодУхода);
ФильтрПоГоду.Год = Год(ПериодУхода.ДатаНачала);
СтрокаОстатковЗаГод = ОстаткиДнейУходаЗаГод.НайтиСтроки(ФильтрПоГоду)[0];
СтрокаОстатковЗаСлучай = ОстаткиДнейУходаЗаСлучай.НайтиСтроки(ФильтрПоСлучаю)[0];
ЛьготныйУходДо8Лет = УчетПособийСоциальногоСтрахования.ЭтоПолностьюОплачиваемыйУходЗаРебенкомДо8Лет(
Больничный,
ПериодУхода.СлучайУхода);
Если ЗаполнитьОстаткиВФорме Тогда
ЗаполнитьЗначенияСвойств(ПериодУхода, СтрокаОстатковЗаГод, "ОстатокДнейЗаГод, МаксимумДнейЗаГод");
ЗаполнитьЗначенияСвойств(ПериодУхода, СтрокаОстатковЗаСлучай, "ОстатокДнейЗаСлучай, МаксимумДнейЗаСлучай, ОстатокДнейПоловиннойОплаты");
КонецЕсли;
Если РассчитатьПериодыУхода Тогда
ПериодУхода.СлучайУхода = УчетПособийСоциальногоСтрахования.СлучайУхода(
Больничный.ДатаНачалаСобытия,
ПериодУхода.КодПричины,
ПериодУхода.ВозрастЛет,
ПериодУхода.РежимЛечения);
ПараметрыОплаты = УчетПособийСоциальногоСтрахования.ПроцентОплатыИОграничениеПособия(
Больничный,
ПериодУхода.СлучайУхода);
ИменаПолей = "ПроцентОплаты, ПроцентОплатыБезЛьгот, ОграничениеПособия, ОграничениеПособияБезЛьгот";
ЗаполнитьЗначенияСвойств(ПериодУхода, ПараметрыОплаты, ИменаПолей);
КонецЕсли;
УчитыватьКоличествоДней = Истина;
Если РассчитатьПериодыУхода И Не ПериодУхода.КоличествоДнейИзменено Тогда
Если СтрокаОстатковЗаГод.МаксимумДнейЗаГод = 0 И СтрокаОстатковЗаСлучай.МаксимумДнейЗаСлучай = 0 Тогда
УчитыватьКоличествоДней = Ложь;
ОстатокДней = 0;
ОстатокДнейПоловиннойОплаты = 0;
Иначе
ОстатокДнейПоловиннойОплаты = СтрокаОстатковЗаСлучай.ОстатокДнейПоловиннойОплаты;
Если СтрокаОстатковЗаГод.МаксимумДнейЗаГод = 0 Тогда
ОстатокДней = СтрокаОстатковЗаСлучай.ОстатокДнейЗаСлучай;
ИначеЕсли СтрокаОстатковЗаСлучай.МаксимумДнейЗаСлучай = 0 Тогда
ОстатокДней = СтрокаОстатковЗаГод.ОстатокДнейЗаГод;
ИначеЕсли СтрокаОстатковЗаГод.ОстатокДнейЗаГод < СтрокаОстатковЗаСлучай.ОстатокДнейЗаСлучай Тогда
ОстатокДней = СтрокаОстатковЗаГод.ОстатокДнейЗаГод;
ДнейЗаСлучайПревышающихОстатокЗаГод = СтрокаОстатковЗаСлучай.ОстатокДнейЗаСлучай - ОстатокДней;
УменьшитьОстаток(ОстатокДнейПоловиннойОплаты, ДнейЗаСлучайПревышающихОстатокЗаГод);
Иначе
ОстатокДней = СтрокаОстатковЗаСлучай.ОстатокДнейЗаСлучай;
КонецЕсли;
КонецЕсли;
Иначе
ОстатокДней = ПериодУхода.ИспользованоДней;
ОстатокДнейПоловиннойОплаты = ПериодУхода.ДнейПоловиннойОплаты;
КонецЕсли;
ИспользованоДней = 0;
ИспользованоДнейПоловиннойОплаты = 0;
МассивДат = ОбщегоНазначенияБЗК.МассивДатИзПериода(ПериодУхода.ДатаНачала, ПериодУхода.ДатаОкончания);
ФильтрПоДате.Родственник = ПериодУхода.Родственник;
Для Каждого Дата Из МассивДат Цикл
ФильтрПоДате.Дата = Дата;
Найденные = ДатыУхода.НайтиСтроки(ФильтрПоДате);
Если Найденные.Количество() > 0 Тогда
ДатаУхода = Найденные[0];
Иначе
ДатаУхода = Неопределено;
КонецЕсли;
ИсключеннаяДата = ИсключенныеДаты.Найти(Дата, "Дата");
Если ДатаУхода = Неопределено И ИсключеннаяДата <> Неопределено И Не ИсключеннаяДата.Регистрировать Тогда
Продолжить;
КонецЕсли;
Если ДатаУхода = Неопределено Тогда
ДатаУхода = ДатыУхода.Добавить();
ДатаУхода.Дата = Дата;
ДатаУхода.Год = Год(Дата);
ИначеЕсли ДатаУхода.Оплачивать Или (УчитыватьКоличествоДней И ОстатокДней <= 0) Тогда
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ДатаУхода, ПериодУхода);
Оплачивать = (Не УчитыватьКоличествоДней Или ОстатокДней > 0)
И Больничный.НазначитьПособие
И Дата >= Больничный.ДатаНачалаОплаты
И Дата <= Больничный.ДатаОкончанияОплаты
И ИсключеннаяДата = Неопределено;
Если Оплачивать Тогда
ДатаУхода.Оплачивать = Истина;
ДатаУхода.ЛьготныйУходДо8Лет = ЛьготныйУходДо8Лет;
ДатаУхода.ПоловинаОплаты = Ложь;
Если УчитыватьКоличествоДней Тогда
Если ОстатокДней <= ОстатокДнейПоловиннойОплаты Тогда
ДатаУхода.ПоловинаОплаты = Истина;
ДатаУхода.ПроцентОплаты = 50;
ДатаУхода.ПроцентОплатыБезЛьгот = 50;
ИспользованоДнейПоловиннойОплаты = ИспользованоДнейПоловиннойОплаты + 1;
КонецЕсли;
ОстатокДней = ОстатокДней - 1;
КонецЕсли;
ИспользованоДней = ИспользованоДней + 1;
КонецЕсли;
КонецЦикла;
Если РассчитатьПериодыУхода И Не ПериодУхода.КоличествоДнейИзменено Тогда
ПериодУхода.ИспользованоДней = ИспользованоДней;
ПериодУхода.ДнейПоловиннойОплаты = ИспользованоДнейПоловиннойОплаты;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ФильтрПоГодуБезСлучая, СтрокаОстатковЗаГод);
Найденные = ОстаткиДнейУходаЗаГод.НайтиСтроки(ФильтрПоГодуБезСлучая);
Для Каждого СтрокаОстатковЗаГодБезСлучая Из Найденные Цикл
УменьшитьОстаток(СтрокаОстатковЗаГодБезСлучая.ОстатокДнейЗаГод, ИспользованоДней);
КонецЦикла;
УменьшитьОстаток(СтрокаОстатковЗаСлучай.ОстатокДнейЗаСлучай, ИспользованоДней);
УменьшитьОстаток(СтрокаОстатковЗаСлучай.ОстатокДнейПоловиннойОплаты, ИспользованоДнейПоловиннойОплаты);
КонецЦикла;
Возврат ДатыУхода;
КонецФункции
Функция ДатаУходаСМаксимальнойОплатой(ДатыУхода, Фильтр = Неопределено)
ДатаСМаксимальнойОплатой = Неопределено;
Если Фильтр = Неопределено Тогда
Найденные = ДатыУхода;
Иначе
Найденные = ДатыУхода.НайтиСтроки(Фильтр);
КонецЕсли;
Для Каждого ДатаУхода Из Найденные Цикл
Если ДатаСМаксимальнойОплатой = Неопределено Тогда
ДатаСМаксимальнойОплатой = ДатаУхода;
Продолжить;
КонецЕсли;
Если ДатаСМаксимальнойОплатой.Оплачивать <> ДатаУхода.Оплачивать Тогда
Если ДатаУхода.Оплачивать Тогда
ДатаСМаксимальнойОплатой = ДатаУхода;
КонецЕсли;
Продолжить;
КонецЕсли;
Если ДатаСМаксимальнойОплатой.ЛьготныйУходДо8Лет <> ДатаУхода.ЛьготныйУходДо8Лет Тогда
Если ДатаУхода.ЛьготныйУходДо8Лет Тогда
ДатаСМаксимальнойОплатой = ДатаУхода;
КонецЕсли;
Продолжить;
КонецЕсли;
Если ДатаСМаксимальнойОплатой.ПроцентОплаты <> ДатаУхода.ПроцентОплаты Тогда
Если ДатаУхода.ПроцентОплаты > ДатаСМаксимальнойОплатой.ПроцентОплаты Тогда
ДатаСМаксимальнойОплатой = ДатаУхода;
КонецЕсли;
Продолжить;
КонецЕсли;
Если ДатаСМаксимальнойОплатой.ПроцентОплатыБезЛьгот <> ДатаУхода.ПроцентОплатыБезЛьгот Тогда
Если ДатаУхода.ПроцентОплатыБезЛьгот > ДатаСМаксимальнойОплатой.ПроцентОплатыБезЛьгот Тогда
ДатаСМаксимальнойОплатой = ДатаУхода;
КонецЕсли;
Продолжить;
КонецЕсли;
Если ДатаСМаксимальнойОплатой.ВозрастЛет <> ДатаУхода.ВозрастЛет Тогда
Если ДатаУхода.ВозрастЛет < ДатаСМаксимальнойОплатой.ВозрастЛет Тогда
ДатаСМаксимальнойОплатой = ДатаУхода;
КонецЕсли;
Продолжить;
КонецЕсли;
Если ДатаСМаксимальнойОплатой.ВозрастМесяцев <> ДатаУхода.ВозрастМесяцев Тогда
Если ДатаУхода.ВозрастМесяцев < ДатаСМаксимальнойОплатой.ВозрастМесяцев Тогда
ДатаСМаксимальнойОплатой = ДатаУхода;
КонецЕсли;
Продолжить;
КонецЕсли;
Если ДатаСМаксимальнойОплатой.РежимЛечения <> ДатаУхода.РежимЛечения Тогда
Если ДатаУхода.РежимЛечения = Перечисления.РежимыЛечения.Стационар Тогда
ДатаСМаксимальнойОплатой = ДатаУхода;
ИначеЕсли ДатаУхода.РежимЛечения = Перечисления.РежимыЛечения.ДневнойСтационар
И ДатаСМаксимальнойОплатой.РежимЛечения = Перечисления.РежимыЛечения.Амбулаторно Тогда
ДатаСМаксимальнойОплатой = ДатаУхода;
КонецЕсли;
Продолжить;
КонецЕсли;
КонецЦикла;
Возврат ДатаСМаксимальнойОплатой;
КонецФункции
Функция ПериодыСостояний(Больничный, Кэш)
ДатыНачислений = ДатыНачислений(Больничный, Кэш);
ДатыНачислений = ДатыНачислений.Скопировать(Новый Структура("Регистрировать", Истина));
СтрокиКУдалению = ДатыНачислений.НайтиСтроки(Новый Структура("Состояние", Перечисления.СостоянияСотрудника.ПустаяСсылка()));
Для Каждого СтрокаТаблицы Из СтрокиКУдалению Цикл
ДатыНачислений.Удалить(СтрокаТаблицы);
КонецЦикла;
ПериодыСостояний = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ДатыНачислений, "Состояние");
Возврат ПериодыСостояний;
КонецФункции
Функция ПериодыНачислений(Больничный, Кэш) Экспорт
ДатыНачислений = ДатыНачислений(Больничный, Кэш);
ДатыНачислений = ДатыНачислений.Скопировать(Новый Структура("Регистрировать", Истина));
СтрокиКУдалению = ДатыНачислений.НайтиСтроки(Новый Структура("Состояние", Перечисления.СостоянияСотрудника.ПустаяСсылка()));
Для Каждого СтрокаТаблицы Из СтрокиКУдалению Цикл
ДатыНачислений.Удалить(СтрокаТаблицы);
КонецЦикла;
Измерения = "ВидРасчета, Категория, НарушениеРежима, ПроцентОплаты, ПроцентОплатыБезЛьгот, ОграничениеПособия, ОграничениеПособияБезЛьгот, СреднийПростоя";
ПериодыНачислений = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ДатыНачислений, Измерения);
Возврат ПериодыНачислений;
КонецФункции
Функция ПериодыСтажаПФР(Больничный, Кэш)
Результат = УчетСтажаПФР.ДанныеДляРегистрацииВУчетеСтажаПФР();
ДатыНачислений = ДатыНачислений(Больничный, Кэш);
Если ДатыНачислений.Количество() = 0 Тогда
Возврат Результат;
КонецЕсли;
ПериодыПФР = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ДатыНачислений, "Регистрировать, ВидСтажаПФР2014, Состояние");
Для Каждого СтрокаТаблицы Из ПериодыПФР Цикл
Если Не СтрокаТаблицы.Регистрировать Или Не ЗначениеЗаполнено(СтрокаТаблицы.Состояние) Тогда
Продолжить;
КонецЕсли;
ОписаниеПериода = УчетСтажаПФР.ОписаниеРегистрируемогоПериода();
ОписаниеПериода.Сотрудник = Больничный.Сотрудник;
ОписаниеПериода.ДатаНачалаПериода = СтрокаТаблицы.ДатаНачала;
ОписаниеПериода.ДатаОкончанияПериода = СтрокаТаблицы.ДатаОкончания;
ОписаниеПериода.Состояние = СтрокаТаблицы.Состояние;
РегистрируемыйПериод = УчетСтажаПФР.ДобавитьЗаписьВДанныеДляРегистрацииВУчета(Результат, ОписаниеПериода);
УчетСтажаПФР.УстановитьЗначениеРегистрируемогоРесурса(РегистрируемыйПериод, "ВидСтажаПФР", СтрокаТаблицы.ВидСтажаПФР2014);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОстаткиДнейУхода(Больничный)
НачалоСобытия = НачалоДня(Больничный.ДатаНачалаСобытия);
НачалоГодаСобытия = НачалоГода(НачалоСобытия);
ОкончаниеПредшествующегоЛН = Макс(КонецДня(Больничный.ДатаНачала - 86400), НачалоГодаСобытия);
Если Не ОбщегоНазначенияБЗК.ПериодСоответствуетТребованиям(НачалоГодаСобытия, ОкончаниеПредшествующегоЛН) Тогда
Возврат Неопределено;
КонецЕсли;
Если ТипЗнч(Больничный.ПериодыУходаЗаРодственниками) = Тип("ТаблицаЗначений") Тогда
ПериодыУхода = Больничный.ПериодыУходаЗаРодственниками.Скопировать();
Иначе
ПериодыУхода = Больничный.ПериодыУходаЗаРодственниками.Выгрузить();
КонецЕсли;
ПериодыУхода.Колонки.Добавить("Год", Новый ОписаниеТипов("Число"));
ПериодыУхода.Колонки.Добавить("НачалоГода", Новый ОписаниеТипов("Дата"));
ПериодыУхода.Колонки.Добавить("КонецГода", Новый ОписаниеТипов("Дата"));
Для Каждого ПериодУхода Из ПериодыУхода Цикл
ПериодУхода.Год = Год(ПериодУхода.ДатаНачала);
ПериодУхода.НачалоГода = НачалоГода(ПериодУхода.ДатаНачала);
ПериодУхода.КонецГода = КонецГода(ПериодУхода.ДатаОкончания);
КонецЦикла;
ВидыСлучаев = Перечисления.СлучаиУходаЗаБольнымиДетьми.ТаблицаВыбора('00010101');
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ИсключаемыйРегистратор", Больничный.Ссылка);
Запрос.УстановитьПараметр("Сотрудник", Больничный.Сотрудник);
Запрос.УстановитьПараметр("НачалоГодаСобытия", НачалоГодаСобытия);
Запрос.УстановитьПараметр("НачалоСобытия", НачалоСобытия);
Запрос.УстановитьПараметр("ОкончаниеПредшествующегоЛН", ОкончаниеПредшествующегоЛН);
Запрос.УстановитьПараметр("ПериодыУходаЗаРодственниками", ПериодыУхода);
Запрос.УстановитьПараметр("ВидыСлучаев", ВидыСлучаев);
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(
Запрос.МенеджерВременныхТаблиц,
НачалоГодаСобытия,
ОкончаниеПредшествующегоЛН,
"ДЕНЬ",
"Дата",
"ВТДаты");
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПериодыУходаЗаРодственниками.Год КАК Год,
| ПериодыУходаЗаРодственниками.КодПричины КАК КодПричины,
| ПериодыУходаЗаРодственниками.Родственник КАК Родственник,
| ПериодыУходаЗаРодственниками.ВозрастЛет КАК ВозрастЛет,
| ПериодыУходаЗаРодственниками.СлучайУхода КАК СлучайУхода,
| ПериодыУходаЗаРодственниками.ДатаНачала КАК ДатаНачала,
| ПериодыУходаЗаРодственниками.НачалоГода КАК НачалоГода,
| ПериодыУходаЗаРодственниками.КонецГода КАК КонецГода
|ПОМЕСТИТЬ ВТСлучаиУхода
|ИЗ
| &ПериодыУходаЗаРодственниками КАК ПериодыУходаЗаРодственниками
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВидыСлучаев.КодПричины КАК КодПричины,
| ВидыСлучаев.СлучайУхода КАК СлучайУхода
|ПОМЕСТИТЬ ВТВидыСлучаев
|ИЗ
| &ВидыСлучаев КАК ВидыСлучаев
|;
|
|
|ВЫБРАТЬ
| ВТСлучаиУхода.Родственник КАК Родственник,
| ВТСлучаиУхода.СлучайУхода КАК СлучайУхода,
| ВТСлучаиУхода.Год КАК Год,
| ПериодыУходаЗаБольнымиРодственниками.ОплаченоДней КАК ОплаченоДней,
| ПериодыУходаЗаБольнымиРодственниками.НачалоПериодаОплаты КАК НачалоПериодаОплаты,
| ПериодыУходаЗаБольнымиРодственниками.ОкончаниеПериодаОплаты КАК ОкончаниеПериодаОплаты,
| ВЫБОР
| КОГДА ПериодыУходаЗаБольнымиРодственниками.Период МЕЖДУ &НачалоСобытия И &ОкончаниеПредшествующегоЛН
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ВходитВПериодНетрудоспособности,
| ВЫБОР
| КОГДА ПериодыУходаЗаБольнымиРодственниками.Период МЕЖДУ ВТСлучаиУхода.НачалоГода И ВТСлучаиУхода.КонецГода
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ВходитВГод
|ПОМЕСТИТЬ ВТПериодыУхода
|ИЗ
| РегистрНакопления.ПериодыУходаЗаБольнымиРодственниками КАК ПериодыУходаЗаБольнымиРодственниками
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТВидыСлучаев КАК ВТВидыСлучаев
| ПО ПериодыУходаЗаБольнымиРодственниками.СлучайУходаЗаБольнымРебенком = ВТВидыСлучаев.СлучайУхода
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСлучаиУхода КАК ВТСлучаиУхода
| ПО ПериодыУходаЗаБольнымиРодственниками.Родственник = ВТСлучаиУхода.Родственник
| И ПериодыУходаЗаБольнымиРодственниками.Период >= ВТСлучаиУхода.НачалоГода
| И (ВТСлучаиУхода.КодПричины В (""13"", ВТВидыСлучаев.КодПричины))
|ГДЕ
| ПериодыУходаЗаБольнымиРодственниками.Период МЕЖДУ &НачалоГодаСобытия И &ОкончаниеПредшествующегоЛН
| И ПериодыУходаЗаБольнымиРодственниками.Регистратор <> &ИсключаемыйРегистратор
| И ПериодыУходаЗаБольнымиРодственниками.ОплаченоДней <> 0
|;
|
|
|ВЫБРАТЬ
| ВТПериодыУхода.Год КАК Год,
| ВТПериодыУхода.Родственник КАК Родственник,
| ВТПериодыУхода.СлучайУхода КАК СлучайУхода,
| ВТПериодыУхода.ВходитВПериодНетрудоспособности КАК ВходитВПериодНетрудоспособности,
| ВТПериодыУхода.ВходитВГод КАК ВходитВГод,
| ВТДаты.Дата КАК Дата,
| ВЫБОР
| КОГДА СУММА(ВЫБОР
| КОГДА ВТПериодыУхода.ОплаченоДней > 0
| ТОГДА 1
| КОГДА ВТПериодыУхода.ОплаченоДней < 0
| ТОГДА -1
| ИНАЧЕ 0
| КОНЕЦ) > 0
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ДеньОплачен
|ПОМЕСТИТЬ ВТУходПоДням
|ИЗ
| ВТДаты КАК ВТДаты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПериодыУхода КАК ВТПериодыУхода
| ПО (ВТДаты.Дата МЕЖДУ ВТПериодыУхода.НачалоПериодаОплаты И ВТПериодыУхода.ОкончаниеПериодаОплаты)
|
|СГРУППИРОВАТЬ ПО
| ВТДаты.Дата,
| ВТПериодыУхода.Родственник,
| ВТПериодыУхода.СлучайУхода,
| ВТПериодыУхода.Год,
| ВТПериодыУхода.ВходитВПериодНетрудоспособности,
| ВТПериодыУхода.ВходитВГод
|;
|
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТСлучаиУхода.Год КАК Год,
| ВТСлучаиУхода.Родственник КАК Родственник,
| ВТСлучаиУхода.ВозрастЛет КАК ВозрастЛет,
| ВТСлучаиУхода.СлучайУхода КАК СлучайУхода
|ПОМЕСТИТЬ ВТСлучаиПоГодам
|ИЗ
| ВТСлучаиУхода КАК ВТСлучаиУхода
|;
|
|
|ВЫБРАТЬ
| ВТСлучаиУхода.Родственник КАК Родственник,
| ВТСлучаиУхода.КодПричины КАК КодПричины,
| ВТСлучаиУхода.ВозрастЛет КАК ВозрастЛет,
| ВТСлучаиУхода.СлучайУхода КАК СлучайУхода,
| МИНИМУМ(ВТСлучаиУхода.ДатаНачала) КАК ДатаНачалаСлучаяУхода
|ПОМЕСТИТЬ ВТСлучаиВЦелом
|ИЗ
| ВТСлучаиУхода КАК ВТСлучаиУхода
|
|СГРУППИРОВАТЬ ПО
| ВТСлучаиУхода.Родственник,
| ВТСлучаиУхода.КодПричины,
| ВТСлучаиУхода.ВозрастЛет,
| ВТСлучаиУхода.СлучайУхода
|;
|
|
|ВЫБРАТЬ
| КОЛИЧЕСТВО(ВТУходПоДням.Дата) КАК РанееОплаченоДнейЗаГод,
| ВТСлучаиПоГодам.Год КАК Год,
| ВТСлучаиПоГодам.Родственник КАК Родственник,
| ВТСлучаиПоГодам.ВозрастЛет КАК ВозрастЛет,
| ВТСлучаиПоГодам.СлучайУхода КАК СлучайУхода
|ИЗ
| ВТСлучаиПоГодам КАК ВТСлучаиПоГодам
| ЛЕВОЕ СОЕДИНЕНИЕ ВТУходПоДням КАК ВТУходПоДням
| ПО ВТСлучаиПоГодам.Родственник = ВТУходПоДням.Родственник
| И ВТСлучаиПоГодам.СлучайУхода = ВТУходПоДням.СлучайУхода
| И ВТСлучаиПоГодам.Год = ВТУходПоДням.Год
| И (ВТУходПоДням.ДеньОплачен)
| И (ВТУходПоДням.ВходитВГод)
|
|СГРУППИРОВАТЬ ПО
| ВТСлучаиПоГодам.Год,
| ВТСлучаиПоГодам.Родственник,
| ВТСлучаиПоГодам.ВозрастЛет,
| ВТСлучаиПоГодам.СлучайУхода
|;
|
|
|ВЫБРАТЬ
| КОЛИЧЕСТВО(ВТУходПоДням.Дата) КАК РанееОплаченоДнейЗаСлучай,
| ВТСлучаиВЦелом.Родственник КАК Родственник,
| ВТСлучаиВЦелом.КодПричины КАК КодПричины,
| ВТСлучаиВЦелом.ВозрастЛет КАК ВозрастЛет,
| ВТСлучаиВЦелом.СлучайУхода КАК СлучайУхода,
| ВТСлучаиВЦелом.ДатаНачалаСлучаяУхода КАК ДатаНачалаСлучаяУхода
|ИЗ
| ВТСлучаиВЦелом КАК ВТСлучаиВЦелом
| ЛЕВОЕ СОЕДИНЕНИЕ ВТУходПоДням КАК ВТУходПоДням
| ПО ВТСлучаиВЦелом.Родственник = ВТУходПоДням.Родственник
| И ВТСлучаиВЦелом.СлучайУхода = ВТУходПоДням.СлучайУхода
| И (ВТУходПоДням.ДеньОплачен)
| И (ВТУходПоДням.ВходитВПериодНетрудоспособности)
|
|СГРУППИРОВАТЬ ПО
| ВТСлучаиВЦелом.Родственник,
| ВТСлучаиВЦелом.КодПричины,
| ВТСлучаиВЦелом.ВозрастЛет,
| ВТСлучаиВЦелом.СлучайУхода,
| ВТСлучаиВЦелом.ДатаНачалаСлучаяУхода";
РезультатыЗапроса = ВыполнитьПакет(Запрос, 2);
ТаблицаЗаГод = РезультатыЗапроса[0].Выгрузить();
ТаблицаЗаСлучай = РезультатыЗапроса[1].Выгрузить();
ТаблицаЗаГод.Колонки.Добавить("МаксимумДнейЗаГод", Новый ОписаниеТипов("Число"));
ТаблицаЗаГод.Колонки.Добавить("ОстатокДнейЗаГод", Новый ОписаниеТипов("Число"));
ТаблицаЗаСлучай.Колонки.Добавить("МаксимумДнейЗаСлучай", Новый ОписаниеТипов("Число"));
ТаблицаЗаСлучай.Колонки.Добавить("ОстатокДнейЗаСлучай", Новый ОписаниеТипов("Число"));
ТаблицаЗаСлучай.Колонки.Добавить("ОстатокДнейПоловиннойОплаты", Новый ОписаниеТипов("Число"));
Для Каждого СтрокаТаблицы Из ТаблицаЗаГод Цикл
СтрокаТаблицы.МаксимумДнейЗаГод = УчетПособийСоциальногоСтрахования.ДнейУходаЗаРодственникомВГод(
СтрокаТаблицы.СлучайУхода);
Если СтрокаТаблицы.МаксимумДнейЗаГод = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы.ОстатокДнейЗаГод = Макс(СтрокаТаблицы.МаксимумДнейЗаГод - СтрокаТаблицы.РанееОплаченоДнейЗаГод, 0);
КонецЦикла;
Для Каждого СтрокаТаблицы Из ТаблицаЗаСлучай Цикл
СтрокаТаблицы.МаксимумДнейЗаСлучай = УчетПособийСоциальногоСтрахования.ДнейОплатыЗаСлучай(
СтрокаТаблицы.КодПричины,
СтрокаТаблицы.ВозрастЛет);
Если СтрокаТаблицы.МаксимумДнейЗаСлучай = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы.ОстатокДнейЗаСлучай = Макс(СтрокаТаблицы.МаксимумДнейЗаСлучай - СтрокаТаблицы.РанееОплаченоДнейЗаСлучай, 0);
Если УчетПособийСоциальногоСтрахования.ИспользуетсяУсловиеИсчисления(Больничный, "44") Тогда
Продолжить;
КонецЕсли;
ДнейПолнойОплаты = УчетПособийСоциальногоСтрахования.ДнейПолнойОплатыПередПоловинной(
СтрокаТаблицы.СлучайУхода,
СтрокаТаблицы.ДатаНачалаСлучаяУхода);
Если ДнейПолнойОплаты <> Неопределено Тогда
ДнейПолнойОплаты = Макс(ДнейПолнойОплаты - СтрокаТаблицы.РанееОплаченоДнейЗаСлучай, 0);
СтрокаТаблицы.ОстатокДнейПоловиннойОплаты = Макс(СтрокаТаблицы.ОстатокДнейЗаСлучай - ДнейПолнойОплаты, 0);
КонецЕсли;
КонецЦикла;
Возврат Новый Структура("ЗаГод, ЗаСлучай", ТаблицаЗаГод, ТаблицаЗаСлучай);
КонецФункции
Функция ВыполнитьПакет(Запрос, КоличествоПоследнихТаблиц)
РезультатыЗапроса = Запрос.ВыполнитьПакет();
Пока РезультатыЗапроса.Количество() > КоличествоПоследнихТаблиц Цикл
РезультатыЗапроса.Удалить(0);
КонецЦикла;
Возврат РезультатыЗапроса;
КонецФункции
Процедура УменьшитьОстаток(Остаток, Уменьшение)
Остаток = Макс(Остаток - Уменьшение, 0);
КонецПроцедуры
Функция ОстатокДнейЗаСчетРаботодателяРекурсивно(ПервичныйБольничныйЛист, КоличествоДнейЗаСчетРаботодателя, ДатаНачалаОплатыЗаСчетСФР)
Если Не ЗначениеЗаполнено(ПервичныйБольничныйЛист) Тогда
Возврат КоличествоДнейЗаСчетРаботодателя;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ЕСТЬNULL(БольничныйЛистНачисления.ОплаченоДней, 0)) КАК ОтработаноДней,
| БольничныйЛист.ПервичныйБольничныйЛист КАК ПервичныйБольничныйЛист,
| БольничныйЛист.ЯвляетсяПродолжениемБолезни КАК ЯвляетсяПродолжениемБолезни
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист.Начисления КАК БольничныйЛистНачисления
| ПО БольничныйЛист.Ссылка = БольничныйЛистНачисления.Ссылка
| И БольничныйЛист.ВидОплатыЗаСчетРаботодателя = БольничныйЛистНачисления.Начисление
|ГДЕ
| БольничныйЛист.Ссылка = &ПервичныйБольничныйЛист
|
|СГРУППИРОВАТЬ ПО
| БольничныйЛист.ПервичныйБольничныйЛист,
| БольничныйЛист.ЯвляетсяПродолжениемБолезни
|;
|
|
|ВЫБРАТЬ
| МИНИМУМ(ЕСТЬNULL(БольничныйЛистНачисления.ДатаНачала, ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59))) КАК ДатаНачалаОплатыЗаСчетСФР,
| БольничныйЛист.СдвигатьПериодОплаты КАК СдвигатьПериодОплаты,
| БольничныйЛист.НачалоВПериодПриостановленияТД КАК НачалоВПериодПриостановленияТД,
| БольничныйЛист.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| БольничныйЛист.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности,
| БольничныйЛист.ДатаОкончания КАК ДатаОкончания
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист.Начисления КАК БольничныйЛистНачисления
| ПО БольничныйЛист.Ссылка = БольничныйЛистНачисления.Ссылка
| И БольничныйЛист.ВидОплатыПособия = БольничныйЛистНачисления.Начисление
|ГДЕ
| БольничныйЛист.Ссылка = &ПервичныйБольничныйЛист
|
|СГРУППИРОВАТЬ ПО
| БольничныйЛист.СдвигатьПериодОплаты,
| БольничныйЛист.НачалоВПериодПриостановленияТД,
| БольничныйЛист.ДатаНачалаСобытия,
| БольничныйЛист.ПричинаНетрудоспособности,
| БольничныйЛист.ДатаОкончания";
Запрос.УстановитьПараметр("ПервичныйБольничныйЛист", ПервичныйБольничныйЛист);
Пакет = Запрос.ВыполнитьПакет();
ДатаСФРВыборка = Пакет[1].Выбрать();
Если ДатаСФРВыборка.Следующий() Тогда
Если ДатаСФРВыборка.СдвигатьПериодОплаты Тогда
ДатаНачалаОплатыЗаСчетСФР = Мин(ДатаНачалаОплатыЗаСчетСФР, ДатаСФРВыборка.ДатаНачалаОплатыЗаСчетСФР);
Если ДатаНачалаОплатыЗаСчетСФР <> '39991231235959' Тогда
Возврат 0;
КонецЕсли;
Иначе
РасчетнаяДата = УчетПособийСоциальногоСтрахования.ДатаНачалаОплатыЗаСчетФСС(
ДатаСФРВыборка.ДатаНачалаСобытия,
ДатаСФРВыборка.ПричинаНетрудоспособности,
ДатаСФРВыборка.НачалоВПериодПриостановленияТД);
Если РасчетнаяДата <= ДатаСФРВыборка.ДатаОкончания Тогда
ДатаНачалаОплатыЗаСчетСФР = РасчетнаяДата;
Возврат 0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Выборка = Пакет[0].Выбрать();
Если Выборка.Следующий() Тогда
КоличествоДнейЗаСчетРаботодателя = Макс(КоличествоДнейЗаСчетРаботодателя - Выборка.ОтработаноДней, 0);
Если Выборка.ЯвляетсяПродолжениемБолезни Тогда
Возврат ОстатокДнейЗаСчетРаботодателяРекурсивно(
Выборка.ПервичныйБольничныйЛист, КоличествоДнейЗаСчетРаботодателя, ДатаНачалаОплатыЗаСчетСФР);
КонецЕсли;
КонецЕсли;
Возврат КоличествоДнейЗаСчетРаботодателя;
КонецФункции
Процедура ЗаполнитьПериодыПростоя(Больничный, Кэш)
Больничный.ПериодыПростоя.Очистить();
ДатыКУчетуПростоя = ДатыКУчетуПростоя(Больничный, Кэш);
Если ДатыКУчетуПростоя.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ПериодыПростоя = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ДатыКУчетуПростоя, "Регистратор", "", "СреднийЗаработок");
Для Каждого Период Из ПериодыПростоя Цикл
ПериодПростоя = Больничный.ПериодыПростоя.Добавить();
ПериодПростоя.ДатаНачала = НачалоДня(Макс(Период.ДатаНачала, Больничный.ДатаНачала));
ПериодПростоя.ДатаОкончания = НачалоДня(Мин(Период.ДатаОкончания, Больничный.ДатаОкончания));
ПериодПростоя.СреднийЗаработок = Период.СреднийЗаработок;
КонецЦикла;
Больничный.ПериодыПростоя.Сортировать("ДатаНачала, ДатаОкончания");
КонецПроцедуры
Функция ДатыКУчетуПростоя(Больничный, Кэш) Экспорт
Таблица = Кэш["ДатыКУчетуПростоя"];
Если Таблица <> Неопределено Тогда
Возврат Таблица;
КонецЕсли;
ДатыКУчетуПростоя = Новый ТаблицаЗначений;
ДатыКУчетуПростоя.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ДатыКУчетуПростоя.Колонки.Добавить("Регистратор");
ДатыКУчетуПростоя.Колонки.Добавить("СреднийЗаработок");
Кэш.Вставить("ДатыКУчетуПростоя", ДатыКУчетуПростоя);
Если Больничный.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
Возврат ДатыКУчетуПростоя;
КонецЕсли;
Если Не ОбщегоНазначенияБЗК.ПериодСоответствуетТребованиям(Больничный.ДатаНачала, Больничный.ДатаОкончания) Тогда
Возврат ДатыКУчетуПростоя;
КонецЕсли;
ТаблицаДат = ПересеченияСостоянийСотрудника(Больничный, Кэш);
Для Каждого СтрокаТаблицы Из ТаблицаДат Цикл
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Причина)
И ДатыКУчетуПростоя.Найти(СтрокаТаблицы.Дата, "Дата") = Неопределено Тогда
ДатаПростоя = ДатыКУчетуПростоя.Добавить();
ДатаПростоя.Дата = СтрокаТаблицы.Дата;
ДатаПростоя.Регистратор = СтрокаТаблицы.Регистратор;
ДатаПростоя.СреднийЗаработок = СтрокаТаблицы.СреднийЗаработок;
КонецЕсли;
КонецЦикла;
Возврат ДатыКУчетуПростоя;
КонецФункции
Функция ПересеченияСостоянийСотрудника(Больничный, Кэш)
Таблица = Кэш["ПересеченияСостоянийСотрудника"];
Если Таблица <> Неопределено Тогда
Возврат Таблица;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(
Запрос.МенеджерВременныхТаблиц,
Больничный.ДатаНачала,
Больничный.ДатаОкончания,
"ДЕНЬ",
"Дата",
"ВТДаты");
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеСостоянийСотрудников.Начало КАК ДатаНачала,
| ДанныеСостоянийСотрудников.Окончание КАК ДатаОкончания,
| ВЫБОР
| КОГДА ДанныеСостоянийСотрудников.Состояние В (&ОтпускОсновной, &ДополнительныйОтпуск)
| ТОГДА &ПричинаОтпуск
| КОГДА ДанныеСостоянийСотрудников.Состояние В (&ОтпускУчебныйОплачиваемый, &ОтпускУчебныйНеоплачиваемый)
| ТОГДА &ПричинаУчебныйОтпуск
| КОГДА ДанныеСостоянийСотрудников.Состояние В (&ОтпускНеоплачиваемыйПоЗаконодательству, &ОтпускНеоплачиваемыйПоРазрешениюРаботодателя)
| ТОГДА &ПричинаОтпускБезСохраненияОплаты
| КОГДА ДанныеСостоянийСотрудников.Состояние В (&ПростойПоВинеРаботодателя, &ПростойНеЗависящийОтРаботодателяИРаботника)
| И ДанныеСостоянийСотрудников.Начало > &ДатаНачалаСобытия
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.ПустаяСсылка)
| КОГДА ДанныеСостоянийСотрудников.Состояние = &ПростойПоВинеРаботника
| ТОГДА &ПричинаОтстранениеОтРаботы
| ИНАЧЕ &ПричинаИное
| КОНЕЦ КАК Причина,
| ДанныеСостоянийСотрудников.Регистратор КАК Регистратор,
| ДанныеСостоянийСотрудников.ВидВремени КАК ВидВремени,
| ДанныеСостоянийСотрудников.Состояние В (&ПростойПоВинеРаботодателя, &ПростойНеЗависящийОтРаботодателяИРаботника)
| И ДанныеСостоянийСотрудников.Начало <= &ДатаНачалаСобытия
| ИЛИ ДанныеСостоянийСотрудников.Состояние = &ПростойПоВинеРаботника КАК СдвигатьПериодОплаты,
| ВЫБОР
| КОГДА ПростойСотрудниковНачисления.СреднийЗаработок ЕСТЬ NULL
| ТОГДА 0
| КОГДА ПростойСотрудниковНачисления.ВремяВЧасах = ЛОЖЬ
| И ПростойСотрудниковНачисления.ОплаченоДней > 0
| ТОГДА ОКР(ПростойСотрудниковНачисления.Результат / ПростойСотрудниковНачисления.ОплаченоДней, 2)
| КОГДА ПростойСотрудниковНачисления.ВремяВЧасах = ИСТИНА
| И ПростойСотрудниковНачисления.ОплаченоЧасов > 0
| ТОГДА ОКР(ПростойСотрудниковНачисления.Результат / ПростойСотрудниковНачисления.ОплаченоЧасов, 2)
| ИНАЧЕ 0
| КОНЕЦ КАК СреднийЗаработок
|ПОМЕСТИТЬ ВТСостоянияСотрудника
|ИЗ
| РегистрСведений.ДанныеСостоянийСотрудников КАК ДанныеСостоянийСотрудников
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПростойСотрудников.Начисления КАК ПростойСотрудниковНачисления
| ПО ДанныеСостоянийСотрудников.Регистратор = ПростойСотрудниковНачисления.Ссылка
| И ДанныеСостоянийСотрудников.Сотрудник = ПростойСотрудниковНачисления.Сотрудник
|ГДЕ
| ДанныеСостоянийСотрудников.Сотрудник = &Сотрудник
| И ДанныеСостоянийСотрудников.Окончание >= &ДатаНачала
| И ДанныеСостоянийСотрудников.Начало <= &ДатаОкончания
| И ДанныеСостоянийСотрудников.Состояние В (&ОтпускОсновной, &ДополнительныйОтпуск, &ОтпускУчебныйОплачиваемый, &ОтпускУчебныйНеоплачиваемый, &ОтпускНеоплачиваемыйПоЗаконодательству, &ОтпускНеоплачиваемыйПоРазрешениюРаботодателя, &ПростойПоВинеРаботника, &ПростойПоВинеРаботодателя, &ПростойНеЗависящийОтРаботодателяИРаботника)
| И НЕ ДанныеСостоянийСотрудников.Сторно
|;
|
|
|ВЫБРАТЬ
| Даты.Дата КАК Дата,
| МАКСИМУМ(СостоянияСотрудника.Регистратор) КАК Регистратор
|ПОМЕСТИТЬ ВТРегистраторы
|ИЗ
| ВТДаты КАК Даты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСостоянияСотрудника КАК СостоянияСотрудника
| ПО Даты.Дата >= СостоянияСотрудника.ДатаНачала
| И Даты.Дата <= СостоянияСотрудника.ДатаОкончания
|
|СГРУППИРОВАТЬ ПО
| Даты.Дата
|;
|
|
|ВЫБРАТЬ
| ВТРегистраторы.Дата КАК Дата,
| ВТРегистраторы.Регистратор КАК Регистратор,
| МАКСИМУМ(ВТСостоянияСотрудника.Причина) КАК Причина,
| МАКСИМУМ(ВТСостоянияСотрудника.СдвигатьПериодОплаты) КАК СдвигатьПериодОплаты,
| МАКСИМУМ(ВТСостоянияСотрудника.СреднийЗаработок) КАК СреднийЗаработок
|ИЗ
| ВТРегистраторы КАК ВТРегистраторы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСостоянияСотрудника КАК ВТСостоянияСотрудника
| ПО ВТРегистраторы.Регистратор = ВТСостоянияСотрудника.Регистратор
| И ВТРегистраторы.Дата >= ВТСостоянияСотрудника.ДатаНачала
| И ВТРегистраторы.Дата <= ВТСостоянияСотрудника.ДатаОкончания
|
|СГРУППИРОВАТЬ ПО
| ВТРегистраторы.Дата,
| ВТРегистраторы.Регистратор";
Если Больничный.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ОбщееЗаболевание
Или Больничный.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.Протезирование
Или Больничный.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПособиеПриДолечивании Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтпускОсновной, &ДополнительныйОтпуск, ", "");
КонецЕсли;
Запрос.УстановитьПараметр("Сотрудник", Больничный.Сотрудник);
Запрос.УстановитьПараметр("ДатаНачала", Больничный.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Больничный.ДатаОкончания);
Запрос.УстановитьПараметр("ДатаНачалаСобытия", Больничный.ДатаНачалаСобытия);
Запрос.УстановитьПараметр("ПричинаИное", Перечисления.ПричиныНеоплатыБольничных.Иное);
Запрос.УстановитьПараметр("ПричинаОтпуск", Перечисления.ПричиныНеоплатыБольничных.Отпуск);
Запрос.УстановитьПараметр("ПричинаУчебныйОтпуск", Перечисления.ПричиныНеоплатыБольничных.УчебныйОтпуск);
Запрос.УстановитьПараметр("ПричинаОтпускБезСохраненияОплаты", Перечисления.ПричиныНеоплатыБольничных.ОтпускБезСохраненияОплаты);
Запрос.УстановитьПараметр("ПричинаОтстранениеОтРаботы", Перечисления.ПричиныНеоплатыБольничных.ОтстранениеОтРаботы);
Запрос.УстановитьПараметр("ОтпускОсновной", Перечисления.СостоянияСотрудника.ОтпускОсновной);
Запрос.УстановитьПараметр("ДополнительныйОтпуск", Перечисления.СостоянияСотрудника.ДополнительныйОтпуск);
Запрос.УстановитьПараметр("ОтпускУчебныйОплачиваемый", Перечисления.СостоянияСотрудника.ОтпускУчебныйОплачиваемый);
Запрос.УстановитьПараметр("ОтпускУчебныйНеоплачиваемый", Перечисления.СостоянияСотрудника.ОтпускУчебныйНеоплачиваемый);
Запрос.УстановитьПараметр("ОтпускНеоплачиваемыйПоЗаконодательству", Перечисления.СостоянияСотрудника.ОтпускНеоплачиваемыйПоЗаконодательству);
Запрос.УстановитьПараметр("ОтпускНеоплачиваемыйПоРазрешениюРаботодателя", Перечисления.СостоянияСотрудника.ОтпускНеоплачиваемыйПоРазрешениюРаботодателя);
Запрос.УстановитьПараметр("ПростойПоВинеРаботника", Перечисления.СостоянияСотрудника.ПростойПоВинеРаботника);
Запрос.УстановитьПараметр("ПростойПоВинеРаботодателя", Перечисления.СостоянияСотрудника.ПростойПоВинеРаботодателя);
Запрос.УстановитьПараметр("ПростойНеЗависящийОтРаботодателяИРаботника", Перечисления.СостоянияСотрудника.ПростойНеЗависящийОтРаботодателяИРаботника);
ТаблицаДат = Запрос.Выполнить().Выгрузить();
Кэш.Вставить("ПересеченияСостоянийСотрудника", ТаблицаДат);
Возврат ТаблицаДат;
КонецФункции
#КонецОбласти
#Область Заполнение
Функция ПараметрыЗаполнения(ЗаполнитьВсе = Ложь) Экспорт
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Действие", Неопределено);
ПараметрыЗаполнения.Вставить("Кэш", Неопределено);
ПараметрыЗаполнения.Вставить("Форма", Неопределено);
ПараметрыЗаполнения.Вставить("ПервичнаяИнициализацияФормы", Ложь);
ПараметрыЗаполнения.Вставить("ОчиститьПараметрыСреднего", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ЗаполнитьПоКадровымДаннымСотрудника", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ЗаполнитьСтаж", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ЗаполнитьПланируемуюДатуВыплаты", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ЗаполнитьПериодыУхода", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ЗаполнитьДатуНачалаПоловиннойОплаты", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ЗаполнитьПроцентОплатыИОграничениеПособия", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ЗаполнитьПараметрыОплаты", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ЗаполнитьСсылкиНачислений", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ЗаполнитьПриостановленияТД", ЗаполнитьВсе);
ПараметрыЗаполнения.Вставить("ВыводитьСообщения", Ложь);
ПараметрыЗаполнения.Вставить("Результат", ПустойРезультатЗаполнения());
Возврат ПараметрыЗаполнения;
КонецФункции
Функция ПустойРезультатЗаполнения() Экспорт
РезультатЗаполнения = Новый Структура;
РезультатЗаполнения.Вставить("Успех", Ложь);
РезультатЗаполнения.Вставить("ПричинаОтказа", "");
РезультатЗаполнения.Вставить("ОшибкиЗаполнения", Новый Массив);
РезультатЗаполнения.Вставить("СтажИзменен", Ложь);
РезультатЗаполнения.Вставить("ДляСотрудникаВведенСтраховойСтаж", Неопределено);
РезультатЗаполнения.Вставить("ПериодыУходаЗаполнены", Ложь);
РезультатЗаполнения.Вставить("ПараметрыОплатыЗаполнены", Ложь);
РезультатЗаполнения.Вставить("ИзмененПериодРасчетаСреднего", Ложь);
РезультатЗаполнения.Вставить("ПриостановленияТДЗаполнены", Ложь);
РезультатЗаполнения.Вставить("РезультатыПроверкиПриостановленийТД", Неопределено);
Возврат РезультатЗаполнения;
КонецФункции
Процедура ЗаполнитьПланируемуюДатуВыплаты(Документ, НастройкиДатВыплаты = Неопределено) Экспорт
ПараметрыПолученияДатыВыплаты = РасчетЗарплатыРасширенный.ПараметрыПолученияПланируемойДатыВыплатыЗарплаты();
ПараметрыПолученияДатыВыплаты.МесяцНачисления = Документ.ПериодРегистрации;
ПараметрыПолученияДатыВыплаты.Настройки = НастройкиДатВыплаты;
ПараметрыПолученияДатыВыплаты.ПорядокВыплаты = Документ.ПорядокВыплаты;
ПараметрыПолученияДатыВыплаты.Организация = Документ.Организация;
ПараметрыПолученияДатывыплаты.Сотрудник = Документ.Сотрудник;
Документ.ПланируемаяДатаВыплаты = РасчетЗарплатыРасширенный.ПланируемаяДатаВыплатыЗарплатыПоНастройкамПоПорядкуВыплаты(
ПараметрыПолученияДатыВыплаты);
КонецПроцедуры
Процедура ЗаполнитьПериодыУхода(Документ) Экспорт
Модифицированность = Истина;
Документ.ПериодыУходаЗаРодственниками.Очистить();
ДанныеЭЛН = ДанныеЭЛНДляЗаполнения(Документ);
ЗаполнитьТаблицуУходаЗаРодственниками(Документ, ДанныеЭЛН);
КонецПроцедуры
Процедура ЗаполнитьСсылкиНачислений(Форма, ПервичнаяИнициализацияФормы) Экспорт
УстановитьПривилегированныйРежим(Истина);
Документ = Форма.Объект;
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(Форма, "ВидОплатыПособия",
ДополнительныеПараметрыВыбораНачислений(Документ, "ВидОплатыПособия"),
ПервичнаяИнициализацияФормы);
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(Форма, "ВидНеоплачиваемогоВремени",
ДополнительныеПараметрыВыбораНачислений(Документ, "ВидНеоплачиваемогоВремени"),
ПервичнаяИнициализацияФормы);
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(Форма, "ВидОплатыЗаСчетРаботодателя",
ДополнительныеПараметрыВыбораНачислений(Документ, "ВидОплатыЗаСчетРаботодателя"),
ПервичнаяИнициализацияФормы);
Если Документ.ДоплачиватьДоДенежногоСодержания Или Документ.ДоплачиватьДоСреднегоЗаработка Тогда
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(Форма, "ВидРасчетаДоплаты",
ДополнительныеПараметрыВыбораНачислений(Документ, "ВидРасчетаДоплаты"),
ПервичнаяИнициализацияФормы);
КонецЕсли;
КонецПроцедуры
Функция ЗаполнитьПериодРасчетаСреднегоЗаработка(Документ) Экспорт
ЕстьИзменения = Ложь;
Если Документ.ФиксПериодРасчетаСреднегоЗаработка Тогда
Возврат ЕстьИзменения;
КонецЕсли;
Период = УчетПособийСоциальногоСтрахованияКлиентСервер.ПериодРасчетаСреднегоЗаработкаФСС(
Документ.ДатаНачалаСобытия, ПорядокРасчетаСреднегоЗаработкаФСС(Документ));
Если НачалоМесяца(Документ.ПериодРасчетаСреднегоЗаработкаНачало) <> НачалоМесяца(Период.ДатаНачала)
Или НачалоМесяца(Документ.ПериодРасчетаСреднегоЗаработкаОкончание) <> НачалоМесяца(Период.ДатаОкончания) Тогда
Документ.ПериодРасчетаСреднегоЗаработкаНачало = Период.ДатаНачала;
Документ.ПериодРасчетаСреднегоЗаработкаОкончание = Период.ДатаОкончания;
Документ.ПериодРасчетаСреднегоЗаработкаПервыйГод = Год(Период.ДатаНачала);
Документ.ПериодРасчетаСреднегоЗаработкаВторойГод = Год(Период.ДатаОкончания);
ЕстьИзменения = Истина;
КонецЕсли;
Возврат ЕстьИзменения;
КонецФункции
Функция ПорядокРасчетаСреднегоЗаработкаФСС(Документ) Экспорт
Если Документ.РасчетПоПравилам2010Года Тогда
Возврат Перечисления.ПорядокРасчетаСреднегоЗаработкаФСС.Постановление2010;
Иначе
Возврат УчетПособийСоциальногоСтрахованияКлиентСервер.ПорядокРасчетаСреднегоЗаработкаФСС(Документ.ДатаНачалаСобытия);
КонецЕсли;
КонецФункции
Процедура ЗаполнитьРассчетУтвержденИОтветственных() Экспорт
КонецПроцедуры
Процедура ЗаполнитьДатуНачалаПоловиннойОплаты(Документ) Экспорт
Документ.ДатаНачалаПоловиннойОплаты = '00010101';
Если Не ЗначениеЗаполнено(Документ.ДатаНачалаОплаты)
И Не ЗначениеЗаполнено(Документ.ДатаОкончанияОплаты) Тогда
ДатаНачалаОплаты = Документ.ДатаНачала;
ДатаОкончанияОплаты = Документ.ДатаОкончания;
Иначе
ДатаНачалаОплаты = Документ.ДатаНачалаОплаты;
ДатаОкончанияОплаты = Документ.ДатаОкончанияОплаты;
КонецЕсли;
Если Не ЗначениеЗаполнено(Документ.ДатаНачалаСобытия)
Или Не ЗначениеЗаполнено(ДатаНачалаОплаты)
Или Не ЗначениеЗаполнено(ДатаОкончанияОплаты)
Или УчетПособийСоциальногоСтрахования.ИспользуетсяУсловиеИсчисления(Документ, "44")
Или Не ИспользоватьПериодыУходаВШапке(Документ) Тогда
Возврат;
КонецЕсли;
ДнейПолнойОплаты = УчетПособийСоциальногоСтрахования.ДнейПолнойОплатыПередПоловинной(
Документ.СлучайУходаЗаБольнымРебенком,
Документ.ДатаНачалаСобытия);
Если ДнейПолнойОплаты = Неопределено Тогда
Возврат;
КонецЕсли;
ДатаНачалаПоловиннойОплаты = Документ.ДатаНачалаСобытия + ДнейПолнойОплаты * 86400;
Если ДатаОкончанияОплаты < НачалоДня(ДатаНачалаПоловиннойОплаты) - 1 Тогда
Возврат;
КонецЕсли;
Документ.ДатаНачалаПоловиннойОплаты = Макс(ДатаНачалаПоловиннойОплаты, ДатаНачалаОплаты);
КонецПроцедуры
#КонецОбласти
#Область КадровыеДанные
Функция КадровыеДанныеСотрудника(Сотрудник, Организация, ДатаНачалаСобытия) Экспорт
ИменаКадровыхДанных =
"Организация,
|Подразделение,
|ДатаУвольнения,
|Территория,
|Сотрудник,
|ФизическоеЛицо,
|РайонныйКоэффициентРФ,
|Инвалидность,
|ЛьготаПриНачисленииПособий,
|ВидЗанятости,
|ВидДоговора,
|ДоляНеполногоРабочегоВремени";
ДанныеСотрудника = КадровыйУчет.КадровыеДанныеСотрудника(
Истина,
Сотрудник,
ИменаКадровыхДанных,
ДатаНачалаСобытия);
Если ДанныеСотрудника = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если ДанныеСотрудника.ВидЗанятости <> Перечисления.ВидыЗанятости.ОсновноеМестоРаботы
И ДанныеСотрудника.ВидЗанятости <> Перечисления.ВидыЗанятости.Совместительство Тогда
ДанныеОсновногоСотрудника = КадровыйУчет.КадровыеДанныеОсновногоСотрудникаФизическогоЛица(
Организация,
ДанныеСотрудника.ФизическоеЛицо,
ИменаКадровыхДанных,
ДатаНачалаСобытия,
Истина);
Если ДанныеОсновногоСотрудника <> Неопределено И Сотрудник <> ДанныеОсновногоСотрудника.Сотрудник Тогда
Если Не ЗначениеЗаполнено(ДанныеОсновногоСотрудника.ДатаУвольнения)
Или ДанныеОсновногоСотрудника.ДатаУвольнения >= ДатаНачалаСобытия Тогда
ДанныеСотрудника = ДанныеОсновногоСотрудника;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЕстьДоговорыГПХ = КадровыйУчет.ЕстьДоговорыГПХ(ДанныеСотрудника.ФизическоеЛицо, Организация, ДатаНачалаСобытия);
Результат = Новый Структура(ИменаКадровыхДанных);
ЗаполнитьЗначенияСвойств(Результат, ДанныеСотрудника);
Результат.Вставить("ЕстьДоговорыГПХ", ЕстьДоговорыГПХ);
Возврат Результат;
КонецФункции
Процедура ЗаполнитьПоКадровымДаннымСотрудника(Документ) Экспорт
КадровыеДанные = КадровыеДанныеСотрудника(Документ.Сотрудник, Документ.Организация, Документ.ДатаНачалаСобытия);
Если КадровыеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если КадровыеДанные.Сотрудник <> Документ.Сотрудник И ЗначениеЗаполнено(КадровыеДанные.Сотрудник) Тогда
Документ.Сотрудник = КадровыеДанные.Сотрудник;
КонецЕсли;
Документ.ФизическоеЛицо = КадровыеДанные.ФизическоеЛицо;
Документ.СотрудникСлужащий = Перечисления.ВидыДоговоровССотрудниками.ЭтоДоговорСлужащего(КадровыеДанные.ВидДоговора);
Документ.СотрудникДоговорник = Ложь;
Если Не ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении")
И (Не ЗначениеЗаполнено(КадровыеДанные.ДатаУвольнения)
Или КадровыеДанные.ДатаУвольнения < Документ.ДатаНачалаСобытия) Тогда
УстановитьПривилегированныйРежим(Истина);
ТекущийДоговор = СЭДОФСС.ТекущийДоговорФизлица(
Документ.ГоловнаяОрганизация,
Документ.ФизическоеЛицо,
Документ.ДатаНачалаСобытия);
УстановитьПривилегированныйРежим(Ложь);
Если ТекущийДоговор <> Неопределено Тогда
Документ.СотрудникДоговорник = Не ТекущийДоговор.Трудовой И ТекущийДоговор.ГПХ;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Документ.ПервичныйБольничныйЛист) Тогда
ЗаполнитьПриостановленияТД(Документ);
Возврат;
КонецЕсли;
Документ.ДоляНеполногоВремени = УчетПособийСоциальногоСтрахования.ДоляНеполногоРабочегоВремени(
КадровыеДанные.ДоляНеполногоРабочегоВремени);
Документ.ОсновноеМестоРаботы = (КадровыеДанные.ВидЗанятости = Перечисления.ВидыЗанятости.ОсновноеМестоРаботы);
Если ТипЗнч(КадровыеДанные.РайонныйКоэффициентРФ) = Тип("Число")
И КадровыеДанные.РайонныйКоэффициентРФ >= 1 Тогда
Документ.РайонныйКоэффициентРФНаНачалоСобытия = КадровыеДанные.РайонныйКоэффициентРФ;
Иначе
ОбъектРК = РасчетЗарплатыРасширенный.ИсточникРайонногоКоэффициентаРФ(КадровыеДанные);
Если Не ЗначениеЗаполнено(ОбъектРК) Тогда
ОбъектРК = Документ.Организация;
КонецЕсли;
Документ.РайонныйКоэффициентРФНаНачалоСобытия = РасчетЗарплатыРасширенный.РайонныйКоэффициентРФ(ОбъектРК);
КонецЕсли;
Если ЗначениеЗаполнено(КадровыеДанные.ЛьготаПриНачисленииПособий) Тогда
Документ.ПрименятьЛьготыПриНачисленииПособия = Истина;
Документ.ФинансированиеФедеральнымБюджетом = КадровыеДанные.ЛьготаПриНачисленииПособий;
Иначе
Документ.ПрименятьЛьготыПриНачисленииПособия = Ложь;
Документ.ФинансированиеФедеральнымБюджетом = Неопределено;
КонецЕсли;
ЗаполнитьУсловияИсчисления(Документ, КадровыеДанные);
ЗаполнитьПорядокВыплатыУволенному(Документ);
КонецПроцедуры
Процедура ЗаполнитьУсловияИсчисления(Документ, КадровыеДанные) Экспорт
Если ЗначениеЗаполнено(КадровыеДанные.ВидЗанятости)
И ЗначениеЗаполнено(КадровыеДанные.ДатаУвольнения)
И Документ.ДатаНачалаСобытия > КадровыеДанные.ДатаУвольнения
И Не КадровыеДанные.ЕстьДоговорыГПХ Тогда
УчетПособийСоциальногоСтрахования.УстановитьУсловиеИсчисления(Документ, "47");
ИначеЕсли Не ЗначениеЗаполнено(КадровыеДанные.ВидЗанятости)
И Не КадровыеДанные.ЕстьДоговорыГПХ Тогда
УчетПособийСоциальногоСтрахования.УстановитьУсловиеИсчисления(Документ, "47");
Иначе
УчетПособийСоциальногоСтрахования.УдалитьУсловиеИсчисления(Документ, "47");
КонецЕсли;
Если ЗначениеЗаполнено(КадровыеДанные.Инвалидность)
И КадровыеДанные.Инвалидность Тогда
УчетПособийСоциальногоСтрахования.УстановитьУсловиеИсчисления(Документ, "45");
Иначе
УчетПособийСоциальногоСтрахования.УдалитьУсловиеИсчисления(Документ, "45");
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПорядокВыплатыУволенному(Документ) Экспорт
Если УчетПособийСоциальногоСтрахования.ИспользуетсяУсловиеИсчисления(Документ, "47") Тогда
Документ.ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Межрасчет;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Стаж
Функция ВидыСтажаВЛисткеНетрудоспособности() Экспорт
КатегорииСтажа = КатегорииСтажаВЛисткеНетрудоспособности();
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыСтажа.Ссылка,
| ВидыСтажа.КатегорияСтажа
|ИЗ
| Справочник.ВидыСтажа КАК ВидыСтажа
|ГДЕ
| ВидыСтажа.КатегорияСтажа В(&КатегорииСтажа)";
Запрос.УстановитьПараметр("КатегорииСтажа", КатегорииСтажа);
Результат = Запрос.Выполнить();
ВидыСтажа = Новый Массив;
НеобязательныеВидыСтажа = Новый Соответствие;
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ВидыСтажа.Добавить(Выборка.Ссылка);
Если Выборка.КатегорияСтажа = Перечисления.КатегорииСтажа.РасширенныйСтраховой Тогда
ЗаголовокФлажка = НСтр("ru = 'Требуется ввести стаж с учетом нестраховых периодов'");
НеобязательныеВидыСтажа.Вставить(Выборка.Ссылка, ЗаголовокФлажка);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Новый Структура("ВидыСтажа, НеобязательныеВидыСтажа", ВидыСтажа, НеобязательныеВидыСтажа);
КонецФункции
Функция КатегорииСтажаВЛисткеНетрудоспособности() Экспорт
КатегорииСтажа = Новый Массив;
КатегорииСтажа.Добавить(Перечисления.КатегорииСтажа.Страховой);
КатегорииСтажа.Добавить(Перечисления.КатегорииСтажа.РасширенныйСтраховой);
Возврат КатегорииСтажа;
КонецФункции
Функция ЗаполнитьСтаж(Документ, ДляСотрудникаВведенСтраховойСтаж) Экспорт
ДанныеОСтажеСотрудника = ДанныеОСтажеСотрудника(Документ);
Если ДанныеОСтажеСотрудника = Неопределено Тогда
ДляСотрудникаВведенСтраховойСтаж = ДляСотрудникаВведенСтраховойСтаж(Документ);
СтажЛет = 0;
СтажМесяцев = 0;
СтажДней = 0;
СтажРасширенныйЛет = 0;
СтажРасширенныйМесяцев = 0;
СтажРасширенныйДней = 0;
Иначе
ДляСотрудникаВведенСтраховойСтаж = ДанныеОСтажеСотрудника.ДляСотрудникаВведенСтраховойСтаж;
СтажЛет = Цел(ДанныеОСтажеСотрудника.СтажВМесяцах / 12);
СтажМесяцев = ДанныеОСтажеСотрудника.СтажВМесяцах % 12;
СтажДней = ДанныеОСтажеСотрудника.СтажДней;
СтажРасширенныйЛет = Цел(ДанныеОСтажеСотрудника.СтажВМесяцахРасширенный / 12);
СтажРасширенныйМесяцев = ДанныеОСтажеСотрудника.СтажВМесяцахРасширенный % 12;
СтажРасширенныйДней = ДанныеОСтажеСотрудника.СтажРасширенныйДней;
КонецЕсли;
ЕстьИзменения = Документ.СтажЛет <> СтажЛет
Или Документ.СтажМесяцев <> СтажМесяцев
Или Документ.СтажДней <> СтажДней
Или Документ.СтажРасширенныйЛет <> СтажРасширенныйЛет
Или Документ.СтажРасширенныйМесяцев <> СтажРасширенныйМесяцев
Или Документ.СтажРасширенныйДней <> СтажРасширенныйДней;
Если ЕстьИзменения Тогда
Документ.СтажЛет = СтажЛет;
Документ.СтажМесяцев = СтажМесяцев;
Документ.СтажДней = СтажДней;
Документ.СтажРасширенныйЛет = СтажРасширенныйЛет;
Документ.СтажРасширенныйМесяцев = СтажРасширенныйМесяцев;
Документ.СтажРасширенныйДней = СтажРасширенныйДней;
КонецЕсли;
Возврат ЕстьИзменения;
КонецФункции
Функция ДляСотрудникаВведенСтраховойСтаж(Документ) Экспорт
Если Не ЗначениеЗаполнено(Документ.ФизическоеЛицо) Тогда
Возврат Ложь;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| НакопленныеСтажиФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| РегистрСведений.НакопленныеСтажиФизическихЛиц КАК НакопленныеСтажиФизическихЛиц
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыСтажа КАК ВидыСтажа
| ПО НакопленныеСтажиФизическихЛиц.ВидСтажа = ВидыСтажа.Ссылка
|ГДЕ
| НакопленныеСтажиФизическихЛиц.ФизическоеЛицо = &ФизическоеЛицо
| И ВидыСтажа.КатегорияСтажа = ЗНАЧЕНИЕ(Перечисление.КатегорииСтажа.Страховой)";
Запрос.УстановитьПараметр("ФизическоеЛицо", Документ.ФизическоеЛицо);
Возврат Не Запрос.Выполнить().Пустой();
КонецФункции
Функция ДанныеОСтажеСотрудника(Документ)
Если Не ЗначениеЗаполнено(Документ.Сотрудник) Тогда
Возврат Неопределено;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
| ВидыСтажа.Ссылка КАК ВидСтажа,
| &ДатаНачалаСобытия КАК Период
|ПОМЕСТИТЬ ВТИсходныеДанные
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыСтажа КАК ВидыСтажа
| ПО (ВидыСтажа.КатегорияСтажа В (&КатегорииСтажа))
| И (Сотрудники.Ссылка = &Сотрудник)";
Запрос.УстановитьПараметр("Сотрудник", Документ.Сотрудник);
Запрос.УстановитьПараметр("ДатаНачалаСобытия", ДатаОкончанияРасчетаСтажа(Документ));
Запрос.УстановитьПараметр("КатегорииСтажа", КатегорииСтажаВЛисткеНетрудоспособности());
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Истина);
ОписательВТ = КадровыйУчетРасширенный.ОписательВременнойТаблицыОтборовДляВТСтажиФизическихЛиц("ВТИсходныеДанные");
ОписательВТ.ИмяПоляВидСтажа = "ВидСтажа";
КадровыйУчетРасширенный.СоздатьВТСтажиФизическихЛиц(Запрос.МенеджерВременныхТаблиц, Ложь, ОписательВТ, "ВТСтажиФизическихЛиц");
УстановитьПривилегированныйРежим(Ложь);
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(РасширенныйСтажДляБЛ.ВсегоМесяцев, 0) КАК СтажВМесяцахРасширенный,
| ЕСТЬNULL(РасширенныйСтажДляБЛ.Дней, 0) КАК СтажРасширенныйДней,
| ЕСТЬNULL(СтажДляБЛ.ВсегоМесяцев, 0) КАК СтажВМесяцах,
| ЕСТЬNULL(СтажДляБЛ.Дней, 0) КАК СтажДней,
| ВЫБОР
| КОГДА РасширенныйСтажДляБЛ.ВидСтажа ЕСТЬ НЕ NULL
| И СтажДляБЛ.ВидСтажа ЕСТЬ НЕ NULL
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ОснованияФинансированияПособияФедеральнымБюджетом.ЗачетНестраховыхПериодов)
| КОНЕЦ КАК ФинансированиеФедеральнымБюджетом,
| ВЫБОР
| КОГДА СтажДляБЛ.ФизическоеЛицо ЕСТЬ НЕ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ДляСотрудникаВведенСтраховойСтаж
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтажиФизическихЛиц КАК РасширенныйСтажДляБЛ
| ПО Сотрудники.ФизическоеЛицо = РасширенныйСтажДляБЛ.ФизическоеЛицо
| И (РасширенныйСтажДляБЛ.ВидСтажа.КатегорияСтажа = ЗНАЧЕНИЕ(Перечисление.КатегорииСтажа.РасширенныйСтраховой))
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСтажиФизическихЛиц КАК СтажДляБЛ
| ПО Сотрудники.ФизическоеЛицо = СтажДляБЛ.ФизическоеЛицо
| И (СтажДляБЛ.ВидСтажа.КатегорияСтажа = ЗНАЧЕНИЕ(Перечисление.КатегорииСтажа.Страховой))
|ГДЕ
| Сотрудники.Ссылка = &Сотрудник";
Запрос.УстановитьПараметр("Сотрудник", Документ.Сотрудник);
ДанныеОСтажеСотрудника = Запрос.Выполнить().Выбрать();
ДанныеОСтажеСотрудника.Следующий();
Возврат ДанныеОСтажеСотрудника;
КонецФункции
Функция ДатаОкончанияРасчетаСтажа(Документ) Экспорт
Если ЗначениеЗаполнено(Документ.ДатаНачалаСобытия) Тогда
Возврат НачалоДня(Документ.ДатаНачалаСобытия - 86400);
Иначе
Возврат НачалоДня(ТекущаяДатаСеанса() - 86400);
КонецЕсли;
КонецФункции
Процедура УстановитьФинансированиеФедеральнымБюджетомНестраховыхПериодов(Документ) Экспорт
ОснованияФинансирования = Перечисления.ОснованияФинансированияПособияФедеральнымБюджетом;
Если Не ЗначениеЗаполнено(Документ.ФинансированиеФедеральнымБюджетом)
Или Документ.ФинансированиеФедеральнымБюджетом = ОснованияФинансирования.ЗачетНестраховыхПериодов Тогда
МесяцевСтажаСотрудника = Документ.СтажЛет * 12 + Документ.СтажМесяцев;
МесяцевСтажаРасширенныйСотрудника = Документ.СтажРасширенныйЛет * 12 + Документ.СтажРасширенныйМесяцев;
Если ЗначениеЗаполнено(МесяцевСтажаСотрудника)
И ЗначениеЗаполнено(МесяцевСтажаРасширенныйСотрудника)
И МесяцевСтажаСотрудника < МесяцевСтажаРасширенныйСотрудника Тогда
Документ.ФинансированиеФедеральнымБюджетом = ОснованияФинансирования.ЗачетНестраховыхПериодов;
Документ.ПрименятьЛьготыПриНачисленииПособия = Истина;
Иначе
Документ.ФинансированиеФедеральнымБюджетом = ОснованияФинансирования.ПустаяСсылка();
Документ.ПрименятьЛьготыПриНачисленииПособия = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СреднийЗаработок
Процедура ОчиститьСреднийЗаработок(Документ) Экспорт
Документ.СреднийЗаработокСЭДО.Очистить();
Документ.СреднийЗаработокФСС.Очистить();
Документ.ОтработанноеВремяДляСреднегоФСС.Очистить();
Документ.СреднийЗаработокДанныеСтрахователей.Очистить();
Документ.ДенежноеСодержание.Очистить();
Документ.ДенежноеСодержаниеФактическиеНачисления.Очистить();
Документ.СреднийДневнойЗаработок = 0;
Документ.СреднийДневнойЗаработокРК = 0;
Документ.СреднийДневнойЗаработокСН = 0;
Документ.СреднийЗаработокБольничныйЗаСчетРаботодателя = 0;
Документ.СреднийЗаработокБольничныйЗаСчетРаботодателяРК = 0;
Документ.СреднийЗаработокБольничныйЗаСчетРаботодателяСН = 0;
Документ.СреднийПоДаннымОрганизации = 0;
Документ.СреднийПоДаннымОрганизацииРК = 0;
Документ.СреднийПоДаннымОрганизацииСН = 0;
Документ.СреднийПоДаннымУчетаФонда = Неопределено;
Документ.СреднийИзВходящегоЗапросаФонда = Неопределено;
Документ.СреднийДоплатыПоДаннымОрганизации = Неопределено;
Документ.ПервыйРасчетныйГодЗаработок = Неопределено;
Документ.ПервыйРасчетныйГодОснование = Неопределено;
Документ.ВторойРасчетныйГодЗаработок = Неопределено;
Документ.ВторойРасчетныйГодОснование = Неопределено;
КонецПроцедуры
Функция СреднийЗаполнен(Документ) Экспорт
Возврат Документ.СреднийЗаработокСЭДО.Количество() > 0
Или Документ.СреднийЗаработокФСС.Количество() > 0
Или Документ.ОтработанноеВремяДляСреднегоФСС.Количество() > 0
Или Документ.СреднийЗаработокДанныеСтрахователей.Количество() > 0
Или Документ.ДенежноеСодержание.Количество() > 0
Или Документ.ДенежноеСодержаниеФактическиеНачисления.Количество() > 0
Или ЗначениеЗаполнено(Документ.СреднийДневнойЗаработок)
Или ЗначениеЗаполнено(Документ.СреднийЗаработокБольничныйЗаСчетРаботодателя)
Или ЗначениеЗаполнено(Документ.СреднийПоДаннымОрганизации)
Или ЗначениеЗаполнено(Документ.СреднийПоДаннымУчетаФонда)
Или ЗначениеЗаполнено(Документ.СреднийИзВходящегоЗапросаФонда)
Или ЗначениеЗаполнено(Документ.СреднийДоплатыПоДаннымОрганизации)
Или ЗначениеЗаполнено(Документ.ПервыйРасчетныйГодЗаработок)
Или ЗначениеЗаполнено(Документ.ВторойРасчетныйГодЗаработок);
КонецФункции
Процедура ОчиститьПараметрыСреднего(Документ) Экспорт
Документ.ФиксПериодРасчетаСреднегоЗаработка = Неопределено;
Документ.ПериодРасчетаСреднегоЗаработкаНачало = Неопределено;
Документ.ПериодРасчетаСреднегоЗаработкаОкончание = Неопределено;
Документ.ПериодРасчетаСреднегоЗаработкаПервыйГод = Неопределено;
Документ.ПериодРасчетаСреднегоЗаработкаВторойГод = Неопределено;
Документ.ИсточникСреднего = Неопределено;
КонецПроцедуры
Процедура ЗаполнитьСреднийЗаработок(Документ, ПараметрыРасчета, РезультатРасчета) Экспорт
Если Не ПараметрыРасчета.ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если Не ПараметрыРасчета.ЗаполнитьСреднийЗаработок Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Документ.Сотрудник) Или Не ЗначениеЗаполнено(Документ.ДатаНачалаСобытия) Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если Не ЗначениеЗаполнено(Документ.ПериодРасчетаСреднегоЗаработкаНачало)
Или Не ЗначениеЗаполнено(Документ.ПериодРасчетаСреднегоЗаработкаОкончание) Тогда
ЗаполнитьПериодРасчетаСреднегоЗаработка(Документ);
КонецЕсли;
ПараметрыПолучения = УчетПособийСоциальногоСтрахованияРасширенный.СтруктураПараметровПолученияСреднегоЗаработка();
ПараметрыПолучения.ФизическоеЛицо = Документ.ФизическоеЛицо;
ПараметрыПолучения.Сотрудник = Документ.Сотрудник;
ПараметрыПолучения.ГоловнаяОрганизация = Документ.ГоловнаяОрганизация;
ПараметрыПолучения.НачалоПериода = Документ.ПериодРасчетаСреднегоЗаработкаНачало;
ПараметрыПолучения.ОкончаниеПериода = Документ.ПериодРасчетаСреднегоЗаработкаОкончание;
ПараметрыПолучения.ПорядокРасчета = ПорядокРасчетаСреднегоЗаработкаФСС(Документ);
ПараметрыПолучения.НомерЛН = Документ.НомерЛисткаНетрудоспособности;
Результат = УчетПособийСоциальногоСтрахованияРасширенный.СтруктураРезультатаПолученияСреднегоЗаработка();
Результат.СреднийЗаработокСЭДО = Документ.СреднийЗаработокСЭДО;
Результат.ДанныеОНачислениях = Документ.СреднийЗаработокФСС;
Результат.ДанныеОВремени = Документ.ОтработанноеВремяДляСреднегоФСС;
Результат.ДанныеСтрахователей = Документ.СреднийЗаработокДанныеСтрахователей;
Результат.ПериодыОтсутствий = Документ.ПериодыБолезниУходаЗаДетьми;
УчетПособийСоциальногоСтрахованияРасширенный.ПолучитьСреднийЗаработокСотрудника(ПараметрыПолучения, Результат);
Если ПараметрыРасчета.ЗаполнитьФлажокУчитыватьЗаработокПредыдущихСтрахователей Тогда
Документ.УчитыватьЗаработокПредыдущихСтрахователей = УчитыватьЗаработокПредыдущихСтрахователей(Документ);
РезультатРасчета.ФлажокУчитыватьЗаработокПредыдущихСтрахователейЗаполнен = Истина;
КонецЕсли;
Если Документ.ДоплачиватьДоДенежногоСодержания
И ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
СтруктураОбъекта = СтруктураРасчетаДенежногоСодержания(Документ,
ПараметрыРасчета.ИдентификаторФормы,
ПараметрыРасчета.НазначенияРасчетаДенежногоСодержания);
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
Модуль.ОбновитьДанныеСохраняемогоДенежногоСодержанияДокумента(СтруктураОбъекта, , , Документ);
РезультатРасчета.НазначенияРасчетаДенежногоСодержания = СтруктураОбъекта.НазначенияРасчетаДенежногоСодержания;
КонецЕсли;
РассчитатьСреднийЗаработок(Документ);
РезультатРасчета.СреднийЗаработокИзменен = Истина;
КонецПроцедуры
Функция УчитыватьЗаработокПредыдущихСтрахователей(Документ) Экспорт
Если Не ДоступенФлажокУчитыватьЗаработокПредыдущихСтрахователей(Документ) Тогда
Флажок = Ложь;
Иначе
Флажок = Неопределено;
Фильтр = Новый Структура("ИсточникСреднего", Перечисления.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда);
Копия = Документ.СреднийЗаработокСЭДО.Выгрузить(Фильтр, "ВидЗаработка");
Массив = КоллекцииБЗК.УникальныеЗначенияКолонки(Копия, "ВидЗаработка");
Если Массив.Количество() = 1 Тогда
ВидЗаработка = Массив[0];
Если ВидЗаработка = Перечисления.СпособыУчетаГодовогоЗаработкаСФР.ВсеСтрахователи Тогда
Флажок = Истина;
ИначеЕсли ВидЗаработка = Перечисления.СпособыУчетаГодовогоЗаработкаСФР.ТекущийСтрахователь Тогда
Флажок = Ложь;
КонецЕсли;
КонецЕсли;
Если Флажок = Неопределено
И ЗначениеЗаполнено(Документ.НомерЛисткаНетрудоспособности)
И ЗначениеЗаполнено(Документ.ГоловнаяОрганизация) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Шапка.МетодНазначенияИВыплатыПособия КАК Метод
|ИЗ
| Документ.ДанныеСФРДляРасчетаПособия КАК Шапка
|ГДЕ
| Шапка.НомерЛН = &НомерЛН
| И Шапка.ГоловнаяОрганизация = &ГоловнаяОрганизация";
Запрос.УстановитьПараметр("НомерЛН", Документ.НомерЛисткаНетрудоспособности);
Запрос.УстановитьПараметр("ГоловнаяОрганизация", Документ.ГоловнаяОрганизация);
УстановитьПривилегированныйРежим(Истина);
Методы = КоллекцииБЗК.УникальныеЗначенияКолонки(Запрос.Выполнить().Выгрузить(), "Метод");
УстановитьПривилегированныйРежим(Ложь);
Для Каждого Метод Из Методы Цикл
НовоеЗначение = Перечисления.МетодыНазначенияИВыплатыПособийСФР.УчитыватьЗаработокДругихСтрахователей(Метод);
Если НовоеЗначение <> Неопределено Тогда
Если Флажок = Неопределено Тогда
Флажок = НовоеЗначение;
ИначеЕсли Флажок <> НовоеЗначение Тогда
Флажок = Неопределено;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если Флажок = Неопределено Тогда
Флажок = КадровыйУчетРасширенный.УчитыватьЗаработокПредыдущихСтрахователей(
Документ.ФизическоеЛицо,
Документ.Организация);
КонецЕсли;
Возврат Флажок;
КонецФункции
Функция ДоступенФлажокУчитыватьЗаработокПредыдущихСтрахователей(Документ) Экспорт
Возврат Не Документ.РасчетПоПравилам2010Года
Или Документ.ПричинаНетрудоспособности <> Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам;
КонецФункции
Процедура РассчитатьСреднийЗаработок(Документ) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если Документ.ДоплачиватьДоДенежногоСодержания Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
Модуль.РассчитатьСохраняемоеДенежноеСодержаниеПоОбъекту(Документ, ОписаниеДокументаРасчета());
КонецЕсли;
КонецЕсли;
ШаблонПараметров = ПараметрыРасчетаСреднегоДневногоЗаработкаФСС(Документ);
ШаблонПараметровСтрокой = ОбщегоНазначения.ЗначениеВСтрокуXML(ШаблонПараметров);
ПараметрыРасчетаДоплаты = ОбщегоНазначения.ЗначениеИзСтрокиXML(ШаблонПараметровСтрокой);
ПараметрыРасчетаДоплаты.ПрименятьПредельнуюВеличину = Ложь;
ПараметрыРасчетаДоплаты.ЭтоДоплатаДоСреднего = Истина;
ПараметрыРасчетаДоплаты.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетОрганизации;
Документ.СреднийДоплатыПоДаннымОрганизации = УчетПособийСоциальногоСтрахования.СреднийДневнойЗаработокФСС(ПараметрыРасчетаДоплаты);
Параметры1 = ОбщегоНазначения.ЗначениеИзСтрокиXML(ШаблонПараметровСтрокой);
Параметры2 = ОбщегоНазначения.ЗначениеИзСтрокиXML(ШаблонПараметровСтрокой);
Параметры3 = ОбщегоНазначения.ЗначениеИзСтрокиXML(ШаблонПараметровСтрокой);
Параметры1.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетОрганизации;
Параметры2.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетФонда;
Параметры3.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда;
Параметры1.ПолучатьДанныеПоГодам = Истина;
Параметры2.ПолучатьДанныеПоГодам = Истина;
Параметры3.ПолучатьДанныеПоГодам = Истина;
СреднийЗаработокФСС = УчетПособийСоциальногоСтрахования.СреднийЗаработокФСС(Параметры1);
Документ.СреднийПоДаннымОрганизации = СреднийЗаработокФСС.Общий;
Документ.СреднийПоДаннымОрганизацииРК = СреднийЗаработокФСС.РК;
Документ.СреднийПоДаннымОрганизацииСН = СреднийЗаработокФСС.СН;
Документ.СреднийПоДаннымУчетаФонда = УчетПособийСоциальногоСтрахования.СреднийДневнойЗаработокФСС(Параметры2);
Документ.СреднийИзВходящегоЗапросаФонда = УчетПособийСоциальногоСтрахования.СреднийДневнойЗаработокФСС(Параметры3);
Если Не ЗначениеЗаполнено(Документ.ИсточникСреднего)
И Документ.ПериодРасчетаСреднегоЗаработкаПервыйГод >= СЭДОФСС.ГодНачалаСведенийОСреднемЗаработкеСФР() Тогда
Документ.ИсточникСреднего = СЭДОФСС.ИсточникСреднегоПоУмолчанию(
Документ.Организация,
Документ.ФизическоеЛицо,
Документ.ДатаНачалаСобытия,
Документ.УчитыватьЗаработокПредыдущихСтрахователей);
Если Не ЗначениеЗаполнено(Документ.ИсточникСреднего) Тогда
Максимальный = Макс(
Документ.СреднийПоДаннымОрганизации,
Документ.СреднийИзВходящегоЗапросаФонда,
Документ.СреднийПоДаннымУчетаФонда);
Если Максимальный = Документ.СреднийПоДаннымОрганизации Тогда
Документ.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетОрганизации;
ИначеЕсли Максимальный = Документ.СреднийИзВходящегоЗапросаФонда Тогда
Документ.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда;
Иначе
Документ.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетФонда;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПараметрыРасчета = ?(Параметры1.ИсточникСреднего = Документ.ИсточникСреднего, Параметры1,
?(Параметры2.ИсточникСреднего = Документ.ИсточникСреднего, Параметры2, Параметры3));
ЗаполнитьЗначенияСвойств(Документ, ИнформацияОВыбранномСреднемЗаработкеСЭДО(Документ, ПараметрыРасчета));
Если Документ.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетФонда Тогда
Документ.СреднийДневнойЗаработок = Документ.СреднийПоДаннымУчетаФонда;
ИначеЕсли Документ.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда Тогда
Документ.СреднийДневнойЗаработок = Документ.СреднийИзВходящегоЗапросаФонда;
Иначе
Документ.СреднийДневнойЗаработок = Документ.СреднийПоДаннымОрганизации;
КонецЕсли;
Если Окр(Документ.СреднийДневнойЗаработок, 0) = Окр(Документ.СреднийПоДаннымОрганизации, 0) Тогда
Документ.СреднийДневнойЗаработокРК = Документ.СреднийПоДаннымОрганизацииРК;
Документ.СреднийДневнойЗаработокСН = Документ.СреднийПоДаннымОрганизацииСН;
Иначе
Документ.СреднийДневнойЗаработокРК = 0;
Документ.СреднийДневнойЗаработокСН = 0;
КонецЕсли;
Документ.МинимальныйСреднедневнойЗаработок = УчетПособийСоциальногоСтрахования.МинимальныйСреднедневнойЗаработокФСС(ПараметрыРасчета);
Если ПолучитьФункциональнуюОпцию("РассчитыватьОтдельноСреднийЗаработокФССДляБольничногоЗаСчетРаботодателя") Тогда
ДанныеНачислений = Документ.СреднийЗаработокФСС.Выгрузить();
Отбор = Новый Структура("СпособУчета", Перечисления.УчетНачисленийВСреднемЗаработкеФСС.НеУчитыватьПриОплатеБольничногоЗаСчетРаботодателя);
СтрокиКУдалению = ДанныеНачислений.НайтиСтроки(Отбор);
Для Каждого СтрокаКУдалению Из СтрокиКУдалению Цикл
ДанныеНачислений.Удалить(СтрокаКУдалению);
КонецЦикла;
ПараметрыРасчета.ДанныеНачислений = ДанныеНачислений;
Документ.СреднийЗаработокБольничныйЗаСчетРаботодателя = УчетПособийСоциальногоСтрахования.СреднийДневнойЗаработокФСС(ПараметрыРасчета);
КонецЕсли;
КонецПроцедуры
Функция ПараметрыРасчетаСреднегоДневногоЗаработкаФСС(Документ) Экспорт
ПараметрыРасчета = УчетПособийСоциальногоСтрахования.ПараметрыРасчетаСреднегоДневногоЗаработкаФССПоДокументу(Документ);
ПараметрыРасчета.ИспользоватьДниБолезниУходаЗаДетьми = ИспользоватьДниБолезниУходаЗаДетьми(Документ);
ПараметрыРасчета.УчитыватьДниПриостановленияТД = УчитыватьДниПриостановленияТД(Документ);
ПараметрыРасчета.РайонныйКоэффициентРФ = Документ.РайонныйКоэффициентРФНаНачалоСобытия;
ПараметрыРасчета.ПорядокРасчета = ПорядокРасчетаСреднегоЗаработкаФСС(Документ);
ПараметрыРасчета.ПрименятьПредельнуюВеличину = Не ЭтоНСПЗ(Документ);
Если ТипЗнч(Документ) = Тип("ДокументОбъект.БольничныйЛист") Тогда
ПараметрыРасчета.ДанныеНачислений = Документ.СреднийЗаработокФСС.Выгрузить();
ПараметрыРасчета.ДанныеВремени = Документ.ОтработанноеВремяДляСреднегоФСС.Выгрузить();
ПараметрыРасчета.ДанныеСтрахователей = Документ.СреднийЗаработокДанныеСтрахователей.Выгрузить();
ПараметрыРасчета.ПриостановленияТрудовыхДоговоров = Документ.ПриостановленияТрудовыхДоговоров.Выгрузить();
ПараметрыРасчета.СреднийЗаработокСЭДО = Документ.СреднийЗаработокСЭДО.Выгрузить();
Иначе
ПараметрыРасчета.ДанныеНачислений = Документ.СреднийЗаработокФСС;
ПараметрыРасчета.ДанныеВремени = Документ.ОтработанноеВремяДляСреднегоФСС;
ПараметрыРасчета.ДанныеСтрахователей = Документ.СреднийЗаработокДанныеСтрахователей;
ПараметрыРасчета.ПриостановленияТрудовыхДоговоров = Документ.ПриостановленияТрудовыхДоговоров;
ПараметрыРасчета.СреднийЗаработокСЭДО = Документ.СреднийЗаработокСЭДО;
КонецЕсли;
Возврат ПараметрыРасчета;
КонецФункции
Функция ИнформацияОВыбранномСреднемЗаработкеСЭДО(Документ, ПараметрыРасчета) Экспорт
Результат = Новый Структура;
Результат.Вставить("ПервыйРасчетныйГодЗаработок", 0);
Результат.Вставить("ПервыйРасчетныйГодОснование", Неопределено);
Результат.Вставить("ВторойРасчетныйГодЗаработок", 0);
Результат.Вставить("ВторойРасчетныйГодОснование", Неопределено);
ДанныеПоГоду = ПараметрыРасчета.ДанныеПоГодам[Документ.ПериодРасчетаСреднегоЗаработкаПервыйГод];
Если ДанныеПоГоду <> Неопределено Тогда
Результат.ПервыйРасчетныйГодЗаработок = ДанныеПоГоду.УчтенныйЗаработок;
Результат.ПервыйРасчетныйГодОснование = ДанныеПоГоду.Основание;
КонецЕсли;
ДанныеПоГоду = ПараметрыРасчета.ДанныеПоГодам[Документ.ПериодРасчетаСреднегоЗаработкаВторойГод];
Если ДанныеПоГоду <> Неопределено Тогда
Результат.ВторойРасчетныйГодЗаработок = ДанныеПоГоду.УчтенныйЗаработок;
Результат.ВторойРасчетныйГодОснование = ДанныеПоГоду.Основание;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция СтруктураРасчетаДенежногоСодержания(Документ, УникальныйИдентификаторФормы, НазначенияРасчетаДС) Экспорт
ОбъектСтруктура = Новый Структура;
ОбъектСтруктура.Вставить("Ссылка", Документ.Ссылка);
ОбъектСтруктура.Вставить("Сотрудник", Документ.Сотрудник);
ОбъектСтруктура.Вставить("Организация", Документ.Организация);
ОбъектСтруктура.Вставить("ПериодРегистрации", Документ.ПериодРегистрации);
ОбъектСтруктура.Вставить("ДатаНачалаСобытия", Документ.ДатаНачалаСобытия);
ОбъектСтруктура.Вставить("ДенежноеСодержание", Документ.ДенежноеСодержание);
ОбъектСтруктура.Вставить("ДенежноеСодержаниеФактическиеНачисления", Документ.ДенежноеСодержаниеФактическиеНачисления);
ОбъектСтруктура.Вставить("КоэффициентыРаспределенияДенежногоСодержания", Документ.КоэффициентыРаспределенияДенежногоСодержания);
ОбъектСтруктура.Вставить("ПериодРасчетаСохраняемогоСодержанияНачало",
Документ.ПериодРасчетаСреднегоЗаработкаНачало);
ОбъектСтруктура.Вставить("ПериодРасчетаСохраняемогоСодержанияОкончание",
Документ.ПериодРасчетаСреднегоЗаработкаОкончание);
ОбъектСтруктура.Вставить("ФиксПериодРасчетаСохраняемогоСодержания", Документ.ФиксПериодРасчетаСреднегоЗаработка);
ОбъектСтруктура.Вставить("СохраняемоеДенежноеСодержание", Документ.СохраняемоеДенежноеСодержание);
ОбъектСтруктура.Вставить("НазначенияРасчетаДенежногоСодержания", НазначенияРасчетаДС);
ОбъектСтруктура.Вставить("УникальныйИдентификатор", УникальныйИдентификаторФормы);
ОбъектСтруктура.Вставить("ПериодРасчета", Документ.ПериодРегистрации);
ОбъектСтруктура.Вставить("Показатели", Документ.Показатели);
Возврат ОбъектСтруктура;
КонецФункции
Функция ВариантДоплаты(Документ) Экспорт
НастройкиРасчетаЗарплаты = РасчетЗарплатыРасширенный.НастройкиРасчетаЗарплаты();
Если Документ.СотрудникСлужащий
И ЗначениеЗаполнено(Документ.Сотрудник)
И ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба")
И ПолучитьФункциональнуюОпцию("ИспользоватьРасчетСохраняемогоДенежногоСодержания")
И НастройкиРасчетаЗарплаты.ИспользоватьДоплатуДоСохраняемогоДенежногоСодержанияЗаДниБолезни Тогда
Возврат 2;
ИначеЕсли НастройкиРасчетаЗарплаты.ИспользоватьДоплатуЗаДниБолезни Тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
Процедура ОтключитьНеприменимыеВариантыДоплаты(Документ, ВариантДоплаты = Неопределено) Экспорт
Если ВариантДоплаты = Неопределено Тогда
ВариантДоплаты = ВариантДоплаты(Документ);
КонецЕсли;
Если ВариантДоплаты <> 1 Тогда
Документ.ДоплачиватьДоСреднегоЗаработка = Ложь;
Документ.ПроцентДоплатыЗаДниНетрудоспособности = 0;
КонецЕсли;
Если ВариантДоплаты <> 2 Тогда
Документ.ДоплачиватьДоДенежногоСодержания = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура ОтключитьФлажкиПриНеобходимости(Документ) Экспорт
Если Не Документ.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
Документ.ОсвобождатьСтавку = Ложь;
КонецЕсли;
Если Не ОбменЛисткамиНетрудоспособностиФСС.ЭтоКарантинныйЭЛН(
Документ.ПричинаНетрудоспособности,
Документ.НомерЛисткаНетрудоспособности) Тогда
Документ.ЭЛНКарантинПоКоронавирусу = Ложь;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПересеченияСОтпусками
Функция КонтролироватьПересеченияСОтпусками(Больничный) Экспорт
Возврат Больничный.НеИспользуетсяСторнированиеОтпуска
И Не ПолучитьФункциональнуюОпцию("СторнироватьОтпускВБольничномПриПересеченииПериодов")
И Перечисления.ПричиныНетрудоспособности.ПричиныДающиеПравоНаПродлениеОтпуска().Найти(
Больничный.ПричинаНетрудоспособности) <> Неопределено;
КонецФункции
Функция ПересекающиесяОтпуска(Больничный) Экспорт
Если Не КонтролироватьПересеченияСОтпусками(Больничный) Тогда
Возврат Неопределено;
КонецЕсли;
ПересекающиесяОтпуска = Новый ТаблицаЗначений;
ПересекающиесяОтпуска.Колонки.Добавить("Ссылка");
ПересекающиесяОтпуска.Колонки.Добавить("ТребуетИсправления", Новый ОписаниеТипов("Булево"));
ПересекающиесяОтпуска.Колонки.Добавить("ТребуетПроведенияИлиРасчета", Новый ОписаниеТипов("Булево"));
ПересекающиесяОтпуска.Колонки.Добавить("УчитываетБольничныйПроведенРассчитан", Новый ОписаниеТипов("Булево"));
Отборы = Новый Массив;
ОтборыДляФПД = Новый Массив;
ВидыОтпусков = Справочники.ВидыОтпусков.ВидыПродлеваемыхОтпусков();
КатегорииНачислений = Новый Массив;
КатегорииНачислений.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДенежноеСодержаниеНаПериодОтпуска);
КатегорииНачислений.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаОтпуска);
КатегорииНачислений.Добавить(Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОтпускБезОплаты);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "ФизическоеЛицо", "В", Больничный.ФизическоеЛицо);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "ПериодДействия", ">=", НачалоМесяца(Больничный.ДатаНачала));
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "ПериодДействия", "<=", НачалоМесяца(Больничный.ДатаОкончания));
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "ВидРасчета.КатегорияНачисленияИлиНеоплаченногоВремени", "В", КатегорииНачислений);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "ВидРасчета.ВидОтпуска", "В", ВидыОтпусков);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(Отборы, "Организация", "В", Больничный.Организация);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ОтборыДляФПД, "ПериодДействияНачало", "<=", Больничный.ДатаОкончания);
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ОтборыДляФПД, "ПериодДействияКонец", ">=", Больничный.ДатаНачала);
ТаблицаПересекающихсяОтпусков = РегистрыРасчета.Начисления.РезультирующийПериодДействия(Отборы, ОтборыДляФПД);
ОтпускаТребующиеИсправления = КоллекцииБЗК.УникальныеЗначенияКолонки(ТаблицаПересекающихсяОтпусков, "Регистратор");
Для Каждого Отпуск Из ОтпускаТребующиеИсправления Цикл
СтрокаТаблицы = ПересекающиесяОтпуска.Добавить();
СтрокаТаблицы.Ссылка = Отпуск;
СтрокаТаблицы.ТребуетИсправления = Истина;
КонецЦикла;
ПроверяемыеБольничные = Новый Массив;
Если ЗначениеЗаполнено(Больничный.ИсправленныйДокумент) Тогда
ПроверяемыеБольничные = ИсправлениеДокументовЗарплатаКадры.ПолучитьДокументыЦепочкиИсправлений(Больничный.ИсправленныйДокумент);
ПроверяемыеБольничные.Добавить(Больничный.ИсправленныйДокумент);
КонецЕсли;
Если ЗначениеЗаполнено(Больничный.Ссылка) Тогда
ПроверяемыеБольничные.Добавить(Больничный.Ссылка);
КонецЕсли;
ОтпускаПриостановленныеБольничными = ОтпускаПриостановленныеБольничными(ПроверяемыеБольничные);
Для Каждого Отпуск Из ОтпускаПриостановленныеБольничными Цикл
Если Не Отпуск.ПроведенИРассчитан И ЗначениеЗаполнено(Отпуск.ИсправленныйДокумент) Тогда
СтрокаТаблицыИсправленногоОтпуска = ПересекающиесяОтпуска.Найти(Отпуск.ИсправленныйДокумент, "Ссылка");
Если СтрокаТаблицыИсправленногоОтпуска <> Неопределено Тогда
СтрокаТаблицыИсправленногоОтпуска.ТребуетИсправления = Ложь;
КонецЕсли;
КонецЕсли;
СтрокаТаблицы = ПересекающиесяОтпуска.Найти(Отпуск.Ссылка, "Ссылка");
Если СтрокаТаблицы = Неопределено Тогда
СтрокаТаблицы = ПересекающиесяОтпуска.Добавить();
СтрокаТаблицы.Ссылка = Отпуск.Ссылка;
Если Отпуск.ПроведенИРассчитан Тогда
СтрокаТаблицы.УчитываетБольничныйПроведенРассчитан = Истина;
Иначе
СтрокаТаблицы.ТребуетПроведенияИлиРасчета = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ПересекающиесяОтпуска;
КонецФункции
Процедура ИсключитьОтпускИзПерерасчетов(Документ, МенеджерРасчета)
ИсключаемыеНачисления = ИсключаемыеНачисленияОтпусков();
ИндексСтроки = Документ.НачисленияПерерасчет.Количество()-1;
Пока ИндексСтроки >= 0 Цикл
Если ИсключаемыеНачисления.Найти(Документ.НачисленияПерерасчет[ИндексСтроки].Начисление) <> Неопределено Тогда
Документ.НачисленияПерерасчет.Удалить(ИндексСтроки);
КонецЕсли;
ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;
КонецПроцедуры
Функция ИсключаемыеНачисленияОтпусков()
ВидыПродлеваемыхОтпусков = Справочники.ВидыОтпусков.ВидыПродлеваемыхОтпусков();
ВидОтпускаЧАЭС = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускПострадавшимВАварииЧАЭС");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.Ссылка КАК Ссылка
|ИЗ
| ПланВидовРасчета.Начисления КАК Начисления
|ГДЕ
| (Начисления.ВидОтпуска В (&ВидыПродлеваемыхОтпусков)
| И Начисления.КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаОтпуска)
| ИЛИ Начисления.ВидОтпуска = &ВидОтпускаЧАЭС)";
Запрос.УстановитьПараметр("ВидыПродлеваемыхОтпусков", ВидыПродлеваемыхОтпусков);
Запрос.УстановитьПараметр("ВидОтпускаЧАЭС", ВидОтпускаЧАЭС);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
КонецФункции
#КонецОбласти
#Область ПриостановленияТД
Функция УчитыватьДниПриостановленияТД(Документ) Экспорт
Возврат Документ.ПричинаНетрудоспособности <> Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам
И ЗначениеЗаполнено(Документ.ПричинаНетрудоспособности);
КонецФункции
Функция ЗаполнитьПриостановленияТД(Документ) Экспорт
Если Не ЗначениеЗаполнено(Документ.ДатаНачалаСобытия) Тогда
Возврат Ложь;
КонецЕсли;
Если Не ЗначениеЗаполнено(Документ.ГоловнаяОрганизация) Тогда
Возврат Ложь;
КонецЕсли;
Если Не ЗначениеЗаполнено(Документ.ФизическоеЛицо) Тогда
Возврат Ложь;
КонецЕсли;
Если Не ЗначениеЗаполнено(Документ.ПериодРасчетаСреднегоЗаработкаНачало)
Или Не ЗначениеЗаполнено(Документ.ПериодРасчетаСреднегоЗаработкаОкончание) Тогда
ЗаполнитьПериодРасчетаСреднегоЗаработка(Документ);
КонецЕсли;
ДанныеУчета = УчетПособийСоциальногоСтрахования.ДанныеУчетаПриостановленийТД(Документ);
Документ.ПриостановленияТрудовыхДоговоров.Загрузить(ДанныеУчета.ПриостановленияТД);
Документ.НачалоВПериодПриостановленияТД = ДанныеУчета.НачалоВПериодПриостановленияТД;
Возврат Истина;
КонецФункции
Функция РезультатПроверкиПриостановленийТД(Документ, ИзмененияРазрешены) Экспорт
ПриостановленияТД = Документ.ПриостановленияТрудовыхДоговоров.Выгрузить();
ПриостановленияТД.Колонки.Добавить("Год", Новый ОписаниеТипов("Число"));
ПриостановленияТД.Колонки.Добавить("Ошибка", Новый ОписаниеТипов("Булево"));
ПриостановленияТД.Колонки.Добавить("ТекстОшибки", Новый ОписаниеТипов("Строка"));
УчетПособийСоциальногоСтрахования.ПроверитьПриостановленияТрудовыхДоговоров(
Документ,
ПриостановленияТД,
ИзмененияРазрешены);
Документ.ПриостановленияТрудовыхДоговоров.Загрузить(ПриостановленияТД);
Возврат ПриостановленияТД;
КонецФункции
#КонецОбласти
#Область Расчет
Функция ПараметрыРасчета() Экспорт
ПараметрыРасчета = Новый Структура;
ПараметрыРасчета.Вставить("ВыводитьСообщения", Ложь);
ПараметрыРасчета.Вставить("ИспользуетсяРасчетЗарплаты", Неопределено);
ПараметрыРасчета.Вставить("Кэш", Неопределено);
ПараметрыРасчета.Вставить("ИдентификаторФормы", Неопределено);
ПараметрыРасчета.Вставить("НазначенияРасчетаДенежногоСодержания", Неопределено);
ПараметрыРасчета.Вставить("ОчиститьСреднийЗаработок", Ложь);
ПараметрыРасчета.Вставить("ЗаполнитьСреднийЗаработок", Истина);
ПараметрыРасчета.Вставить("ЗаполнитьФлажокУчитыватьЗаработокПредыдущихСтрахователей", Истина);
ПараметрыРасчета.Вставить("РасчетУтвержден", Неопределено);
ПараметрыРасчета.Вставить("ОчищатьДенежноеСодержание", Истина);
Возврат ПараметрыРасчета;
КонецФункции
Функция РезультатРасчета() Экспорт
РезультатРасчета = Новый Структура;
РезультатРасчета.Вставить("Кэш", Неопределено);
РезультатРасчета.Вставить("Успех", Ложь);
РезультатРасчета.Вставить("ПричинаОтказа", "");
РезультатРасчета.Вставить("ОшибкиЗаполнения", Новый Массив);
РезультатРасчета.Вставить("ПересекающиесяОтпуска", Неопределено);
РезультатРасчета.Вставить("СреднийЗаработокИзменен", Ложь);
РезультатРасчета.Вставить("ДоступенФлажокРассчитатьЗарплату", Неопределено);
РезультатРасчета.Вставить("РассчитатьЗарплатуИзменен", Ложь);
РезультатРасчета.Вставить("ФлажокУчитыватьЗаработокПредыдущихСтрахователейЗаполнен", Истина);
РезультатРасчета.Вставить("НазначенияРасчетаДенежногоСодержания", Неопределено);
Возврат РезультатРасчета;
КонецФункции
Процедура ОчиститьРассчитанныеДанные(Документ, ПерезаполнитьНачисления = Истина, ОчищатьДенежноеСодержание = Истина) Экспорт
Если ПерезаполнитьНачисления Тогда
Документ.Начисления.Очистить();
Документ.НачисленияПерерасчет.Очистить();
Документ.НачисленияПерерасчетНулевыеСторно.Очистить();
Документ.УправленческиеНачисления.Очистить();
Документ.РаспределениеПоТерриториямУсловиямТруда.Очистить();
Если ОчищатьДенежноеСодержание Тогда
Документ.Показатели.Очистить();
Иначе
Показателей = Документ.Показатели.Количество();
Для Сч = 1 По Показателей Цикл
СтрокаПоказателя = Документ.Показатели[Показателей-Сч];
Если Документ.ДенежноеСодержание.Найти(СтрокаПоказателя.ИдентификаторСтрокиВидаРасчета,"ИдентификаторСтрокиВидаРасчета") = Неопределено Тогда
Документ.Показатели.Удалить(СтрокаПоказателя);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Документ.ПогашениеЗаймов.Очистить();
КонецЕсли;
Документ.Удержания.Очистить();
Документ.НДФЛ.Очистить();
Документ.КорректировкиВыплаты.Очистить();
Документ.ПримененныеВычетыНаДетейИИмущественные.Очистить();
КонецПроцедуры
Функция ЭтоНСПЗ(Документ) Экспорт
Возврат Документ.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ТравмаНаПроизводстве
Или Документ.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.Профзаболевание;
КонецФункции
Функция ДоступенФлажокРассчитатьЗарплату(Документ, Кэш) Экспорт
Возврат Не Документ.ЯвляетсяПродолжениемБолезни
И Документ.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам
И Документ.ДатаНачалаСобытия > ПериодРегистрацииИсправленногоДокумента(Документ, Кэш)
И РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(Документ.ПорядокВыплаты);
КонецФункции
Функция ПараметрыИсправляемогоДокументаСКэшем(Документ, Кэш) Экспорт
Если ЗначениеЗаполнено(Документ.ИсправленныйДокумент) Тогда
ПараметрыИсправляемогоДокумента = Кэш["ПараметрыИсправляемогоДокумента"];
Если ПараметрыИсправляемогоДокумента = Неопределено Тогда
ПараметрыИсправляемогоДокумента = ПараметрыИсправляемогоДокумента(Документ.ИсправленныйДокумент);
Кэш.Вставить("ПараметрыИсправляемогоДокумента", ПараметрыИсправляемогоДокумента);
КонецЕсли;
Возврат ПараметрыИсправляемогоДокумента;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция ПериодРегистрацииИсправленногоДокумента(Документ, Кэш)
Если ЗначениеЗаполнено(Документ.ИсправленныйДокумент) Тогда
Возврат ПараметрыИсправляемогоДокументаСКэшем(Документ, Кэш).ПериодРегистрации;
Иначе
Возврат Документ.ПериодРегистрации;
КонецЕсли;
КонецФункции
Функция ПериодРасчетаЗарплатыДоНачалаОтсутствия(Документ, Кэш) Экспорт
Если Не Документ.РассчитатьЗарплату Тогда
Возврат Неопределено;
КонецЕсли;
ОкончаниеПериода = КонецМесяца(Документ.ПериодРегистрации);
Если ОкончаниеПериода > Документ.ДатаНачалаСобытия Тогда
ОкончаниеПериода = НачалоДня(Документ.ДатаНачалаСобытия) - 1;
КонецЕсли;
ПериодРасчетаЗарплаты = Новый СтандартныйПериод;
ПериодРасчетаЗарплаты.ДатаНачала = ПериодРегистрацииИсправленногоДокумента(Документ, Кэш);
ПериодРасчетаЗарплаты.ДатаОкончания = ОкончаниеПериода;
Возврат ПериодРасчетаЗарплаты;
КонецФункции
Процедура РассчитатьНачисления(Документ, ПараметрыРасчета, РезультатРасчета) Экспорт
ПериодРасчетаЗарплаты = ПериодРасчетаЗарплатыДоНачалаОтсутствия(Документ, РезультатРасчета.Кэш);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Документ.ПериодРегистрации, Документ.Организация);
ЗаполнитьНастройкиМенеджераРасчета(Документ, МенеджерРасчета, ПериодРасчетаЗарплаты, РезультатРасчета.Кэш);
ЗаполнитьНачисления(Документ, МенеджерРасчета, ПериодРасчетаЗарплаты, РезультатРасчета.Кэш);
ЗаполнитьПерерасчеты(Документ, МенеджерРасчета);
Если РезультатРасчета.ПересекающиесяОтпуска <> Неопределено Тогда
ИсключитьОтпускИзПерерасчетов(Документ, МенеджерРасчета);
КонецЕсли;
ЗаполнитьУдержания(Документ, МенеджерРасчета);
МенеджерРасчета.РассчитатьЗарплату();
РасчетЗарплатыВДанныeОбъекта(Документ, МенеджерРасчета.Зарплата);
КонецПроцедуры
Процедура РасчетЗарплатыВДанныeОбъекта(Документ, ДанныеМенеджераРасчета)
ТаблицыНачислений = РасчетДокументовБЗК.ТаблицыНачисленийДокумента();
ТаблицыНачислений.Начисления = Документ.Начисления;
ТаблицыНачислений.НачисленияПерерасчет = Документ.НачисленияПерерасчет;
ТаблицыНачислений.НачисленияПерерасчетНулевыеСторно = Документ.НачисленияПерерасчетНулевыеСторно;
ТаблицыНачислений.Показатели = Документ.Показатели;
ТаблицыНачислений.РаспределениеПоСтатьям = Документ.РаспределениеРезультатовНачислений;
ТаблицыНачислений.РаспределениеПоТерриториямУсловиямТруда = Документ.РаспределениеПоТерриториямУсловиямТруда;
ОписаниеТаблиц = РасчетДокументовБЗК.ОписаниеТаблицНачисленийДокумента();
ОписаниеТаблиц.Начисления = ОписаниеТаблицыНачислений();
ОписаниеТаблиц.НачисленияПерерасчет = ОписаниеТаблицыПерерасчетов(Истина);
ОписаниеТаблиц.НачисленияПерерасчетНулевыеСторно = ОписаниеТаблицыПерерасчетовНулевыеСторно();
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
ТаблицыНачислений.УправленческиеНачисления = Документ.УправленческиеНачисления;
МодульУправленческаяЗарплата = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
ОписаниеТаблиц.УправленческиеНачисления = МодульУправленческаяЗарплата.ОписаниеТаблицыНачисленийДокумента();
КонецЕсли;
РасчетДокументовБЗК.РасчетЗарплатыНачисленияВДанныеОбъекта(
ТаблицыНачислений,
ДанныеМенеджераРасчета.Начисления,
Документ.Организация,
ОписаниеТаблиц);
РасчетЗарплатыРасширенныйФормы.СортироватьПерерасчеты(Документ.НачисленияПерерасчет);
ТаблицыУдержаний = РасчетДокументовБЗК.ТаблицыУдержанийДокумента();
ТаблицыУдержаний.Удержания = Документ.Удержания;
ТаблицыУдержаний.РаспределениеПоСтатьям = Документ.РаспределениеРезультатовУдержаний;
ТаблицыУдержаний.Показатели = Документ.Показатели;
ОписаниеТаблицУдержаний = РасчетДокументовБЗК.ОписаниеТаблицУдержанийДокумента();
ОписаниеТаблицУдержаний.Удержания = ОписаниеТаблицыУдержаний();
РасчетДокументовБЗК.РасчетЗарплатыУдержанияВДанныеОбъекта(
ТаблицыУдержаний,
ДанныеМенеджераРасчета.Удержания,
ОписаниеТаблицУдержаний);
ТаблицыНДФЛ = РасчетДокументовБЗК.ТаблицыНДФЛДокумента();
ТаблицыНДФЛ.НДФЛ = Документ.НДФЛ;
ТаблицыНДФЛ.Вычеты = Документ.ПримененныеВычетыНаДетейИИмущественные;
ТаблицыНДФЛ.РаспределениеПоСтатьям = Документ.РаспределениеРезультатовУдержаний;
ОписаниеТаблицыНДФЛ = ОписаниеТаблицыНДФЛ();
РасчетДокументовБЗК.РасчетЗарплатыНДФЛВДанныеОбъекта(ТаблицыНДФЛ, ДанныеМенеджераРасчета.НДФЛ, ОписаниеТаблицыНДФЛ);
ОписаниеТаблицыЗаймов = Документы.Отпуск.ОписаниеТаблицыПогашениеЗаймов();
РасчетДокументовБЗК.РасчетЗарплатыПогашениеЗаймовВДанныеОбъекта(
Документ.ПогашениеЗаймов,
ДанныеМенеджераРасчета.ПогашениеЗаймов,
Документ.РаспределениеРезультатовУдержаний,
ОписаниеТаблицыЗаймов);
РасчетДокументовБЗК.РасчетЗарплатыКорректировкиВыплатыВДанныеОбъекта(
Документ.КорректировкиВыплаты,
ДанныеМенеджераРасчета.КорректировкиВыплаты,
Документ.РаспределениеРезультатовУдержаний,
ОписаниеТаблицыЗаймов);
КонецПроцедуры
Функция ОписаниеДокументаРасчета() Экспорт
Описание = РасчетДокументовБЗК.ОписаниеДокумента();
Описание.МесяцНачисленияИмя = "ПериодРегистрации";
Описание.НачисленияПерерасчетИмя = "НачисленияПерерасчет";
Описание.ДатаНачалаСобытияИмя = "ДатаНачалаСобытия";
Возврат Описание;
КонецФункции
Процедура ЗаполнитьНастройкиМенеджераРасчета(Документ, МенеджерРасчета, ПериодРасчетаЗарплаты, Кэш, СохранятьИсправления = Истина)
МенеджерРасчета.ИсключаемыйРегистратор = Документ.Ссылка;
ОписаниеДокумента = ОписаниеДокументаРасчета();
ПараметрыИсправляемого = ПараметрыИсправляемогоДокументаСКэшем(Документ, Кэш);
Если ЗначениеЗаполнено(Документ.ИсправленныйДокумент) Тогда
ИсправлениеРасчетовБЗК.НастроитьМенеджерРасчета(МенеджерРасчета, Документ, ОписаниеДокумента, ПараметрыИсправляемого);
КонецЕсли;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьЗаймы = ПериодРасчетаЗарплаты <> Неопределено;
МенеджерРасчета.НастройкиРасчета.РассчитыватьУдержания = РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(Документ.ПорядокВыплаты);
МенеджерРасчета.НастройкиРасчета.РассчитыватьКорректировкиВыплаты = Истина;
МенеджерРасчета.НастройкиРасчета.СохранятьИсправления = СохранятьИсправления;
МенеджерРасчета.НастройкиРасчета.РасчетЗарплаты = ПериодРасчетаЗарплаты <> Неопределено;
МенеджерРасчета.НастройкиУдержаний.РассчитыватьТолькоПоТекущемуДокументу = Истина;
МенеджерРасчета.НастройкиНДФЛ.Сотрудники = Документ.Сотрудник;
МенеджерРасчета.НастройкиНДФЛ.ДатаВыплаты = Документ.ПланируемаяДатаВыплаты;
МенеджерРасчета.НастройкиНДФЛ.ОкончательныйРасчет = Ложь;
МенеджерРасчета.НастройкиНДФЛ.ДоходПолученНаТерриторииРФ = Документ.ДоходПолученНаТерриторииРФ;
МенеджерРасчета.НастройкиПособий.Вставить("ЭЛНКарантинПоКоронавирусу", Документ.ЭЛНКарантинПоКоронавирусу);
ЗасчитыватьДанныеАвансов = Документ.РассчитатьЗарплату;
Если ЗасчитыватьДанныеАвансов
И ИсправлениеРасчетовБЗККлиентСервер.ИсправлениеВТекущемПериоде(Документ, ПараметрыИсправляемого)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ.ИсправленныйДокумент, "РассчитатьЗарплату") Тогда
ЗасчитыватьДанныеАвансов = Ложь;
КонецЕсли;
МенеджерРасчета.НастройкиНДФЛ.ЗасчитыватьДанныеАвансов = ЗасчитыватьДанныеАвансов;
Если ПериодРасчетаЗарплаты <> Неопределено Тогда
МенеджерРасчета.НастройкиЗаймов.Сотрудники = Документ.Сотрудник;
МенеджерРасчета.НастройкиЗаймов.ДатаПогашения = ПериодРасчетаЗарплаты.ДатаОкончания;
КонецЕсли;
МенеджерРасчета.НастройкиБухучета.КоэффициентыСреднегоЗаработкаФССДокумента = КоэффициентыСреднегоЗаработка(Документ);
МенеджерРасчета.НастройкиБухучета.КоэффициентыРаспределенияДенежногоСодержания = Документ.КоэффициентыРаспределенияДенежногоСодержания.Выгрузить();
Если ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении") Тогда
МенеджерРасчета.НастройкиБухучета.БольничныйСотрудникДоговорник = Документ.СотрудникДоговорник;
КонецЕсли;
ПараметрыОплаты = ДополнительныеПараметрыРасчетаПособия(Документ);
МенеджерРасчета.ДополнительныеСвойства.Вставить("ПараметрыРасчетаПособияПоНетрудоспособности", ПараметрыОплаты);
КонецПроцедуры
Функция КоэффициентыСреднегоЗаработка(Документ) Экспорт
ТаблицаКоэффициентов = ОтражениеЗарплатыВБухучетеРасширенный.НоваяТаблицаКоэффициентыРаспределенияСреднегоЗаработкаФСС();
Для каждого СтрокаТЧ Из Документ.СреднийЗаработокФСС Цикл
НоваяСтрока = ТаблицаКоэффициентов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
НоваяСтрока.Коэффициент = СтрокаТЧ.Сумма;
КонецЦикла;
ОтражениеЗарплатыВБухучетеРасширенный.СвернутьТаблицуКоэффициентовРаспределенияСреднегоЗаработка(ТаблицаКоэффициентов);
Возврат ТаблицаКоэффициентов;
КонецФункции
Функция ДополнительныеПараметрыРасчетаПособия(Документ) Экспорт
ПараметрыОплаты = УчетПособийСоциальногоСтрахования.ДополнительныеПараметрыРасчетаПособияПоНетрудоспособности();
ЗаполнитьЗначенияСвойств(ПараметрыОплаты, Документ);
ПараметрыОплаты.ИспользоватьСреднийЗаработокБольничныйЗаСчетРаботодателя =
ПолучитьФункциональнуюОпцию("РассчитыватьОтдельноСреднийЗаработокФССДляБольничногоЗаСчетРаботодателя");
ПараметрыОплаты.ИспользоватьПериодыУходаВШапке = Документы.БольничныйЛист.ИспользоватьПериодыУходаВШапке(Документ);
Возврат ПараметрыОплаты;
КонецФункции
Процедура ЗаполнитьНачисления(Документ, МенеджерРасчета, ПериодРасчетаЗарплаты, Кэш)
ТаблицаНачислений = МенеджерРасчета.ТаблицаИсходныеДанныеНачисленияЗарплатыПоНачислениям();
ЗаполнитьТаблицуНачисленийМенеджера(Документ, ТаблицаНачислений, МенеджерРасчета, Кэш);
МенеджерРасчета.ЗаполнитьНачисленияСотрудникаЗаПериод(Документ.Сотрудник, ТаблицаНачислений, ПериодРасчетаЗарплаты);
ЗаполнитьДанныеДоговорника(Документ, МенеджерРасчета);
КонецПроцедуры
Процедура ЗаполнитьДанныеДоговорника(Документ, МенеджерРасчета)
Если Не Документ.СотрудникДоговорник Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаНачала", Документ.ДатаНачалаОплаты);
Запрос.УстановитьПараметр("ДатаОкончания", Документ.ДатаОкончанияОплаты);
Запрос.УстановитьПараметр("Сотрудник", Документ.Сотрудник);
Запрос.Текст =
"ВЫБРАТЬ
| ПериодыДействияДоговоровГПХ.Организация КАК Организация,
| ПериодыДействияДоговоровГПХ.Подразделение КАК Подразделение,
| ПериодыДействияДоговоровГПХ.ДатаОкончания КАК ДатаОкончания
|ПОМЕСТИТЬ ДоговораСотрудника
|ИЗ
| РегистрСведений.ПериодыДействияДоговоровГражданскоПравовогоХарактера КАК ПериодыДействияДоговоровГПХ
|ГДЕ
| ПериодыДействияДоговоровГПХ.Сотрудник = &Сотрудник
| И ПериодыДействияДоговоровГПХ.ДатаНачала <= &ДатаОкончания
| И ПериодыДействияДоговоровГПХ.ДатаОкончания >= &ДатаНачала
|;
|
|
|ВЫБРАТЬ
| ДоговораСотрудника.Организация КАК Организация,
| ДоговораСотрудника.Подразделение КАК Подразделение
|ИЗ
| ДоговораСотрудника КАК ДоговораСотрудника
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МАКСИМУМ(ДоговораСотрудника.ДатаОкончания) КАК ДатаОкончания
| ИЗ
| ДоговораСотрудника КАК ДоговораСотрудника) КАК ПоследнийДоговор
| ПО ДоговораСотрудника.ДатаОкончания = ПоследнийДоговор.ДатаОкончания";
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
Если Результат.Пустой() Тогда
Возврат;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
Для Каждого СтрокаНачислений Из МенеджерРасчета.Зарплата.Начисления Цикл
Если Не ЗначениеЗаполнено(СтрокаНачислений.Организация) Тогда
СтрокаНачислений.Организация = Выборка.Организация;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтрокаНачислений.Подразделение) Тогда
СтрокаНачислений.Подразделение = Выборка.Подразделение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТаблицуНачисленийМенеджера(Документ, ТаблицаНачислений, МенеджерРасчета, Кэш)
ПериодыНачислений = ПериодыНачислений(Документ, Кэш);
Если ПериодыНачислений.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ПараметрыОплаты = МенеджерРасчета.ДополнительныеСвойства.ПараметрыРасчетаПособияПоНетрудоспособности;
СреднийЗаработокСсылка = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СреднийЗаработокФСС");
РайонныйКоэффициентРФСсылка = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.РайонныйКоэффициентРФ");
МРОТСсылка = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.МРОТ");
МРОТ = ЗарплатаКадры.МинимальныйРазмерОплатыТрудаРФ(Документ.ДатаНачалаСобытия);
ВидыРасчета = КоллекцииБЗК.УникальныеЗначенияКолонки(ПериодыНачислений, "ВидРасчета");
ДополнительныеВидыРасчетов = РасчетЗарплатыРасширенный.ДополнительныеНачисленияОсновныхВидовРасчета(ВидыРасчета);
МожетБытьРК = (Документ.СреднийЗаработокБольничныйЗаСчетРаботодателяРК > 0
Или Документ.СреднийДневнойЗаработокРК > 0
Или Документ.РайонныйКоэффициентРФнаНачалоСобытия > 1);
МожетБытьСН = (Документ.СреднийЗаработокБольничныйЗаСчетРаботодателяСН > 0
Или Документ.СреднийДневнойЗаработокСН > 0);
РассчитыватьДолиРКСН =
Документ.ПричинаНетрудоспособности <> Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам
И Документ.ПричинаНетрудоспособности <> Перечисления.ПричиныНетрудоспособности.ПоУходуЗаВзрослым
И Документ.ПричинаНетрудоспособности <> Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком;
Для Каждого Период Из ПериодыНачислений Цикл
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = Документ.Сотрудник;
НовыйИнтервал.Начисление = Период.ВидРасчета;
НовыйИнтервал.ДатаНачала = Период.ДатаНачала;
НовыйИнтервал.ДатаОкончания = Период.ДатаОкончания;
НовыйИнтервал.Дополнительно = Новый Структура;
НовыйИнтервал.Дополнительно.Вставить("СреднийПростоя", Период.СреднийПростоя);
Если Не ПараметрыОплаты.ИспользоватьПериодыУходаВШапке Тогда
НовыйИнтервал.Дополнительно.Вставить("ПроцентОплаты", Период.ПроцентОплаты);
НовыйИнтервал.Дополнительно.Вставить("ПроцентОплатыБезЛьгот", Период.ПроцентОплатыБезЛьгот);
НовыйИнтервал.Дополнительно.Вставить("ОграничениеПособия", Период.ОграничениеПособия);
НовыйИнтервал.Дополнительно.Вставить("ОграничениеПособияБезЛьгот", Период.ОграничениеПособияБезЛьгот);
КонецЕсли;
Если ПараметрыОплаты.ИспользоватьСреднийЗаработокБольничныйЗаСчетРаботодателя
И КатегорияНачисления(Период.ВидРасчета) = Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОплатаБольничногоЛистаЗаСчетРаботодателя Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, СреднийЗаработокСсылка, Документ.СреднийЗаработокБольничныйЗаСчетРаботодателя);
Иначе
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, СреднийЗаработокСсылка, Документ.СреднийДневнойЗаработок);
КонецЕсли;
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, РайонныйКоэффициентРФСсылка, Документ.РайонныйКоэффициентРФнаНачалоСобытия);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, МРОТСсылка, МРОТ);
ВидРасчетаДолиРК = Неопределено;
ВидРасчетаДолиСН = Неопределено;
СсылкиРКСН = ДополнительныеВидыРасчетов[НовыйИнтервал.Начисление];
Если СсылкиРКСН <> Неопределено И РассчитыватьДолиРКСН Тогда
Если МожетБытьРК Тогда
ВидРасчетаДолиРК = СсылкиРКСН.ВидРасчетаДолиРК;
КонецЕсли;
Если МожетБытьСН Тогда
ВидРасчетаДолиСН = СсылкиРКСН.ВидРасчетаДолиСН;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ВидРасчетаДолиРК) Тогда
ИнтервалРК = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(ИнтервалРК, НовыйИнтервал);
ИнтервалРК.Начисление = ВидРасчетаДолиРК;
ИнтервалРК.ИзвестныеПоказатели = КоллекцииБЗК.СкопироватьРекурсивно(НовыйИнтервал.ИзвестныеПоказатели);
ИнтервалРК.Дополнительно = КоллекцииБЗК.СкопироватьСтруктуру(НовыйИнтервал.Дополнительно);
КонецЕсли;
Если ЗначениеЗаполнено(ВидРасчетаДолиСН) Тогда
ИнтервалСН = ТаблицаНачислений.Добавить();
ЗаполнитьЗначенияСвойств(ИнтервалСН, НовыйИнтервал);
ИнтервалСН.Начисление = ВидРасчетаДолиСН;
ИнтервалСН.ИзвестныеПоказатели = КоллекцииБЗК.СкопироватьРекурсивно(НовыйИнтервал.ИзвестныеПоказатели);
ИнтервалСН.Дополнительно = КоллекцииБЗК.СкопироватьСтруктуру(НовыйИнтервал.Дополнительно);
КонецЕсли;
КонецЦикла;
ДополнитьНачисленияДоплатойДоСреднегоЗаработка(Документ, ТаблицаНачислений, МенеджерРасчета, ПериодыНачислений, МРОТСсылка, МРОТ);
ДополнитьНачисленияДоплатойДоДенежногоСодержания(Документ, ТаблицаНачислений, МенеджерРасчета, ПериодыНачислений, МРОТСсылка, МРОТ);
КонецПроцедуры
Функция КатегорияНачисления(Начисление)
Возврат ЗарплатаКадрыРасширенныйПовтИсп.ПолучитьИнформациюОВидеРасчета(Начисление).КатегорияНачисленияИлиНеоплаченногоВремени;
КонецФункции
Процедура ДополнитьНачисленияДоплатойДоСреднегоЗаработка(Документ, ТаблицаНачислений, МенеджерРасчета, ПериодыНачислений, МРОТСсылка, МРОТ)
Если Не Документ.ДоплачиватьДоСреднегоЗаработка Или Не ЗначениеЗаполнено(Документ.ВидРасчетаДоплаты) Тогда
Возврат;
КонецЕсли;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДоплатуЗаДниБолезни") Тогда
Возврат;
КонецЕсли;
СреднийЗаработокСсылка = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СреднийЗаработокФСС");
ПроцентДоплатыСсылка = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.ПроцентДоплатыЗаДниНетрудоспособности");
ИспользоватьПериодыУходаВШапке = ИспользоватьПериодыУходаВШапке(Документ);
СреднийДоплаты = Документ.СреднийДоплатыПоДаннымОрганизации;
Для Каждого Период Из ПериодыНачислений Цикл
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = Документ.Сотрудник;
НовыйИнтервал.Начисление = Документ.ВидРасчетаДоплаты;
НовыйИнтервал.ДатаНачала = Период.ДатаНачала;
НовыйИнтервал.ДатаОкончания = Период.ДатаОкончания;
Если Не ИспользоватьПериодыУходаВШапке Тогда
НовыйИнтервал.Дополнительно = Новый Структура;
НовыйИнтервал.Дополнительно.Вставить("ПроцентОплаты", Период.ПроцентОплаты);
НовыйИнтервал.Дополнительно.Вставить("ПроцентОплатыБезЛьгот", Период.ПроцентОплатыБезЛьгот);
НовыйИнтервал.Дополнительно.Вставить("ОграничениеПособия", Период.ОграничениеПособия);
НовыйИнтервал.Дополнительно.Вставить("ОграничениеПособияБезЛьгот", Период.ОграничениеПособияБезЛьгот);
КонецЕсли;
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, СреднийЗаработокСсылка, СреднийДоплаты);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПроцентДоплатыСсылка, Документ.ПроцентДоплатыЗаДниНетрудоспособности);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, МРОТСсылка, МРОТ);
КонецЦикла;
КонецПроцедуры
Процедура ДополнитьНачисленияДоплатойДоДенежногоСодержания(Документ, ТаблицаНачислений, МенеджерРасчета, ПериодыНачислений, МРОТСсылка, МРОТ)
Если Не Документ.ДоплачиватьДоДенежногоСодержания Или Не ЗначениеЗаполнено(Документ.ВидРасчетаДоплаты) Тогда
Возврат;
КонецЕсли;
ДС = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СохраняемоеДенежноеСодержание");
Для Каждого Период Из ПериодыНачислений Цикл
НовыйИнтервал = ТаблицаНачислений.Добавить();
НовыйИнтервал.Сотрудник = Документ.Сотрудник;
НовыйИнтервал.Начисление = Документ.ВидРасчетаДоплаты;
НовыйИнтервал.ДатаНачала = Период.ДатаНачала;
НовыйИнтервал.ДатаОкончания = Период.ДатаОкончания;
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ДС, Документ.СохраняемоеДенежноеСодержание);
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, МРОТСсылка, МРОТ);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьПерерасчеты(Документ, МенеджерРасчета)
Если Не ИсправлениеДокументовРасчетЗарплаты.ДоначисленияРазрешены(МенеджерРасчета) Тогда
Возврат;
КонецЕсли;
ИсходныеДанныеДляПерерасчета = ИсправлениеРасчетовБЗК.ИсходныеДанныеДляПерерасчетаИзРезультатаРасчета(
МенеджерРасчета.Зарплата.Начисления);
Если ЗначениеЗаполнено(Документ.ИсправленныйДокумент) Тогда
ОписаниеТаблиц = Новый Массив;
ОписаниеТаблиц.Добавить(Документы.Отпуск.ОписаниеТаблицыНачислений());
РезультатПерерасчета = ИсправлениеРасчетовБЗК.ДанныеПерерасчетаДляИсправления(
Документ.Организация,
Документ.ПериодРегистрации,
ИсходныеДанныеДляПерерасчета,
Документ.ИсправленныйДокумент,
Документ.Ссылка,
ОписаниеДокументаРасчета(),
ОписаниеТаблиц,
,
Документ.ДоначислитьЗарплатуПриНеобходимости);
Иначе
РезультатПерерасчета = ИсправлениеРасчетовБЗК.ДанныеПерерасчета(
Документ,
ИсходныеДанныеДляПерерасчета,
ОписаниеДокументаРасчета());
КонецЕсли;
Если РезультатПерерасчета <> Неопределено Тогда
ИсправлениеРасчетовБЗК.ДанныеПерерасчетаВМенеджерРасчета(РезультатПерерасчета, МенеджерРасчета);
КонецЕсли;
КонецПроцедуры
Функция ОписаниеТаблицыНачислений()
ОписаниеТаблицы = РасчетДокументовБЗК.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "Начисления";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений) Экспорт
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияПерерасчет";
ОписаниеТаблицы.ПутьКДанным = "Объект.НачисленияПерерасчет";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "ДатыНачисленияПерерасчет";
ОписаниеТаблицы.НомерТаблицы = 1;
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ОтображатьПоляНормыВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.УправлятьОтображениемПолейОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ЭтоПерерасчеты = Истина;
ОписаниеТаблицы.ИмяРеквизитаФиксСторно = "ФиксСторно";
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияПерерасчетРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НачисленияПерерасчет,Удержания,НДФЛ,КорректировкиВыплаты";
ОписаниеТаблицы.СодержитПолеМестоПолученияДохода = Истина;
ОписаниеТаблицы.СодержитРегистраторРазовогоНачисления = Истина;
ОписаниеТаблицы.СодержитПолеИсходныйДокумент = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыПерерасчетовНулевыеСторно() Экспорт
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияПерерасчетНулевыеСторно";
ОписаниеТаблицы.ПутьКДанным = "Объект.НачисленияПерерасчетНулевыеСторно";
ОписаниеТаблицы.НомерТаблицы = 1.1;
ОписаниеТаблицы.ЭтоПерерасчеты = Истина;
ОписаниеТаблицы.ИмяРеквизитаФиксСторно = "ФиксСторно";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыУдержаний() Экспорт
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "Удержания";
ОписаниеТаблицы.ПутьКДанным = "Объект.Удержания";
ОписаниеТаблицы.ИмяРеквизитаВидРасчета = "Удержание";
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.НомерТаблицы = 2;
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
Возврат ОписаниеТаблицы;
КонецФункции
Функция ОписаниеТаблицыНДФЛ() Экспорт
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НДФЛ";
ОписаниеТаблицы.ПутьКДанным = "Объект.НДФЛ";
ОписаниеТаблицы.ИмяПоляРезультат = "Налог";
ОписаниеТаблицы.НомерТаблицы = 3;
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтрокиНДФЛ";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
Процедура ЗаполнитьУдержания(Документ, МенеджерРасчета)
Если Не РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(Документ.ПорядокВыплаты) Тогда
Возврат;
КонецЕсли;
МенеджерРасчета.ЗаполнитьУдержанияСотрудникаЗаПериод(
Документ.Сотрудник,
Документ.ПериодРегистрации,
КонецМесяца(Документ.ПериодРегистрации));
КонецПроцедуры
Функция ПраваНаДокумент(Документ) Экспорт
Если ПривилегированныйРежим() Или Пользователи.ЭтоПолноправныйПользователь() Тогда
ПраваНаДокумент = Новый Структура(
"ПолныеПраваПоРолям,
|ОграниченияНаУровнеЗаписей");
ПраваНаДокумент.ПолныеПраваПоРолям = Истина;
ОграниченияНаУровнеЗаписей = Новый Структура(
"ЧтениеБезОграничений,
|ИзменениеБезОграничений,
|ИзменениеКадровыхДанных,
|ДоступКУправленческойЗарплате");
ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений = Истина;
ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений = Истина;
ОграниченияНаУровнеЗаписей.ИзменениеКадровыхДанных = Истина;
ОграниченияНаУровнеЗаписей.ДоступКУправленческойЗарплате = Новый Структура("Чтение, Изменение", Истина, Истина);
ПраваНаДокумент.ОграниченияНаУровнеЗаписей = ОграниченияНаУровнеЗаписей;
Иначе
ПраваНаДокумент = ЗарплатаКадрыРасширенный.ПраваНаМногофункциональныйДокумент(Документ);
КонецЕсли;
Возврат ПраваНаДокумент;
КонецФункции
#КонецОбласти
#Область УстаревшиеПроцедурыИФункции
Функция ПоследнийБольничныйПоНомеру(НомерЛисткаНетрудоспособности, УдаляемыйБольничный = Неопределено, Отбор = Неопределено) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Найденный.Ссылка КАК Ссылка,
| Найденный.Проведен КАК Проведен,
| ВЫБОР
| КОГДА ЕСТЬNULL(Исправляющий.Ссылка, &УдаляемыйБольничный) = &УдаляемыйБольничный
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ЕстьИсправляющий
|ИЗ
| Документ.БольничныйЛист КАК Найденный
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК Исправляющий
| ПО Найденный.Ссылка = Исправляющий.ИсправленныйДокумент
|ГДЕ
| Найденный.НомерЛисткаНетрудоспособности = &НомерЛисткаНетрудоспособности
| И НЕ Найденный.ПометкаУдаления
| И Найденный.Ссылка <> &УдаляемыйБольничный
| И &ТекстДополнительныхУсловий
|
|УПОРЯДОЧИТЬ ПО
| ЕстьИсправляющий,
| Проведен УБЫВ,
| Ссылка УБЫВ";
Запрос.УстановитьПараметр("НомерЛисткаНетрудоспособности", НомерЛисткаНетрудоспособности);
Запрос.УстановитьПараметр("УдаляемыйБольничный", УдаляемыйБольничный);
Если Отбор = Неопределено Или Отбор.Количество() = 0 Тогда
ТекстДополнительныхУсловий = "";
Иначе
ФрагментыУсловий = ФрагментыУсловийОтбора(Запрос, "Найденный", Отбор);
ТекстДополнительныхУсловий = "И " + СтрСоединить(ФрагментыУсловий, " И ");
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И &ТекстДополнительныхУсловий", ТекстДополнительныхУсловий);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Ссылка;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Процедура ПриЗаполненииСсылокРодственников(Больничный, РодственникиЭЛН) Экспорт
СЭДОФСС.ЗаполнитьСсылкиРодственников(Больничный.ФизическоеЛицо, РодственникиЭЛН);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли