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