#Область ОписаниеПеременных
&НаКлиенте
Перем СтарыеЗначенияКонтролируемыхПолей Экспорт;
&НаКлиенте
Перем ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтоНовый = Параметры.Ключ.Пустая();
ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ЗаполнитьСписокВыбораКодУсловийИсчисления(Элементы.УсловияИсчисленияКод1);
ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ЗаполнитьСписокВыбораКодУсловийИсчисления(Элементы.УсловияИсчисленияКод2);
ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ЗаполнитьСписокВыбораКодУсловийИсчисления(Элементы.УсловияИсчисленияКод3);
ОбменЛисткамиНетрудоспособностиФСС.КодыПричинИсправления(Элементы.КодПричиныИсправленияЭЛН.СписокВыбора);
ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ЗаполнитьСписокВыбораКодПричиныНетрудоспособностиРодственников(
Элементы.ПериодыУходаЗаРодственникамиКодПричины);
ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, "ПериодыУходаЗаРодственникамиНадписьЛет");
ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Текст", НСтр("ru = 'лет'"));
ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, "ПериодыУходаЗаРодственникамиНадписьМесяцев");
ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Текст", НСтр("ru = 'мес'"));
ИменаПолей = "ПериодыУходаЗаРодственникамиЕстьОшибка, ПериодыУходаЗаРодственникамиТекстОшибки";
ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, ИменаПолей);
ОбщегоНазначенияБЗК.ДобавитьОтборУсловногоОформления(ОформлениеКД, "Объект.ПериодыУходаЗаРодственниками.Ошибка", "=", Ложь);
ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Видимость", Ложь);
ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Отображать", Ложь);
ИменаПолей = "ПериодыУходаЗаРодственникамиИспользованоДней, ПериодыУходаЗаРодственникамиДнейПоловиннойОплаты";
ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, ИменаПолей);
ОбщегоНазначенияБЗК.ДобавитьОтборУсловногоОформления(ОформлениеКД, "Объект.ПериодыУходаЗаРодственниками.КоличествоДнейИзменено", "=", Истина);
ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Шрифт", Новый Шрифт(ШрифтыСтиля.ОбычныйШрифтТекста, , , Истина));
ИменаПолей = "ПериодыУходаЗаРодственникамиОстатокДнейЗаСлучай, ПериодыУходаЗаРодственникамиОстатокДнейПоловиннойОплаты";
ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, ИменаПолей);
ОбщегоНазначенияБЗК.ДобавитьОтборУсловногоОформления(ОформлениеКД, "Объект.ПериодыУходаЗаРодственниками.МаксимумДнейЗаСлучай", "=", 0);
ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Текст", "-");
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
ПодписиДокументов.ПриСозданииНаСервере(ЭтотОбъект);
РасчетЗарплатыРасширенныйФормы.ИнициализироватьМеханизмПересчетаДокументаПриРедактировании(ЭтотОбъект);
Если ЭтоНовый Тогда
ЗапланироватьПолноеОбновлениеСведенийДляФСС();
ИспользуетсяРасчетЗарплаты = ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная");
ОграниченияНаУровнеЗаписей = Новый ФиксированнаяСтруктура("ЧтениеБезОграничений, ИзменениеБезОграничений, ИзменениеКадровыхДанных", Ложь, Ложь, Ложь);
ДоступноИзменение = Пользователи.РолиДоступны("ПолныеПрава,ДобавлениеИзменениеПособийФСС");
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
РасчетЗарплатыРасширенныйФормы.ДокументыПриСозданииНаСервере(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект));
УстановитьПривилегированныйРежим(Ложь);
ЗаполнитьИсключаемыеПериоды = ОбщегоНазначенияБЗККлиентСервер.ЗначениеСвойства(Параметры, "ЗаполнитьИсключаемыеПериоды");
Если ЗаполнитьИсключаемыеПериоды = Истина Тогда
ЗаполнитьПараметрыОплаты(Истина);
КонецЕсли;
УстановитьДоступностьПолейВводаНачислений();
Если ЭтоНовый Тогда
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
Параметры.Свойство("Основание", ОснованиеПрогулНеявка);
ЗначенияДляЗаполнения = Новый Структура;
ЗначенияДляЗаполнения.Вставить("Организация", "Объект.Организация");
ЗначенияДляЗаполнения.Вставить("МесяцРасчета", "Объект.ПериодРегистрации");
ЗначенияДляЗаполнения.Вставить("Ответственный", "Объект.Ответственный");
Если ЗначениеЗаполнено(Объект.Организация) Тогда
ФиксированныеЗначения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Организация");
ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтотОбъект, ЗначенияДляЗаполнения, ФиксированныеЗначения);
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтотОбъект, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
Иначе
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтотОбъект, ЗначенияДляЗаполнения);
КонецЕсли;
УстановитьОтветственныхЛиц();
ОбновитьГоловнуюОрганизацию();
Если Параметры.Свойство("Сотрудник") И ЗначениеЗаполнено(Параметры.Сотрудник) Тогда
Объект.Сотрудник = Параметры.Сотрудник;
КонецЕсли;
НачатьИнициализациюФормы();
ДобавитьРеквизитыИЭлементыФормы();
Документы.БольничныйЛист.ЗаполнитьПланируемуюДатуВыплаты(Объект, ЭтотОбъект["НастройкиДатВыплаты"]);
ОбновитьСведенияДляФСС();
ОбновитьФормуПослеЗагрузкиЭЛН(Истина, Истина, Истина);
Иначе
Если Параметры.Свойство("ВыполнитьПерезаполнениеСведенийОСреднемЗаработке") Тогда
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
ВыводитьСообщенияПриРасчете = Ложь;
РассчитатьНаСервере();
КонецЕсли;
КонецЕсли;
Если ИспользуетсяРасчетЗарплаты Тогда
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(
ЭтотОбъект, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений, Ложь);
Если Не ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений И Объект.ДокументРассчитан Тогда
ТолькоПросмотр = Истина;
ЭтотОбъект.Элементы.НадписьСтаж.Гиперссылка = Ложь;
КонецЕсли;
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.УстановитьДоступныеХарактерыВыплаты(Элементы);
ЗагрузитьНастройки();
ЕстьПравоИзменения = Не ТолькоПросмотр И (Элементы.Найти("ФормаПровести") <> Неопределено);
ОбъектРассчитан = Объект.Начисления.Количество() > 0;
РасчетНеобходимоВыполнить = ЕстьПравоИзменения
И Не ОбъектРассчитан
И Не Объект.Проведен
И ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
Элементы.РассчитываетсяЭЛНГруппа.Видимость = ЕстьПравоИзменения
И Не ОбъектРассчитан
И ЗначениеЗаполнено(Объект.НомерЛисткаНетрудоспособности)
И СведенияОбЭЛН.ЭтоЭЛН
И ЗначениеЗаполнено(Объект.Сотрудник)
И ЗначениеЗаполнено(Объект.ДатаНачалаСобытия)
И ЗначениеЗаполнено(Объект.ДатаОкончания)
И Не ЗначениеЗаполнено(Объект.ПорядокВыплаты);
Если ЭтоНовый
И ЗначениеЗаполнено(Объект.ДатаНачалаСобытия)
И ЗначениеЗаполнено(Объект.ДатаНачала)
И ЗначениеЗаполнено(Объект.ДатаОкончания)
И (ЗначениеЗаполнено(Объект.Сотрудник)
Или ЗначениеЗаполнено(Объект.ИсправленныйДокумент)
Или ЗначениеЗаполнено(Объект.ПервичныйБольничныйЛист)) Тогда
РасчетНеобходимоВыполнить = Истина;
КонецЕсли;
Параметры.ПолучитьЭЛНИзФСС = СведенияОбЭЛН.ЭтоЭЛН
И СведенияОбЭЛН.ДоступенИсходныйXML
И ЗначениеЗаполнено(Объект.НомерЛисткаНетрудоспособности)
И (ЗначениеЗаполнено(Объект.Организация) Или ЗначениеЗаполнено(СведенияОбЭЛН.Организация))
И ЗначениеЗаполнено(СведенияОбЭЛН.ДатаОкончания)
И Не ЗначениеЗаполнено(Объект.ДатаОкончания)
И Не Объект.ПометкаУдаления;
Если Параметры.ПолучитьЭЛНИзФСС Тогда
РасчетНеобходимоВыполнить = Истина;
Элементы.РассчитываетсяЭЛНГруппа.Видимость = Истина;
КонецЕсли;
Если Элементы.РассчитываетсяЭЛНГруппа.Видимость Тогда
РасчетНеобходимоВыполнить = Истина;
Элементы.Страницы.ТолькоПросмотр = Истина;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужбаФормы");
Модуль.УстановитьПараметрыВыбораСотрудников(ЭтотОбъект, "Сотрудник");
КонецЕсли;
ОкончательныйРасчетНДФЛ = Ложь;
НеобходимоПерезаполнитьНачисления = РасчетНеобходимоВыполнить;
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьСостояниеКнопкиФормыРассчитать(ЭтотОбъект, РасчетНеобходимоВыполнить);
ПериодыУходаЗаРодственникамиПодробноОбновитьВидимость();
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка);
ЭДОБЗК.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка, Объект);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов");
МодульУчетОригиналовПервичныхДокументов.ПриСозданииНаСервере_ФормаДокумента(ЭтотОбъект, Элементы.Шапка);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивом = ОбщегоНазначения.ОбщийМодуль("ОбменСАрхивом");
МодульОбменСАрхивом.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
ПериодыУходаЗаРодственникамиПодробноОбновитьВидимость();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
Если Параметры.ПолучитьЭЛНИзФСС Тогда
ВыводитьСообщенияПриРасчете = Ложь;
ПодключитьОбработчикОжидания("ПолучитьЭЛНИзФССПослеОткрытияФормы", 0.1, Истина);
ИначеЕсли Элементы.РассчитываетсяЭЛНГруппа.Видимость Тогда
ВыводитьСообщенияПриРасчете = Ложь;
ПодключитьОбработчикОжидания("ЗаполнитьПорядокВыплатыИРассчитать", 0.1, Истина);
ИначеЕсли РасчетНеобходимоВыполнить Тогда
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ЗапланироватьЧтениеСведенийДляФСС();
ТекущийОбъект.ВключитьАвтозаполнениеПериодовОплаты();
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если Объект.ДоляНеполногоВремени = 0 Тогда
Объект.ДоляНеполногоВремени = 1;
КонецЕсли;
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей =
(Не ЗначениеЗаполнено(Объект.ИсточникСреднего)
И Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод >= СЭДОФСС.ГодНачалаСведенийОСреднемЗаработкеСФР())
Или Не Документы.БольничныйЛист.СреднийЗаполнен(Объект);
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
ЗаполнениеВыполнено = Ложь;
ИспользуетсяРасчетЗарплаты = ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная");
ПриПолученииДанныхНаСервере(Ложь);
ОбновитьСведенияДляФСС();
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонтрольВеденияУчетаБЗК.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект,
ПравоДоступа("Изменение", Метаданные.Документы.БольничныйЛист));
ЭДОБЗК.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки = ОценкаПроизводительностиКлиент.ЗамерВремени();
КонецЕсли;
Если ПараметрыЗаписи.РежимЗаписи <> РежимЗаписиДокумента.ОтменаПроведения И Не ПараметрыЗаписи.Свойство("ПроверкаПередЗаписьюВыполнена") Тогда
Отказ = Истина;
ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если РасчетНеобходимоВыполнить Тогда
Если НеобходимоПерезаполнитьНачисления Тогда
ВыводитьСообщенияПриРасчете = Ложь;
РассчитатьНаСервере();
Иначе
ВыполнитьРасчетНачисленийНаСервере();
КонецЕсли;
ЗарплатаКадрыРасширенный.ЗаполнитьТекущийОбъектОбъектомФормы(ТекущийОбъект, Объект);
КонецЕсли;
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
РеквизитыВДанные(ТекущийОбъект);
Если ЗаполнениеВыполнено Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить("УдалитьПерерасчетыСреднегоЗаработка", Истина);
ТекущийОбъект.ДополнительныеСвойства.Вставить("УдалитьПерерасчетыЗарплаты", Истина);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Отказ);
КонецЕсли;
ПередЗаписьюНаСервереЭЛН(Отказ, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ЗапланироватьЧтениеСведенийДляФСС();
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ДанныеВРеквизиты();
ПодписиДокументов.ПослеЗаписиНаСервере(ЭтотОбъект);
КонтрольВеденияУчетаБЗК.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ЭДОБЗК.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Объект);
ОбновитьОстаткиПериодовУхода();
ОбновитьПредставленияПериодовУхода();
ОбновитьСведенияДляФСС();
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Если Объект.ДокументРассчитан Тогда
ИмяОперации = "ПроведениеДокументаБольничныйЛист";
Иначе
ИмяОперации = "ПроведениеДокументаБольничныйЛистКадры";
КонецЕсли;
ОценкаПроизводительностиКлиент.УстановитьКлючевуюОперациюЗамера(ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки, ИмяОперации);
КонецЕсли;
ПараметрыОповещения = Новый Структура;
ПараметрыОповещения.Вставить("Ссылка", ЭтотОбъект.Объект.Ссылка);
Оповестить("ДокументБольничныйЛистПослеЗаписи", ПараметрыОповещения, ЭтотОбъект);
ИсправлениеДокументовЗарплатаКадрыКлиент.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
Оповестить("Запись_БольничныйЛист", ПараметрыЗаписи, Объект.Ссылка);
Если ПараметрыЗаписи.Свойство("ИмяПроцедурыПослеЗаписи") Тогда
Обработчик = Новый ОписаниеОповещения(ПараметрыЗаписи.ИмяПроцедурыПослеЗаписи, ЭтотОбъект, ПараметрыЗаписи);
ПараметрыЗаписи.Удалить("ИмяПроцедурыПослеЗаписи");
ВыполнитьОбработкуОповещения(Обработчик, Истина);
КонецЕсли;
Оповестить("ЗаявкиСотрудниковЗаписанДокумент", Объект.Ссылка, ВладелецФормы);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗакрытием(ЭтотОбъект, Объект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если ИспользуетсяРасчетЗарплаты Тогда
Если ИмяСобытия = "Запись_ЗаявлениеСотрудникаНаВыплатуПособия" Тогда
ОбновитьЭлементыПрямыхВыплатФСС();
ИначеЕсли ИмяСобытия = "Запись_РеестрДанныхЭЛНЗаполняемыхРаботодателем" Тогда
ТребуетсяПрочитатьСведенияОбЭЛН = Истина;
ОбновитьСведенияДляФСС();
ИначеЕсли ИмяСобытия = "ПроведеноИсправлениеОтпуска" И Параметр = Объект.Ссылка Тогда
ВыводитьСообщенияПриРасчете = Истина;
РассчитатьНаКлиенте();
Модифицированность = Истина;
КонецЕсли;
ИсправлениеДокументовЗарплатаКадрыКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
КонецЕсли;
Если ИмяСобытия = "ЗаписанПодчиненныйДокумент" И Источник = Объект.Ссылка Тогда
УстановитьИнфоНадписьЗамещения();
ИначеЕсли (Источник = Объект.ПервыйРасчетныйГодОснование И ЗначениеЗаполнено(Объект.ПервыйРасчетныйГодОснование))
Или (Источник = Объект.ВторойРасчетныйГодОснование И ЗначениеЗаполнено(Объект.ВторойРасчетныйГодОснование)) Тогда
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
ПодключитьОбработчикРасчетаБезВыводаСообщений();
ИначеЕсли ИмяСобытия = "Запись_ИсходящееСообщениеОСтраховомСлучаеФСС"
Или ИмяСобытия = "Запись_ВходящийЗапросФССДляРасчетаПособия"
Или ИмяСобытия = "Запись_ДанныеСФРДляРасчетаПособия"
Или ИмяСобытия = "Запись_ОтветНаЗапросФССДляРасчетаПособия" Тогда
ОбновитьЭлементыСЭДО();
КонецЕсли;
ЭДОБЗККлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент");
МодульУчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаДокумента(ИмяСобытия, ЭтотОбъект, Источник);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
ОбработкаПроверкиЗаполненияНаСервереЭЛН(Отказ, ПроверяемыеРеквизиты);
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(ТекущийОбъект);
Если Не ТекущийОбъект.ПроверитьЗаполнение() Тогда
Отказ = Истина;
ОбработатьСообщенияПользователю();
КонецЕсли;
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ОрганизацияПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
УстановитьОтветственныхЛиц();
КонецПроцедуры
&НаКлиенте
Процедура НомерПриИзменении(Элемент)
УстановитьОтображениеНомераПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаПриИзменении(Элемент)
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
Объект.ДатаНачалаРодственник1 = '00010101';
Объект.ДатаНачалаРодственник2 = '00010101';
ДатаНачалаПриИзмененииНаСервере();
ПриИзмененииДатыОсвобожденияОтРаботыНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДатаОкончанияПриИзменении(Элемент)
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
Объект.ДатаОкончанияРодственник1 = '00010101';
Объект.ДатаОкончанияРодственник2 = '00010101';
ОбновитьПериодыУходаПриИзмененииПериодаНетрудоспособности();
ПриИзмененииДатыОсвобожденияОтРаботыНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ОграничениеПособияПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ЯвляетсяПродолжениемБолезниПриИзменении(Элемент)
ЯвляетсяПродолжениемБолезниПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура СотрудникПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.ЗамерВремени("ИзменениеСотрудникаВФормеДокументаБольничныйЛист");
СотрудникПриИзмененииНаСервере("СотрудникПриИзменении");
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура НомерЛисткаНетрудоспособностиПриИзменении(Элемент)
НомерЛисткаНетрудоспособностиПриИзмененииНаСервере();
КонецПроцедуры
#Область Страница_Главное
&НаКлиенте
Процедура ПредставлениеПричиныНетрудоспособностиАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Если Ожидание = 0 Или Не ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
ДанныеВыбора = КодыПричин;
Иначе
СписокДляПодбора = Новый СписокЗначений;
Для Каждого ЭлементСписка Из КодыПричин Цикл
Если СтрНайти(НРег(ЭлементСписка.Представление), НРег(Текст)) > 0 Тогда
ЗаполнитьЗначенияСвойств(СписокДляПодбора.Добавить(), ЭлементСписка);
КонецЕсли;
КонецЦикла;
СтандартнаяОбработка = Ложь;
ДанныеВыбора = СписокДляПодбора;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеПричиныНетрудоспособностиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура("ДатаНачалаСобытия, НомерЛисткаНетрудоспособности, ПериодыУходаЗаРодственниками,
|КодПричиныНетрудоспособности, ПричинаНетрудоспособности, СлучайУходаЗаБольнымРебенком, ГоловнаяОрганизация,
|ПоУходуФИО1, ПоУходуВозрастЛет1, ПоУходуВозрастМесяцев1, ПоУходуФИО2, ПоУходуВозрастЛет2, ПоУходуВозрастМесяцев2");
ЗаполнитьЗначенияСвойств(ПараметрыФормы, Объект);
ПараметрыФормы.ПериодыУходаЗаРодственниками = ПериодыУхода();
Обработчик = Новый ОписаниеОповещения("ПослеВыбораПричиныНетрудоспособности", ЭтотОбъект);
ОткрытьФорму("Документ.БольничныйЛист.Форма.ВыборПричиныНетрудоспособности", ПараметрыФормы, , , , , Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеПричиныНетрудоспособностиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПослеВыбораПричиныНетрудоспособности(ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеПричиныНетрудоспособностиПриИзменении(Элемент)
Если ТипЗнч(ПредставлениеПричиныНетрудоспособности) = Тип("Строка")
И КодыПричин.НайтиПоЗначению(ПредставлениеПричиныНетрудоспособности) <> Неопределено Тогда
ПослеВыбораПричиныНетрудоспособности(ПредставлениеПричиныНетрудоспособности);
Иначе
ПредставлениеПричиныНетрудоспособности = ПредставлениеПричиныНетрудоспособности();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПереключательПричиныНетрудоспособности01ПриИзменении(Элемент)
Если ПредставлениеПричиныНетрудоспособности = "" Тогда
ПредставлениеПричиныНетрудоспособности = ПредставлениеПричиныНетрудоспособностиДоИзменения;
ПредставлениеПричиныНетрудоспособностиНачалоВыбора(Элемент, Неопределено, Истина);
Иначе
ПослеВыбораПричиныНетрудоспособности(ПредставлениеПричиныНетрудоспособности);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПереключательПричиныНетрудоспособности02ПриИзменении(Элемент)
Если ПредставлениеПричиныНетрудоспособности = "" Тогда
ПредставлениеПричиныНетрудоспособности = ПредставлениеПричиныНетрудоспособностиДоИзменения;
ПредставлениеПричиныНетрудоспособностиНачалоВыбора(Элемент, Неопределено, Истина);
Иначе
ПослеВыбораПричиныНетрудоспособности(ПредставлениеПричиныНетрудоспособности);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаНарушенияРежимаПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДоплачиватьДоСреднегоЗаработкаПриИзменении(Элемент)
ДоплачиватьДоСреднегоЗаработкаПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДоплачиватьДоДенежногоСодержанияПриИзменении(Элемент)
ДоплачиватьДоДенежногоСодержанияПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ПроцентДоплатыЗаДниНетрудоспособностиПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ПериодРасчетаСреднегоЗаработкаПервыйГодПриИзменении(Элемент)
Если Объект.ПериодРасчетаСреднегоЗаработкаВторойГод = Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод Тогда
Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод = БылПервыйГод;
Объект.ПериодРасчетаСреднегоЗаработкаВторойГод = БылВторойГод;
Возврат;
КонецЕсли;
Если Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод > Объект.ПериодРасчетаСреднегоЗаработкаВторойГод Тогда
Второй = Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод;
Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод = Объект.ПериодРасчетаСреднегоЗаработкаВторойГод;
Объект.ПериодРасчетаСреднегоЗаработкаВторойГод = Второй;
КонецЕсли;
Если Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод < 2000
Или Объект.ПериодРасчетаСреднегоЗаработкаВторойГод >= Год(Объект.ДатаНачалаСобытия) Тогда
Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод = БылПервыйГод;
Объект.ПериодРасчетаСреднегоЗаработкаВторойГод = БылВторойГод;
Возврат;
КонецЕсли;
Объект.ФиксПериодРасчетаСреднегоЗаработка =
Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод <> Объект.ПериодРасчетаСреднегоЗаработкаВторойГод - 1
Или Объект.ПериодРасчетаСреднегоЗаработкаВторойГод <> Год(Объект.ДатаНачалаСобытия) - 1;
Объект.ПериодРасчетаСреднегоЗаработкаНачало = Дата(Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод, 1, 1);
Объект.ПериодРасчетаСреднегоЗаработкаОкончание = Дата(Объект.ПериодРасчетаСреднегоЗаработкаВторойГод, 12, 31);
Если Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод <> БылПервыйГод
Или Объект.ПериодРасчетаСреднегоЗаработкаВторойГод <> БылВторойГод Тогда
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
КонецЕсли;
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
ТребуетсяОчиститьДанныеСреднегоЗаработка = Истина;
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ПериодРасчетаСреднегоЗаработкаВторойГодПриИзменении(Элемент)
ПериодРасчетаСреднегоЗаработкаПервыйГодПриИзменении(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПервыйРасчетныйГодЗаработокНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ЗначениеЗаполнено(Объект.ПервыйРасчетныйГодОснование) Тогда
ПоказатьЗначение(, Объект.ПервыйРасчетныйГодОснование);
ИначеЕсли Объект.ИсточникСреднего = ПредопределенноеЗначение("Перечисление.ИсточникиСреднегоДляПособий.УчетФонда") Тогда
ОтборФормы = Новый Структура;
ОтборФормы.Вставить("ГоловнаяОрганизация", Объект.ГоловнаяОрганизация);
ОтборФормы.Вставить("ФизическоеЛицо", Объект.ФизическоеЛицо);
ОтборФормы.Вставить("Год", Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод);
ПараметрыФормы = Новый Структура("Отбор", ОтборФормы);
ОткрытьФорму("Документ.ЗапросСреднегоЗаработкаСЭДО.ФормаСписка", ПараметрыФормы, , Ложь);
ИначеЕсли Объект.ИсточникСреднего = ПредопределенноеЗначение("Перечисление.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда") Тогда
ОтборФормы = Новый Структура;
ОтборФормы.Вставить("ГоловнаяОрганизация", Объект.ГоловнаяОрганизация);
ОтборФормы.Вставить("ФизическоеЛицо", Объект.ФизическоеЛицо);
ОтборФормы.Вставить("НомерЛН", Объект.НомерЛисткаНетрудоспособности);
ПараметрыФормы = Новый Структура("Отбор", ОтборФормы);
ОткрытьФорму("Документ.ВходящийЗапросФССДляРасчетаПособия.ФормаСписка", ПараметрыФормы, , Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВторойРасчетныйГодЗаработокНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ЗначениеЗаполнено(Объект.ВторойРасчетныйГодОснование) Тогда
ПоказатьЗначение(, Объект.ВторойРасчетныйГодОснование);
ИначеЕсли Объект.ИсточникСреднего = ПредопределенноеЗначение("Перечисление.ИсточникиСреднегоДляПособий.УчетФонда") Тогда
ОтборФормы = Новый Структура;
ОтборФормы.Вставить("ГоловнаяОрганизация", Объект.ГоловнаяОрганизация);
ОтборФормы.Вставить("ФизическоеЛицо", Объект.ФизическоеЛицо);
ОтборФормы.Вставить("Год", Объект.ПериодРасчетаСреднегоЗаработкаВторойГод);
ПараметрыФормы = Новый Структура("Отбор", ОтборФормы);
ОткрытьФорму("Документ.ЗапросСреднегоЗаработкаСЭДО.ФормаСписка", ПараметрыФормы, , Ложь);
ИначеЕсли Объект.ИсточникСреднего = ПредопределенноеЗначение("Перечисление.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда") Тогда
ОтборФормы = Новый Структура;
ОтборФормы.Вставить("ГоловнаяОрганизация", Объект.ГоловнаяОрганизация);
ОтборФормы.Вставить("ФизическоеЛицо", Объект.ФизическоеЛицо);
ОтборФормы.Вставить("НомерЛН", Объект.НомерЛисткаНетрудоспособности);
ПараметрыФормы = Новый Структура("Отбор", ОтборФормы);
ОткрытьФорму("Документ.ВходящийЗапросФССДляРасчетаПособия.ФормаСписка", ПараметрыФормы, , Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполненностьДанныхИнформационныйТекстОбработкаНавигационнойСсылки(Элемент, Адрес, СтандартнаяОбработка)
Если Адрес = "ЗапросСреднегоЗаработкаСЭДО" Тогда
СтандартнаяОбработка = Ложь;
ОтборСписка = Новый Структура("ФизическоеЛицо", Объект.ФизическоеЛицо);
ПараметрыСписка = Новый Структура("Отбор", ОтборСписка);
ОткрытьФорму("Документ.ЗапросСреднегоЗаработкаСЭДО.ФормаСписка", ПараметрыСписка, , Ложь);
Иначе
УчетСреднегоЗаработкаКлиент.ПоказатьПричиныПерерасчетаСреднегоЗаработка(Объект.Ссылка, СтандартнаяОбработка, Адрес);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПериодыПростояВШапкеНадписьНажатие(Элемент)
ИзменитьПериодыНаКлиенте("ПериодыПростоя");
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ПериодРегистрацииПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтотОбъект, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", Модифицированность);
ПериодРегистрацииПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ПериодРегистрацииНачалоВыбораЗавершение", ЭтотОбъект);
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтотОбъект, ЭтотОбъект, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
ПериодРегистрацииПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтотОбъект, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", Направление, Модифицированность);
ПодключитьОбработчикОжидания("ОбработчикОжиданияМесяцНачисленияПриИзменении", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеЛисткаНетрудоспособностиНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыводитьСообщенияПриРасчете = Ложь;
ИменаРеквизитов = ИменаРеквизитовЛисткаНетрудоспособности();
ПараметрыФормы = Новый Структура(ИменаРеквизитов);
ЗаполнитьЗначенияСвойств(ПараметрыФормы, Объект);
ПараметрыФормы.Вставить("СтрокаВозвращаемыхРеквизитов", ИменаРеквизитов);
ПараметрыФормы.Вставить("НомерЛисткаНетрудоспособности", Объект.НомерЛисткаНетрудоспособности);
ПараметрыФормы.Вставить("ДатаНачалаСобытия", Объект.ДатаНачалаСобытия);
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("ГоловнаяОрганизация", Объект.ГоловнаяОрганизация);
ПараметрыФормы.Вставить("ФизическоеЛицо", Объект.ФизическоеЛицо);
ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр);
ПараметрыФормы.Вставить("Номер", Объект.Номер);
ПараметрыФормы.Вставить("Дата", Объект.Дата);
ПараметрыФормы.Вставить("ПериодыУходаЗаРодственниками", ПериодыУхода());
ОбработчикВыбора = Новый ОписаниеОповещения("ПослеВводаДанныхЛисткаНетрудоспособности", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ВводДанныхЛисткаНетрудоспособности", ПараметрыФормы, ЭтотОбъект, , , , ОбработчикВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаОплатыПриИзменении(Элемент)
ДатаНачалаОплатыПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДатаОкончанияОплатыПриИзменении(Элемент)
ДатаОкончанияОплатыПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ПрименятьЛьготыПриНачисленииПособияПриИзменении(Элемент)
ОбновитьЭлементыФинансированияФедеральнымБюджетом(ЭтотОбъект);
Если Не Объект.ПрименятьЛьготыПриНачисленииПособия Тогда
Объект.ФинансированиеФедеральнымБюджетом = Неопределено;
КонецЕсли;
ЗаполнитьПроцентОплатыИОграничениеПособия();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ФинансированиеФедеральнымБюджетомПриИзменении(Элемент)
ЗаполнитьПроцентОплатыИОграничениеПособия();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ПроцентОплатыБезЛьготПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ОграничениеПособияБезЛьготПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура УчитыватьЗаработокПредыдущихСтрахователейПриИзменении(Элемент)
ОбновитьДанныеДляРасчетаСреднего();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ПроцентОплатыПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДоляНеполногоВремениПриИзменении(Элемент)
Если Объект.ДоляНеполногоВремени = 0 Тогда
Объект.ДоляНеполногоВремени = 1;
КонецЕсли;
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура РайонныйКоэффициентРФНаНачалоСобытияПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ВидОплатыПособияПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ВидОплатыЗаСчетРаботодателяПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ВидНеоплачиваемогоВремениПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ВидРасчетаДоплатыПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЗамещениеИнфоНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ЦепочкиДокументов") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("ЦепочкиДокументовКлиент");
Модуль.ОткрытьФормуЗамещенияПоСсылке(ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РодственникЗаКоторымОсуществляетсяУход1ПриИзменении(Элемент)
РодственникЗаКоторымОсуществляетсяУход1ПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаРодственник1ПриИзменении(Элемент)
ОбновитьНадписиДнейРодственников(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДатаОкончанияРодственник1ПриИзменении(Элемент)
ОбновитьНадписиДнейРодственников(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура РодственникЗаКоторымОсуществляетсяУход2ПриИзменении(Элемент)
РодственникЗаКоторымОсуществляетсяУход2ПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаРодственник2ПриИзменении(Элемент)
ОбновитьНадписиДнейРодственников(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДатаОкончанияРодственник2ПриИзменении(Элемент)
ОбновитьНадписиДнейРодственников(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаПоловиннойОплатыПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура НазначитьПособиеПриИзменении(Элемент)
Если ИспользуетсяРасчетЗарплаты Тогда
НазначитьПособиеПриИзмененииНаСервере();
КонецЕсли;
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаСобытияПриИзменении(Элемент)
ДатаНачалаСобытияПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура РасчетПоПравилам2010ГодаПриИзменении(Элемент)
РасчетПоПравилам2010ГодаПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура НадписьПервичныйЛистокНетрудоспособностиНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВыводитьСообщенияПриРасчете = Ложь;
Если ЕстьФиксированныеДанные(ЭтотОбъект) Тогда
Оповещение = Новый ОписаниеОповещения("ПервичныйБольничныйЛистНачалоВыбораПослеОтветаНаВопрос", ЭтотОбъект);
ПоказатьВопрос(Оповещение, НСтр("ru = 'Ручные исправления таблиц документа будут потеряны. Продолжить?'"), РежимДиалогаВопрос.ДаНет);
Иначе
ПервичныйБольничныйЛистНачалоВыбораПослеОтветаНаВопрос(КодВозвратаДиалога.Да, Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НадписьСтажНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Не ЗначениеЗаполнено(Объект.Сотрудник) Тогда
Текст = НСтр("ru = 'Не выбран сотрудник'");
СообщенияБЗККлиентСервер.СообщитьВФорме(Текст, "Объект.Сотрудник");
Возврат;
КонецЕсли;
Если ЕстьФиксированныеДанные(ЭтотОбъект) Тогда
Оповещение = Новый ОписаниеОповещения("НадписьСтажНажатиеПродолжение", ЭтотОбъект);
ПоказатьВопрос(Оповещение, НСтр("ru = 'Ручные исправления таблиц документа будут потеряны. Продолжить?'"), РежимДиалогаВопрос.ДаНет);
Иначе
НадписьСтажНажатиеПродолжение(КодВозвратаДиалога.Да, Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьЗарплатуПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьВидимостьПолейНормыВремени(
ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Объект.РассчитатьЗарплату);
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДоходПолученНаТерриторииРФПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДоначислитьЗарплатуПриНеобходимостиПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ИсправленныеОтпускаСсылкаНажатие(Элемент)
Если ИсправленныеОтпуска.Количество() = 1 Тогда
ПараметрыФормы = Новый Структура("Ключ", ИсправленныеОтпуска[0].Значение);
ОткрытьФорму("Документ.Отпуск.ФормаОбъекта", ПараметрыФормы);
Иначе
Список = Новый СписокЗначений;
Оповещение = Новый ОписаниеОповещения("ПослеВыбораИсправленногоОтпускаИзМеню", ЭтотОбъект, Параметры);
Для Каждого ИсправленныйОтпуск Из ИсправленныеОтпуска Цикл
Список.Добавить(ИсправленныйОтпуск.Значение, ИсправленныйОтпуск.Значение);
КонецЦикла;
ПоказатьВыборИзМеню(Оповещение, Список, Элементы.ИсправленныеОтпускаСсылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораИсправленногоОтпускаИзМеню(ВыбранныйЭлемент, Параметры) Экспорт
Если ВыбранныйЭлемент <> Неопределено Тогда
ПараметрыФормы = Новый Структура("Ключ", ВыбранныйЭлемент.Значение);
ОткрытьФорму("Документ.Отпуск.ФормаОбъекта", ПараметрыФормы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТребуетсяРассчитатьПродлениеОтпускаСсылкаНажатие(Элемент)
Если ОтпускаТребующиеИсправленияБезРасчета.Количество() = 1 Тогда
ПараметрыФормы = Новый Структура("Ключ", ОтпускаТребующиеИсправленияБезРасчета[0].Значение);
ОткрытьФорму("Документ.Отпуск.ФормаОбъекта", ПараметрыФормы);
Иначе
Список = Новый СписокЗначений;
Оповещение = Новый ОписаниеОповещения("ПослеВыбораИсправленногоОтпускаИзМеню", ЭтотОбъект, Параметры);
Для Каждого ОтпускБезРасчета Из ОтпускаТребующиеИсправленияБезРасчета Цикл
Список.Добавить(ОтпускБезРасчета.Значение, ОтпускБезРасчета.Значение);
КонецЦикла;
ПоказатьВыборИзМеню(Оповещение, Список, Элементы.ТребуетсяРассчитатьПродлениеОтпускаСсылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтпускаТребующиеИсправленияСРасчетомСсылкаНажатие(Элемент)
Если ОтпускаТребующиеИсправленияСРасчетом.Количество() = 1 Тогда
СоздатьИсправлениеОтпуска(ОтпускаТребующиеИсправленияСРасчетом[0].Значение);
Иначе
Оповещение = Новый ОписаниеОповещения("ПослеВыбораОтпускаИзМеню", ЭтотОбъект, Параметры);
ПоказатьВыборИзМеню(Оповещение, ОтпускаТребующиеИсправленияСРасчетом, Элементы.ОтпускаТребующиеИсправленияСРасчетомСсылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораОтпускаИзМеню(ВыбранныйЭлемент, Параметры) Экспорт
Если ВыбранныйЭлемент <> Неопределено Тогда
СоздатьИсправлениеОтпуска(ВыбранныйЭлемент.Значение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КарантинПоКоронавирусуПриИзменении(Элемент)
КарантинПоКоронавирусуПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура УсловияИсчисленияКод1ПриИзменении(Элемент)
УсловияИсчисленияКодПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура УсловияИсчисленияКод2ПриИзменении(Элемент)
УсловияИсчисленияКодПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура УсловияИсчисленияКод3ПриИзменении(Элемент)
УсловияИсчисленияКодПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ИсключаемыеПериодыВШапкеНадписьНажатие(Элемент)
ИзменитьПериодыНаКлиенте("ИсключаемыеПериоды");
КонецПроцедуры
&НаКлиенте
Процедура ИсключаемыеПериодыНадписьНажатие(Элемент)
ИзменитьПериодыНаКлиенте("ИсключаемыеПериоды");
КонецПроцедуры
&НаКлиенте
Процедура ТребуетсяПересчитатьОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка)
Если Ссылка = "Исправить" Тогда
СтандартнаяОбработка = Ложь;
ИсправлениеДокументовЗарплатаКадрыКлиент.Исправить(ЭтотОбъект, , Новый Структура("ЗаполнитьИсключаемыеПериоды", Истина));
ИначеЕсли Ссылка = "ЗаполнитьИсключаемыеПериоды" Тогда
СтандартнаяОбработка = Ложь;
ЗаполнитьИсключаемыеПериоды(Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТребуетсяПересчитатьВШапкеОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка)
ТребуетсяПересчитатьОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ИсточникСреднегоПриИзменении(Элемент)
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
Рассчитать(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент");
МодульУчетОригиналовПервичныхДокументовКлиент.ОткрытьМенюВыбораСостояния(ЭтотОбъект,Элементы["ДекорацияСостояниеОригинала"]);
КонецЕсли;
КонецПроцедуры
#Область ПрямыеВыплатыФСС
&НаКлиенте
Процедура ПособиеВыплачиваетсяФССПриИзменении(Элемент)
ОбновитьСведенияДляФСС();
КонецПроцедуры
&НаКлиенте
Процедура СсылкиПрямыхВыплатФССОбработкаНавигационнойСсылки(Элемент, Адрес, СтандартнаяОбработка)
Если Адрес = "СоздатьСведения" Тогда
СтандартнаяОбработка = Ложь;
СоздатьСведенияДляПрямыхВыплатФСС();
ИначеЕсли Адрес = "ПоказатьВсе" Тогда
СтандартнаяОбработка = Ложь;
ПоказатьВсеСведенияДляПрямыхВыплатФСС();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ЭЛН
&НаКлиенте
Процедура ОтправитьЭЛНПриИзменении(Элемент)
ОтправитьЭЛНПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ИсправлениеЭЛНПриИзменении(Элемент)
ИсправлениеЭЛНПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ИсправлениеЭЛНЧисломПриИзменении(Элемент)
ИсправлениеЭЛНЧисломПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура КодПричиныИсправленияЭЛНПриИзменении(Элемент)
Если Не ЗначениеЗаполнено(ОписаниеПричиныИсправленияЭЛН)
Или ОписаниеПричиныИсправленияЭЛН = Элементы.КодПричиныИсправленияЭЛН.Подсказка Тогда
ОписаниеПричиныИсправленияЭЛН = НаименованиеПричиныИсправленияЭЛН(ЭтотОбъект);
КонецЕсли;
ОбновитьЭлементыЭЛН();
КонецПроцедуры
&НаКлиенте
Процедура ОписаниеПричиныИсправленияЭЛННачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.КомментарийНачалоВыбора(
ЭтотОбъект,
Элемент,
ДанныеВыбора,
СтандартнаяОбработка,
"ОписаниеПричиныИсправленияЭЛН",
Элемент.ПодсказкаВвода);
КонецПроцедуры
&НаКлиенте
Процедура СсылкиРеестровЭЛНОбработкаНавигационнойСсылки(Элемент, Адрес, СтандартнаяОбработка)
Если Адрес = "ПринятыйРеестрЭЛН" Тогда
СтандартнаяОбработка = Ложь;
УчетПособийСоциальногоСтрахованияКлиент.ОткрытьРеестрЭЛН(
СведенияОбЭЛН.ПринятыйРеестр,
Объект.НомерЛисткаНетрудоспособности);
ИначеЕсли Адрес = "ПодготовленныйРеестрЭЛН" Тогда
СтандартнаяОбработка = Ложь;
УчетПособийСоциальногоСтрахованияКлиент.ОткрытьРеестрЭЛН(
СведенияОбЭЛН.ПодготовленныйРеестр,
Объект.НомерЛисткаНетрудоспособности);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Подвал
&НаКлиенте
Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.КомментарийНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ПериодыПростояНадписьНажатие(Элемент)
ИзменитьПериодыНаКлиенте("ПериодыПростоя");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПериодыУходаЗаРодственниками
&НаКлиенте
Процедура ПериодыУходаЗаРодственникамиПриИзменении(ТаблицаФормы)
ИмяКолонки = ТаблицаФормы.ТекущийЭлемент.Имя;
ИдентификаторСтроки = ТаблицаФормы.ТекущаяСтрока;
НеобходимоПерезаполнитьНачисления = Истина;
ПериодыУходаЗаРодственникамиПриИзмененииНаСервере(ИмяКолонки, ИдентификаторСтроки, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПериодыУходаЗаРодственникамиВыбор(ТаблицаФормы, ИдентификаторСтроки, Поле, СтандартнаяОбработка)
Если Поле = Элементы.ПериодыУходаЗаРодственникамиПредставлениеРодственника
Или Поле = Элементы.ПериодыУходаЗаРодственникамиДатаРождения
Или Поле = Элементы.ПериодыУходаЗаРодственникамиПредставлениеВозраста Тогда
СтандартнаяОбработка = Ложь;
ОткрытьФормуВыбораРодственника();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПериодыУходаЗаРодственникамиПередНачаломДобавления(ТаблицаФормы, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
Если Копирование Тогда
ДобавитьПериодУхода(ТаблицаФормы.ТекущаяСтрока);
Иначе
ИмяФормыВыбора = "Справочник.РодственникиФизическихЛиц.ФормаВыбора";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура);
ПараметрыФормы.Отбор.Вставить("Владелец", Объект.ФизическоеЛицо);
ПараметрыФормы.Вставить("РежимВыбора", Истина);
Обработчик = Новый ОписаниеОповещения("ДобавитьПериодУходаПослеВыбораРодственника", ЭтотОбъект);
Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
ОткрытьФорму(ИмяФормыВыбора, ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Блокировать);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисления
&НаКлиенте
Процедура НачисленияПриИзменении(Элемент)
ОтключитьОбработчикОжидания("ПослеИзмененияНачисленийНаКлиенте");
ПодключитьОбработчикОжидания("ПослеИзмененияНачисленийНаКлиенте", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтотОбъект, "Начисления", Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтотОбъект, "Начисления", Элементы.Начисления.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтотОбъект);
ОбновитьНачисленоУдержаноИтог(ЭтотОбъект, НачисленияРаботодателя());
ОтключитьОбработчикОжидания("ПослеИзмененияНачисленийНаКлиенте");
ПодключитьОбработчикОжидания("ПослеИзмененияНачисленийНаКлиенте", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередУдалением(Элемент, Отказ)
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПослеУдаления(Элемент)
РассчитатьСотрудникаНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияНачислениеПриИзменении(Элемент)
ОписаниеТаблицыНачислений = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтотОбъект, ОписаниеТаблицыНачислений, 2);
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтотОбъект, ОписаниеТаблицыНачислений, Ложь, Истина);
ОбновитьНачисленоУдержаноИтог(ЭтотОбъект, НачисленияРаботодателя());
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДатаНачалаПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДатаОкончанияПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Ложь, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисленияПерерасчет
&НаКлиенте
Процедура НачисленияПерерасчетПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ДобавитьИзмененныеДанныеПерерасчета(Элемент.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтотОбъект, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтотОбъект);
ОбновитьНачисленоУдержаноИтог(ЭтотОбъект, НачисленияРаботодателя());
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриИзменении(Элемент)
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияПерерасчетВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтотОбъект, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтотОбъект, "НачисленияПерерасчет", Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
РасчетЗарплатыРасширенныйКлиент.ПередНачаломДобавленияСтрокиПерерасчета(Элемент, Отказ, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередУдалением(Элемент, Отказ)
РасчетЗарплатыРасширенныйКлиент.ПередУдалениемСтрокиПерерасчета(ЭтотОбъект, "НачисленияПерерасчет", Элемент, Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
ДобавитьИзмененныеДанныеПерерасчета(Элемент.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтотОбъект, "НачисленияПерерасчет", Элементы.НачисленияПерерасчет.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПослеУдаления(Элемент)
ПослеУдаленияПерерасчета();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетНачислениеПриИзменении(Элемент)
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтотОбъект, ОписаниеТаблицыВидовРасчета, 2);
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтотОбъект, ОписаниеТаблицыВидовРасчета, Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетРезультатПриИзменении(Элемент)
ОбновитьПерерасчетИтог(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетДатаНачалаПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтотОбъект, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетДатаОкончанияПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтотОбъект, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Ложь, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыУправленческиеНачисления
&НаКлиенте
Процедура УправленческиеНачисленияПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтотОбъект, "УправленческиеНачисления", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтотОбъект, "УправленческиеНачисления", Элементы.УправленческиеНачисления.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриОкончанииРедактированияСтрокиНачисленияЗарплаты(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПередУдалением(Элемент, Отказ)
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПослеУдаления(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПослеУдаленияСтрокиНачисленияЗарплаты(ЭтотОбъект, Объект.Сотрудник);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияНачислениеПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриИзмененииНачисленияСтрокиНачисленияЗарплаты(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияДатаНачалаПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриИзмененииДатыНачалаСтрокиНачисленияЗарплаты(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияДатаОкончанияПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриИзмененииДатыОкончанияСтрокиНачисленияЗарплаты(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.УправленческиеНачисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтотОбъект, Элементы.УправленческиеНачисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.УправленческиеНачисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПодробно(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриНажатииКнопкиПоказатьПодробностиРасчета(ЭтотОбъект, Элементы.УправленческиеНачисленияПодробно);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_УправленческиеНачисленияОтменитьИсправление(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриОтменеИсправленияНачисленияЗарплаты(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграцииС1САрхивом(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивомКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСАрхивомКлиент");
МодульОбменСАрхивомКлиент.ВыполнитьПодключаемуюКоманду(Команда, ЭтотОбъект, Объект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуИнтеграцииС1САрхивомНаСервере(Знач Параметры) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивом = ОбщегоНазначения.ОбщийМодуль("ОбменСАрхивом");
МодульОбменСАрхивом.ВыполнитьПодключаемуюКоманду(ЭтотОбъект, Параметры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ИнтеграцияС1САрхивом_Нажатие(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивомКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСАрхивомКлиент");
МодульОбменСАрхивомКлиент.Нажатие(Элемент, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСреднийЗаработок(Команда)
Оповещение = Новый ОписаниеОповещения("ОткрытьСреднийЗаработокЗавершение", ЭтотОбъект);
УчетСреднегоЗаработкаКлиент.ОткрытьФормуВводаСреднегоЗаработкаФСС(
ПараметрыРедактированияСреднегоЗаработка(),
ЭтотОбъект,
Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПодробно(Команда)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтотОбъект, Не Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйВызовСервера.СохранитьНастройкуРежимаОтображенияПодробно(Объект.Ссылка, Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
Элементы.НачисленияПроцентОплаты.Видимость = Элементы.НачисленияПодробно.Пометка;
Элементы.НачисленияПроцентОплатыБезЛьгот.Видимость = Элементы.НачисленияПодробно.Пометка;
Элементы.НачисленияОграничениеПособия.Видимость = Элементы.НачисленияПодробно.Пометка;
Элементы.НачисленияОграничениеПособияБезЛьгот.Видимость = Элементы.НачисленияПодробно.Пометка;
КонецПроцедуры
&НаКлиенте
Процедура ПерерасчетПодробно(Команда)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтотОбъект, Не Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйВызовСервера.СохранитьНастройкуРежимаОтображенияПодробно(Объект.Ссылка,Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Рассчитать(Команда) Экспорт
ОчиститьСообщения();
ВыводитьСообщенияПриРасчете = Истина;
РассчитатьНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПерерасчетОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтотОбъект, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПерерасчетРазрешеноРедактироватьСторно(Команда)
РасчетЗарплатыРасширенныйКлиент.НастроитьРедактированиеСторно(ЭтотОбъект, Команда.Имя);
КонецПроцедуры
&НаКлиенте
Процедура ПодробнееОРасчетеУдержаний(Команда)
ОбработчикВыбора = Новый ОписаниеОповещения("ПослеИзмененияСведенийОбУдержаниях", ЭтотОбъект);
РасчетЗарплатыРасширенныйКлиент.ПодробнееОРасчетеУдержаний(Объект, "БольничныйЛист", ОписаниеДокумента(ЭтотОбъект), ОбработчикВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПодробнееОРасчетеНДФЛ(Команда)
ОбработчикВыбора = Новый ОписаниеОповещения("ПослеИзмененияСведенийОРасчетеНДФЛ", ЭтотОбъект);
УчетНДФЛКлиент.ОткрытьФормуПодробнееОРасчетеНДФЛ(Объект.Организация, ЭтотОбъект, Объект.ПериодРегистрации, Объект.Сотрудник,
Объект.ПланируемаяДатаВыплаты, , ОбработчикВыбора);
КонецПроцедуры
&НаСервере
Функция НДФЛПодробнееНаСервере(ФизическиеЛица) Экспорт
Если ТипЗнч(ФизическиеЛица) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическиеЛица);
Иначе
СписокФизическихЛиц = ФизическиеЛица;
КонецЕсли;
ДокументОбъект = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(ДокументОбъект);
Возврат УчетНДФЛФормы.РегистрНалоговогоУчетаПоНДФЛ(ДокументОбъект, Модифицированность, СписокФизическихЛиц, Объект.ПериодРегистрации);
КонецФункции
#Область ДенежноеСодержание
&НаКлиенте
Процедура ОткрытьДенежноеСодержание(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Оповещение = Новый ОписаниеОповещения("ОткрытьОткрытьДенежноеСодержаниеЗавершение", ЭтотОбъект);
СтруктураОбъекта = ПодготовитьСтруктуруОбъектаДляРасчетаДенежногоСодержания();
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("РасчетДенежногоСодержанияКлиент");
Модуль.ОткрытьФормуВводаСохраняемогоДенежногоСодержания(СтруктураОбъекта, "БольничныйЛист","ВременнаяНетрудоспособность", ЭтаФорма, Оповещение);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура КорректировкаВыплатыПриИзменении(Элемент)
Объект.КорректировкиВыплаты.Очистить();
Если КорректировкаВыплаты <> 0 Тогда
НоваяСтрока = Объект.КорректировкиВыплаты.Добавить();
НоваяСтрока.КорректировкаВыплаты = КорректировкаВыплаты;
НоваяСтрока.ФизическоеЛицо = Объект.ФизическоеЛицо;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КорректировкаВыплатыПодробно(Команда)
ПараметрыФормы = УчетНДФЛФормыКлиент.ПараметрыРедактированияКорректировокВыплаты();
ПараметрыФормы.ТолькоПросмотр = ТолькоПросмотр;
ПараметрыФормы.Организация = Объект.Организация;
ПараметрыФормы.МесяцНачисления = Объект.ПериодРегистрации;
ПараметрыФормы.СотрудникФизическоеЛицо = Объект.Сотрудник;
ПараметрыФормы.ДанныеКорректировокВыплаты = ДанныеКорректировокВыплаты();
Обработчик = Новый ОписаниеОповещения("ПриОкончанииРедактированияКорректировокВыплаты", ЭтотОбъект);
УчетНДФЛФормыКлиент.НачатьРедактированиеКорректировокВыплаты(ПараметрыФормы, Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура КомандаПровестиИЗакрыть(Команда) Экспорт
ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);
ЗаписатьНаКлиенте(Истина, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура КомандаПровести(Команда)
ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);
ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура КомандаЗаписать(Команда)
ПараметрыЗаписи = Новый Структура("РежимЗаписи", ?(Объект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
КонецПроцедуры
#Область ЭЛН
&НаКлиенте
Процедура ПолучитьИзФСС(Команда)
ОчиститьСообщения();
Если Не РазрешеноПолучениеИзФСС() Тогда
Возврат;
КонецЕсли;
Результат = ПолучитьИзФССНаСервере();
Если Результат.БольничныйЗаполнен Тогда
ПослеУспешнойЗагрузкиЭЛН();
Иначе
НачатьПолучениеДанныхИзФСС(Результат.ЗапросДляПолученияЭЛН);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьИзФССБезКэша(Команда)
НачатьПолучениеДанныхИзФСС(ВыгрузитьЗапросДляПолученияЭЛН());
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
Обработчик = Новый ОписаниеОповещения("ПослеВыбораФайлаЭЛН", ЭтотОбъект);
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ПараметрыЗагрузки.Диалог.Фильтр = НСтр("ru = 'Файлы XML (*.xml)|*.xml|Все файлы (*.*)|*'");
ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл ЭЛН, полученный из СФР'");
ФайловаяСистемаКлиент.ЗагрузитьФайл(Обработчик, ПараметрыЗагрузки);
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьФайл(Команда)
ОписаниеФайла = ОписаниеФайлаЭЛН(Объект.НомерЛисткаНетрудоспособности, Объект.ГоловнаяОрганизация, УникальныйИдентификатор);
УчетПособийСоциальногоСтрахованияКлиент.СохранитьФайлXML(ОписаниеФайла);
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьБольничный(Команда)
ВыводитьСообщенияПриРасчете = Ложь;
ЗаполнитьБольничныйПоДаннымЛисткаНетрудоспособности();
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьВсеРеестрыЭЛН(Команда)
ОтборыСписка = Новый Структура;
ОтборыСписка.Вставить("ГоловнаяОрганизация", Объект.ГоловнаяОрганизация);
ОтборыСписка.Вставить("Организация", Объект.Организация);
ПараметрыСписка = Новый Структура;
ПараметрыСписка.Вставить("Отбор", ОтборыСписка);
ПараметрыСписка.Вставить("НомерЛисткаНетрудоспособности", Объект.НомерЛисткаНетрудоспособности);
УникальностьСписка = Объект.НомерЛисткаНетрудоспособности;
ОткрытьФорму("Документ.РеестрДанныхЭЛНЗаполняемыхРаботодателем.ФормаСписка", ПараметрыСписка, , УникальностьСписка);
КонецПроцедуры
#КонецОбласти
#Область ИсключаемыеПериоды
&НаКлиенте
Процедура ИзменитьИсключаемыеПериоды(Команда)
ИзменитьПериодыНаКлиенте("ИсключаемыеПериоды");
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьИсключаемыеПериоды(Команда)
ЗаполнитьИсключаемыеПериодыНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьИсключаемыеПериоды(Команда)
ОчиститьИсключаемыеПериодыНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
#КонецОбласти
#Область ПриостановленияТрудовыхДоговоров
&НаКлиенте
Процедура ИзменитьПриостановленияТрудовыхДоговоров(Команда)
Если Не ЗначениеЗаполнено(Объект.ДатаНачалаСобытия) Тогда
СообщенияБЗККлиентСервер.СообщитьВФорме(НСтр("ru = 'Не дата начала нетрудоспособности.'"), "Объект.ДатаНачалаСобытия");
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ГоловнаяОрганизация) Тогда
СообщенияБЗККлиентСервер.СообщитьВФорме(НСтр("ru = 'Не выбрана организация.'"), "Объект.Организация");
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ФизическоеЛицо) Тогда
СообщенияБЗККлиентСервер.СообщитьВФорме(НСтр("ru = 'Не выбран сотрудник.'"), "Объект.Сотрудник");
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод) Тогда
СообщенияБЗККлиентСервер.СообщитьВФорме(НСтр("ru = 'Не определен первый год расчета среднего заработка.'"), "Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод");
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ПериодРасчетаСреднегоЗаработкаВторойГод) Тогда
СообщенияБЗККлиентСервер.СообщитьВФорме(НСтр("ru = 'Не определен второй год расчета среднего заработка.'"), "Объект.ПериодРасчетаСреднегоЗаработкаВторойГод");
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура("АдресСтруктурыБольничного", АдресСтруктурыБольничногоДляФормыПриостановленияТрудовыхДоговоров());
Обработчик = Новый ОписаниеОповещения("ПослеВводаПриостановленийТрудовыхДоговоров", ЭтотОбъект, ПараметрыФормы);
ОткрытьФорму("Документ.БольничныйЛист.Форма.ПриостановленияТрудовыхДоговоров", ПараметрыФормы, ЭтотОбъект, , , , Обработчик);
КонецПроцедуры
&НаСервере
Функция АдресСтруктурыБольничногоДляФормыПриостановленияТрудовыхДоговоров()
ИменаСвойств =
"Ссылка, ДатаНачала, ДатаОкончания, ДатаНачалаСобытия,
|Организация, ГоловнаяОрганизация, Сотрудник, ФизическоеЛицо,
|ПричинаНетрудоспособности, НачалоВПериодПриостановленияТД,
|ДнейПриостановленияТДЗаГод1, ДнейПриостановленияТДЗаГод2,
|ПериодРасчетаСреднегоЗаработкаНачало, ПериодРасчетаСреднегоЗаработкаОкончание,
|ПериодРасчетаСреднегоЗаработкаПервыйГод, ПериодРасчетаСреднегоЗаработкаВторойГод";
СтруктураБольничного = Новый Структура(ИменаСвойств);
ЗаполнитьЗначенияСвойств(СтруктураБольничного, Объект, ИменаСвойств);
СтруктураБольничного.Вставить("ПриостановленияТрудовыхДоговоров", Объект.ПриостановленияТрудовыхДоговоров.Выгрузить());
Возврат ПоместитьВоВременноеХранилище(СтруктураБольничного, УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ПослеВводаПриостановленийТрудовыхДоговоров(РезультатВыбора, ПараметрыФормы) Экспорт
Если ТипЗнч(РезультатВыбора) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
ПослеВводаПриостановленийТрудовыхДоговоровНаСервере(РезультатВыбора, ПараметрыФормы);
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаСервере
Процедура ПослеВводаПриостановленийТрудовыхДоговоровНаСервере(Знач РезультатВыбора, Знач ПараметрыФормы)
УдалитьИзВременногоХранилища(ПараметрыФормы.АдресСтруктурыБольничного);
Объект.НачалоВПериодПриостановленияТД = РезультатВыбора.НачалоВПериодПриостановленияТД;
Объект.ПриостановленияТрудовыхДоговоров.Очистить();
Для Каждого Структура Из РезультатВыбора.ПриостановленияТрудовыхДоговоров Цикл
Период = Объект.ПриостановленияТрудовыхДоговоров.Добавить();
ЗаполнитьЗначенияСвойств(Период, Структура);
КонецЦикла;
ПроверитьПриостановленияТрудовыхДоговоров(Истина);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПриостановленияТрудовыхДоговоров()
Если Не Документы.БольничныйЛист.ЗаполнитьПриостановленияТД(Объект) Тогда
Возврат;
КонецЕсли;
ПроверитьПриостановленияТрудовыхДоговоров(Истина);
КонецПроцедуры
&НаСервере
Процедура ПроверитьПриостановленияТрудовыхДоговоров(ИзмененияРазрешены, РезультатыПроверкиПриостановленийТД = Неопределено)
Если РезультатыПроверкиПриостановленийТД = Неопределено Тогда
РезультатыПроверкиПриостановленийТД = Документы.БольничныйЛист.РезультатПроверкиПриостановленийТД(Объект,
ИзмененияРазрешены);
КонецЕсли;
Если РезультатыПроверкиПриостановленийТД.Найти(Истина, "Ошибка") = Неопределено Тогда
Элементы.ДнейПриостановленияТД.ЦветТекста = Новый Цвет;
Иначе
Элементы.ДнейПриостановленияТД.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст;
КонецЕсли;
ДнейПриостановленияТД = Объект.ДнейПриостановленияТДЗаГод1 + Объект.ДнейПриостановленияТДЗаГод2;
КонецПроцедуры
#КонецОбласти
#Область БлокировкаИзмененияОбъектов
&НаКлиенте
Процедура Подключаемый_РазблокироватьФормуОбъекта(Команда)
БлокировкаИзмененияОбъектовКлиент.РазблокироватьФормуОбъекта(ЭтотОбъект, Объект.Ссылка);
КонецПроцедуры
#КонецОбласти
#Область ПериодыУходаЗаРодственниками
&НаКлиенте
Процедура ЗаполнитьПериодыУходаЗаРодственникамиПоДаннымЛН(Команда)
ЗаполнитьПериодыУходаЗаРодственникамиПоДаннымЛННаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПериодыУходаЗаРодственникамиОтменитьИзменения(Команда)
ЕстьИзменения = Ложь;
Для Каждого СтрокаТаблицы Из Объект.ПериодыУходаЗаРодственниками Цикл
Если СтрокаТаблицы.КоличествоДнейИзменено Тогда
СтрокаТаблицы.КоличествоДнейИзменено = Ложь;
ЕстьИзменения = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьИзменения Тогда
ПериодыУходаЗаРодственникамиПриИзмененииНаСервере("", Неопределено, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПериодыУходаЗаРодственникамиПодробно(Команда)
ПериодыУходаЗаРодственникамиПодробно = Не ПериодыУходаЗаРодственникамиПодробно;
ПериодыУходаЗаРодственникамиПодробноОбновитьВидимость();
КонецПроцедуры
&НаКлиенте
Процедура ВключитьВозможностьИзмененияПериодовУхода(Команда)
Элементы.ПериодыУходаЗаРодственникамиВключитьВозможностьИзменения.Пометка = Не Элементы.ПериодыУходаЗаРодственникамиВключитьВозможностьИзменения.Пометка;
ОбновитьВидимостьДоступностьСтраницыУходЗаРодственниками();
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ОчиститьПериодыПростоя(Команда)
ОчиститьПериодыПростояНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ОбновитьПодключаемыеКоманды(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область Свойства
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область КонтрольВеденияУчета
&НаКлиенте
Процедура Подключаемый_ОткрытьОтчетПоПроблемам(ЭлементИлиКоманда, НавигационнаяСсылка, СтандартнаяОбработка)
КонтрольВеденияУчетаКлиентБЗК.ОткрытьОтчетПоПроблемамОбъекта(ЭтотОбъект, Объект.Ссылка, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Команда, Объект)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Контекст, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийСледующемуНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПодписиДокументов
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементПриИзменении(Элемент)
ПодписиДокументовКлиент.ПриИзмененииПодписывающегоЛица(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементНажатие(Элемент)
ПодписиДокументовКлиент.РасширеннаяПодсказкаНажатие(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры
#КонецОбласти
#Область ИсправлениеДокументов
&НаКлиенте
Процедура Подключаемый_Исправить(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.Исправить(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Сторнировать(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.Сторнировать(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправлению(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправлению(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправленному(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправленному(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКСторно(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКСторно(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПоляИсправленияНаКлиенте() Экспорт
УстановитьПоляИсправления(ЭтаФорма);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПоляИсправления(Форма)
ИсправлениеДокументовЗарплатаКадрыКлиентСервер.УстановитьПоляИсправления(Форма);
КонецПроцедуры
#КонецОбласти
#Область ПорядокВыплатыЗарплаты
&НаКлиенте
Процедура Подключаемый_ПорядокВыплатыПриИзменении(Элемент)
Если ЗначениеЗаполнено(Объект.ПорядокВыплаты) Тогда
ПорядокВыплатыПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
Иначе
ОчиститьРассчитанныеДанные();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПланируемаяДатаВыплатыПриИзменении(Элемент)
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
#КонецОбласти
#Область МногофункциональныеДокументы
&НаСервере
Процедура ПрочитатьПраваНаДокумент()
ПраваНаДокумент = Документы.БольничныйЛист.ПраваНаДокумент(Объект);
РегистрацияНачисленийДоступна = ПраваНаДокумент.ПолныеПраваПоРолям;
ОграниченияНаУровнеЗаписей = Новый ФиксированнаяСтруктура(ПраваНаДокумент.ОграниченияНаУровнеЗаписей);
ЕстьПраваНаРедактированиеКадровыхДанных =
ОграниченияНаУровнеЗаписей.ИзменениеКадровыхДанных
И ПравоДоступа("Редактирование", Метаданные.Документы.БольничныйЛист.Реквизиты.Сотрудник);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДокументРассчитанПриИзменении(Элемент)
ДокументРассчитанПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ДокументРассчитанПриИзмененииНаСервере()
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтотОбъект, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойствоДокументРассчитан()
Если ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений Тогда
Объект.ДокументРассчитан = Истина;
КонецЕсли;
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтотОбъект, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
КонецПроцедуры
#КонецОбласти
#Область РаспределениеПоТерриториямУсловиямТруда
&НаКлиенте
Процедура ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПараметрыДляВыбора = РасчетЗарплатыРасширенныйКлиент.ПараметрыДляВыбораПолеРаспределениеПоТерриториямУсловиямТруда();
ПараметрыДляВыбора.Форма = ЭтотОбъект;
ПараметрыДляВыбора.ОписаниеДокумента = ОписаниеДокумента(ЭтотОбъект);
ПараметрыДляВыбора.ОписаниеТаблицы = ОписаниеТаблицы;
РасчетЗарплатыРасширенныйКлиент.ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, ПараметрыДляВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ЭтотОбъект, ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(ЭтотОбъект, РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Функция ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда()
Описания = Новый Массив;
Описания.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
Описания.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
Возврат Описания;
КонецФункции
&НаКлиенте
Процедура ПроверитьПересечениеПериодовОтсутствияНаКлиенте(Отказ, ПараметрыЗаписи, ЗакрытьПослеЗаписи)
Если ПараметрыЗаписи.РежимЗаписи <> РежимЗаписиДокумента.Проведение Тогда
Возврат;
КонецЕсли;
РезультатПроверки = ПроверитьПересечениеПериодовОтсутствияНаСервере();
ДанныеСотрудника = РезультатПроверки.ДанныеСотрудников.Получить(Объект.Сотрудник);
Если ДанныеСотрудника = Неопределено Тогда
Возврат;
КонецЕсли;
Если РезультатПроверки.Отказ
И ТипЗнч(ДанныеСотрудника.Регистратор) <> Тип("ДокументСсылка.ПрогулНеявка")
И ТипЗнч(ДанныеСотрудника.Регистратор) <> Тип("ДокументСсылка.ПрогулНеявкаСписком")
И ТипЗнч(ДанныеСотрудника.Регистратор) <> Тип("ДокументСсылка.Отпуск") Тогда
ТекстСообщения = НСтр("ru = 'На период %1 сотруднику уже зарегистрирован больничный документом %2.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДанныеСотрудника.ПредставлениеПериода, ДанныеСотрудника.Регистратор);
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , , , Отказ);
Возврат;
ИначеЕсли ТипЗнч(ДанныеСотрудника.Регистратор) = Тип("ДокументСсылка.Отпуск")
И КонтролироватьПересечениеСОтпусками Тогда
ОбновитьИсправленияОтпусков();
Возврат;
КонецЕсли;
Отказ = Истина;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
ДополнительныеПараметры.Вставить("ЗакрытьПослеЗаписи", ЗакрытьПослеЗаписи);
Если ТипЗнч(ДанныеСотрудника.Регистратор) = Тип("ДокументСсылка.ПростойСотрудников") Тогда
ДополнительныеПараметры.Вставить("Простой", ДанныеСотрудника.Регистратор);
КонецЕсли;
МассивСтрок = Новый Массив;
ТекстВопроса = ?(ДанныеСотрудника.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСотрудника.Увольнение"),
НСтр("ru = 'Сотрудник был уволен %1 '"),
НСтр("ru = 'На период %1 сотруднику уже зарегистрировано отсутствие документом '"));
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ДанныеСотрудника.ПредставлениеПериода);
МассивСтрок.Добавить(ТекстВопроса);
СсылкаДокумента = Новый ФорматированнаяСтрока(Строка(ДанныеСотрудника.Регистратор), , , , ПолучитьНавигационнуюСсылку(ДанныеСотрудника.Регистратор));
МассивСтрок.Добавить(СсылкаДокумента);
МассивСтрок.Добавить(НСтр("ru = '. Провести документ?'"));
ТекстВопроса = Новый ФорматированнаяСтрока(МассивСтрок);
Оповещение = Новый ОписаниеОповещения("ПроверитьПересечениеПериодовОтсутствияНаКлиентеЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьПересечениеПериодовОтсутствияНаКлиентеЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> КодВозвратаДиалога.ОК Тогда
Возврат;
КонецЕсли;
ПараметрыЗаписи = ДополнительныеПараметры.ПараметрыЗаписи;
ПараметрыЗаписи.Вставить("ПроверкаПередЗаписьюВыполнена", Истина);
Если ДополнительныеПараметры.Свойство("Простой") Тогда
ТекстПредупреждения = СтрШаблон(НСтр("ru = 'По сотруднику %1 требуется пересчитать и провести документ простоя '"), Объект.Сотрудник);
СсылкаДокумента = Новый ФорматированнаяСтрока(Строка(ДополнительныеПараметры.Простой), , , , ПолучитьНавигационнуюСсылку(ДополнительныеПараметры.Простой));
МассивСтрок = Новый Массив;
МассивСтрок.Добавить(ТекстПредупреждения);
МассивСтрок.Добавить(СсылкаДокумента);
ТекстПредупреждения = Новый ФорматированнаяСтрока(МассивСтрок);
ДополнительныеПараметры.Удалить("Простой");
Если Записать(ПараметрыЗаписи) Тогда
Оповещение = Новый ОписаниеОповещения("ПредупреждениеПересечениеПериодовПростояЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьПредупреждение(Оповещение, ТекстПредупреждения);
КонецЕсли;
ИначеЕсли Записать(ПараметрыЗаписи) И ДополнительныеПараметры.ЗакрытьПослеЗаписи Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьПересечениеПериодовОтсутствияНаСервере()
ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Сотрудник, "ФизическоеЛицо");
ДругиеСотрудники = КадровыйУчетРасширенный.ДругиеСотрудникиФизическогоЛица(
ФизическоеЛицо, Объект.Организация, Объект.Сотрудник, Объект.ДатаНачала, Объект.ДатаОкончания);
Кэш = Новый Соответствие;
ДанныеСостоянийСотрудников = Документы.БольничныйЛист.ДанныеСостоянийСотрудников(Объект, ДругиеСотрудники, Кэш);
Возврат СостоянияСотрудников.ПроверитьПересечениеПериодовОтсутствия(
ДанныеСостоянийСотрудников,
Объект.Ссылка,
?(ЗначениеЗаполнено(Объект.ИсправленныйДокумент), Объект.ИсправленныйДокумент, ОснованиеПрогулНеявка));
КонецФункции
&НаКлиенте
Процедура ЗаписатьНаКлиенте(ЗакрытьПослеЗаписи, ПараметрыЗаписи)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ЗакрытьПослеЗаписи", ЗакрытьПослеЗаписи);
ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
РассчитыватьБезусловно = Истина;
РасчетЗарплатыРасширенныйКлиент.ВыполнитьРасчетСотрудникаПередЗаписьюДокумента(
ЭтотОбъект, "ЗаписатьНаКлиентеЗавершение", ДополнительныеПараметры, РегистрацияНачисленийДоступна,
ВыполнятьПредварительныйРасчетДокумента, РассчитыватьБезусловно);
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьНаКлиентеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ПараметрыЗаписи = ДополнительныеПараметры.ПараметрыЗаписи;
ЗакрытьПослеЗаписи = ДополнительныеПараметры.ЗакрытьПослеЗаписи;
Отказ = Ложь;
ПроверитьПересечениеПериодовОтсутствияНаКлиенте(Отказ, ПараметрыЗаписи, ЗакрытьПослеЗаписи);
Если Отказ Тогда
Возврат;
КонецЕсли;
ПараметрыЗаписи.Вставить("ПроверкаПередЗаписьюВыполнена", Истина);
Если Записать(ПараметрыЗаписи) И ЗакрытьПослеЗаписи Тогда
Закрыть();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПредупреждениеПересечениеПериодовПростояЗавершение(ДополнительныеПараметры) Экспорт
Если ДополнительныеПараметры.ЗакрытьПослеЗаписи Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область КлючевыеРеквизитыЗаполненияФормы
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыТаблицыОчищаемыеПриИзменении() Экспорт
Возврат Новый Массив;
КонецФункции
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыОписаниеКлючевыхРеквизитов() Экспорт
Массив = Новый Массив;
Если ИспользуетсяРасчетЗарплаты Тогда
Массив.Добавить(Новый Структура("ЭлементФормы", "ПериодРегистрации"));
Массив.Добавить(Новый Структура("ЭлементФормы", "Организация"));
Массив.Добавить(Новый Структура("ЭлементФормы", "Сотрудник"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДатаНачала"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДатаОкончания"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ОграничениеПособия"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ЯвляетсяПродолжениемБолезни"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДатаНарушенияРежима"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДоплачиватьДоСреднегоЗаработка"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПроцентДоплатыЗаДниНетрудоспособности"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПричинаНетрудоспособности"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПорядокВыплаты"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДатаНачалаОплаты"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДатаОкончанияОплаты"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПрименятьЛьготыПриНачисленииПособия"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ФинансированиеФедеральнымБюджетом"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПроцентОплатыБезЛьгот"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ОграничениеПособияБезЛьгот"));
Массив.Добавить(Новый Структура("ЭлементФормы", "УчитыватьЗаработокПредыдущихСтрахователей"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПроцентОплаты"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДоляНеполногоВремени"));
Массив.Добавить(Новый Структура("ЭлементФормы", "РайонныйКоэффициентРФНаНачалоСобытия"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ВидОплатыПособия"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ВидНеоплачиваемогоВремени"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ВидРасчетаДоплаты"));
Массив.Добавить(Новый Структура("ЭлементФормы", "СлучайУходаЗаБольнымРебенком"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДатаНачалаПоловиннойОплаты"));
Массив.Добавить(Новый Структура("ЭлементФормы", "НазначитьПособие"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДатаНачалаСобытия"));
Массив.Добавить(Новый Структура("ЭлементФормы", "РасчетПоПравилам2010Года"));
Массив.Добавить(Новый Структура("ЭлементФормы", "РассчитатьЗарплату"));
Массив.Добавить(Новый Структура("ЭлементФормы", "НадписьПервичныйЛистокНетрудоспособности"));
Массив.Добавить(Новый Структура("ЭлементФормы", "НадписьСтаж"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДоплачиватьДоДенежногоСодержания"));
КонецЕсли;
Для каждого ОписаниеЭлемента Из Массив Цикл
ОписаниеЭлемента.Вставить("ПредупреждениеПриРедактировании", ЗарплатаКадрыРасширенный.КлючевыеРеквизитыЗаполненияФормыТекстПредупрежденияДокументовСАвтоматическимРасчетом());
КонецЦикла;
Возврат Массив
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(Форма)
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(Форма, ?(ЕстьФиксированныеДанные(Форма), ОтображениеПредупрежденияПриРедактировании.Отображать, ОтображениеПредупрежденияПриРедактировании.Авто));
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЕстьФиксированныеДанные(Форма)
Если Не Форма.РегистрацияНачисленийДоступна Тогда
Возврат Ложь;
КонецЕсли;
ИсправленныйДокументЗаполнен = ЗначениеЗаполнено(Форма.Объект.ИсправленныйДокумент);
Возврат РасчетЗарплатыРасширенныйКлиентСервер.ЕстьФиксированныеДанныеВТаблице(Форма, ОписаниеТаблицыНачислений(Форма.РегистрацияНачисленийДоступна), ИсправленныйДокументЗаполнен)
Или РасчетЗарплатыРасширенныйКлиентСервер.ЕстьФиксированныеДанныеВТаблице(Форма, ОписаниеТаблицыПерерасчетов(Форма.РегистрацияНачисленийДоступна), ИсправленныйДокументЗаполнен);
КонецФункции
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтотОбъект, Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтотОбъект, Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ИнициализацияФормы
&НаСервере
Процедура ПриПолученииДанныхНаСервере(ЗаполнитьСсылкиНачислений)
НачатьИнициализациюФормы();
ДобавитьРеквизитыИЭлементыФормы();
ВосстановитьФлажокСотрудникСлужащий();
ПолностьюОбновитьФорму(ЗаполнитьСсылкиНачислений, Истина);
КонецПроцедуры
&НаСервере
Процедура НачатьИнициализациюФормы()
РасчетЗарплатыРасширенныйФормы.ПодготовитьФормуДляПредварительногоРасчетаНачислений(ЭтотОбъект);
ДоступноИзменение = Пользователи.РолиДоступны("ПолныеПрава,ДобавлениеИзменениеПособийФСС");
РаботаВБюджетномУчреждении = ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении");
ПрочитатьПраваНаДокумент();
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
Модуль.ЗаполнитьРеквизитФормыНазначенияРасчетаДенежногоСодержания(ЭтотОбъект);
КонецЕсли;
ДополнитьФорму(Истина);
КонецПроцедуры
&НаСервере
Процедура ДобавитьРеквизитыИЭлементыФормы()
ЗарплатаКадрыРасширенный.ИзменитьРеквизитыФормы(ЭтотОбъект);
РеквизитыКДобавлению.Очистить();
РеквизитыКУдалению.Очистить();
ДополнитьФорму(Ложь);
КонецПроцедуры
&НаСервере
Процедура ВосстановитьФлажокСотрудникСлужащий()
Если Не Объект.СотрудникСлужащий
И ЗначениеЗаполнено(Объект.Сотрудник)
И (Объект.ДенежноеСодержание.Количество() > 0
Или Объект.ДенежноеСодержаниеФактическиеНачисления.Количество() > 0) Тогда
УстановитьПривилегированныйРежим(Истина);
ДанныеСотрудника = КадровыйУчет.КадровыеДанныеСотрудника(
Истина,
Объект.Сотрудник,
"ВидДоговора",
Объект.ДатаНачалаСобытия);
Если ДанныеСотрудника = Неопределено Тогда
Возврат;
КонецЕсли;
Объект.СотрудникСлужащий = Перечисления.ВидыДоговоровССотрудниками.ЭтоДоговорСлужащего(ДанныеСотрудника.ВидДоговора);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПолностьюОбновитьФорму(ЗаполнитьСсылкиНачислений, ОбновитьОстаткиДнейУхода)
УстановитьПривилегированныйРежим(Истина);
ДанныеВРеквизиты();
Кэш = Новый Соответствие;
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьРасчетныхПолей();
ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыЗаполнитьПредупреждения(ЭтотОбъект);
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтотОбъект);
УстановитьДоступностьПорядкаВыплаты();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты();
УстановитьИнфонадписьРасчетаСреднегоЗаработка();
УстановитьСвойстваПоляПервичногоБольничногоЛиста(ЭтотОбъект);
УстановитьСвойстваПолейДоплатыЗаДниНетрудоспособности(ЭтотОбъект);
НастроитьЭлементыДополненияПричиныНетрудоспособности();
УстановитьДоступностьПолейПоПервичномуБольничномуЛисту(ЭтотОбъект);
УстановитьДоступностьРассчитыватьПоПравилам2010();
ОбновитьЭлементыФинансированияФедеральнымБюджетом(ЭтотОбъект);
ДляСотрудникаВведенСтраховойСтаж = Документы.БольничныйЛист.ДляСотрудникаВведенСтраховойСтаж(Объект);
ОбновитьНадписьСтаж(ЭтотОбъект);
УстановитьВидимостьПредупрежденияОНезаполненномСтаже();
Если ЗаполнитьСсылкиНачислений Тогда
ЗаполнитьСсылкиНачислений(Истина);
КонецЕсли;
СторнироватьОтпускВБольничномПриПересеченииПериодов = ПолучитьФункциональнуюОпцию("СторнироватьОтпускВБольничномПриПересеченииПериодов");
КонтролироватьПересечениеСОтпусками = Объект.НеИспользуетсяСторнированиеОтпуска И Не СторнироватьОтпускВБольничномПриПересеченииПериодов;
УстановитьДоступностьКнопокЭЛН();
УстановитьВидимостьПодсказкаОсобыхУсловийИсчисления();
ОпределитьВариантДоплаты();
ОбновитьНачисленоУдержаноИтог(ЭтотОбъект, НачисленияРаботодателя());
ОбновитьПерерасчетИтог(ЭтотОбъект);
ОбновитьНадписьДнейОсвобожденияОтРаботы(ЭтотОбъект);
ОбновитьЭлементыПараметровОплаты();
ОбновитьИсправленияОтпусков();
УстановитьДоступностьПолейВводаНачислений();
ОбновитьНадписиДнейРодственников(ЭтотОбъект);
Если ОбновитьОстаткиДнейУхода Тогда
ОбновитьОстаткиОплачиваемыхДнейПоУходуЗаРодственниками();
КонецЕсли;
УстановитьЗаголовокСреднийЗаработокГруппа();
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтотОбъект, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.НачисленияПерерасчет, "ПериодДействия", "ПериодДействияСтрокой");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриЗавершенииИнициализацииФормыДокументаОплатыТруда(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект), Объект.РассчитатьЗарплату);
КонецЕсли;
УстановитьФункциональныеОпцииФормы();
ОбновитьГиперссылкуВводаДанныхЛисткаНетрудоспособности();
УстановитьСвойствоРассчитатьЗарплату(Кэш);
УстановитьЗаголовокФлажкаРассчитатьЗарплату();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
ОбновитьПредставленияПериодовУхода();
ОбновитьЭлементыСпособРасчетовЗаСчетРаботодателя();
ДатаНачалаДоИзменения = Объект.ДатаНачала;
ДатаОкончанияДоИзменения = Объект.ДатаОкончания;
ПроверитьПриостановленияТрудовыхДоговоров(Ложь);
КонецПроцедуры
&НаСервере
Процедура ДополнитьФорму(ОтложенноеИзменение)
УстановитьПривилегированныйРежим(Истина);
Если ОтложенноеИзменение Тогда
ДобавлятьЭлементыФормы = Ложь;
ДобавлятьРеквизитыФормы = Истина;
Иначе
ДобавлятьЭлементыФормы = Истина;
ДобавлятьРеквизитыФормы = Ложь;
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(
ЭтотОбъект,
ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна),
"Начисления",
,
РегистрацияНачисленийДоступна,
,
ДобавлятьЭлементыФормы,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение,
Объект.Ссылка);
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(
ЭтотОбъект,
ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна),
"Начисления",
,
РегистрацияНачисленийДоступна,
,
ДобавлятьЭлементыФормы,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение,
Объект.Ссылка);
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(
ЭтотОбъект,
ОписаниеТаблицыПерерасчетовНулевыеСторно(),
"Начисления",
,
РегистрацияНачисленийДоступна,
,
Ложь,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение,
Объект.Ссылка);
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(
ЭтотОбъект,
ОписаниеТаблицыУдержаний(),
"Удержания",
,
Ложь,
,
ДобавлятьЭлементыФормы,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение,
Объект.Ссылка);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
МодульГосударственнаяСлужба = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
МодульГосударственнаяСлужба.ДокументыВыполненияНачисленийДополнитьФорму(
ЭтотОбъект,
ОписаниеТаблицыСохраняемоеДенежноеСодержание(),
"Начисления",
,
Ложь,
,
ДобавлятьЭлементыФормы,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение,
Объект.Ссылка);
КонецЕсли;
ДополнительныеПараметры = Новый Структура(
"КонтролируемыеПоля,
|ДобавлятьЭлементыФормы,
|ДобавлятьРеквизитыФормы,
|ОтложенноеИзменение");
ДополнительныеПараметры.ДобавлятьЭлементыФормы = ДобавлятьЭлементыФормы;
ДополнительныеПараметры.ДобавлятьРеквизитыФормы = ДобавлятьРеквизитыФормы;
ДополнительныеПараметры.ОтложенноеИзменение = ОтложенноеИзменение;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
МодульУправленческаяЗарплата = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
МодульУправленческаяЗарплата.ПриДополненииФормыДокументаБольничныйЛист(ЭтотОбъект, ДополнительныеПараметры);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДополнитьФорму(
ЭтотОбъект,
Объект.Организация,
ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда(),
ДобавлятьЭлементыФормы,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение);
ИсправлениеДокументовЗарплатаКадры.ГруппаИсправлениеДополнитьФорму(
ЭтотОбъект,
ДобавлятьЭлементыФормы,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение);
РасчетЗарплатыРасширенныйФормы.ПорядокВыплатыЗарплатыДополнитьФорму(
ЭтотОбъект,
,
ДобавлятьЭлементыФормы,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение);
Если ДобавлятьРеквизитыФормы Тогда
ЗначенияРеквизитов = Новый Структура("НастройкиДатВыплаты", Null);
ЗаполнитьЗначенияСвойств(ЗначенияРеквизитов, ЭтотОбъект);
Если ЗначенияРеквизитов.НастройкиДатВыплаты = Null Тогда
Реквизит = Новый РеквизитФормы("НастройкиДатВыплаты", Новый ОписаниеТипов());
ИзменитьРеквизиты(ОбщегоНазначенияКлиентСервер.МассивЗначений(Реквизит));
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ЦепочкиДокументов") Тогда
МодульЦепочкиДокументовФормы = ОбщегоНазначения.ОбщийМодуль("ЦепочкиДокументовФормы");
МодульЦепочкиДокументовФормы.ДополнитьФормуДокументаЭлементамиЗамещения(
ЭтотОбъект,
ДобавлятьЭлементыФормы,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.ДокументыНачисленийДополнитьФормуРезультатыРаспределения(
ЭтотОбъект,
ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна),
ДобавлятьЭлементыФормы,
ДобавлятьРеквизитыФормы,
ОтложенноеИзменение);
Если ДобавлятьЭлементыФормы Тогда
ЗарплатаКадрыРасширенный.МногофункциональныеДокументыДобавитьЭлементыФормы(
ЭтотОбъект,
НСтр("ru='Расчет утвердил'"),
,
,
"Рассчитал");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Организации
&НаСервере
Процедура УстановитьФункциональныеОпцииФормы()
УстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("Организация", Объект.Организация));
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "РайонныйКоэффициентРФНаНачалоСобытия", "Видимость", ПолучитьФункциональнуюОпциюФормы("ПрименятьРайонныйКоэффициент"));
КонецПроцедуры
&НаСервере
Процедура ОрганизацияПриИзмененииНаСервере()
ЗапланироватьПолноеОбновлениеСведенийДляФСС();
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
ОбновитьГоловнуюОрганизацию();
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
УстановитьПривилегированныйРежим(Истина);
УстановитьФункциональныеОпцииФормы();
Объект.ДенежноеСодержание.Очистить();
Объект.ДенежноеСодержаниеФактическиеНачисления.Очистить();
ЗаполнитьДанныеФормыПоОрганизации();
РасчетЗарплатыРасширенныйФормы.ОбновитьПлановыеДатыВыплатыПоОрганизации(ЭтотОбъект);
Документы.БольничныйЛист.ЗаполнитьПланируемуюДатуВыплаты(Объект, ЭтотОбъект["НастройкиДатВыплаты"]);
УстановитьПроцентДоплатыЗаДниНетрудоспособности();
РасчетЗарплатыРасширенныйФормы.ДополнитьДанныеФормыРаспределенияПоТерриториямУсловиямТруда(ЭтотОбъект, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда(), РегистрацияНачисленийДоступна);
ОбновитьСведенияДляФСС();
КонецПроцедуры
&НаСервере
Процедура ОбновитьГоловнуюОрганизацию()
Если ЗначениеЗаполнено(Объект.Организация) Тогда
Объект.ГоловнаяОрганизация = ЗарплатаКадры.ГоловнаяОрганизация(Объект.Организация);
Иначе
Объект.ГоловнаяОрганизация = Справочники.Организации.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Сотрудники
&НаСервере
Процедура СотрудникПриИзмененииНаСервере(ИмяСобытия)
Кэш = Новый Соответствие;
Если ИмяСобытия = "СотрудникПриИзменении" Тогда
ЗапланироватьПолноеОбновлениеСведенийДляФСС();
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
КонецЕсли;
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
УстановитьПривилегированныйРежим(Истина);
ЗаполнитьПоКадровымДаннымСотрудника();
УстановитьПривилегированныйРежим(Ложь);
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
УстановитьПривилегированныйРежим(Истина);
ОпределитьВариантДоплаты();
ОтключитьНеприменимыеВариантыДоплаты();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
ОбновитьЭлементыСпособРасчетовЗаСчетРаботодателя();
Если ИмяСобытия = "СотрудникПриИзменении" Тогда
ПерезаполнитьСсылкиНачислений();
ОчиститьДанныеСреднегоЗаработка();
КонецЕсли;
Объект.ДенежноеСодержание.Очистить();
Объект.ДенежноеСодержаниеФактическиеНачисления.Очистить();
Если ИмяСобытия = "СотрудникПриИзменении" Тогда
Объект.РодственникЗаКоторымОсуществляетсяУход1 = Неопределено;
Объект.РодственникЗаКоторымОсуществляетсяУход2 = Неопределено;
КонецЕсли;
ОбновитьЭлементыФинансированияФедеральнымБюджетом(ЭтотОбъект);
УстановитьПорядокВыплатыУволенному();
УстановитьДоступностьПорядкаВыплаты();
УстановитьВидимостьУдержаний();
УстановитьСвойствоРассчитатьЗарплату(Кэш);
ЗаполнитьСтаж();
ЗаполнитьПроцентОплатыИОграничениеПособия();
ЗаполнитьУсловияИсчисления();
Если ИмяСобытия = "СотрудникПриИзменении" Тогда
ОбновитьСведенияДляФСС();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоКадровымДаннымСотрудника()
ИменаКадровыхДанных =
"Организация,
|Подразделение,
|ДатаУвольнения,
|Территория,
|Сотрудник,
|ФизическоеЛицо,
|РайонныйКоэффициентРФ,
|ЛьготаПриНачисленииПособий,
|ВидЗанятости,
|ВидДоговора,
|ДоляНеполногоРабочегоВремени";
ДанныеСотрудника = КадровыйУчет.КадровыеДанныеСотрудника(
Истина,
Объект.Сотрудник,
ИменаКадровыхДанных,
Объект.ДатаНачалаСобытия);
Если ДанныеСотрудника = Неопределено Тогда
Возврат;
КонецЕсли;
Если ДанныеСотрудника.ВидЗанятости <> Перечисления.ВидыЗанятости.ОсновноеМестоРаботы
И ДанныеСотрудника.ВидЗанятости <> Перечисления.ВидыЗанятости.Совместительство Тогда
ДанныеОсновногоСотрудника = КадровыйУчет.КадровыеДанныеОсновногоСотрудникаФизическогоЛица(
Объект.Организация,
ДанныеСотрудника.ФизическоеЛицо,
ИменаКадровыхДанных,
Объект.ДатаНачалаСобытия,
Истина);
ОсновнойСотрудникВоеннослужащий = ДанныеОсновногоСотрудника <> Неопределено
И Перечисления.ВидыДоговоровССотрудниками.ЭтоДоговорВоеннослужащего(ДанныеОсновногоСотрудника.ВидДоговора);
Если ДанныеОсновногоСотрудника <> Неопределено И Объект.Сотрудник <> ДанныеОсновногоСотрудника.Сотрудник
И Не ОсновнойСотрудникВоеннослужащий Тогда
Если Не ЗначениеЗаполнено(ДанныеОсновногоСотрудника.ДатаУвольнения)
Или ДанныеОсновногоСотрудника.ДатаУвольнения >= Объект.ДатаНачалаСобытия Тогда
Объект.Сотрудник = ДанныеОсновногоСотрудника.Сотрудник;
ДанныеСотрудника = ДанныеОсновногоСотрудника;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Объект.ФизическоеЛицо = ДанныеСотрудника.ФизическоеЛицо;
Объект.СотрудникСлужащий = Перечисления.ВидыДоговоровССотрудниками.ЭтоДоговорСлужащего(ДанныеСотрудника.ВидДоговора);
Объект.СотрудникДоговорник = Ложь;
Если Не ЗначениеЗаполнено(ДанныеСотрудника.ДатаУвольнения) Или ДанныеСотрудника.ДатаУвольнения < Объект.ДатаНачалаСобытия Тогда
УстановитьПривилегированныйРежим(Истина);
ТекущийДоговор = СЭДОФСС.ТекущийДоговорФизлица(Объект.ГоловнаяОрганизация, Объект.ФизическоеЛицо, Объект.ДатаНачалаСобытия);
УстановитьПривилегированныйРежим(Ложь);
Если ТекущийДоговор <> Неопределено Тогда
Объект.СотрудникДоговорник = Не ТекущийДоговор.Трудовой И ТекущийДоговор.ГПХ;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ПервичныйБольничныйЛист) Тогда
ЗаполнитьПриостановленияТрудовыхДоговоров();
Возврат;
КонецЕсли;
Объект.ДоляНеполногоВремени = УчетПособийСоциальногоСтрахования.ДоляНеполногоРабочегоВремени(
ДанныеСотрудника.ДоляНеполногоРабочегоВремени);
Объект.ОсновноеМестоРаботы = (ДанныеСотрудника.ВидЗанятости = Перечисления.ВидыЗанятости.ОсновноеМестоРаботы);
Если ТипЗнч(ДанныеСотрудника.РайонныйКоэффициентРФ) = Тип("Число")
И ДанныеСотрудника.РайонныйКоэффициентРФ >= 1 Тогда
Объект.РайонныйКоэффициентРФНаНачалоСобытия = ДанныеСотрудника.РайонныйКоэффициентРФ;
Иначе
ОбъектРК = РасчетЗарплатыРасширенный.ИсточникРайонногоКоэффициентаРФ(ДанныеСотрудника);
Если Не ЗначениеЗаполнено(ОбъектРК) Тогда
ОбъектРК = Объект.Организация;
КонецЕсли;
Объект.РайонныйКоэффициентРФНаНачалоСобытия = РасчетЗарплатыРасширенный.РайонныйКоэффициентРФ(ОбъектРК);
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеСотрудника.ЛьготаПриНачисленииПособий) Тогда
Объект.ПрименятьЛьготыПриНачисленииПособия = Истина;
Объект.ФинансированиеФедеральнымБюджетом = ДанныеСотрудника.ЛьготаПриНачисленииПособий;
Иначе
Объект.ПрименятьЛьготыПриНачисленииПособия = Ложь;
Объект.ФинансированиеФедеральнымБюджетом = Неопределено;
КонецЕсли;
ЗаполнитьПриостановленияТрудовыхДоговоров();
КонецПроцедуры
#КонецОбласти
#Область Стаж
&НаСервере
Функция ЗаполнитьПараметрыФормыРедактированияСтажей(ПараметрыФормы)
ЗапрашиваемыеВидыСтажа = Документы.БольничныйЛист.ВидыСтажаВЛисткеНетрудоспособности();
ПараметрыФормы.ДатаСведений = Документы.БольничныйЛист.ДатаОкончанияРасчетаСтажа(Объект);
ПараметрыФормы.ВидыСтажа = Новый ФиксированныйМассив(ЗапрашиваемыеВидыСтажа.ВидыСтажа);
ПараметрыФормы.НеобязательныеВидыСтажа = Новый ФиксированноеСоответствие(ЗапрашиваемыеВидыСтажа.НеобязательныеВидыСтажа);
Возврат ПараметрыФормы;
КонецФункции
&НаКлиенте
Процедура НадписьСтажНажатиеПродолжение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = КадровыйУчетРасширенныйКлиент.ПараметрыФормыРедактированияСтажей();
ПараметрыФормы.ТолькоПросмотр = ТолькоПросмотр;
ПараметрыФормы.Сотрудник = Объект.Сотрудник;
ЗаполнитьПараметрыФормыРедактированияСтажей(ПараметрыФормы);
ОбработчикВыбора = Новый ОписаниеОповещения("ПослеИзмененияСведенийОСтажеСотрудника", ЭтотОбъект);
КадровыйУчетРасширенныйКлиент.ОткрытьФормуРедактированияСтажей(ПараметрыФормы, ОбработчикВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПослеИзмененияСведенийОСтажеСотрудника(РезультатВыбора, ПустойПараметр) Экспорт
Если ТипЗнч(РезультатВыбора) = Тип("Структура") Тогда
ЗаполнитьСтаж();
ЗаполнитьПроцентОплатыИОграничениеПособия();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтаж()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если Документы.БольничныйЛист.ЗаполнитьСтаж(Объект, ДляСотрудникаВведенСтраховойСтаж) Тогда
Модифицированность = Истина;
КонецЕсли;
Документы.БольничныйЛист.УстановитьФинансированиеФедеральнымБюджетомНестраховыхПериодов(Объект);
ОбновитьЭлементыФинансированияФедеральнымБюджетом(ЭтотОбъект);
ОбновитьНадписьСтаж(ЭтотОбъект);
УстановитьВидимостьПредупрежденияОНезаполненномСтаже();
КонецПроцедуры
#КонецОбласти
#Область ПервичныйБольничныйЛист
&НаКлиенте
Процедура ПервичныйБольничныйЛистНачалоВыбораПослеОтветаНаВопрос(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ПараметрыОтбора = Новый Структура;
Если ЗначениеЗаполнено(Объект.ДатаНачала) Тогда
ПараметрыОтбора.Вставить("ДатаОкончания", НачалоДня(НачалоДня(Объект.ДатаНачала)-1));
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Организация) Тогда
ПараметрыОтбора.Вставить("Организация", Объект.Организация);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Сотрудник) Тогда
ПараметрыОтбора.Вставить("Сотрудник", Объект.Сотрудник);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ПричинаНетрудоспособности) Тогда
ПараметрыОтбора.Вставить("ПричинаНетрудоспособности", Объект.ПричинаНетрудоспособности);
КонецЕсли;
ПараметрыОткрытияФормыВыбора = Новый Структура;
ПараметрыОткрытияФормыВыбора.Вставить("РежимВыбораПервичногоБольничногоЛиста", Истина);
Если ПараметрыОтбора.Количество() > 0 Тогда
ПараметрыОткрытияФормыВыбора.Вставить("Отбор", ПараметрыОтбора);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ПервичныйБольничныйЛист) Тогда
ПараметрыОткрытияФормыВыбора.Вставить("ПервичныйБольничныйЛист", Объект.ПервичныйБольничныйЛист);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПараметрыОткрытияФормыВыбора.Вставить("ТекущийДокумент", Объект.Ссылка);
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ПервичныйБольничныйЛистЗавершениеВыбора", ЭтотОбъект);
ОткрытьФорму("Документ.БольничныйЛист.ФормаВыбора", ПараметрыОткрытияФормыВыбора, , , , , Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ПервичныйБольничныйЛистЗавершениеВыбора(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(ВыбранноеЗначение) И ТипЗнч(ВыбранноеЗначение) = Тип("ДокументСсылка.БольничныйЛист") Тогда
Объект.ПервичныйБольничныйЛист = ВыбранноеЗначение;
УстановитьСвойстваПоляПервичногоБольничногоЛиста(ЭтотОбъект);
ПервичныйБольничныйЛистПриИзмененииНаСервере();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПричинаНетрудоспособности
&НаСервере
Процедура ПричинаНетрудоспособностиПриИзмененииНаСервере(Знач ЗаполнитьПричинуИСлучайУходаПоКоду = Ложь)
Если ЗаполнитьПричинуИСлучайУходаПоКоду Тогда
ОбменЛисткамиНетрудоспособностиФСС.ЗаполнитьПричинуНетрудоспособностиИСлучайУходаЗаРебенком(Объект);
КонецЕсли;
Кэш = Новый Соответствие;
СброситьПараметрыОплаты();
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
Документы.БольничныйЛист.ОчиститьСлучайУходаПриНеобходимости(Объект);
Документы.БольничныйЛист.ОтключитьФлажкиПриНеобходимости(Объект);
НастроитьЭлементыДополненияПричиныНетрудоспособности();
ОбновитьОстаткиОплачиваемыхДнейПоУходуЗаРодственниками();
ЗаполнитьПроцентОплатыИОграничениеПособия();
ЗаполнитьДатуНачалаПоловиннойОплаты();
ОбновитьНадписьДнейОсвобожденияОтРаботы(ЭтотОбъект);
ОбновитьЭлементыПараметровОплаты();
УстановитьДоступностьРассчитыватьПоПравилам2010();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
УстановитьСвойствоРассчитатьЗарплату(Кэш);
УстановитьДоступностьПолейВводаНачислений();
ОбновитьЭлементыСпособРасчетовЗаСчетРаботодателя();
Если ИспользуетсяРасчетЗарплаты Тогда
ПерезаполнитьСсылкиНачислений();
КонецЕсли;
ОчиститьДанныеСреднегоЗаработка();
КонецПроцедуры
&НаСервере
Процедура НастроитьЭлементыДополненияПричиныНетрудоспособности()
ПредставлениеПричиныНетрудоспособности = ПредставлениеПричиныНетрудоспособности();
Если Не ЭтотОбъект.ИспользуетсяРасчетЗарплаты Тогда
Элементы.СтраницыУточнениеПричины.ТекущаяСтраница = Элементы.СтраницаУточнениеПричиныНет;
ИначеЕсли Объект.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам Тогда
Элементы.СтраницыУточнениеПричины.ТекущаяСтраница = Элементы.СтраницаУточнениеПричиныПоБеременностиИРодам;
ИначеЕсли ОбменЛисткамиНетрудоспособностиФСС.ЭтоКарантинныйЭЛН(
Объект.ПричинаНетрудоспособности,
Объект.НомерЛисткаНетрудоспособности) Тогда
Элементы.СтраницыУточнениеПричины.ТекущаяСтраница = Элементы.СтраницаУточнениеПричиныКарантин;
Иначе
Элементы.СтраницыУточнениеПричины.ТекущаяСтраница = Элементы.СтраницаУточнениеПричиныНет;
КонецЕсли;
Если ЭтоУходЗаРебенком() Тогда
Элементы.ПредставлениеПричиныНетрудоспособности.МаксимальнаяШирина = 60;
Иначе
Элементы.ПредставлениеПричиныНетрудоспособности.МаксимальнаяШирина = 45;
КонецЕсли;
ОбновитьВидимостьДоступностьСтраницыУходЗаРодственниками();
КонецПроцедуры
&НаСервере
Функция ПредставлениеПричиныНетрудоспособности()
ДатаНачалаСобытия = Объект.ДатаНачалаСобытия;
КодПричины = Объект.КодПричиныНетрудоспособности;
Причина = Объект.ПричинаНетрудоспособности;
СлучайУхода = Объект.СлучайУходаЗаБольнымРебенком;
ВидимостьПоляВыбора = Ложь;
ВидимостьПереключателя01 = Ложь;
ВидимостьПереключателя02 = Ложь;
Если КодПричины = "01"
И УчетПособийСоциальногоСтрахования.ДействуетПорядокНСПЗ_2022(ДатаНачалаСобытия) Тогда
ВидимостьПереключателя01 = Истина;
ИначеЕсли КодПричины = "02"
И УчетПособийСоциальногоСтрахования.ДействуетПорядокНСПЗ_2022(ДатаНачалаСобытия) Тогда
ВидимостьПереключателя02 = Истина;
Иначе
ВидимостьПоляВыбора = Истина;
КонецЕсли;
Если Элементы.ПредставлениеПричиныНетрудоспособности.Видимость <> ВидимостьПоляВыбора
Или Элементы.ПереключательПричиныНетрудоспособности01.Видимость <> ВидимостьПереключателя01
Или Элементы.ПереключательПричиныНетрудоспособности02.Видимость <> ВидимостьПереключателя02
Или КодыПричин.Количество() = 0 Тогда
Элементы.ПредставлениеПричиныНетрудоспособности.Видимость = ВидимостьПоляВыбора;
Элементы.ПереключательПричиныНетрудоспособности01.Видимость = ВидимостьПереключателя01;
Элементы.ПереключательПричиныНетрудоспособности02.Видимость = ВидимостьПереключателя02;
КодыПричин.Очистить();
ТаблицаКодовПричин = Перечисления.ПричиныНетрудоспособности.ТаблицаВыбораКодовПричин(ДатаНачалаСобытия);
Для Каждого СтрокаТаблицы Из ТаблицаКодовПричин Цикл
Код = СтрокаТаблицы.КодПричины;
Если Код = "09" И Не СтрокаТаблицы.УходЗаРебенком Тогда
Код = "09*";
ИначеЕсли Код = "01" И СтрокаТаблицы.ЭтоНСПЗ Тогда
Код = "01*";
ИначеЕсли Код = "02" И СтрокаТаблицы.ЭтоНСПЗ Тогда
Код = "02*";
КонецЕсли;
Представление = "(" + СтрокаТаблицы.КодПричины + ") " + СтрокаТаблицы.Представление;
КодыПричин.Добавить(Код, Представление);
КонецЦикла;
КонецЕсли;
Если Не ЗначениеЗаполнено(КодПричины) И ЗначениеЗаполнено(Причина) Тогда
КодПричины = Перечисления.ПричиныНетрудоспособности.КодПричины(ДатаНачалаСобытия, Причина, СлучайУхода);
ИначеЕсли ЗначениеЗаполнено(КодПричины) И Не ЗначениеЗаполнено(Причина) Тогда
ОбменЛисткамиНетрудоспособностиФСС.ЗаполнитьПричинуНетрудоспособностиИСлучайУходаЗаРебенком(Объект);
Причина = Объект.ПричинаНетрудоспособности;
СлучайУхода = Объект.СлучайУходаЗаБольнымРебенком;
КонецЕсли;
Если Не ЗначениеЗаполнено(КодПричины) Тогда
Представление = Строка(Причина);
ИначеЕсли Причина = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком
И ЗначениеЗаполнено(СлучайУхода) Тогда
Представление = Перечисления.СлучаиУходаЗаБольнымиДетьми.ПредставлениеСлучая(СлучайУхода, ДатаНачалаСобытия);
Иначе
Если КодПричины = "09"
И Не ЗначениеЗаполнено(СлучайУхода)
И Причина = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаВзрослым Тогда
Код = "09*";
ИначеЕсли КодПричины = "01"
И Причина = Перечисления.ПричиныНетрудоспособности.Профзаболевание Тогда
Код = "01*";
ИначеЕсли КодПричины = "02"
И Причина = Перечисления.ПричиныНетрудоспособности.ТравмаНаПроизводстве Тогда
Код = "02*";
Иначе
Код = КодПричины;
КонецЕсли;
Если ВидимостьПереключателя01 Или ВидимостьПереключателя02 Тогда
Представление = Код;
Иначе
ЭлементСписка = КодыПричин.НайтиПоЗначению(Код);
Если ЭлементСписка <> Неопределено Тогда
Представление = ЭлементСписка.Представление;
Иначе
Представление = КодПричины;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПредставлениеПричиныНетрудоспособностиДоИзменения = Представление;
Возврат Представление;
КонецФункции
&НаКлиенте
Процедура ПослеВыбораПричиныНетрудоспособности(ВыбранноеЗначение, ПустойПараметр = Неопределено) Экспорт
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
Модифицированность = Истина;
ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение);
ПричинаНетрудоспособностиПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
ИначеЕсли ТипЗнч(ВыбранноеЗначение) = Тип("Строка")
И ВыбранноеЗначение <> ПредставлениеПричиныНетрудоспособностиДоИзменения
И КодыПричин.НайтиПоЗначению(ВыбранноеЗначение) <> Неопределено Тогда
Модифицированность = Истина;
Если ВыбранноеЗначение = "09*" Тогда
Объект.КодПричиныНетрудоспособности = "09";
Объект.СлучайУходаЗаБольнымРебенком = Неопределено;
Объект.ПричинаНетрудоспособности = ПредопределенноеЗначение("Перечисление.ПричиныНетрудоспособности.ПоУходуЗаВзрослым");
ЗаполнитьПричинуИСлучайУхода = Ложь;
ИначеЕсли ВыбранноеЗначение = "01*" Тогда
Объект.КодПричиныНетрудоспособности = "01";
Объект.СлучайУходаЗаБольнымРебенком = Неопределено;
Объект.ПричинаНетрудоспособности = ПредопределенноеЗначение("Перечисление.ПричиныНетрудоспособности.Профзаболевание");
ЗаполнитьПричинуИСлучайУхода = Ложь;
ИначеЕсли ВыбранноеЗначение = "02*" Тогда
Объект.КодПричиныНетрудоспособности = "02";
Объект.СлучайУходаЗаБольнымРебенком = Неопределено;
Объект.ПричинаНетрудоспособности = ПредопределенноеЗначение("Перечисление.ПричиныНетрудоспособности.ТравмаНаПроизводстве");
ЗаполнитьПричинуИСлучайУхода = Ложь;
ИначеЕсли ВыбранноеЗначение = "01" Или ВыбранноеЗначение = "02" Тогда
Объект.КодПричиныНетрудоспособности = ВыбранноеЗначение;
Объект.СлучайУходаЗаБольнымРебенком = Неопределено;
Объект.ПричинаНетрудоспособности = ПредопределенноеЗначение("Перечисление.ПричиныНетрудоспособности.ОбщееЗаболевание");
ЗаполнитьПричинуИСлучайУхода = Ложь;
Иначе
Объект.КодПричиныНетрудоспособности = ВыбранноеЗначение;
Объект.ПричинаНетрудоспособности = Неопределено;
ЗаполнитьПричинуИСлучайУхода = Истина;
КонецЕсли;
ПричинаНетрудоспособностиПриИзмененииНаСервере(ЗаполнитьПричинуИСлучайУхода);
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПериодыУходаЗаРодственниками
&НаСервере
Функция ЭтоУходЗаРебенком()
Возврат Объект.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком;
КонецФункции
&НаСервере
Функция ЭтоУходЗаРодственником()
Возврат ЭтоУходЗаРебенком()
Или Объект.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаВзрослым;
КонецФункции
&НаСервере
Процедура ОбновитьВидимостьДоступностьСтраницыУходЗаРодственниками()
Элементы.УходЗаРодственникамиСтраница.Видимость = ЭтоУходЗаРодственником();
Если Не Элементы.УходЗаРодственникамиСтраница.Видимость Тогда
Возврат;
КонецЕсли;
ПрочитатьСведенияОбЭЛНЕслиТребуется();
ИспользоватьПериодыУходаВШапке = Документы.БольничныйЛист.ИспользоватьПериодыУходаВШапке(Объект);
ЭтоУходЗаРебенком = ЭтоУходЗаРебенком();
ТаблицаСлучаевУхода = Перечисления.СлучаиУходаЗаБольнымиДетьми.ТаблицаВыбора(Объект.ДатаНачалаСобытия);
Поле = Элементы.Найти("СлучайУходаЗаБольнымРебенком");
Если Поле <> Неопределено Тогда
Поле.Видимость = ИспользоватьПериодыУходаВШапке;
Если Поле.Видимость Тогда
УчетПособийСоциальногоСтрахования.ЗаполнитьСписокВыбораСлучаевУходаЗаБольнымРебенком(Объект, Поле, ТаблицаСлучаевУхода);
КонецЕсли;
КонецЕсли;
Если ЭтоУходЗаРебенком Тогда
ЗаголовокГруппыУходЗаРодственниками = НСтр("ru = 'Уход за детьми'");
ЗаголовокПоляРодственник = НСтр("ru = 'Ребенок'");
ЗаголовокГруппыВторойРодственник = НСтр("ru = 'Второй ребенок за которым осуществляется уход'");
Иначе
ЗаголовокГруппыУходЗаРодственниками = НСтр("ru = 'Уход за родственниками'");
ЗаголовокПоляРодственник = НСтр("ru = 'Родственник'");
ЗаголовокГруппыВторойРодственник = НСтр("ru = 'Второй родственник за которым осуществляется уход'");
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ЭтотОбъект.Элементы,
"УходЗаРодственникамиСтраница",
"Заголовок",
ЗаголовокГруппыУходЗаРодственниками);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ЭтотОбъект.Элементы,
"ГруппаРодственникЗаКоторымОсуществляетсяУход2",
"Заголовок",
ЗаголовокГруппыВторойРодственник);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ЭтотОбъект.Элементы,
"ГруппаРодственникЗаКоторымОсуществляетсяУход2",
"ЗаголовокСвернутогоОтображения",
ЗаголовокГруппыВторойРодственник);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ЭтотОбъект.Элементы,
"РодственникЗаКоторымОсуществляетсяУход1",
"Заголовок",
ЗаголовокПоляРодственник);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ЭтотОбъект.Элементы,
"РодственникЗаКоторымОсуществляетсяУход2",
"Заголовок",
ЗаголовокПоляРодственник);
Элементы.ПериодыУходаЗаРодственниками.Видимость = Не ИспользоватьПериодыУходаВШапке;
Элементы.ГруппаРодственникЗаКоторымОсуществляетсяУход1.Видимость = ИспользоватьПериодыУходаВШапке;
Элементы.ГруппаРодственникЗаКоторымОсуществляетсяУход2.Видимость = ИспользоватьПериодыУходаВШапке;
Если СведенияОбЭЛН.ЭтоЭЛН Тогда
Элементы.ПериодыУходаЗаРодственникамиВключитьВозможностьИзменения.Видимость = Истина;
ВозможностьИзменения = Элементы.ПериодыУходаЗаРодственникамиВключитьВозможностьИзменения.Пометка;
Если ВозможностьИзменения Тогда
Элементы.ПериодыУходаЗаРодственникамиВключитьВозможностьИзменения.Заголовок = НСтр("ru = 'Возможность изменения'");
Иначе
Элементы.ПериодыУходаЗаРодственникамиВключитьВозможностьИзменения.Заголовок = "";
КонецЕсли;
Иначе
ВозможностьИзменения = Истина;
КонецЕсли;
Элементы.ПериодыУходаЗаРодственникамиДобавить.Видимость = ВозможностьИзменения;
Элементы.ПериодыУходаЗаРодственниками.ИзменятьСоставСтрок = ВозможностьИзменения;
КонецПроцедуры
&НаСервере
Процедура ПериодыУходаЗаРодственникамиПодробноОбновитьВидимость()
Элементы.ПериодыУходаЗаРодственникамиПодробно.Пометка = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиСлучайУхода.Видимость = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиМаксимумДнейЗаГод.Видимость = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиМаксимумДнейЗаСлучай.Видимость = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиОстатокДнейЗаГод.Видимость = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиОстатокДнейЗаСлучай.Видимость = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиОстатокДнейПоловиннойОплаты.Видимость = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиПроцентОплаты.Видимость = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиПроцентОплатыБезЛьгот.Видимость = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиОграничениеПособия.Видимость = ПериодыУходаЗаРодственникамиПодробно;
Элементы.ПериодыУходаЗаРодственникамиОграничениеПособияБезЛьгот.Видимость = ПериодыУходаЗаРодственникамиПодробно;
КонецПроцедуры
&НаСервере
Процедура ОбновитьПредставленияПериодовУхода()
Таблица = Объект.ПериодыУходаЗаРодственниками.Выгрузить(, "Родственник");
МассивРодственников = КоллекцииБЗК.УникальныеЗначенияКолонки(Таблица, "Родственник");
КоллекцииБЗК.УдалитьПустыеЗначенияМассива(МассивРодственников);
Если МассивРодственников.Количество() > 0 Тогда
ИменаПолей = "Владелец, Наименование, ДатаРождения, НаименованиеСлужебное, СНИЛС, КодСвязи";
ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивРодственников, ИменаПолей);
Иначе
ЗначенияРеквизитов = Новый Соответствие;
КонецЕсли;
ЕстьОшибки = Ложь;
Для Каждого ПериодУхода Из Объект.ПериодыУходаЗаРодственниками Цикл
ПериодУхода.Ошибка = Ложь;
ПериодУхода.ТекстОшибки = "";
ПериодУхода.Стационар = (ПериодУхода.РежимЛечения = Перечисления.РежимыЛечения.Стационар
Или ПериодУхода.РежимЛечения = Перечисления.РежимыЛечения.ДневнойСтационар);
ПериодУхода.ПредставлениеРодственника = ПредставлениеРодственникаПоУходу(ПериодУхода);
ПериодУхода.ПредставлениеВозраста = ЗарплатаКадрыКлиентСервер.ПредставлениеВозраста(
ПериодУхода.ВозрастЛет,
ПериодУхода.ВозрастМесяцев);
ПроверитьПериодУхода(ПериодУхода);
ПроверитьСведенияОРодственнике(ПериодУхода, ЗначенияРеквизитов, Объект.ФизическоеЛицо);
Если ПериодУхода.Ошибка Тогда
ЕстьОшибки = Истина;
КонецЕсли;
КонецЦикла;
Элементы.УходЗаРодственникамиСтраница.Картинка = ?(ЕстьОшибки, БиблиотекаКартинок.Предупреждение, Новый Картинка);
КонецПроцедуры
&НаСервере
Процедура ПроверитьПериодУхода(ПериодУхода)
Если Не ЗначениеЗаполнено(ПериодУхода.ДатаНачала) Тогда
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = НСтр("ru = 'Не заполнена дата начала.'");
ИначеЕсли Не ЗначениеЗаполнено(ПериодУхода.ДатаОкончания) Тогда
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = НСтр("ru = 'Не заполнена дата окончания.'");
ИначеЕсли ПериодУхода.ДатаНачала > ПериодУхода.ДатаОкончания Тогда
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = НСтр("ru = 'Дата окончания предшествует дате начала.'");
ИначеЕсли ПериодУхода.ДатаНачала < Объект.ДатаНачала Тогда
Текст = СтрШаблон(НСтр("ru = 'Уход за родственником начинается раньше листка нетрудоспособности (%1).'"),
Формат(Объект.ДатаНачала, "ДЛФ=D"));
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = Текст;
ИначеЕсли ПериодУхода.ДатаОкончания > Объект.ДатаОкончания Тогда
Текст = СтрШаблон(НСтр("ru = 'Уход за родственником заканчивается позже листка нетрудоспособности (%1).'"),
Формат(Объект.ДатаОкончания, "ДЛФ=D"));
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = Текст;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьСведенияОРодственнике(ПериодУхода, ЗначенияРеквизитов, ФизическоеЛицо)
Если Не ЗначениеЗаполнено(ПериодУхода.Родственник) Тогда
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = НСтр("ru = 'Не найден родственник в справочнике.'");
Возврат;
КонецЕсли;
РеквизитыРодственника = ЗначенияРеквизитов[ПериодУхода.Родственник];
Если РеквизитыРодственника.Владелец <> ФизическоеЛицо Тогда
Текст = НСтр("ru = 'Выбран родственник другого сотрудника.'");
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = ?(ПериодУхода.ТекстОшибки = "", "", ПериодУхода.ТекстОшибки + " ") + Текст;
КонецЕсли;
ФИО = СокрП(ПериодУхода.Фамилия + " " + ПериодУхода.Имя + " " + ПериодУхода.Отчество);
Если СтрСравнить(РеквизитыРодственника.Наименование, ФИО) <> 0 Тогда
Текст = НСтр("ru = 'ФИО родственника в листке нетрудоспособности (%1) не совпадает с ФИО родственника в справочнике (%2).'");
Текст = СтрШаблон(Текст, ФИО, РеквизитыРодственника.Наименование);
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = ?(ПериодУхода.ТекстОшибки = "", "", ПериодУхода.ТекстОшибки + " ") + Текст;
КонецЕсли;
Если РеквизитыРодственника.СНИЛС <> ПериодУхода.СНИЛС Тогда
Если Не ЗначениеЗаполнено(РеквизитыРодственника.СНИЛС) Тогда
Текст = НСтр("ru = 'Рекомендуется заполнить СНИЛС родственника сотрудника.'");
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = ?(ПериодУхода.ТекстОшибки = "", "", ПериодУхода.ТекстОшибки + " ") + Текст;
ИначеЕсли ЗначениеЗаполнено(ПериодУхода.СНИЛС) Тогда
Текст = НСтр("ru = 'СНИЛС родственника в листке нетрудоспособности (%1) не совпадает со СНИЛСом родственника в справочнике (%2).'");
Текст = СтрШаблон(Текст, ПериодУхода.СНИЛС, РеквизитыРодственника.СНИЛС);
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = ?(ПериодУхода.ТекстОшибки = "", "", ПериодУхода.ТекстОшибки + " ") + Текст;
КонецЕсли;
КонецЕсли;
Если РеквизитыРодственника.ДатаРождения <> ПериодУхода.ДатаРождения Тогда
Если Не ЗначениеЗаполнено(РеквизитыРодственника.ДатаРождения) Тогда
Текст = НСтр("ru = 'Рекомендуется заполнить дату рождения родственника.'");
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = ?(ПериодУхода.ТекстОшибки = "", "", ПериодУхода.ТекстОшибки + " ") + Текст;
ИначеЕсли ЗначениеЗаполнено(ПериодУхода.ДатаРождения) Тогда
Текст = НСтр("ru = 'Дата рождения родственника в листке нетрудоспособности (%1) не совпадает с датой рождения родственника в справочнике (%2).'");
Текст = СтрШаблон(Текст, Формат(ПериодУхода.ДатаРождения, "ДЛФ=D"), Формат(РеквизитыРодственника.ДатаРождения, "ДЛФ=D"));
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = ?(ПериодУхода.ТекстОшибки = "", "", ПериодУхода.ТекстОшибки + " ") + Текст;
КонецЕсли;
КонецЕсли;
Если РеквизитыРодственника.КодСвязи <> ПериодУхода.КодСвязи Тогда
Если Не ЗначениеЗаполнено(РеквизитыРодственника.КодСвязи) Тогда
Текст = НСтр("ru = 'Рекомендуется заполнить код связи родственника.'");
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = ?(ПериодУхода.ТекстОшибки = "", "", ПериодУхода.ТекстОшибки + " ") + Текст;
ИначеЕсли ЗначениеЗаполнено(ПериодУхода.КодСвязи) Тогда
Текст = НСтр("ru = 'Код связи родственника в листке нетрудоспособности (%1) не совпадает с кодом связи родственника в справочнике (%2).'");
Текст = СтрШаблон(Текст, ПериодУхода.КодСвязи, РеквизитыРодственника.КодСвязи);
ПериодУхода.Ошибка = Истина;
ПериодУхода.ТекстОшибки = ?(ПериодУхода.ТекстОшибки = "", "", ПериодУхода.ТекстОшибки + " ") + Текст;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПредставлениеРодственникаПоУходу(СтрокаТаблицы)
Результат = СокрП(СтрокаТаблицы.Фамилия + " " + СтрокаТаблицы.Имя + " " + СтрокаТаблицы.Отчество);
Если СтрокаТаблицы.КодСвязи = "38" Тогда
Результат = Результат + " " + НСтр("ru = '(38 - сотрудница является матерью)'");
ИначеЕсли СтрокаТаблицы.КодСвязи = "39" Тогда
Результат = Результат + " " + НСтр("ru = '(39 - сотрудник является отцом)'");
ИначеЕсли СтрокаТаблицы.КодСвязи = "40" Тогда
Результат = Результат + " " + НСтр("ru = '(40 - опекун)'");
ИначеЕсли СтрокаТаблицы.КодСвязи = "41" Тогда
Результат = Результат + " " + НСтр("ru = '(41 - попечитель)'");
ИначеЕсли СтрокаТаблицы.КодСвязи = "42" Тогда
Результат = Результат + " " + НСтр("ru = '(42 - иной родственник)'");
ИначеЕсли ЗначениеЗаполнено(СтрокаТаблицы.КодСвязи) Тогда
Результат = Результат + " (" + СтрокаТаблицы.КодСвязи + ")";
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТаблицы.СНИЛС) ТОгда
Результат = Результат + ", " + СтрокаТаблицы.СНИЛС;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ПериодыУходаЗаРодственникамиПриИзмененииНаСервере(ИмяКолонки, ИдентификаторСтроки, РассчитатьНачисления = Истина)
Если ЗначениеЗаполнено(ИмяКолонки) И ИдентификаторСтроки <> Неопределено Тогда
ПериодУхода = Объект.ПериодыУходаЗаРодственниками.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ПериодУхода <> Неопределено Тогда
Колонка = Элементы[ИмяКолонки];
Если Колонка = Элементы.ПериодыУходаЗаРодственникамиИспользованоДней
Или Колонка = Элементы.ПериодыУходаЗаРодственникамиДнейПоловиннойОплаты Тогда
ПериодУхода.КоличествоДнейИзменено = Истина;
КонецЕсли;
Если Колонка = Элементы.ПериодыУходаЗаРодственникамиКодПричины
Или Колонка = Элементы.ПериодыУходаЗаРодственникамиРежимЛечения
Или Колонка = Элементы.ПериодыУходаЗаРодственникамиВозрастЛет Тогда
ПериодУхода.СлучайУхода = УчетПособийСоциальногоСтрахования.СлучайУхода(
Объект.ДатаНачалаСобытия,
ПериодУхода.КодПричины,
ПериодУхода.ВозрастЛет,
ПериодУхода.РежимЛечения);
ПараметрыОплаты = УчетПособийСоциальногоСтрахования.ПроцентОплатыИОграничениеПособия(
Объект,
ПериодУхода.СлучайУхода);
ИменаПолей = "ПроцентОплаты, ПроцентОплатыБезЛьгот, ОграничениеПособия, ОграничениеПособияБезЛьгот";
ЗаполнитьЗначенияСвойств(ПериодУхода, ПараметрыОплаты, ИменаПолей);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ДатаНачала = Неопределено;
ДатаОкончания = Неопределено;
Для Каждого ПериодУхода Из Объект.ПериодыУходаЗаРодственниками Цикл
Если Перечисления.СлучаиУходаЗаБольнымиДетьми.ЭтоСтационар(ПериодУхода.СлучайУхода) Тогда
Если ДатаНачала = Неопределено Или ДатаНачала > ПериодУхода.ДатаНачала Тогда
ДатаНачала = ПериодУхода.ДатаНачала;
КонецЕсли;
Если ДатаОкончания = Неопределено Или ДатаОкончания < ПериодУхода.ДатаОкончания Тогда
ДатаОкончания = ПериодУхода.ДатаОкончания;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Объект.ПериодНахожденияВСтационареСРебенкомС = ДатаНачала;
Объект.ПериодНахожденияВСтационареСРебенкомПо = ДатаОкончания;
Кэш = Новый Соответствие;
Кэш.Вставить("РассчитатьПериодыУхода", Истина);
ЗаполнитьПараметрыОплаты(Неопределено, Кэш);
ДатыУхода = Документы.БольничныйЛист.ДатыУходаЗаРодственниками(Объект, Кэш);
Родственники = КоллекцииБЗК.УникальныеЗначенияКолонки(ДатыУхода, "Родственник");
Для Номер = 1 По 2 Цикл
Если Номер <= Родственники.Количество() Тогда
Родственник = Родственники[Номер-1];
Иначе
Родственник = Неопределено;
КонецЕсли;
Объект["РодственникЗаКоторымОсуществляетсяУход" + Номер] = Родственник;
Реквизиты = Новый Структура("ВозрастЛет, ВозрастМесяцев, КодСвязи, ФИО, ДатаНачала, ДатаОкончания");
Если Родственник <> Неопределено Тогда
Таблица = ДатыУхода.Скопировать(Новый Структура("Родственник", Родственник));
Таблица.Сортировать("Дата");
ПерваяСтрока = Таблица[0];
ПоследняяСтрока = Таблица[Таблица.Количество() - 1];
Реквизиты.ВозрастЛет = ПерваяСтрока.ВозрастЛет;
Реквизиты.ВозрастМесяцев = ПерваяСтрока.ВозрастМесяцев;
Реквизиты.КодСвязи = ПерваяСтрока.КодСвязи;
Реквизиты.ФИО = СокрЛП(ПерваяСтрока.Фамилия + " " + ПерваяСтрока.Имя + " " + ПерваяСтрока.Отчество);
Реквизиты.ДатаНачала = ПерваяСтрока.Дата;
Реквизиты.ДатаОкончания = ПоследняяСтрока.Дата;
КонецЕсли;
Объект["ПоУходуВозрастЛет" + Номер] = Реквизиты.ВозрастЛет;
Объект["ПоУходуВозрастМесяцев" + Номер] = Реквизиты.ВозрастМесяцев;
Объект["ПоУходуРодственнаяСвязь" + Номер] = Реквизиты.КодСвязи;
Объект["ПоУходуФИО" + Номер] = Реквизиты.ФИО;
Объект["ДатаНачалаРодственник" + Номер] = Реквизиты.ДатаНачала;
Объект["ДатаОкончанияРодственник" + Номер] = Реквизиты.ДатаОкончания;
КонецЦикла;
Если ДатыУхода.Количество() > 0 Тогда
ЕстьИзменения = Документы.БольничныйЛист.ЗаполнитьСлучайУходаЗаБольнымРебенком(Объект, ДатыУхода);
Если ЕстьИзменения Тогда
РассчитатьНачисления = Истина;
Документы.БольничныйЛист.ОтключитьФлажкиПриНеобходимости(Объект);
ЗаполнитьПроцентОплатыИОграничениеПособия();
ЗаполнитьДатуНачалаПоловиннойОплаты();
КонецЕсли;
КонецЕсли;
Если РассчитатьНачисления Тогда
ТребуетсяОчиститьДанныеСреднегоЗаработка = Истина;
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
ПараметрыЗаполнения = Документы.БольничныйЛист.ПараметрыЗаполнения(Ложь);
ПараметрыЗаполнения.ЗаполнитьСсылкиНачислений = Истина;
ПараметрыРасчета = ПараметрыРасчета();
ПараметрыРасчета.Кэш = Кэш;
ПараметрыРасчета.ВыводитьСообщения = Ложь;
ПерезаполнитьИРассчитатьНачисленияНаСервере(ПараметрыЗаполнения, ПараметрыРасчета);
НастроитьЭлементыДополненияПричиныНетрудоспособности();
ОбновитьНадписьДнейОсвобожденияОтРаботы(ЭтотОбъект);
УстановитьДоступностьРассчитыватьПоПравилам2010();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
УстановитьСвойствоРассчитатьЗарплату(Кэш);
УстановитьДоступностьПолейВводаНачислений();
Иначе
ОбновитьВидимостьДоступностьСтраницыУходЗаРодственниками();
КонецЕсли;
ОбновитьПредставленияПериодовУхода();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуВыбораРодственника()
ПериодУхода = Элементы.ПериодыУходаЗаРодственниками.ТекущиеДанные;
Если ПериодУхода = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыОбработчика = Новый Структура;
ПараметрыОбработчика.Вставить("ИдентификаторСтроки", ПериодУхода.ПолучитьИдентификатор());
Обработчик = Новый ОписаниеОповещения("ПослеВыбораРодственника", ЭтотОбъект, ПараметрыОбработчика);
ИменаПолей = "ЭтоЭЛН, НомерЛН, ФизическоеЛицо, ДатаНачалаСобытия, Родственник, КодПричиныНетрудоспособности,
|ДатаНачала, ДатаОкончания, ИспользованоДней, КодСвязи, Фамилия, Имя, Отчество, СНИЛС, ДатаРождения,
|РежимЛечения, ВозрастЛет, ВозрастМесяцев";
ПараметрыФормы = Новый Структура(ИменаПолей);
ЗаполнитьЗначенияСвойств(ПараметрыФормы, ПериодУхода);
ПараметрыФормы.ФизическоеЛицо = Объект.ФизическоеЛицо;
ПараметрыФормы.ЭтоЭЛН = СведенияОбЭЛН.ЭтоЭЛН;
ПараметрыФормы.НомерЛН = Объект.НомерЛисткаНетрудоспособности;
ПараметрыФормы.ДатаНачалаСобытия = Объект.ДатаНачалаСобытия;
ОткрытьФорму("Документ.БольничныйЛист.Форма.ВыборРодственника", ПараметрыФормы, ЭтотОбъект, , , , Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораРодственника(РезультатВыбора, ПараметрыОбработчика) Экспорт
Если ТипЗнч(РезультатВыбора) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
ПослеВыбораРодственникаНаСервере(РезультатВыбора, ПараметрыОбработчика.ИдентификаторСтроки);
КонецПроцедуры
&НаСервере
Процедура ПослеВыбораРодственникаНаСервере(РезультатВыбора, ИдентификаторСтроки)
ПериодУхода = Объект.ПериодыУходаЗаРодственниками.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ПериодУхода = Неопределено Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
Если ПериодУхода.ВозрастЛет <> РезультатВыбора.ВозрастЛет Тогда
ИмяКолонки = Элементы.ПериодыУходаЗаРодственникамиВозрастЛет.Имя;
Иначе
ИмяКолонки = "";
КонецЕсли;
ЗаполнитьЗначенияСвойств(ПериодУхода, РезультатВыбора);
ПериодыУходаЗаРодственникамиПриИзмененииНаСервере(ИмяКолонки, ИдентификаторСтроки, Истина);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПериодыУходаЗаРодственникамиПоДаннымЛННаСервере()
Модифицированность = Истина;
Объект.ПериодыУходаЗаРодственниками.Очистить();
ДанныеЭЛН = Документы.БольничныйЛист.ДанныеЭЛНДляЗаполнения(Объект);
Документы.БольничныйЛист.ЗаполнитьТаблицуУходаЗаРодственниками(Объект, ДанныеЭЛН);
ЗаполнитьИсключаемыеПериодыНаСервере();
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
ПараметрыЗаполнения = Документы.БольничныйЛист.ПараметрыЗаполнения(Ложь);
ПараметрыЗаполнения.ЗаполнитьСсылкиНачислений = Истина;
ПараметрыРасчета = ПараметрыРасчета();
ПараметрыРасчета.ВыводитьСообщения = Истина;
ПерезаполнитьИРассчитатьНачисленияНаСервере(ПараметрыЗаполнения, ПараметрыРасчета);
ОбновитьВидимостьДоступностьСтраницыУходЗаРодственниками();
ОбновитьПредставленияПериодовУхода();
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьПериодУходаПослеВыбораРодственника(Родственник, ПустойПараметр) Экспорт
Если ТипЗнч(Родственник) <> Тип("СправочникСсылка.РодственникиФизическихЛиц")
Или Родственник.Пустая() Тогда
Возврат;
КонецЕсли;
ДобавитьПериодУхода(Родственник);
КонецПроцедуры
&НаСервере
Процедура ДобавитьПериодУхода(Знач РодственникИлиИдентификаторСтроки)
Если ТипЗнч(РодственникИлиИдентификаторСтроки) = Тип("СправочникСсылка.РодственникиФизическихЛиц") Тогда
Родственник = РодственникИлиИдентификаторСтроки;
Прототип = Неопределено;
Иначе
Родственник = Неопределено;
Прототип = Объект.ПериодыУходаЗаРодственниками.НайтиПоИдентификатору(РодственникИлиИдентификаторСтроки);
КонецЕсли;
Если Прототип = Неопределено Тогда
Если Не ЗначениеЗаполнено(Родственник) Тогда
Возврат;
КонецЕсли;
Найденные = Объект.ПериодыУходаЗаРодственниками.Выгрузить(Новый Структура("Родственник", Родственник));
Если Найденные.Количество() > 0 Тогда
Найденные.Сортировать("ДатаНачала Убыв, ДатаОкончания");
Прототип = Найденные[0];
КонецЕсли;
КонецЕсли;
Если Прототип <> Неопределено Тогда
ПериодУхода = Объект.ПериодыУходаЗаРодственниками.Добавить();
ЗаполнитьЗначенияСвойств(ПериодУхода, Прототип, , "НомерСтроки, ИсходныйНомерСтроки");
ПериодУхода.ДатаНачала = Мин(Прототип.ДатаОкончания + 86400, Объект.ДатаОкончания);
ПериодУхода.ДатаОкончания = Макс(ПериодУхода.ДатаНачала, Объект.ДатаОкончания);
Иначе
ПериодУхода = Документы.БольничныйЛист.ДобавитьПериодУхода(Объект, Родственник);
КонецЕсли;
ПериодыУходаЗаРодственникамиПриИзмененииНаСервере("", ПериодУхода.ПолучитьИдентификатор(), Истина);
КонецПроцедуры
&НаСервере
Процедура ОбновитьОстаткиОплачиваемыхДнейПоУходуЗаРодственниками(Родственник1 = Истина, Родственник2 = Истина)
Если Не ИспользуетсяРасчетЗарплаты Или Не ЭтоУходЗаРодственником() Тогда
Возврат;
КонецЕсли;
Если Документы.БольничныйЛист.ИспользоватьПериодыУходаВШапке(Объект) Тогда
СлучайУходаЗаБольнымРебенком = Неопределено;
Если Объект.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком Тогда
СлучайУходаЗаБольнымРебенком = Объект.СлучайУходаЗаБольнымРебенком;
КонецЕсли;
Если Родственник1 Тогда
ОстатокОплачиваемыхДнейУходаЗаРодственником1 = УчетПособийСоциальногоСтрахованияРасширенный.ОстатокОплачиваемыхДнейУходаЗаБольнымРодственником(
Объект.РодственникЗаКоторымОсуществляетсяУход1,
Макс(Объект.ДатаНачалаРодственник1, Объект.ДатаНачалаОплаты),
СлучайУходаЗаБольнымРебенком,
Объект.Ссылка);
Элементы.ОстатокОплачиваемыхДнейУходаЗаРодственником1.Видимость = (ОстатокОплачиваемыхДнейУходаЗаРодственником1 <> Неопределено);
КонецЕсли;
Если Родственник2 Тогда
ОстатокОплачиваемыхДнейУходаЗаРодственником2 = УчетПособийСоциальногоСтрахованияРасширенный.ОстатокОплачиваемыхДнейУходаЗаБольнымРодственником(
Объект.РодственникЗаКоторымОсуществляетсяУход2,
Макс(Объект.ДатаНачалаРодственник2, Объект.ДатаНачалаОплаты),
СлучайУходаЗаБольнымРебенком,
Объект.Ссылка);
Элементы.ОстатокОплачиваемыхДнейУходаЗаРодственником2.Видимость = (ОстатокОплачиваемыхДнейУходаЗаРодственником2 <> Неопределено);
КонецЕсли;
Иначе
Кэш = Новый Соответствие;
Кэш.Вставить("РассчитатьПериодыУхода", Ложь);
Документы.БольничныйЛист.ДатыУходаЗаРодственниками(Объект, Кэш);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьОстаткиПериодовУхода()
Если Не ИспользуетсяРасчетЗарплаты
Или Не ЭтоУходЗаРодственником()
Или Документы.БольничныйЛист.ИспользоватьПериодыУходаВШапке(Объект) Тогда
Возврат;
КонецЕсли;
Кэш = Новый Соответствие;
Кэш.Вставить("РассчитатьПериодыУхода", Ложь);
Документы.БольничныйЛист.ДатыУходаЗаРодственниками(Объект, Кэш);
КонецПроцедуры
&НаСервере
Процедура ОбновитьПериодыУходаПриИзмененииПериодаНетрудоспособности()
Если Не ЭтоУходЗаРодственником() Тогда
Возврат;
КонецЕсли;
Если Документы.БольничныйЛист.ИспользоватьПериодыУходаВШапке(Объект) Тогда
Для НомерРодственника = 1 По 2 Цикл
Номер = Строка(НомерРодственника);
Если Не ЗначениеЗаполнено(Объект["РодственникЗаКоторымОсуществляетсяУход" + Номер]) Тогда
Продолжить;
КонецЕсли;
Если Объект["ДатаНачалаРодственник" + Номер] = ДатаНачалаДоИзменения
Или Не ЗначениеЗаполнено(Объект["ДатаНачалаРодственник" + Номер])
Или Объект["ДатаНачалаРодственник" + Номер] < Объект.ДатаНачала Тогда
Объект["ДатаНачалаРодственник" + Номер] = Объект.ДатаНачала;
КонецЕсли;
Если Объект["ДатаОкончанияРодственник" + Номер] = ДатаОкончанияДоИзменения
Или Не ЗначениеЗаполнено(Объект["ДатаОкончанияРодственник" + Номер])
Или Объект["ДатаОкончанияРодственник" + Номер] > Объект.ДатаОкончания Тогда
Объект["ДатаОкончанияРодственник" + Номер] = Объект.ДатаОкончания;
КонецЕсли;
КонецЦикла;
Иначе
ЕстьИзмененияВПериодах = Ложь;
Для Каждого ПериодУхода Из Объект.ПериодыУходаЗаРодственниками Цикл
ЕстьИзменения = Ложь;
Если ПериодУхода.ДатаНачала = ДатаНачалаДоИзменения
Или Не ЗначениеЗаполнено(ПериодУхода.ДатаНачала)
Или ПериодУхода.ДатаНачала < Объект.ДатаНачала Тогда
Если ПериодУхода.ДатаНачала <> Объект.ДатаНачала Тогда
ПериодУхода.ДатаНачала = Объект.ДатаНачала;
ЕстьИзменения = Истина;
КонецЕсли;
КонецЕсли;
Если ПериодУхода.ДатаОкончания = ДатаОкончанияДоИзменения
Или Не ЗначениеЗаполнено(ПериодУхода.ДатаОкончания)
Или ПериодУхода.ДатаОкончания > Объект.ДатаОкончания Тогда
Если ПериодУхода.ДатаОкончания <> Объект.ДатаОкончания Тогда
ПериодУхода.ДатаОкончания = Объект.ДатаОкончания;
ЕстьИзменения = Истина;
КонецЕсли;
КонецЕсли;
Если Не ЕстьИзменения Тогда
Продолжить;
КонецЕсли;
ЕстьИзмененияВПериодах = Истина;
ДобавленныеСтроки = Документы.БольничныйЛист.РазбитьПоГодам(Объект.ПериодыУходаЗаРодственниками, ПериодУхода, "НомерСтроки");
Для Каждого СтрокаТаблицы Из ДобавленныеСтроки Цикл
СтрокаТаблицы.ИспользованоДней = 0;
СтрокаТаблицы.ДнейПоловиннойОплаты = 0;
СтрокаТаблицы.КоличествоДнейИзменено = Ложь;
КонецЦикла;
КонецЦикла;
Если ЕстьИзмененияВПериодах Тогда
ПериодыУходаЗаРодственникамиПриИзмененииНаСервере("", Неопределено, Ложь);
КонецЕсли;
КонецЕсли;
ДатаНачалаДоИзменения = Объект.ДатаНачала;
ДатаОкончанияДоИзменения = Объект.ДатаОкончания;
КонецПроцедуры
&НаКлиенте
Функция ПериодыУхода()
ПериодыУхода = Новый Массив;
ИменаПолей = "КодПричины, ДатаНачала, ДатаОкончания, КодСвязи,
|Фамилия, Имя, Отчество, СНИЛС, ДатаРождения,
|РежимЛечения, ВозрастЛет, ВозрастМесяцев, СлучайУхода,
|Родственник, ИспользованоДней, ДнейПоловиннойОплаты, КоличествоДнейИзменено";
Для Каждого СтрокаТаблицы Из Объект.ПериодыУходаЗаРодственниками Цикл
Структура = Новый Структура(ИменаПолей);
ЗаполнитьЗначенияСвойств(Структура, СтрокаТаблицы, ИменаПолей);
ПериодыУхода.Добавить(Структура);
КонецЦикла;
Возврат ПериодыУхода;
КонецФункции
#КонецОбласти
#Область Начисления
&НаКлиенте
Процедура ПослеИзмененияНачисленийНаКлиенте()
ПослеИзмененияНачисленийНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПослеИзмененияНачисленийНаСервере()
ЗапланироватьПолноеОбновлениеСведенийДляФСС();
УстановитьСвойствоДокументРассчитан();
ОбновитьСведенияДляФСС();
КонецПроцедуры
#КонецОбласти
#Область ДанныеЛисткаНетрудоспособности
&НаКлиенте
Процедура ПослеВводаДанныхЛисткаНетрудоспособности(РезультатВыбора, ПустойПараметр) Экспорт
Если ТипЗнч(РезультатВыбора) = Тип("Структура") Тогда
ОбновитьДанныеЛисткаНетрудоспособностиПослеРедактированияНаСервере(РезультатВыбора);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеЛисткаНетрудоспособностиПослеРедактированияНаСервере(РезультатВыбора)
ЗаполнитьЗначенияСвойств(Объект, РезультатВыбора, ИменаРеквизитовЛисткаНетрудоспособности());
Если РезультатВыбора.ЗаполнитьБольничный Тогда
ЗаполнитьБольничныйПоДаннымЛисткаНетрудоспособности();
КонецЕсли;
НастроитьЭлементыДополненияПричиныНетрудоспособности();
ОбновитьГиперссылкуВводаДанныхЛисткаНетрудоспособности();
УстановитьСвойстваПоляПервичногоБольничногоЛиста(ЭтотОбъект);
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьБольничныйПоДаннымЛисткаНетрудоспособности()
ОбменЛисткамиНетрудоспособностиФСС.ЗаполнитьПериодНетрудоспособности(Объект);
Объект.ПериодыУходаЗаРодственниками.Очистить();
Если ЗначениеЗаполнено(Объект.РодственникЗаКоторымОсуществляетсяУход1) Тогда
Объект.ДатаНачалаРодственник1 = Объект.ДатаНачала;
Объект.ДатаОкончанияРодственник1 = Объект.ДатаОкончания;
Иначе
Объект.ДатаНачалаРодственник1 = '00010101';
Объект.ДатаОкончанияРодственник1 = '00010101';
КонецЕсли;
Если ЗначениеЗаполнено(Объект.РодственникЗаКоторымОсуществляетсяУход2) Тогда
Объект.ДатаНачалаРодственник2 = Объект.ДатаНачала;
Объект.ДатаОкончанияРодственник2 = Объект.ДатаОкончания;
Иначе
Объект.ДатаНачалаРодственник2 = '00010101';
Объект.ДатаОкончанияРодственник2 = '00010101';
КонецЕсли;
ОбменЛисткамиНетрудоспособностиФСС.ЗаполнитьПричинуНетрудоспособностиИСлучайУходаЗаРебенком(Объект);
ДанныеЭЛН = Документы.БольничныйЛист.ДанныеЭЛНДляЗаполнения(Объект);
Если СведенияОбЭЛН.ЭтоЭЛН И СведенияОбЭЛН.ДоступенИсходныйXML Тогда
ОбменЛисткамиНетрудоспособностиФСС.ЗаполнитьРеквизитыШапкиПоУходу(Объект, ДанныеЭЛН);
КонецЕсли;
Документы.БольничныйЛист.ЗаполнитьТаблицуУходаЗаРодственниками(Объект, ДанныеЭЛН);
ОбновитьФормуПослеЗагрузкиЭЛН(Ложь, Ложь, Истина);
РассчитатьНаСервере();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ИменаРеквизитовЛисткаНетрудоспособности()
Возврат
"ПредоставленДубликатЛисткаНетрудоспособности,
|МедицинскаяОрганизация,
|НаименованиеМедицинскойОрганизации,
|АдресМедицинскойОрганизации,
|ОГРНМедицинскойОрганизации,
|ДатаВыдачиЛисткаНетрудоспособности,
|КодПричиныНетрудоспособности,
|ДополнительныйКодПричиныНетрудоспособности,
|ВторойКодПричиныНетрудоспособности,
|НаименованиеОрганизацииВЛисткеНетрудоспособности,
|ОсновноеМестоРаботы,
|НомерЛисткаПоОсновномуМестуРаботы,
|ДатаИзмененияКодаПричиныНетрудоспособности,
|ДатаОкончанияПутевки,
|НомерПутевки,
|ОГРН_Санатория,
|РодственникЗаКоторымОсуществляетсяУход1,
|РодственникЗаКоторымОсуществляетсяУход2,
|ПоУходуВозрастЛет1,
|ПоУходуВозрастМесяцев1,
|ПоУходуРодственнаяСвязь1,
|ПоУходуФИО1,
|ПоУходуИспользованоДней1,
|ПоУходуВозрастЛет2,
|ПоУходуВозрастМесяцев2,
|ПоУходуРодственнаяСвязь2,
|ПоУходуФИО2,
|ПоУходуИспользованоДней2,
|ПоставленаНаУчетВРанниеСрокиБеременности,
|КодНарушенияРежима,
|ДатаНарушенияРежима,
|ПериодНахожденияВСтационареСРебенкомС,
|ПериодНахожденияВСтационареСРебенкомПо,
|ДатаНаправленияВБюроМСЭ,
|ДатаРегистрацииДокументовМСЭ,
|ДатаОсвидетельствованияМСЭ,
|ГруппаИнвалидности,
|УтратаТрудоспобности,
|ПрерывистыйМетод,
|ОсвобождениеДатаНачала1,
|ОсвобождениеДатаОкончания1,
|ОсвобождениеДолжностьВрача1,
|ОсвобождениеФИОВрача1,
|ОсвобождениеИдентификационныйНомерВрача1,
|ОсвобождениеФИОВрачаПредседателяВК1,
|ОсвобождениеДолжностьВрачаПредседателяВК1,
|ОсвобождениеИдентификационныйНомерВрачаПредседателяВК1,
|ОсвобождениеДатаНачала2,
|ОсвобождениеДатаОкончания2,
|ОсвобождениеДолжностьВрача2,
|ОсвобождениеФИОВрача2,
|ОсвобождениеИдентификационныйНомерВрача2,
|ОсвобождениеФИОВрачаПредседателяВК2,
|ОсвобождениеДолжностьВрачаПредседателяВК2,
|ОсвобождениеИдентификационныйНомерВрачаПредседателяВК2,
|ОсвобождениеДатаНачала3,
|ОсвобождениеДатаОкончания3,
|ОсвобождениеДолжностьВрача3,
|ОсвобождениеФИОВрача3,
|ОсвобождениеИдентификационныйНомерВрача3,
|ОсвобождениеФИОВрачаПредседателяВК3,
|ОсвобождениеДолжностьВрачаПредседателяВК3,
|ОсвобождениеИдентификационныйНомерВрачаПредседателяВК3,
|ПриступитьКРаботеС,
|ДатаНовыйСтатусНетрудоспособного,
|НовыйСтатусНетрудоспособного,
|НомерЛисткаПродолжения,
|УсловияИсчисленияКод1,
|УсловияИсчисленияКод2,
|УсловияИсчисленияКод3,
|ДатаАктаН1,
|ДатаНачалаРаботы";
КонецФункции
&НаСервере
Процедура ОбновитьГиперссылкуВводаДанныхЛисткаНетрудоспособности()
Если ЗначениеЗаполнено(Объект.НомерЛисткаНетрудоспособности)
И ЗначениеЗаполнено(Объект.ДатаВыдачиЛисткаНетрудоспособности) Тогда
ПредставлениеЛисткаНетрудоспособности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Заполнены данные листка нетрудоспособности %1 от %2'"),
Объект.НомерЛисткаНетрудоспособности,
Формат(Объект.ДатаВыдачиЛисткаНетрудоспособности, "ДЛФ=D"));
Иначе
ПредставлениеЛисткаНетрудоспособности = НСтр("ru = 'Заполнить данные листка нетрудоспособности'");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область УсловияИсчисления
&НаСервере
Процедура ЗаполнитьУсловияИсчисления()
КадровыеДанные = Документы.БольничныйЛист.КадровыеДанныеСотрудника(Объект.Сотрудник, Объект.Организация, Объект.ДатаНачалаСобытия);
Если КадровыеДанные <> Неопределено Тогда
Документы.БольничныйЛист.ЗаполнитьУсловияИсчисления(Объект, КадровыеДанные);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СведенияДляФСС
&НаСервере
Процедура ЗапланироватьПолноеОбновлениеСведенийДляФСС()
ЗапланироватьЧтениеСведенийДляФСС();
ЗапланироватьЗаполнениеСведенийДляФССЗависящихОтНачислений();
КонецПроцедуры
&НаСервере
Процедура ЗапланироватьЧтениеСведенийДляФСС()
ТребуетсяПрочитатьФлажокИспользоватьПрямыеВыплатыФСС = Истина;
ТребуетсяПрочитатьСведенияОбЭЛН = Истина;
ТребуетсяПрочитатьРеквизитыЭЛН = Истина;
КонецПроцедуры
&НаСервере
Процедура ЗапланироватьЗаполнениеСведенийДляФССЗависящихОтНачислений()
ЕстьПособияЗаСчетФСС = Неопределено;
ТребуетсяЗаполнитьПараметрыПрямыхВыплатФСС = Истина;
ТребуетсяЗаполнитьПараметрыОтправкиЭЛН = Истина;
КонецПроцедуры
&НаСервере
Процедура ОбновитьСведенияДляФСС()
Если ТребуетсяПрочитатьФлажокИспользоватьПрямыеВыплатыФСС Тогда
ПрочитатьФлажокИспользоватьПрямыеВыплатыФСС();
КонецЕсли;
ПрочитатьСведенияОбЭЛНЕслиТребуется();
Если ТребуетсяПрочитатьРеквизитыЭЛН Тогда
ПрочитатьРеквизитыЭЛН();
КонецЕсли;
Если ТребуетсяЗаполнитьПараметрыПрямыхВыплатФСС Тогда
ЗаполнитьПараметрыПрямыхВыплатФСС();
КонецЕсли;
Если ТребуетсяЗаполнитьПараметрыОтправкиЭЛН Тогда
ЗаполнитьПараметрыОтправкиЭЛН();
КонецЕсли;
ОбновитьЭлементыСЭДО();
ОбновитьЭлементыЭЛН();
ОбновитьЭлементыПрямыхВыплатФСС();
ВидимостьСтраницы = Элементы.ГруппаПрямыеВыплатыФСС.Видимость Или Элементы.ГруппаЭЛН.Видимость;
Элементы.СтраницаОтправкаСведенийВФСС.Видимость = ВидимостьСтраницы;
Если ВидимостьСтраницы Тогда
Элементы.ГруппаПомеченНаУдаление.Видимость = Объект.ПометкаУдаления;
Элементы.ГруппаНеПроведен.Видимость = Не Объект.Проведен И Не Объект.ПометкаУдаления;
Элементы.НеЗакрытГруппа.Видимость = СведенияОбЭЛН.ЭтоЭЛН И Не СведенияОбЭЛН.Закрыт;
Если СведенияОбЭЛН.ЭтоПоследнийБольничный Тогда
Элементы.СсылкиБольничныхЭтогоЭЛН.Видимость = Ложь;
Иначе
Если Не Объект.Проведен И Не Объект.ПометкаУдаления Тогда
Если СведенияОбЭЛН.БольничныйПроведен Тогда
ЗаголовокНадписи = НСтр("ru = 'Последний проведенный больничный: <a href=""%1"">%2</a>.'");
Иначе
ЗаголовокНадписи = НСтр("ru = 'Последний больничный: <a href=""%1"">%2</a>.'");
КонецЕсли;
Иначе
ЗаголовокНадписи = НСтр("ru = 'Данный больничный не является последним для ЭЛН %3.
|Сведения для СФР можно изменить в <a href=""%1"">%2</a>.'");
КонецЕсли;
ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ЗаголовокНадписи,
ПолучитьНавигационнуюСсылку(СведенияОбЭЛН.Больничный),
СведенияОбЭЛН.БольничныйПредставление,
Объект.НомерЛисткаНетрудоспособности);
Элементы.СсылкиБольничныхЭтогоЭЛН.Видимость = Истина;
Элементы.СсылкиБольничныхЭтогоЭЛН.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(ЗаголовокНадписи);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЕстьПособияЗаСчетФСС()
Если ЕстьПособияЗаСчетФСС = Неопределено Тогда
ЕстьПособияЗаСчетФСС = ПрямыеВыплатыПособийСоциальногоСтрахования.КоллекцияСодержитПособияЗаСчетФСС(
Объект.Начисления.Выгрузить(, "Начисление").ВыгрузитьКолонку("Начисление"));
КонецЕсли;
Возврат ЕстьПособияЗаСчетФСС;
КонецФункции
&НаСервере
Функция ЭтоНСПЗ()
Возврат Документы.БольничныйЛист.ЭтоНСПЗ(Объект);
КонецФункции
#КонецОбласти
#Область СЭДО
&НаСервере
Процедура ОбновитьЭлементыСЭДО()
Если Не ИспользоватьПрямыеВыплатыФСС Тогда
Элементы.СЭДОГруппа.Видимость = Ложь;
Возврат;
КонецЕсли;
Если Не СведенияОбЭЛН.ЭтоЭЛН Тогда
Элементы.СЭДОГруппа.Видимость = Ложь;
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ДатаНачалаСобытия)
И Объект.ДатаНачалаСобытия < СЭДОФСС.ДатаНачалаПроактивныхВыплат() Тогда
Элементы.СЭДОГруппа.Видимость = Ложь;
Возврат;
КонецЕсли;
Элементы.СЭДОГруппа.Видимость = Истина;
ЕстьВходящийЗапрос = ЗначениеЗаполнено(ВходящийЗапрос);
ЕстьОтветНаЗапрос = ЗначениеЗаполнено(ОтветНаЗапрос);
ЕстьСообщениеОСтраховомСлучае = ЗначениеЗаполнено(СообщениеОСтраховомСлучае);
ЕстьДанныеСФРДляРасчетаПособия = ЗначениеЗаполнено(ДанныеСФРДляРасчетаПособия);
Выплачивается = Объект.ПособиеВыплачиваетсяФСС И Не СведенияОбЭЛН.Аннулирован;
Элементы.ВходящийЗапросОтсутствуетГруппа.Видимость = Выплачивается И Не ЕстьВходящийЗапрос И Не ЕстьОтветНаЗапрос;
Элементы.СообщитьОСтраховомСлучаеГруппа.Видимость = Не ЕстьСообщениеОСтраховомСлучае;
Элементы.СообщениеОСтраховомСлучае.Видимость = ЕстьСообщениеОСтраховомСлучае;
Элементы.ДанныеСФРДляРасчетаПособия.Видимость = ЕстьДанныеСФРДляРасчетаПособия;
Элементы.ВходящийЗапрос.Видимость = ЕстьВходящийЗапрос;
Элементы.ОтветНаЗапросОтсутствуетГруппа.Видимость = Не ЕстьОтветНаЗапрос И ЕстьВходящийЗапрос;
Элементы.ОтветНаЗапросГруппа.Видимость = ЕстьОтветНаЗапрос;
Если СведенияОбЭЛН.Аннулирован Тогда
Элементы.АннулированГруппа.Видимость = Истина;
Если ЗначениеЗаполнено(СведенияОбЭЛН.ДубликатБольничный) Тогда
Элементы.ДубликатНадпись.Видимость = Истина;
Элементы.ДубликатНадпись.Заголовок = СтрШаблон(
НСтр("ru = 'Взамен выдан <a href=""%1"">%2</a>'"),
ПолучитьНавигационнуюСсылку(СведенияОбЭЛН.ДубликатБольничный),
СведенияОбЭЛН.ДубликатБольничный);
ИначеЕсли ЗначениеЗаполнено(СведенияОбЭЛН.ДубликатНомерЛН) Тогда
Элементы.ДубликатНадпись.Видимость = Истина;
Элементы.ДубликатНадпись.Заголовок = СтрШаблон(НСтр("ru = 'Взамен выдан ЭЛН № %1'"), СведенияОбЭЛН.ДубликатНомерЛН);
Иначе
Элементы.ДубликатНадпись.Видимость = Ложь;
КонецЕсли;
Иначе
Элементы.АннулированГруппа.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПрямыеВыплатыФСС
&НаСервере
Процедура ПрочитатьФлажокИспользоватьПрямыеВыплатыФСС()
ТребуетсяПрочитатьФлажокИспользоватьПрямыеВыплатыФСС = Ложь;
ИспользоватьПрямыеВыплатыФСС = ПрямыеВыплатыПособийСоциальногоСтрахования.ПособиеПлатитУчастникПилотногоПроекта(
Объект.Организация,
Объект.ПериодРегистрации,
Объект.ЭЛНКарантинПоКоронавирусу);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыПрямыхВыплатФСС()
ТребуетсяЗаполнитьПараметрыПрямыхВыплатФСС = Ложь;
Объект.ПособиеВыплачиваетсяФСС = ИспользоватьПрямыеВыплатыФСС
И ЗначениеЗаполнено(Объект.НомерЛисткаНетрудоспособности)
И ЕстьПособияЗаСчетФСС();
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыПрямыхВыплатФСС()
Элементы.ГруппаПрямыеВыплатыФСС.Видимость = ИспользоватьПрямыеВыплатыФСС;
Если ИспользоватьПрямыеВыплатыФСС Тогда
ПрямыеВыплатыПособийСоциальногоСтрахования.ОбновитьНадписьВБольничном(
Элементы.СсылкиПрямыхВыплатФСС,
Объект.Ссылка,
Объект.ПособиеВыплачиваетсяФСС И Не СведенияОбЭЛН.Аннулирован);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьСведенияДляПрямыхВыплатФСС()
Если Модифицированность Или Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПараметрыЗаписи = Новый Структура("РежимЗаписи, ИмяПроцедурыПослеЗаписи");
ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение;
ПараметрыЗаписи.ИмяПроцедурыПослеЗаписи = "ОткрытьЗаявлениеСотрудникаНаВыплатуПособия";
Записать(ПараметрыЗаписи);
Иначе
ОткрытьЗаявлениеСотрудникаНаВыплатуПособия(Неопределено, Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьЗаявлениеСотрудникаНаВыплатуПособия(ОбъектЗаписан, ПараметрыЗаписи) Экспорт
ПрямыеВыплатыПособийСоциальногоСтрахованияКлиент.ОткрытьЗаявлениеСотрудникаПоОснованию(Объект.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьВсеСведенияДляПрямыхВыплатФСС()
ОтборыСписка = Новый Структура;
ОтборыСписка.Вставить("ГоловнаяОрганизация", Объект.ГоловнаяОрганизация);
ОтборыСписка.Вставить("Организация", Объект.Организация);
ОтборыСписка.Вставить("Сотрудник", Объект.Сотрудник);
ОтборыСписка.Вставить("НомерЛисткаНетрудоспособности", Объект.НомерЛисткаНетрудоспособности);
ПараметрыСписка = Новый Структура;
ПараметрыСписка.Вставить("Отбор", ОтборыСписка);
УникальностьСписка = Объект.НомерЛисткаНетрудоспособности;
ОткрытьФорму("Документ.ЗаявлениеСотрудникаНаВыплатуПособия.ФормаСписка", ПараметрыСписка, , УникальностьСписка);
КонецПроцедуры
#КонецОбласти
#Область ЭЛН
&НаКлиенте
Процедура ЗаполнитьПорядокВыплатыИРассчитать()
ЗаполнитьПорядокВыплатыИРассчитатьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПорядокВыплатыИРассчитатьНаСервере()
Объект.ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Зарплата;
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
ТребуетсяОчиститьДанныеСреднегоЗаработка = Истина;
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
ЗапланироватьПолноеОбновлениеСведенийДляФСС();
Объект.АвтозаполнениеПериодовОплаты = Истина;
ПараметрыЗаполнения = Документы.БольничныйЛист.ПараметрыЗаполнения(Истина);
ПараметрыРасчета = ПараметрыРасчета();
ПараметрыРасчета.ВыводитьСообщения = ВыводитьСообщенияПриРасчете;
ПерезаполнитьИРассчитатьНачисленияНаСервере(ПараметрыЗаполнения, ПараметрыРасчета);
РазблокироватьФормуПослеРасчетаЭЛН();
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьЭЛНИзФССПослеОткрытияФормы()
Если Не РазрешеноПолучениеИзФСС() Тогда
Возврат;
КонецЕсли;
Результат = ПолучитьИзФССНаСервере();
Если Результат.БольничныйЗаполнен Тогда
ПослеУспешнойЗагрузкиЭЛН();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачатьПолучениеДанныхИзФСС(ЗапросДляПолученияЭЛН)
Если ЗапросДляПолученияЭЛН = Неопределено Тогда
Возврат;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ПолучитьДанныеИзФССЗавершение", ЭтотОбъект);
ЭлектронныйДокументооборотСФССКлиент.ПолучитьДанныеЭЛНИзФСС(Оповещение, ЗапросДляПолученияЭЛН);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьДанныеИзФССЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ВыводитьСообщенияПриРасчете = Ложь;
ОбменВыполненУспешно = ЗагрузитьОтветСервисаФСС(Результат.АдресРасшифрованногоОтветаSOAP, Ложь);
Если ОбменВыполненУспешно Тогда
ПодписьПрошлаПроверку = (Результат.ПодписьВалидна <> Ложь);
Если ПодписьПрошлаПроверку Тогда
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);
ПараметрыЗаписи.Вставить("ОчиститьСообщения", Ложь);
Записать(ПараметрыЗаписи);
КонецЕсли;
ПослеУспешнойЗагрузкиЭЛН();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеУспешнойЗагрузкиЭЛН()
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Загружены данные ЛН №%1.'"),
Объект.НомерЛисткаНетрудоспособности);
ПоказатьОповещениеПользователя(НСтр("ru = 'Данные ЭЛН загружены из СФР'"), , ТекстОповещения, БиблиотекаКартинок.Успешно32);
КонецПроцедуры
&НаКлиенте
Функция РазрешеноПолучениеИзФСС()
Если Не ЗначениеЗаполнено(Объект.ГоловнаяОрганизация) Тогда
СообщенияБЗККлиентСервер.СообщитьВФорме(НСтр("ru = 'Не выбрана организация.'"), "Объект.Организация");
Возврат Ложь;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.НомерЛисткаНетрудоспособности) Тогда
СообщенияБЗККлиентСервер.СообщитьВФорме(НСтр("ru = 'Не заполнен номер листка нетрудоспособности.'"), "Объект.НомерЛисткаНетрудоспособности");
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция ПолучитьИзФССНаСервере()
Результат = Новый Структура("БольничныйЗаполнен, ЗапросДляПолученияЭЛН");
Результат.БольничныйЗаполнен = Ложь;
ПроверятьВозможностьЗагрузки = Истина;
ТекстXML = РегистрыСведений.СведенияОбЭЛН.ИсходныйXML(
Объект.НомерЛисткаНетрудоспособности,
Объект.ГоловнаяОрганизация,
ПроверятьВозможностьЗагрузки);
Если ЗначениеЗаполнено(ТекстXML) Тогда
Адрес = ПоместитьВоВременноеХранилище(ТекстXML);
ВыводитьСообщенияПриРасчете = Ложь;
Результат.БольничныйЗаполнен = ЗагрузитьОтветСервисаФСС(Адрес, Ложь);
КонецЕсли;
Если Не Результат.БольничныйЗаполнен Тогда
Результат.ЗапросДляПолученияЭЛН = ВыгрузитьЗапросДляПолученияЭЛН();
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ВыгрузитьЗапросДляПолученияЭЛН()
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
СообщенияБЗККлиентСервер.СообщитьВФорме(НСтр("ru = 'Не выбрана организация.'"), "Организация", "Объект");
Возврат Неопределено;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Сотрудник) Тогда
СообщенияБЗККлиентСервер.СообщитьВФорме(НСтр("ru = 'Не выбран сотрудник.'"), "Сотрудник", "Объект");
Возврат Неопределено;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.НомерЛисткаНетрудоспособности) Тогда
Текст = НСтр("ru = 'Не заполнен номер листка нетрудоспособности.'");
СообщенияБЗККлиентСервер.СообщитьВФорме(Текст, "НомерЛисткаНетрудоспособности", "Объект");
Возврат Неопределено;
КонецЕсли;
Возврат ОбменЛисткамиНетрудоспособностиФСС.ВыгрузитьЗапросДляПолученияЭЛН(Объект);
КонецФункции
&НаСервере
Функция ЗагрузитьОтветСервисаФСС(Знач АдресРасшифрованногоОтветаSOAP, Знач ЗагрузкаИзФайла)
Документ = РеквизитФормыВЗначение("Объект");
РезультатОбмена = ОбменЛисткамиНетрудоспособностиФСС.ЗагрузитьОтветСервисаФСС(
Документ,
"getPrivateLNData",
АдресРасшифрованногоОтветаSOAP,
ЗагрузкаИзФайла);
ОбменВыполненУспешно = Не РезультатОбмена.Отказ;
Если ОбменВыполненУспешно Тогда
ИзмененаОрганизация = ЗагрузкаИзФайла Или Документ.Организация <> Объект.Организация;
ИзмененСотрудник = ЗагрузкаИзФайла Или Документ.Сотрудник <> Объект.Сотрудник;
ИзмененаДатаНачалаСобытия = ЗагрузкаИзФайла Или Документ.ДатаНачалаСобытия <> Объект.ДатаНачалаСобытия;
ЗначениеВРеквизитФормы(Документ, "Объект");
ЗаполнитьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
ОбновитьФормуПослеЗагрузкиЭЛН(ИзмененаОрганизация, ИзмененСотрудник, ИзмененаДатаНачалаСобытия);
РассчитатьНаСервере();
Модифицированность = Истина;
КонецЕсли;
Возврат ОбменВыполненУспешно;
КонецФункции
&НаСервере
Процедура ОбновитьФормуПослеЗагрузкиЭЛН(ИзмененаОрганизация, ИзмененСотрудник, ИзмененаДатаНачалаСобытия)
Если ИзмененаОрганизация Или ИзмененСотрудник Тогда
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
СброситьПараметрыОплаты();
Если ИзмененСотрудник Или ИзмененаДатаНачалаСобытия Тогда
ЗаполнитьПоКадровымДаннымСотрудника();
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
КонецЕсли;
ЗапланироватьПолноеОбновлениеСведенийДляФСС();
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
Документы.БольничныйЛист.ОчиститьСлучайУходаПриНеобходимости(Объект);
Документы.БольничныйЛист.ОтключитьФлажкиПриНеобходимости(Объект);
ОпределитьВариантДоплаты();
ОтключитьНеприменимыеВариантыДоплаты();
ПерезаполнитьСсылкиНачислений();
ОчиститьДанныеСреднегоЗаработка();
Если ИзмененСотрудник Или ИзмененаДатаНачалаСобытия Тогда
Объект.ДенежноеСодержание.Очистить();
Объект.ДенежноеСодержаниеФактическиеНачисления.Очистить();
ОбновитьЭлементыФинансированияФедеральнымБюджетом(ЭтотОбъект);
КонецЕсли;
ЗаполнитьСтаж();
ЗаполнитьУсловияИсчисления();
УстановитьПорядокВыплатыУволенному();
ОбновитьОстаткиОплачиваемыхДнейПоУходуЗаРодственниками();
ЗаполнитьДатуНачалаПоловиннойОплаты();
ЗаполнитьПериодРасчетаСреднегоЗаработка();
ОбновитьДанныеДляРасчетаСреднего();
ЗаполнитьПроцентОплатыИОграничениеПособия();
ПолностьюОбновитьФорму(Истина, Ложь);
РазблокироватьФормуПослеРасчетаЭЛН();
КонецПроцедуры
&НаСервере
Процедура РазблокироватьФормуПослеРасчетаЭЛН()
Элементы.РассчитываетсяЭЛНГруппа.Видимость = Ложь;
Элементы.Страницы.ТолькоПросмотр = Ложь;
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораФайлаЭЛН(ОписаниеФайла, ПустойПараметр) Экспорт
Если ОписаниеФайла = Неопределено Или Не ЗначениеЗаполнено(ОписаниеФайла.Хранение) Тогда
Возврат;
КонецЕсли;
ОчиститьСообщения();
Попытка
ВыводитьСообщенияПриРасчете = Ложь;
ФайлЗагружен = ЗагрузитьОтветСервисаФСС(ОписаниеФайла.Хранение, Истина);
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
Кратко = СтрШаблон(
НСтр("ru = 'При загрузке ЭЛН из файла возникла ошибка: ""%1"".'"),
КраткоеПредставлениеОшибки(ИнформацияОбОшибке));
Подробно = СтрШаблон(
НСтр("ru = 'Ошибка загрузки файла ""%1"":
|%2
|
|Вероятно, файл не соответствует спецификации ответа веб-сервиса СФР ЭЛН.'"),
ОписаниеФайла.Имя,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
ИнформированиеПользователяКлиент.Предупредить(Кратко, Подробно, НСтр("ru = 'Ошибка загрузки ЭЛН из файла'"));
ФайлЗагружен = Ложь;
КонецПопытки;
Если ФайлЗагружен Тогда
Записать(Новый Структура("ОчиститьСообщения", Ложь));
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Загружены данные ЛН №%1.'"),
Объект.НомерЛисткаНетрудоспособности);
ПоказатьОповещениеПользователя(НСтр("ru = 'Данные ЭЛН загружены из СФР'"), , ТекстОповещения, БиблиотекаКартинок.Успешно32);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ОписаниеФайлаЭЛН(Знач НомерЛН, Знач ГоловнаяОрганизация, Знач ИдентификаторФормы)
Возврат ОбменЛисткамиНетрудоспособностиФСС.ОписаниеФайлаЭЛН(НомерЛН, ГоловнаяОрганизация, ИдентификаторФормы);
КонецФункции
&НаСервере
Процедура ПередЗаписьюНаСервереЭЛН(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ПрочитатьСведенияОбЭЛНЕслиТребуется();
ТекущийОбъект.ДополнительныеСвойства.Вставить("ЭтоПоследнийБольничныйЭЛН", СведенияОбЭЛН.ЭтоПоследнийБольничныйЭЛН);
Если СведенияОбЭЛН.ЭтоПоследнийБольничныйЭЛН Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить("ОтправитьЭЛН", ОтправитьЭЛН);
ТекущийОбъект.ДополнительныеСвойства.Вставить("ИсправлениеЭЛН", ИсправлениеЭЛН);
ТекущийОбъект.ДополнительныеСвойства.Вставить("КодПричиныИсправленияЭЛН", КодПричиныИсправленияЭЛН);
ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПричиныИсправленияЭЛН", ОписаниеПричиныИсправленияЭЛН);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервереЭЛН(Отказ, ПроверяемыеРеквизиты)
Если ОтправитьЭЛН И ИсправлениеЭЛН И СведенияОбЭЛН.ЭтоПоследнийБольничныйЭЛН Тогда
Если Не ЗначениеЗаполнено(КодПричиныИсправленияЭЛН) Тогда
Текст = НСтр("ru = 'Не заполнен код причины исправления ЭЛН'");
СообщенияБЗККлиентСервер.СообщитьОбОшибкеВФорме(Отказ, Текст, "КодПричиныИсправленияЭЛН");
КонецЕсли;
Если Не ЗначениеЗаполнено(ОписаниеПричиныИсправленияЭЛН) Тогда
Текст = НСтр("ru = 'Не заполнено описание причины исправления ЭЛН'");
СообщенияБЗККлиентСервер.СообщитьОбОшибкеВФорме(Отказ, Текст, "ОписаниеПричиныИсправленияЭЛН");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьСведенияОбЭЛНЕслиТребуется()
Если Не ТребуетсяПрочитатьСведенияОбЭЛН Тогда
Возврат;
КонецЕсли;
ТребуетсяПрочитатьСведенияОбЭЛН = Ложь;
СведенияОбЭЛН = СведенияОбЭЛН(Объект.НомерЛисткаНетрудоспособности, Объект.ГоловнаяОрганизация);
Элементы.КодПричиныИсправленияЭЛН.Подсказка = НаименованиеПричиныИсправленияЭЛН(ЭтотОбъект);
ЭтоПоследний = Не ЗначениеЗаполнено(СведенияОбЭЛН.Больничный)
Или СведенияОбЭЛН.Больничный = Объект.Ссылка
Или (СведенияОбЭЛН.Больничный = Объект.ИсправленныйДокумент И Не Объект.Проведен И Не Объект.ПометкаУдаления);
Закрыт = СтрНачинаетсяС(Объект.НомерЛисткаНетрудоспособности, "9990")
Или (СведенияОбЭЛН.СостояниеФСС <> Перечисления.СостоянияЭЛНВФСС.Открыт
И СведенияОбЭЛН.СостояниеФСС <> Перечисления.СостоянияЭЛНВФСС.Продлен
И СведенияОбЭЛН.СостояниеФСС <> Перечисления.СостоянияЭЛНВФСС.НаправленНаМСЭ
И СведенияОбЭЛН.СостояниеФСС <> Перечисления.СостоянияЭЛНВФСС.ДополненДаннымиМСЭ);
СведенияОбЭЛН.Вставить("ЭтоПоследнийБольничный", ЭтоПоследний);
СведенияОбЭЛН.Вставить("ЭтоПоследнийБольничныйЭЛН", СведенияОбЭЛН.ЭтоЭЛН И ЭтоПоследний);
СведенияОбЭЛН.Вставить("Закрыт", Закрыт);
СведенияОбЭЛН.Вставить("ЭтоЗакрытыйЭЛН", СведенияОбЭЛН.ЭтоЭЛН И Закрыт);
ВходящийЗапрос = СведенияОбЭЛН.ВходящийЗапрос;
ОтветНаЗапрос = СведенияОбЭЛН.ОтветНаЗапрос;
СообщениеОСтраховомСлучае = СведенияОбЭЛН.СообщениеОСтраховомСлучае;
ДанныеСФРДляРасчетаПособия = СведенияОбЭЛН.ДанныеСФРДляРасчетаПособия;
КонецПроцедуры
&НаСервереБезКонтекста
Функция СведенияОбЭЛН(НомерЛН, ГоловнаяОрганизация) Экспорт
Результат = Новый Структура(
"ДоступенИсходныйXML,
|СостояниеФСС,
|Аннулирован,
|ДубликатНомерЛН,
|ДубликатБольничный,
|ДатаНачала,
|ДатаОкончания,
|ЭтоЭЛН,
|ИзмененияПринятыФСС,
|ТребуетсяРеестрЭЛН,
|Исправление,
|КодПричиныИсправления,
|ОписаниеПричиныИсправления,
|Организация,
|Больничный,
|БольничныйПроведен,
|БольничныйПредставление,
|ВходящийЗапрос,
|ОтветНаЗапрос,
|СообщениеОСтраховомСлучае,
|ДанныеСФРДляРасчетаПособия,
|ПодготовленныйРеестр,
|ПодготовленныйРеестрНомер,
|ПодготовленныйРеестрДата,
|ПринятыйРеестр,
|ПринятыйРеестрНомер,
|ПринятыйРеестрДата");
УстановитьПривилегированныйРежим(Истина);
Если ЗначениеЗаполнено(НомерЛН)
И ЗначениеЗаполнено(ГоловнаяОрганизация)
И ПолучитьФункциональнуюОпцию("ИспользоватьНачислениеЗарплаты") Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СведенияОбЭЛН.ДоступенИсходныйXML КАК ДоступенИсходныйXML,
| СведенияОбЭЛН.ДоступенИсходныйXML
| ИЛИ СведенияОбЭЛН.Хеш <> """" КАК ЭтоЭЛН,
| СведенияОбЭЛН.СостояниеФСС КАК СостояниеФСС,
| СведенияОбЭЛН.ПериодНетрудоспособностиНачало КАК ДатаНачала,
| СведенияОбЭЛН.ПериодНетрудоспособностиОкончание КАК ДатаОкончания,
| СведенияОбЭЛН.ИзмененияПринятыФСС КАК ИзмененияПринятыФСС,
| СведенияОбЭЛН.ТребуетсяРеестрЭЛН КАК ТребуетсяРеестрЭЛН,
| СведенияОбЭЛН.Исправление КАК Исправление,
| СведенияОбЭЛН.КодПричиныИсправления КАК КодПричиныИсправления,
| СведенияОбЭЛН.ОписаниеПричиныИсправления КАК ОписаниеПричиныИсправления,
| СведенияОбЭЛН.Организация КАК Организация,
| СведенияОбЭЛН.Больничный КАК Больничный,
| БольничныйЛист.Проведен КАК БольничныйПроведен,
| БольничныйЛист.Представление КАК БольничныйПредставление,
| СведенияОбЭЛН.ВходящийЗапрос КАК ВходящийЗапрос,
| СведенияОбЭЛН.ОтветНаЗапрос КАК ОтветНаЗапрос,
| СведенияОбЭЛН.СообщениеОСтраховомСлучае КАК СообщениеОСтраховомСлучае,
| СведенияОбЭЛН.ДанныеСФРДляРасчетаПособия КАК ДанныеСФРДляРасчетаПособия,
| СведенияОбЭЛН.ПодготовленныйКОтправкеРеестр КАК ПодготовленныйРеестр,
| Подготовленный.Номер КАК ПодготовленныйРеестрНомер,
| Подготовленный.Дата КАК ПодготовленныйРеестрДата,
| СведенияОбЭЛН.ПринятыйРеестр КАК ПринятыйРеестр,
| Принятый.Номер КАК ПринятыйРеестрНомер,
| Принятый.Дата КАК ПринятыйРеестрДата,
| ДубликатЭЛН.НомерЛисткаНетрудоспособности КАК ДубликатНомерЛН,
| ДубликатЭЛН.Больничный КАК ДубликатБольничный
|ИЗ
| РегистрСведений.СведенияОбЭЛН КАК СведенияОбЭЛН
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК БольничныйЛист
| ПО СведенияОбЭЛН.Больничный = БольничныйЛист.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеестрДанныхЭЛНЗаполняемыхРаботодателем КАК Подготовленный
| ПО СведенияОбЭЛН.ПодготовленныйКОтправкеРеестр = Подготовленный.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеестрДанныхЭЛНЗаполняемыхРаботодателем КАК Принятый
| ПО СведенияОбЭЛН.ПринятыйРеестр = Принятый.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОбЭЛН КАК ДубликатЭЛН
| ПО СведенияОбЭЛН.НомерЛисткаНетрудоспособности = ДубликатЭЛН.НомерЗаменяемогоЛН
|ГДЕ
| СведенияОбЭЛН.НомерЛисткаНетрудоспособности = &НомерЛН
| И СведенияОбЭЛН.ГоловнаяОрганизация = &ГоловнаяОрганизация";
Запрос.УстановитьПараметр("НомерЛН", НомерЛН);
Запрос.УстановитьПараметр("ГоловнаяОрганизация", ГоловнаяОрганизация);
Таблица = Запрос.Выполнить().Выгрузить();
Если Таблица.Количество() > 0 Тогда
ЗаполнитьЗначенияСвойств(Результат, Таблица[0]);
КонецЕсли;
КонецЕсли;
Если Результат.ЭтоЭЛН = Неопределено Тогда
Результат.ЭтоЭЛН = Ложь;
Результат.ДоступенИсходныйXML = Ложь;
Результат.ИзмененияПринятыФСС = Ложь;
Результат.ТребуетсяРеестрЭЛН = Ложь;
Результат.Исправление = Ложь;
Результат.КодПричиныИсправления = "";
Результат.ОписаниеПричиныИсправления = "";
КонецЕсли;
Если Результат.Больничный = Неопределено Тогда
Поля = "Ссылка, Проведен, Представление";
Последний = Документы.БольничныйЛист.ПоследнийДокументВЦепочкеИсправлений(НомерЛН, ГоловнаяОрганизация, , Поля);
Если Последний <> Неопределено Тогда
Результат.Больничный = Последний.Ссылка;
Результат.БольничныйПроведен = Последний.Проведен;
Результат.БольничныйПредставление = Последний.Представление;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.Больничный) Тогда
Результат.Больничный = Документы.БольничныйЛист.ПустаяСсылка();
Результат.БольничныйПроведен = Ложь;
Результат.БольничныйПредставление = "";
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ПодготовленныйРеестр) Тогда
Результат.ПодготовленныйРеестр = Документы.РеестрДанныхЭЛНЗаполняемыхРаботодателем.ПустаяСсылка();
Результат.ПодготовленныйРеестрНомер = "";
Результат.ПодготовленныйРеестрДата = '00010101';
КонецЕсли;
Если Не ЗначениеЗаполнено(Результат.ПринятыйРеестр) Тогда
Результат.ПринятыйРеестр = Документы.РеестрДанныхЭЛНЗаполняемыхРаботодателем.ПустаяСсылка();
Результат.ПринятыйРеестрНомер = "";
Результат.ПринятыйРеестрДата = '00010101';
КонецЕсли;
Результат.Аннулирован = Результат.ЭтоЭЛН И Результат.СостояниеФСС = Перечисления.СостоянияЭЛНВФСС.Аннулирован;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ПрочитатьРеквизитыЭЛН()
ТребуетсяПрочитатьРеквизитыЭЛН = Ложь;
ОтправитьЭЛН = СведенияОбЭЛН.ТребуетсяРеестрЭЛН И Не ЗначениеЗаполнено(ВходящийЗапрос);
ИсправлениеЭЛН = СведенияОбЭЛН.Исправление;
КодПричиныИсправленияЭЛН = СведенияОбЭЛН.КодПричиныИсправления;
ОписаниеПричиныИсправленияЭЛН = СведенияОбЭЛН.ОписаниеПричиныИсправления;
ИсправлениеЭЛНЧислом = Число(ИсправлениеЭЛН);
КонецПроцедуры
&НаСервере
Процедура ПодготовитьДанныеПринятогоРеестраЭЛН()
Если СведенияОбЭЛН.Свойство("ДанныеПринятогоРеестра") Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(СведенияОбЭЛН.ПринятыйРеестр) Тогда
ДанныеПринятогоРеестра = ОбменЛисткамиНетрудоспособностиФСС.ДанныеРеестраВЧастиБольничногоОтправляемыеВФСС(
СведенияОбЭЛН.ПринятыйРеестр,
Объект.НомерЛисткаНетрудоспособности);
Иначе
ДанныеПринятогоРеестра = ОбменЛисткамиНетрудоспособностиФСС.СтруктураДанныхРеестровВЧастиБольничного();
КонецЕсли;
СведенияОбЭЛН.Вставить("ДанныеПринятогоРеестра", ДанныеПринятогоРеестра);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыОтправкиЭЛН()
ТребуетсяЗаполнитьПараметрыОтправкиЭЛН = Ложь;
Если Не СведенияОбЭЛН.ЭтоЭЛН Тогда
ОтправитьЭЛН = Ложь;
ИсправлениеЭЛН = Ложь;
ИначеЕсли СтрНачинаетсяС(Объект.НомерЛисткаНетрудоспособности, "9990") Тогда
ОтправитьЭЛН = Ложь;
ИсправлениеЭЛН = Ложь;
ИначеЕсли Не ЕстьПособияЗаСчетФСС() Тогда
ОтправитьЭЛН = Ложь;
ИсправлениеЭЛН = Ложь;
ИначеЕсли Не ЭтоНСПЗ() Тогда
ОтправитьЭЛН = Ложь;
ИсправлениеЭЛН = Ложь;
ИначеЕсли ЗначениеЗаполнено(ВходящийЗапрос) Тогда
ОтправитьЭЛН = Ложь;
ИсправлениеЭЛН = Ложь;
ИначеЕсли Не ЗначениеЗаполнено(СведенияОбЭЛН.ПринятыйРеестр) Тогда
ОтправитьЭЛН = Истина;
ИсправлениеЭЛН = Ложь;
Иначе
ПодготовитьДанныеПринятогоРеестраЭЛН();
Если СведенияОбЭЛН.ДанныеПринятогоРеестра.ОсновноеМестоРаботы = Неопределено Тогда
ИзменилисьДанные = Истина;
Иначе
ДанныеБольничного = ОбменЛисткамиНетрудоспособностиФСС.ДанныеБольничногоОтправляемыеВФСС(Объект);
ИзменилисьДанные = Не ОбщегоНазначенияБЗК.ЗначенияСовпадают(СведенияОбЭЛН.ДанныеПринятогоРеестра, ДанныеБольничного);
КонецЕсли;
ОтправитьЭЛН = ИзменилисьДанные;
ИсправлениеЭЛН = ИзменилисьДанные;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыЭЛН()
Элементы.ПодменюЭЛНВыгрузитьФайл.Видимость = СведенияОбЭЛН.ДоступенИсходныйXML;
Элементы.ПодменюЭЛНПерезаполнитьБольничный.Видимость = СведенияОбЭЛН.ДоступенИсходныйXML;
ЕстьПраво = ПравоДоступа("Просмотр", Метаданные.Документы.РеестрДанныхЭЛНЗаполняемыхРаботодателем);
ЭтоПоследний = СведенияОбЭЛН.ЭтоПоследнийБольничныйЭЛН И Не СведенияОбЭЛН.Аннулирован;
Элементы.ГруппаЭЛН.Видимость = ЭтоПоследний Или (ЕстьПраво И СведенияОбЭЛН.ЭтоЭЛН);
Если Не Элементы.ГруппаЭЛН.Видимость Тогда
Возврат;
КонецЕсли;
Элементы.КодПричиныИсправленияЭЛН.Подсказка = НаименованиеПричиныИсправленияЭЛН(ЭтотОбъект);
ЕстьПодготовленный = ЗначениеЗаполнено(СведенияОбЭЛН.ПодготовленныйРеестр) И СведенияОбЭЛН.ПринятыйРеестр <> СведенияОбЭЛН.ПодготовленныйРеестр;
ЕстьПринятый = ЗначениеЗаполнено(СведенияОбЭЛН.ПринятыйРеестр);
ЕстьРеестр = (ЕстьПодготовленный Или ЕстьПринятый);
Если ЕстьРеестр Или (ЕстьПраво И Не СведенияОбЭЛН.Аннулирован) Тогда
Если ЕстьПодготовленный Или ЕстьПринятый Тогда
Если ЕстьПринятый Тогда
ЗаголовокНадписи = НСтр("ru = 'Последний принятый реестр ЭЛН: <a href=""ПринятыйРеестрЭЛН"">№ %1 от %2</a>'");
Если ЕстьПодготовленный Тогда
ЗаголовокНадписи = ЗаголовокНадписи + " " + НСтр("ru = 'Подготовленный: <a href=""ПодготовленныйРеестрЭЛН"">№ %3 от %4</a>'");
КонецЕсли;
Иначе
ЗаголовокНадписи = НСтр("ru = 'Последний подготовленный реестр ЭЛН: <a href=""ПодготовленныйРеестрЭЛН"">№ %3 от %4</a>'");
КонецЕсли;
ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ЗаголовокНадписи,
СведенияОбЭЛН.ПринятыйРеестрНомер,
Формат(СведенияОбЭЛН.ПринятыйРеестрДата, "ДЛФ=D"),
СведенияОбЭЛН.ПодготовленныйРеестрНомер,
Формат(СведенияОбЭЛН.ПодготовленныйРеестрДата, "ДЛФ=D"));
Иначе
ЗаголовокНадписи = НСтр("ru = 'Для этого ЭЛН еще не создан реестр ЭЛН'");
КонецЕсли;
Элементы.СсылкиРеестровЭЛН.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(ЗаголовокНадписи);
Элементы.ГруппаСсылкиРеестровЭЛН.Видимость = Истина;
Иначе
Элементы.ГруппаСсылкиРеестровЭЛН.Видимость = Ложь;
КонецЕсли;
Элементы.ГруппаОтправитьПервичныйЭЛН.Видимость = ЭтоПоследний И Не ЕстьПринятый;
Элементы.ГруппаОтправитьИсправлениеЭЛН.Видимость = ЭтоПоследний И ЕстьПринятый;
Элементы.ГруппаПричинаИсправленияЭЛН.Видимость = ЭтоПоследний И ОтправитьЭЛН И ИсправлениеЭЛН;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция НаименованиеПричиныИсправленияЭЛН(Форма)
ЭлементСписка = Форма.Элементы.КодПричиныИсправленияЭЛН.СписокВыбора.НайтиПоЗначению(Форма.КодПричиныИсправленияЭЛН);
Если ЭлементСписка <> Неопределено Тогда
Если КодСимвола(ЭлементСписка.Представление, 3) = КодСимвола(".") Тогда
Возврат СокрЛП(Сред(ЭлементСписка.Представление, 4));
Иначе
Возврат СокрЛП(ЭлементСписка.Представление)
КонецЕсли;
КонецЕсли;
Возврат "";
КонецФункции
&НаСервере
Процедура ОтправитьЭЛНПриИзмененииНаСервере()
ОбновитьЭлементыЭЛН();
КонецПроцедуры
&НаСервере
Процедура ИсправлениеЭЛНПриИзмененииНаСервере()
ОтправитьЭЛН = ИсправлениеЭЛН;
ИсправлениеЭЛНЧислом = Число(ИсправлениеЭЛН);
ОбновитьЭлементыЭЛН();
КонецПроцедуры
&НаСервере
Процедура ИсправлениеЭЛНЧисломПриИзмененииНаСервере()
ОтправитьЭЛН = Истина;
ИсправлениеЭЛН = Булево(ИсправлениеЭЛНЧислом);
ОбновитьЭлементыЭЛН();
КонецПроцедуры
#КонецОбласти
#Область СерверныеОбработчикиСобытийЭлементовШапкиФормы
&НаСервере
Процедура ПериодРегистрацииПриИзмененииНаСервере()
Кэш = Новый Соответствие;
ЗапланироватьПолноеОбновлениеСведенийДляФСС();
Документы.БольничныйЛист.ЗаполнитьПланируемуюДатуВыплаты(Объект, ЭтотОбъект["НастройкиДатВыплаты"]);
УстановитьВидимостьПерерасчетов();
ЗаполнитьУсловияИсчисления();
УстановитьСвойствоРассчитатьЗарплату(Кэш);
УстановитьЗаголовокФлажкаРассчитатьЗарплату();
ОбновитьСведенияДляФСС();
КонецПроцедуры
&НаСервере
Процедура НомерЛисткаНетрудоспособностиПриИзмененииНаСервере()
ЗапланироватьПолноеОбновлениеСведенийДляФСС();
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
ОбновитьГиперссылкуВводаДанныхЛисткаНетрудоспособности();
ОбновитьСведенияДляФСС();
КонецПроцедуры
&НаСервере
Процедура ЯвляетсяПродолжениемБолезниПриИзмененииНаСервере()
Кэш = Новый Соответствие;
УстановитьСвойствоРассчитатьЗарплату(Кэш);
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтотОбъект);
Если Не Объект.ЯвляетсяПродолжениемБолезни Тогда
УстановитьПривилегированныйРежим(Истина);
Объект.ДатаНачалаСобытия = Объект.ДатаНачала;
Объект.ПервичныйБольничныйЛист = Неопределено;
Объект.НомерПервичногоЛисткаНетрудоспособности = "";
ЗаполнитьПоКадровымДаннымСотрудника();
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
ОбновитьЭлементыФинансированияФедеральнымБюджетом(ЭтотОбъект);
УстановитьДоступностьПолейПоПервичномуБольничномуЛисту(ЭтотОбъект);
ОчиститьДанныеСреднегоЗаработка();
КонецЕсли;
УстановитьСвойстваПоляПервичногоБольничногоЛиста(ЭтотОбъект);
ОбновитьЭлементыСпособРасчетовЗаСчетРаботодателя();
КонецПроцедуры
&НаСервере
Процедура ДатаНачалаПриИзмененииНаСервере()
Если ИспользуетсяРасчетЗарплаты Тогда
Объект.ДатаНачалаОплаты = Объект.ДатаНачала;
КонецЕсли;
Если ИспользуетсяРасчетЗарплаты
И ЗначениеЗаполнено(Объект.ДатаОкончания)
И Объект.ДатаОкончания < Объект.ДатаНачала Тогда
ДатаОкончанияДоИзменения = Объект.ДатаОкончания;
Объект.ДатаОкончания = Объект.ДатаНачала;
КонецЕсли;
ОбновитьПериодыУходаПриИзмененииПериодаНетрудоспособности();
Если Не Объект.ЯвляетсяПродолжениемБолезни Тогда
Объект.ДатаНачалаСобытия = Объект.ДатаНачала;
ДатаНачалаСобытияПриИзмененииНаСервере();
КонецЕсли;
УстановитьВидимостьПерерасчетов();
УстановитьПорядокВыплатыУволенному();
УстановитьДоступностьПорядкаВыплаты();
КонецПроцедуры
&НаСервере
Процедура ДатаНачалаСобытияПриИзмененииНаСервере()
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
Кэш = Новый Соответствие;
ЗаполнитьПоКадровымДаннымСотрудника();
ОбновитьЭлементыФинансированияФедеральнымБюджетом(ЭтотОбъект);
ЗаполнитьДатуНачалаПоловиннойОплаты();
ЗаполнитьПериодРасчетаСреднегоЗаработка();
ОбновитьДанныеДляРасчетаСреднего();
ЗаполнитьСтаж();
ЗаполнитьУсловияИсчисления();
УстановитьСвойствоРассчитатьЗарплату(Кэш);
ЗаполнитьПроцентОплатыИОграничениеПособия();
УстановитьДоступностьРассчитыватьПоПравилам2010();
УстановитьДоступностьПолейВводаНачислений();
НастроитьЭлементыДополненияПричиныНетрудоспособности();
Если ИспользуетсяРасчетЗарплаты Тогда
ОпределитьВариантДоплаты();
ОтключитьНеприменимыеВариантыДоплаты();
КонецЕсли;
ОбновитьЭлементыЗаработкаСтраницыГлавное();
ОбновитьЭлементыСпособРасчетовЗаСчетРаботодателя();
КонецПроцедуры
&НаСервере
Процедура НазначитьПособиеПриИзмененииНаСервере()
ЗаполнитьСсылкиНачислений(Ложь);
Кэш = Новый Соответствие;
Если Объект.НазначитьПособие Тогда
Объект.АвтозаполнениеПериодовОплаты = Истина;
Документы.БольничныйЛист.ЗаполнитьПараметрыОплаты(Объект, Кэш);
Если Не Объект.НазначитьПособие Тогда
Объект.НазначитьПособие = Истина;
Объект.АвтозаполнениеПериодовОплаты = Ложь;
КонецЕсли;
Иначе
Объект.АвтозаполнениеПериодовОплаты = Ложь;
Объект.ДатаНачалаОплаты = Неопределено;
Объект.ДатаОкончанияОплаты = Неопределено;
Объект.ДнейОплаты = 0;
Объект.ДнейПоловиннойОплаты = 0;
КонецЕсли;
ОбновитьЭлементыПараметровОплаты(Кэш);
УстановитьДоступностьПолейВводаНачислений();
КонецПроцедуры
&НаСервере
Процедура РодственникЗаКоторымОсуществляетсяУход1ПриИзмененииНаСервере()
СброситьПараметрыОплаты();
Если Не ЗначениеЗаполнено(Объект.РодственникЗаКоторымОсуществляетсяУход1) Тогда
Объект.ДатаНачалаРодственник1 = Неопределено;
Объект.ДатаОкончанияРодственник1 = Неопределено;
НадписьДнейБолезниРодственник1 = "";
ИначеЕсли Не ЗначениеЗаполнено(Объект.ДатаНачалаРодственник1)
И Не ЗначениеЗаполнено(Объект.ДатаОкончанияРодственник1) Тогда
Объект.ДатаНачалаРодственник1 = Объект.ДатаНачала;
Объект.ДатаОкончанияРодственник1 = Объект.ДатаОкончания;
ОбновитьНадписиДнейРодственников(ЭтотОбъект);
КонецЕсли;
ОбновитьОстаткиОплачиваемыхДнейПоУходуЗаРодственниками(Истина, Ложь);
УстановитьДоступностьПолейВводаНачислений();
ЗаполнитьДатуНачалаПоловиннойОплаты();
КонецПроцедуры
&НаСервере
Процедура РодственникЗаКоторымОсуществляетсяУход2ПриИзмененииНаСервере()
СброситьПараметрыОплаты();
Если Не ЗначениеЗаполнено(Объект.РодственникЗаКоторымОсуществляетсяУход2) Тогда
Объект.ДатаНачалаРодственник2 = Неопределено;
Объект.ДатаОкончанияРодственник2 = Неопределено;
НадписьДнейБолезниРодственник2 = "";
ИначеЕсли Не ЗначениеЗаполнено(Объект.ДатаНачалаРодственник2)
И Не ЗначениеЗаполнено(Объект.ДатаОкончанияРодственник2) Тогда
Объект.ДатаНачалаРодственник2 = Объект.ДатаНачала;
Объект.ДатаОкончанияРодственник2 = Объект.ДатаОкончания;
ОбновитьНадписиДнейРодственников(ЭтотОбъект);
КонецЕсли;
ОбновитьОстаткиОплачиваемыхДнейПоУходуЗаРодственниками(Ложь, Истина);
УстановитьДоступностьПолейВводаНачислений();
КонецПроцедуры
&НаСервере
Процедура РассчитатьЗарплатуПриИзмененииНаСервере()
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриИзмененииПризнакаРассчитыватьЗарплатуДокументаОплатыТруда(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект), Объект.РассчитатьЗарплату);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДоплачиватьДоСреднегоЗаработкаПриИзмененииНаСервере()
ЗаполнитьСсылкиНачислений(Ложь);
УстановитьСвойстваПолейДоплатыЗаДниНетрудоспособности(ЭтотОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Процедура ДоплачиватьДоДенежногоСодержанияПриИзмененииНаСервере()
УстановитьСвойстваПолейДоплатыЗаДниНетрудоспособности(ЭтотОбъект);
ОтключитьНеприменимыеВариантыДоплаты();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
КонецПроцедуры
&НаСервере
Процедура ПервичныйБольничныйЛистПриИзмененииНаСервере()
Если Не ЗначениеЗаполнено(Объект.ПервичныйБольничныйЛист) Тогда
Возврат;
КонецЕсли;
ОчиститьДанныеСреднегоЗаработка();
Документ = РеквизитФормыВЗначение("Объект");
Документ.ЗаполнитьПоПервичномуБольничномуЛисту(Объект.ПервичныйБольничныйЛист);
ИзмененаОрганизация = Документ.Организация <> Объект.Организация;
ИзмененСотрудник = Документ.Сотрудник <> Объект.Сотрудник;
ИзмененаДатаНачалаСобытия = Документ.ДатаНачалаСобытия <> Объект.ДатаНачалаСобытия;
ЗначениеВРеквизитФормы(Документ, "Объект");
ОбновитьФормуПослеЗагрузкиЭЛН(ИзмененаОрганизация, ИзмененСотрудник, ИзмененаДатаНачалаСобытия);
РассчитатьНаСервере();
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииДатыОсвобожденияОтРаботыНаСервере()
Кэш = Новый Соответствие;
СброситьПараметрыОплаты();
ОбновитьОстаткиОплачиваемыхДнейПоУходуЗаРодственниками();
ОбновитьИсправленияОтпусков();
ЗаполнитьДатуНачалаПоловиннойОплаты();
ЗаполнитьПериодРасчетаСреднегоЗаработка();
ОбновитьДанныеДляРасчетаСреднего();
ЗаполнитьУсловияИсчисления();
УстановитьСвойствоРассчитатьЗарплату(Кэш);
ОпределитьВариантДоплаты();
ОтключитьНеприменимыеВариантыДоплаты();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
УстановитьДоступностьПолейВводаНачислений();
ОбновитьНадписьДнейОсвобожденияОтРаботы(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ДатаНачалаОплатыПриИзмененииНаСервере()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Объект.АвтозаполнениеПериодовОплаты = Ложь;
ОбновитьЭлементыПараметровОплаты();
УстановитьДоступностьПолейВводаНачислений();
КонецПроцедуры
&НаСервере
Процедура ДатаОкончанияОплатыПриИзмененииНаСервере()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Объект.АвтозаполнениеПериодовОплаты = Ложь;
ЗаполнитьДатуНачалаПоловиннойОплаты();
ОбновитьЭлементыПараметровОплаты();
УстановитьДоступностьПолейВводаНачислений();
КонецПроцедуры
&НаСервере
Процедура КарантинПоКоронавирусуПриИзмененииНаСервере()
ЗапланироватьПолноеОбновлениеСведенийДляФСС();
ПричинаНетрудоспособностиПриИзмененииНаСервере();
ОбновитьСведенияДляФСС();
КонецПроцедуры
&НаСервере
Процедура УсловияИсчисленияКодПриИзмененииНаСервере()
СтараяДатаПоловиннойОплаты = Объект.ДатаНачалаПоловиннойОплаты;
СтарыйПроцентОплаты = Объект.ПроцентОплаты;
ЗаполнитьДатуНачалаПоловиннойОплаты();
ЗаполнитьПроцентОплатыИОграничениеПособия();
Если СтараяДатаПоловиннойОплаты <> Объект.ДатаНачалаПоловиннойОплаты
Или СтарыйПроцентОплаты <> Объект.ПроцентОплаты Тогда
ПараметрыЗаполнения = Документы.БольничныйЛист.ПараметрыЗаполнения(Ложь);
ПараметрыЗаполнения.ЗаполнитьСсылкиНачислений = Истина;
ПараметрыРасчета = ПараметрыРасчета();
ПараметрыРасчета.ВыводитьСообщения = Ложь;
ПерезаполнитьИРассчитатьНачисленияНаСервере(ПараметрыЗаполнения, ПараметрыРасчета);
КонецЕсли;
УстановитьВидимостьПодсказкаОсобыхУсловийИсчисления();
КонецПроцедуры
#КонецОбласти
#Область ПериодыПростояИсключения
&НаКлиенте
Процедура ИзменитьПериодыНаКлиенте(ИмяТаблицы)
Если Не ПроверкиБЗККлиентСервер.ПериодСоответствуетТребованиям(
ЭтотОбъект,
"Объект",
"ДатаНачала",
"ДатаОкончания",
НСтр("ru = 'нетрудоспособности'")) Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура("АдресСтруктурыБольничного", АдресСтруктурыБольничногоДляФормПериодов());
ПараметрыФормы.Вставить("ИмяТаблицы", ИмяТаблицы);
Обработчик = Новый ОписаниеОповещения("ПослеВводаПериодов", ЭтотОбъект, ПараметрыФормы);
ОткрытьФорму("Документ.БольничныйЛист.Форма." + ИмяТаблицы, ПараметрыФормы, ЭтотОбъект, , , , Обработчик);
КонецПроцедуры
&НаСервере
Процедура ОбновитьГруппуПериодыПростоя(Кэш)
ЕстьПростой = Объект.ПериодыПростоя.Количество() > 0;
Элементы.ОчиститьПериодыПростоя.Видимость = ЕстьПростой;
Элементы.ПериодыПростояВШапкеГруппа.Видимость = ЕстьПростой;
Элементы.ПериодыПростояГруппа.Видимость = ЕстьПростой Или Объект.ДатаНачала < Объект.ДатаОкончания;
Если Не ЕстьПростой Тогда
Элементы.ПериодыПростояЗаголовок.Заголовок = "";
Элементы.ПериодыПростояНадпись.Заголовок = НСтр("ru = 'Добавить простой'");
Возврат;
КонецЕсли;
Элементы.ЗаполнитьПериодыПростояВШапке.Видимость = Не Объект.АвтозаполнениеПериодовОплаты;
ПредставленияПериодовПростоя = Новый Массив;
ДнейПростоя = 0;
Для Каждого ПериодПростоя Из Объект.ПериодыПростоя Цикл
ПредставленияПериодовПростоя.Добавить(
ОбщегоНазначенияБЗК.НаименованиеПериода(ПериодПростоя.ДатаНачала, ПериодПростоя.ДатаОкончания));
ДнейПростоя = ДнейПростоя + ОбщегоНазначенияБЗК.КоличествоДнейВПериоде(
ПериодПростоя.ДатаНачала, ПериодПростоя.ДатаОкончания);
КонецЦикла;
ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(
НСтр("ru = ';Простой %1 день;;Простой %1 дня;Простой %1 дней;'"),
ДнейПростоя) + ": ";
ЗаголовокНадписи = СтроковыеФункции.ФорматированнаяСтрока(ЗаголовокНадписи);
Элементы.ПериодыПростояЗаголовок.Заголовок = ЗаголовокНадписи;
Элементы.ПериодыПростояВШапкеЗаголовок.Заголовок = ЗаголовокНадписи;
ТекстНадписи = СтрСоединить(ПредставленияПериодовПростоя, ", ");
Элементы.ПериодыПростояНадпись.Заголовок = ТекстНадписи;
Элементы.ПериодыПростояВШапкеНадпись.Заголовок = ТекстНадписи;
КонецПроцедуры
&НаСервере
Функция ПредставлениеНеучтенныхПериодовПростоя(Кэш)
ДатыКУчетуПростоя = Документы.БольничныйЛист.ДатыКУчетуПростоя(Объект, Кэш);
Если ДатыКУчетуПростоя.Колонки.Найти("Найдена") <> Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ДатыКУчетуПростоя.Колонки.Добавить("Найдена", Новый ОписаниеТипов("Булево"));
УчтенныеДаты = ОбщегоНазначенияБЗК.ТаблицаДатИзТаблицыПериодов(
Объект.ПериодыПростоя, Объект.ДатаНачала, Объект.ДатаОкончания);
УчтенныеДаты.Свернуть("Дата");
УчтенныеДаты.Сортировать("Дата");
УчтенныеДаты.Колонки.Добавить("Избыточна", Новый ОписаниеТипов("Булево"));
Для Каждого УчтеннаяДата Из УчтенныеДаты Цикл
ДатаПростоя = ДатыКУчетуПростоя.Найти(УчтеннаяДата.Дата, "Дата");
Если ДатаПростоя = Неопределено Тогда
УчтеннаяДата.Избыточна = Истина;
Иначе
ДатаПростоя.Найдена = Истина;
КонецЕсли;
КонецЦикла;
Представление = "";
НеучтенныеДаты = ДатыКУчетуПростоя.Скопировать(Новый Структура("Найдена", Ложь));
Если НеучтенныеДаты.Количество() > 0 Тогда
ПредставленияПериодов = Новый Массив;
Таблица = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(НеучтенныеДаты, "Регистратор");
Для Каждого Период Из Таблица Цикл
Если ЗначениеЗаполнено(Период.Регистратор) Тогда
Шаблон = СтрШаблон(
"<a href=""%1"">%2 %3</a>",
ПолучитьНавигационнуюСсылку(Период.Регистратор),
Период.Регистратор.Метаданные().Представление(),
"%1");
Иначе
Шаблон = НСтр("ru = 'Простой %1'");
КонецЕсли;
НаименованиеПериода = ОбщегоНазначенияБЗК.НаименованиеПериода(Период.ДатаНачала, Период.ДатаОкончания);
ПредставленияПериодов.Добавить(СтрШаблон(Шаблон, НаименованиеПериода));
КонецЦикла;
Представление = Представление
+ СтрШаблон(НСтр("ru = 'Расчет не учитывает %1.'"), СтрСоединить(ПредставленияПериодов, "; "))
+ " ";
КонецЕсли;
ИзбыточныеДатыКИсключению = УчтенныеДаты.Скопировать(Новый Структура("Избыточна", Истина));
ВсегоИзбыточныхДат = ИзбыточныеДатыКИсключению.Количество();
Если ВсегоИзбыточныхДат > 0 И ВсегоИзбыточныхДат <> УчтенныеДаты.Количество() Тогда
ПредставленияПериодов = Новый Массив;
Таблица = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ИзбыточныеДатыКИсключению, "");
Для Каждого Период Из Таблица Цикл
НаименованиеПериода = ОбщегоНазначенияБЗК.НаименованиеПериода(Период.ДатаНачала, Период.ДатаОкончания);
ПредставленияПериодов.Добавить(НаименованиеПериода);
КонецЦикла;
Представление = Представление
+ СтрШаблон(НСтр("ru = 'Избыточно добавлены периоды простоя %1.'"), СтрСоединить(ПредставленияПериодов, ", "))
+ " ";
КонецЕсли;
Возврат Представление;
КонецФункции
&НаКлиенте
Процедура ПослеВводаПериодов(РезультатВыбора, ПараметрыФормы) Экспорт
Если ТипЗнч(РезультатВыбора) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ПослеВводаПериодовНаСервере(РезультатВыбора, ПараметрыФормы);
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаСервере
Процедура ПослеВводаПериодовНаСервере(Знач РезультатВыбора, Знач ПараметрыФормы)
УдалитьИзВременногоХранилища(ПараметрыФормы.АдресСтруктурыБольничного);
Объект.АвтозаполнениеПериодовОплаты = РезультатВыбора.АвтозаполнениеПериодовОплаты И Объект.АвтозаполнениеПериодовОплаты;
Объект.СдвигатьПериодОплаты = РезультатВыбора.СдвигатьПериодОплаты;
Объект[ПараметрыФормы.ИмяТаблицы].Очистить();
Для Каждого СтруктураСтроки Из РезультатВыбора[ПараметрыФормы.ИмяТаблицы] Цикл
ЗаполнитьЗначенияСвойств(Объект[ПараметрыФормы.ИмяТаблицы].Добавить(), СтруктураСтроки);
КонецЦикла;
ЗаполнитьПараметрыОплаты(Неопределено);
КонецПроцедуры
&НаСервере
Процедура ОчиститьПериодыПростояНаСервере()
Объект.ПериодыПростоя.Очистить();
ЗаполнитьПараметрыОплаты(Ложь);
ЗаполнитьДатуНачалаПоловиннойОплаты();
УстановитьДоступностьПолейВводаНачислений();
КонецПроцедуры
#КонецОбласти
&НаСервере
Функция НачисленияРаботодателя()
СписокНачислений = Новый Массив;
Если ЗначениеЗаполнено(Объект.ВидОплатыЗаСчетРаботодателя) Тогда
СписокНачислений.Добавить(Объект.ВидОплатыЗаСчетРаботодателя);
ДополнительныеНачисления = РасчетЗарплатыРасширенный.ДополнительныеНачисленияОсновныхВидовРасчета(СписокНачислений);
Для Каждого ДополнительноеНачисление Из ДополнительныеНачисления Цикл
Если ЗначениеЗаполнено(ДополнительноеНачисление.Значение.ВидРасчетаДолиРК) Тогда
СписокНачислений.Добавить(ДополнительноеНачисление.Значение.ВидРасчетаДолиРК);
КонецЕсли;
Если ЗначениеЗаполнено(ДополнительноеНачисление.Значение.ВидРасчетаДолиСН) Тогда
СписокНачислений.Добавить(ДополнительноеНачисление.Значение.ВидРасчетаДолиСН);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат СписокНачислений;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьЭлементыФинансированияФедеральнымБюджетом(Форма)
ПрименятьЛьготы = Форма.Объект.ПрименятьЛьготыПриНачисленииПособия;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"НачисленияРезультатВТомЧислеЗаСчетФБ",
"Видимость",
ПрименятьЛьготы);
Если Форма.ИспользуетсяРасчетЗарплаты Тогда
Форма.Элементы.ФинансированиеФедеральнымБюджетом.Доступность = ПрименятьЛьготы;
Форма.Элементы.ПроцентОплатыБезЛьгот.Доступность = ПрименятьЛьготы;
Форма.Элементы.ОграничениеПособияБезЛьгот.Доступность = ПрименятьЛьготы;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьНадписьДнейОсвобожденияОтРаботы(Форма)
Форма.НадписьДнейОсвобожденияОтРаботы = ОбщегоНазначенияБЗККлиентСервер.ПредставлениеКоличестваДней(
Форма.Объект.ДатаНачала,
Форма.Объект.ДатаОкончания);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьПолейВводаНачислений()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат
КонецЕсли;
ДоступностьВидаОплатыПособия = Объект.НазначитьПособие;
ДоступностьВидаОплатыЗаСчетРаботодателя = Объект.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ОбщееЗаболевание
И Не ЗначениеЗаполнено(Объект.ДатаНачалаПоловиннойОплаты)
И Объект.ДатаНачалаОплаты < ДатаНачалаОплатыЗаСчетСФР;
ДоступностьВидаНеоплачиваемогоВремени = Не Объект.НазначитьПособие
Или Объект.ДатаНачала < Объект.ДатаНачалаОплаты
Или Объект.ДатаОкончанияОплаты < Объект.ДатаОкончания;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВидОплатыПособия", "Доступность", ДоступностьВидаОплатыПособия);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВидОплатыЗаСчетРаботодателя", "Доступность", ДоступностьВидаОплатыЗаСчетРаботодателя);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ВидНеоплачиваемогоВремени", "Доступность", ДоступностьВидаНеоплачиваемогоВремени);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьПодсказкаОсобыхУсловийИсчисления()
ВидимостьПодсказкиОсобыхУсловийИсчислений = ИспользуетсяРасчетЗарплаты
И УчетПособийСоциальногоСтрахования.ИспользуетсяУсловиеИсчисления(Объект, "44");
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПредупреждениеОсобыеУсловийИсчисления", "Видимость", ВидимостьПодсказкиОсобыхУсловийИсчислений);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаПредупреждениеДатаНачалаПоловиннойОплаты", "Видимость", ВидимостьПодсказкиОсобыхУсловийИсчислений);
КонецПроцедуры
&НаСервере
Процедура ПерезаполнитьСсылкиНачислений()
Объект.ВидОплатыПособия = Неопределено;
Объект.ВидНеоплачиваемогоВремени = Неопределено;
Объект.ВидОплатыЗаСчетРаботодателя = Неопределено;
Объект.ВидРасчетаДоплаты = Неопределено;
ЗаполнитьСсылкиНачислений(Ложь);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСсылкиНачислений(ПервичнаяИнициализацияФормы)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Документы.БольничныйЛист.ЗаполнитьСсылкиНачислений(ЭтотОбъект, ПервичнаяИнициализацияФормы);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьНадписиДнейРодственников(Форма)
Форма.НадписьДнейБолезниРодственник1 = ОбщегоНазначенияБЗККлиентСервер.ПредставлениеКоличестваДней(
Форма.Объект.ДатаНачалаРодственник1,
Форма.Объект.ДатаОкончанияРодственник1);
Форма.НадписьДнейБолезниРодственник2 = ОбщегоНазначенияБЗККлиентСервер.ПредставлениеКоличестваДней(
Форма.Объект.ДатаНачалаРодственник2,
Форма.Объект.ДатаОкончанияРодственник2);
КонецПроцедуры
#Область Отпуска
&НаСервере
Процедура ОбновитьИсправленияОтпусков(Знач РезультатРасчета = Неопределено)
Если РезультатРасчета = Неопределено Тогда
ПересекающиесяОтпуска = Документы.БольничныйЛист.ПересекающиесяОтпуска(Объект);
Иначе
ПересекающиесяОтпуска = РезультатРасчета.ПересекающиесяОтпуска;
КонецЕсли;
Если ПересекающиесяОтпуска <> Неопределено Тогда
Фильтр = Новый Структура("ТребуетИсправления", Истина, Истина);
Массив = КоллекцииБЗК.УникальныеЗначенияКолонкиСФильтром(ПересекающиесяОтпуска, Фильтр, "Ссылка");
ОтпускаТребующиеИсправленияСРасчетом.ЗагрузитьЗначения(Массив);
Фильтр = Новый Структура("ТребуетПроведенияИлиРасчета", Истина, Истина);
Массив = КоллекцииБЗК.УникальныеЗначенияКолонкиСФильтром(ПересекающиесяОтпуска, Фильтр, "Ссылка");
ОтпускаТребующиеИсправленияБезРасчета.ЗагрузитьЗначения(Массив);
Фильтр = Новый Структура("УчитываетБольничныйПроведенРассчитан", Истина, Истина);
Массив = КоллекцииБЗК.УникальныеЗначенияКолонкиСФильтром(ПересекающиесяОтпуска, Фильтр, "Ссылка");
ИсправленныеОтпуска.ЗагрузитьЗначения(Массив);
Иначе
ОтпускаТребующиеИсправленияСРасчетом.Очистить();
ОтпускаТребующиеИсправленияБезРасчета.Очистить();
ИсправленныеОтпуска.Очистить();
КонецЕсли;
УстановитьСвойстваЭлементовПоПересечениюСОтпусками();
Если РезультатРасчета = Неопределено
И (ОтпускаТребующиеИсправленияСРасчетом.Количество() > 0
Или ОтпускаТребующиеИсправленияБезРасчета.Количество() > 0) Тогда
ОчиститьРассчитанныеДанные();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьИсправлениеОтпуска(ИсправляемыйОтпуск)
ДополнительныеПараметры = Новый Структура("ЗаписатьЭлемент", Истина);
ДополнительныеПараметры.Вставить("ИсправляемыйОтпуск", ИсправляемыйОтпуск);
Если Модифицированность Тогда
ТекстВопроса = НСтр("ru = 'Данные еще не записаны.
|Создание исправления отпуска возможно только после записи данных.
|Данные будут записаны.'");
Оповещение = Новый ОписаниеОповещения("СоздатьИсправлениеОтпускаЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена);
Иначе
ДополнительныеПараметры.ЗаписатьЭлемент = Ложь;
СоздатьИсправлениеОтпускаЗавершение(Неопределено, ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьИсправлениеОтпускаЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.ОК Тогда
Записать();
Если Объект.Ссылка.Пустая() Или Модифицированность Тогда
Возврат;
КонецЕсли;
ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
ПараметрыОтпуска = Новый Структура;
ОснованиеОтпуска = Новый Структура("Ссылка, Действие, ОснованиеПриостановки",
ДополнительныеПараметры.ИсправляемыйОтпуск, "Исправить", Объект.Ссылка);
ПараметрыОтпуска.Вставить("Основание", ОснованиеОтпуска);
ОткрытьФорму("Документ.Отпуск.ФормаОбъекта", ПараметрыОтпуска);
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойстваЭлементовПоПересечениюСОтпусками()
КоличествоОтпусковТребующихИсправленияСРасчетом = ОтпускаТребующиеИсправленияСРасчетом.Количество();
Если КоличествоОтпусковТребующихИсправленияСРасчетом = 0 Тогда
Элементы.ОтпускаТребующиеИсправленияСРасчетомГруппа.Видимость = Ложь;
Иначе
Элементы.ОтпускаТребующиеИсправленияСРасчетомГруппа.Видимость = Истина;
Если КоличествоОтпусковТребующихИсправленияСРасчетом = 1 Тогда
ЗаголовокСсылки = СтрШаблон(НСтр("ru='Исправить %1'"), ОтпускаТребующиеИсправленияСРасчетом[0].Значение);
Иначе
ЗаголовокСсылки = НСтр("ru='Исправить отпуска...'");
КонецЕсли;
Элементы.ОтпускаТребующиеИсправленияСРасчетомСсылка.Заголовок = ЗаголовокСсылки;
КонецЕсли;
КоличествоОтпусковТребующихИсправленияБезРасчета = ОтпускаТребующиеИсправленияБезРасчета.Количество();
Если КоличествоОтпусковТребующихИсправленияБезРасчета = 0 Тогда
Элементы.ТребуетсяРассчитатьПродлениеОтпускаГруппа.Видимость = Ложь;
Иначе
Элементы.ТребуетсяРассчитатьПродлениеОтпускаГруппа.Видимость = Истина;
Если КоличествоОтпусковТребующихИсправленияБезРасчета = 1 Тогда
ЗаголовокСсылки = ОтпускаТребующиеИсправленияБезРасчета[0].Значение;
Иначе
ЗаголовокСсылки = НСтр("ru='Открыть исправления отпусков...'");
КонецЕсли;
Элементы.ТребуетсяРассчитатьПродлениеОтпускаСсылка.Заголовок = ЗаголовокСсылки;
КонецЕсли;
КоличествоИсправленныхОтпусков = ИсправленныеОтпуска.Количество();
Если КоличествоИсправленныхОтпусков = 0 Тогда
Элементы.ИсправленныеОтпускаГруппа.Видимость = Ложь;
Иначе
Элементы.ИсправленныеОтпускаГруппа.Видимость = Истина;
Если КоличествоИсправленныхОтпусков = 1 Тогда
ЗаголовокСсылки = ИсправленныеОтпуска[0].Значение;
Иначе
ЗаголовокСсылки = НСтр("ru='Исправленные отпуска...'");
КонецЕсли;
Элементы.ИсправленныеОтпускаСсылка.Заголовок = ЗаголовокСсылки;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПараметрыОплаты
&НаСервере
Процедура СброситьПараметрыОплаты()
Объект.АвтозаполнениеПериодовОплаты = Истина;
Объект.НазначитьПособие = Истина;
Объект.ДатаНачалаОплаты = Неопределено;
Объект.ДатаОкончанияОплаты = Неопределено;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыОплаты(Знач АвтозаполнениеПериодовОплаты, Знач Кэш = Неопределено)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(АвтозаполнениеПериодовОплаты) = Тип("Булево") Тогда
Объект.АвтозаполнениеПериодовОплаты = АвтозаполнениеПериодовОплаты;
КонецЕсли;
Если Кэш = Неопределено Тогда
Кэш = Новый Соответствие;
КонецЕсли;
Документы.БольничныйЛист.ЗаполнитьПараметрыОплаты(Объект, Кэш);
ОбновитьЭлементыПараметровОплаты(Кэш);
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыПараметровОплаты(Кэш = Неопределено)
Если Кэш = Неопределено Тогда
Кэш = Новый Соответствие;
КонецЕсли;
ОтпускВытесняетБольничный = Перечисления.ПричиныНетрудоспособности.ОтпускВытесняетБольничный(
Объект.ПричинаНетрудоспособности);
ОплачиваемыеДатыНачислений = Документы.БольничныйЛист.ОплачиваемыеДатыНачислений(Объект, Кэш);
ОплачиваемыеПериоды = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ОплачиваемыеДатыНачислений, "");
ДатаНачалаОплатыЗаСчетСФР = Кэш["ДатаНачалаОплатыЗаСчетСФР"];
ДатаНачалаОплатыЗаСчетСФРПоОбщимПравилам = УчетПособийСоциальногоСтрахования.ДатаНачалаОплатыЗаСчетФСС(
Объект.ДатаНачалаСобытия, Объект.ПричинаНетрудоспособности, Объект.НачалоВПериодПриостановленияТД);
Элементы.ДатаНачалаОплатыСФРКартинка.Видимость = Объект.СдвигатьПериодОплаты И ЗначениеЗаполнено(ДатаНачалаОплатыЗаСчетСФР)
И ДатаНачалаОплатыЗаСчетСФРПоОбщимПравилам <> ДатаНачалаОплатыЗаСчетСФР И Объект.НазначитьПособие;
Если Элементы.ДатаНачалаОплатыСФРКартинка.Видимость Тогда
ТекстЗаголовка = НСтр("ru = 'Дата начала оплаты за счет СФР сдвинута на %1'");
Элементы.НадписьДатаНачалаОплатыСФР.Заголовок = СтрШаблон(ТекстЗаголовка, Формат(ДатаНачалаОплатыЗаСчетСФР, "ДФ=dd.MM.yyyy"));
ИначеЕсли Мин(ДатаНачалаОплатыЗаСчетСФР, ДатаНачалаОплатыЗаСчетСФРПоОбщимПравилам) <= Объект.ДатаОкончания Тогда
ТекстЗаголовка = НСтр("ru = 'Дата начала оплаты за счет СФР %1'");
Элементы.НадписьДатаНачалаОплатыСФР.Заголовок = СтрШаблон(ТекстЗаголовка, Формат(ДатаНачалаОплатыЗаСчетСФР, "ДФ=dd.MM.yyyy"));
Иначе
Элементы.НадписьДатаНачалаОплатыСФР.Заголовок = "";
КонецЕсли;
Элементы.ДатаНачалаОплатыСФРГруппа.Видимость = ЗначениеЗаполнено(Элементы.НадписьДатаНачалаОплатыСФР.Заголовок);
ОбновитьГруппуТребуетсяПересчитатьБольничный(Кэш);
Объект.ДнейОплаты = ОплачиваемыеДатыНачислений.Количество();
Если Объект.ИсключаемыеПериоды.Количество() = 0 Тогда
Элементы.ДатаНачалаОплаты.Видимость = Истина;
Элементы.ДатаОкончанияОплаты.Видимость = Истина;
Элементы.ДатаНачалаОплаты.Доступность = Объект.НазначитьПособие;
Элементы.ДатаОкончанияОплаты.Доступность = Объект.НазначитьПособие;
Элементы.ИсключаемыеПериодыГруппа.Видимость = Ложь;
Элементы.ИсключаемыеПериодыВШапкеГруппа.Видимость = Ложь;
Элементы.НазначитьПособие.Заголовок = "";
Если Объект.ДнейОплаты > 0 Тогда
НадписьДнейОплатыПособия = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(
НСтр("ru = ';%1 день;;%1 дня;%1 дней;'"),
Объект.ДнейОплаты);
Иначе
НадписьДнейОплатыПособия = "";
КонецЕсли;
Иначе
Элементы.ДатаНачалаОплаты.Видимость = Ложь;
Элементы.ДатаОкончанияОплаты.Видимость = Ложь;
Элементы.ИсключаемыеПериодыГруппа.Видимость = Истина;
Элементы.ИсключаемыеПериодыВШапкеГруппа.Видимость = Истина;
НадписьДнейОплатыПособия = "";
ОбновитьГруппуИсключаемыеПериоды(Кэш, ОплачиваемыеПериоды, ОтпускВытесняетБольничный);
КонецЕсли;
ОбновитьГруппуПериодыПростоя(Кэш);
Элементы.ЗаполнитьИсключаемыеПериодыВШапке.Видимость = Не Объект.АвтозаполнениеПериодовОплаты;
Элементы.ЗаполнитьИсключаемыеПериоды.Видимость = Не Объект.АвтозаполнениеПериодовОплаты;
Элементы.ДатаНачалаПоловиннойОплаты.Видимость = (ЗначениеЗаполнено(Объект.ДатаНачалаПоловиннойОплаты)
Или Объект.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоУходуЗаРебенком)
И Документы.БольничныйЛист.ИспользоватьПериодыУходаВШапке(Объект);
КонецПроцедуры
&НаСервере
Процедура ОбновитьГруппуТребуетсяПересчитатьБольничный(Кэш)
Если Не Объект.АвтозаполнениеПериодовОплаты Тогда
Элементы.ТребуетсяПересчитатьГруппа.Видимость = Ложь;
Элементы.ТребуетсяПересчитатьВШапкеГруппа.Видимость = Ложь;
Возврат;
КонецЕсли;
Представление1 = ПредставлениеНеучтенныхИсключаемыхПериодов(Кэш);
Если Представление1 = Неопределено Тогда
Возврат;
КонецЕсли;
Представление2 = ПредставлениеНеучтенныхПериодовПростоя(Кэш);
Если Представление2 = Неопределено Тогда
Возврат;
КонецЕсли;
Строка = СокрЛП(Представление1 + " " + Представление2);
Если Строка = "" Тогда
Элементы.ТребуетсяПересчитатьГруппа.Видимость = Ложь;
Элементы.ТребуетсяПересчитатьВШапкеГруппа.Видимость = Ложь;
Иначе
Элементы.ТребуетсяПересчитатьГруппа.Видимость = Истина;
Элементы.ТребуетсяПересчитатьВШапкеГруппа.Видимость = Истина;
Строка = Строка
+ НСтр("ru = 'Рекомендуется <a href=""Исправить"">исправить</a> больничный или <a href=""ЗаполнитьИсключаемыеПериоды"">заполнить параметры оплаты</a>.'");
ФорматированнаяСтрока = СтроковыеФункции.ФорматированнаяСтрока(Строка);
Элементы.ТребуетсяПересчитать.Заголовок = ФорматированнаяСтрока;
Элементы.ТребуетсяПересчитатьВШапке.Заголовок = ФорматированнаяСтрока;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьГруппуИсключаемыеПериоды(Кэш, ОплачиваемыеПериоды, ОтпускВытесняетБольничный)
ПредставленияИсключаемыхПериодов = Новый Массив;
Если Объект.НазначитьПособие Тогда
Для Каждого ИсключаемыйПериод Из Объект.ИсключаемыеПериоды Цикл
ПредставленияИсключаемыхПериодов.Добавить(
ОбщегоНазначенияБЗК.НаименованиеПериода(ИсключаемыйПериод.ДатаНачала, ИсключаемыйПериод.ДатаОкончания));
КонецЦикла;
НеоплачиваемыхДней = Объект.ИсключаемыеПериоды.Итог("КалендарныхДней");
Иначе
ПредставленияИсключаемыхПериодов.Добавить(
ОбщегоНазначенияБЗК.НаименованиеПериода(Объект.ДатаНачала, Объект.ДатаОкончания));
НеоплачиваемыхДней = ОбщегоНазначенияБЗК.КоличествоДнейВПериоде(Объект.ДатаНачала, Объект.ДатаОкончания);
КонецЕсли;
ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(
НСтр("ru = ';Не оплачивается %1 день;;Не оплачивается %1 дня;Не оплачивается %1 дней;'"),
НеоплачиваемыхДней) + ": ";
ЗаголовокНадписи = СтроковыеФункции.ФорматированнаяСтрока(ЗаголовокНадписи);
Элементы.ИсключаемыеПериодыВШапкеЗаголовок.Заголовок = ЗаголовокНадписи;
Элементы.ИсключаемыеПериодыЗаголовок.Заголовок = ЗаголовокНадписи;
ТекстНадписи = СтрСоединить(ПредставленияИсключаемыхПериодов, ", ");
Элементы.ИсключаемыеПериодыНадпись.Заголовок = ТекстНадписи;
Элементы.ИсключаемыеПериодыВШапкеНадпись.Заголовок = ТекстНадписи;
Фильтр = Новый Структура("Причина", Перечисления.ПричиныНеоплатыБольничных.Отпуск);
ЕстьОтпуск = Объект.ИсключаемыеПериоды.НайтиСтроки(Фильтр).Количество() > 0;
Если ОтпускВытесняетБольничный И ЕстьОтпуск Тогда
СтрокаHTML = СтрШаблон(
НСтр("ru = '%1 не дает права на продление отпуска и в случае пересечения с отпуском <a href=""%2"">должен оплачиваться отпуск</a>.
|Рекомендуется проинформировать работника.
|Если решено перенести отпуск, то больничный потребуется исправить и пересчитать.'"),
Перечисления.ПричиныНетрудоспособности.ПредставлениеБезКода(Объект.ПричинаНетрудоспособности),
"https://its.1c.ru/db/newsclar#content:468901:hdoc");
ЗаголовокПодсказки = СтроковыеФункции.ФорматированнаяСтрока(СтрокаHTML);
Иначе
ЗаголовокПодсказки = "";
КонецЕсли;
Элементы.ИсключаемыеПериодыВШапкеГруппа.РасширеннаяПодсказка.Заголовок = ЗаголовокПодсказки;
Элементы.ИсключаемыеПериодыГруппа.РасширеннаяПодсказка.Заголовок = ЗаголовокПодсказки;
Если Объект.ДнейОплаты = 0 И ОплачиваемыеПериоды.Количество() = 0 Тогда
ЗаголовокФлажка = "";
Иначе
ПредставленияОплачиваемыхПериодов = Новый Массив;
Для Каждого ОплачиваемыйПериод Из ОплачиваемыеПериоды Цикл
ПредставленияОплачиваемыхПериодов.Добавить(
ОбщегоНазначенияБЗК.НаименованиеПериода(ОплачиваемыйПериод.ДатаНачала, ОплачиваемыйПериод.ДатаОкончания));
КонецЦикла;
ЗаголовокФлажка = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(
НСтр("ru = ';Назначить пособие на %1 день;;Назначить пособие на %1 дня;Назначить пособие на %1 дней;'"),
Объект.ДнейОплаты);
ЗаголовокФлажка = ЗаголовокФлажка + ": " + СтрСоединить(ПредставленияОплачиваемыхПериодов, ", ");
КонецЕсли;
Элементы.НазначитьПособие.Заголовок = ЗаголовокФлажка;
КонецПроцедуры
&НаСервере
Процедура ОчиститьИсключаемыеПериодыНаСервере()
Объект.ИсключаемыеПериоды.Очистить();
ЗаполнитьПараметрыОплаты(Ложь);
ЗаполнитьДатуНачалаПоловиннойОплаты();
УстановитьДоступностьПолейВводаНачислений();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьИсключаемыеПериодыНаСервере()
Модифицированность = Истина;
Для Каждого Период Из Объект.ПериодыУходаЗаРодственниками Цикл
Период.КоличествоДнейИзменено = Ложь;
КонецЦикла;
ЗаполнитьПараметрыОплаты(Истина);
ЗаполнитьДатуНачалаПоловиннойОплаты();
УстановитьДоступностьПолейВводаНачислений();
КонецПроцедуры
&НаСервере
Процедура РасчетПоПравилам2010ГодаПриИзмененииНаСервере()
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
Объект.ФиксПериодРасчетаСреднегоЗаработка = Ложь;
ЗаполнитьПериодРасчетаСреднегоЗаработка();
ОбновитьДанныеДляРасчетаСреднего();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Функция ПредставлениеНеучтенныхИсключаемыхПериодов(Кэш)
ДатыКИсключению = Документы.БольничныйЛист.ДатыКИсключению(Объект, Кэш);
Если ДатыКИсключению.Колонки.Найти("Найдена") <> Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ДатыКИсключению.Колонки.Добавить("Найдена", Новый ОписаниеТипов("Булево"));
ИсключенныеДаты = Документы.БольничныйЛист.ИсключенныеДаты(Объект, Кэш);
ИсключенныеДаты.Колонки.Добавить("Избыточна", Новый ОписаниеТипов("Булево"));
Для Каждого ИсключеннаяДата Из ИсключенныеДаты Цикл
Если ИсключеннаяДата.Регистрировать Тогда
Продолжить;
КонецЕсли;
ДатаКИсключению = ДатыКИсключению.Найти(ИсключеннаяДата.Дата, "Дата");
Если ДатаКИсключению = Неопределено Тогда
ИсключеннаяДата.Избыточна = Истина;
Иначе
ДатаКИсключению.Найдена = Истина;
КонецЕсли;
КонецЦикла;
Представление = "";
НеучтенныеДатыКИсключению = ДатыКИсключению.Скопировать(Новый Структура("Найдена", Ложь));
Если НеучтенныеДатыКИсключению.Количество() > 0 Тогда
ПредставленияПериодов = Новый Массив;
Таблица = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(НеучтенныеДатыКИсключению, "Регистратор, Причина");
Для Каждого Период Из Таблица Цикл
Если ЗначениеЗаполнено(Период.Регистратор) Тогда
Шаблон = СтрШаблон(
"<a href=""%1"">%2 %3</a>",
ПолучитьНавигационнуюСсылку(Период.Регистратор),
Период.Регистратор.Метаданные().Представление(),
"%1");
Иначе
Шаблон = Строка(Период.Причина) + " %1";
КонецЕсли;
НаименованиеПериода = ОбщегоНазначенияБЗК.НаименованиеПериода(Период.ДатаНачала, Период.ДатаОкончания);
ПредставленияПериодов.Добавить(СтрШаблон(Шаблон, НаименованиеПериода));
КонецЦикла;
Представление = Представление
+ СтрШаблон(НСтр("ru = 'Расчет не учитывает %1.'"), СтрСоединить(ПредставленияПериодов, "; "))
+ " ";
КонецЕсли;
ИзбыточныеДатыКИсключению = ИсключенныеДаты.Скопировать(Новый Структура("Избыточна", Истина));
Если ИзбыточныеДатыКИсключению.Количество() > 0 Тогда
ПредставленияПериодов = Новый Массив;
Таблица = ОбщегоНазначенияБЗК.ТаблицаПериодовИзТаблицыДат(ИзбыточныеДатыКИсключению, "Причина");
Для Каждого Период Из Таблица Цикл
НаименованиеПериода = ОбщегоНазначенияБЗК.НаименованиеПериода(Период.ДатаНачала, Период.ДатаОкончания);
Если Период.Причина = Перечисления.ПричиныНеоплатыБольничных.Иное Тогда
ПредставленияПериодов.Добавить("простоя " + НаименованиеПериода);
Иначе
ПредставленияПериодов.Добавить(Строка(Период.Причина) + " " + НаименованиеПериода);
КонецЕсли;
КонецЦикла;
Представление = Представление
+ СтрШаблон(НСтр("ru = 'Избыточно исключены периоды %1.'"), СтрСоединить(ПредставленияПериодов, ", "))
+ " ";
КонецЕсли;
Возврат Представление;
КонецФункции
&НаСервере
Функция АдресСтруктурыБольничногоДляФормПериодов()
ИменаСвойств =
"Ссылка, ДатаНачала, ДатаОкончания, ДатаНачалаСобытия, НазначитьПособие, СдвигатьПериодОплаты,
|ДатаНачалаОплаты, ДатаОкончанияОплаты, ДнейОплаты, ДнейПоловиннойОплаты,
|ЯвляетсяПродолжениемБолезни, ПервичныйБольничныйЛист,
|ОсвобождениеДатаНачала1, ОсвобождениеДатаОкончания1,
|ОсвобождениеДатаНачала2, ОсвобождениеДатаОкончания2,
|ОсвобождениеДатаНачала3, ОсвобождениеДатаОкончания3,
|КодПричиныНетрудоспособности, ПричинаНетрудоспособности, ДатаНачалаСобытия, Сотрудник,
|ВидНеоплачиваемогоВремени, ВидОплатыЗаСчетРаботодателя, ВидОплатыПособия,
|СлучайУходаЗаБольнымРебенком, АвтозаполнениеПериодовОплаты, НачалоВПериодПриостановленияТД,
|ПрименятьЛьготыПриНачисленииПособия, ФинансированиеФедеральнымБюджетом,
|УсловияИсчисленияКод1, УсловияИсчисленияКод2, УсловияИсчисленияКод3,
|ДатаНачалаПоловиннойОплаты, ДатаНарушенияРежима, ПрерывистыйМетод,
|РодственникЗаКоторымОсуществляетсяУход1, РодственникЗаКоторымОсуществляетсяУход2,
|ДатаНачалаРодственник1, ДатаНачалаРодственник2,
|ДатаОкончанияРодственник1, ДатаОкончанияРодственник2,
|СтажЛет, СтажМесяцев, СтажДней, СтажРасширенныйЛет, СтажРасширенныйМесяцев, СтажРасширенныйДней,
|ПроцентОплаты, ПроцентОплатыБезЛьгот, ОграничениеПособия, ОграничениеПособияБезЛьгот";
СтруктураБольничного = Новый Структура(ИменаСвойств);
ЗаполнитьЗначенияСвойств(СтруктураБольничного, Объект, ИменаСвойств);
СтруктураБольничного.Вставить("ИсключаемыеПериоды", Объект.ИсключаемыеПериоды.Выгрузить());
СтруктураБольничного.Вставить("ПериодыПростоя", Объект.ПериодыПростоя.Выгрузить());
СтруктураБольничного.Вставить("ПериодыУходаЗаРодственниками", Объект.ПериодыУходаЗаРодственниками.Выгрузить());
Возврат ПоместитьВоВременноеХранилище(СтруктураБольничного, УникальныйИдентификатор);
КонецФункции
#КонецОбласти
#Область ДенежноеСодержание
&НаСервере
Функция ПодготовитьСтруктуруОбъектаДляРасчетаДенежногоСодержания()
Возврат Документы.БольничныйЛист.СтруктураРасчетаДенежногоСодержания(Объект, УникальныйИдентификатор,
НазначенияРасчетаДенежногоСодержания);
КонецФункции
#КонецОбласти
&НаКлиенте
Процедура ПодключитьОбработчикРасчетаБезВыводаСообщений()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
НеобходимоПерезаполнитьНачисления = Истина;
ВыводитьСообщенияПриРасчете = Ложь;
ЗарплатаКадрыРасширенныйКлиент.ПодключитьОбработчикОжиданияАвтоматическогоРасчета(
ЭтотОбъект,
ВыполнятьПредварительныйРасчетДокумента Или РегистрацияНачисленийДоступна,
"РассчитатьНаКлиенте",
,
"ОчиститьРассчитанныеДанныеНаКлиенте",
Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьНаКлиенте()
ОтключитьОбработчикОжидания("РассчитатьНаКлиенте");
РассчитатьНаСервере();
КонецПроцедуры
&НаСервере
Процедура РассчитатьНаСервере()
ПараметрыЗаполнения = Документы.БольничныйЛист.ПараметрыЗаполнения(Ложь);
ПараметрыЗаполнения.ЗаполнитьСсылкиНачислений = Истина;
ПараметрыЗаполнения.ЗаполнитьПериодыУхода = Документы.БольничныйЛист.ИспользоватьПериодыУходаВШапке(Объект);
ПараметрыЗаполнения.ЗаполнитьПараметрыОплаты = Объект.АвтозаполнениеПериодовОплаты;
ПараметрыРасчета = ПараметрыРасчета();
ПараметрыРасчета.ВыводитьСообщения = ВыводитьСообщенияПриРасчете;
ПерезаполнитьИРассчитатьНачисленияНаСервере(ПараметрыЗаполнения, ПараметрыРасчета);
КонецПроцедуры
&НаСервере
Процедура ПерезаполнитьИРассчитатьНачисленияНаСервере(ПараметрыЗаполнения, ПараметрыРасчета)
ЗапланироватьЗаполнениеСведенийДляФССЗависящихОтНачислений();
Документ = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(Документ);
ПараметрыЗаполнения.Форма = ЭтотОбъект;
ПараметрыЗаполнения.ВыводитьСообщения = ПараметрыРасчета.ВыводитьСообщения;
Документ.Заполнить(ПараметрыЗаполнения);
РезультатЗаполнения = ПараметрыЗаполнения.Результат;
ЗаполнитьЗначенияСвойств(ПараметрыРасчета, ПараметрыЗаполнения);
ЗаполнитьЗначенияСвойств(ПараметрыРасчета, РезультатЗаполнения);
Если РезультатЗаполнения.ИзмененПериодРасчетаСреднего Тогда
ПараметрыРасчета.ОчиститьСреднийЗаработок = Истина;
ПараметрыРасчета.ЗаполнитьСреднийЗаработок = Истина;
КонецЕсли;
РезультатРасчета = Документ.Рассчитать(ПараметрыРасчета);
ЗначениеВРеквизитФормы(Документ, "Объект");
ДанныеВРеквизиты();
НазначенияРасчетаДенежногоСодержания = РезультатРасчета.НазначенияРасчетаДенежногоСодержания;
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
Если РезультатЗаполнения.ПериодыУходаЗаполнены Тогда
ОбновитьВидимостьДоступностьСтраницыУходЗаРодственниками();
ОбновитьПредставленияПериодовУхода();
КонецЕсли;
Если РезультатЗаполнения.ПараметрыОплатыЗаполнены Тогда
ОбновитьЭлементыПараметровОплаты(РезультатРасчета.Кэш);
КонецЕсли;
Если РезультатЗаполнения.ПриостановленияТДЗаполнены Тогда
ПроверитьПриостановленияТрудовыхДоговоров(Истина, РезультатЗаполнения.РезультатыПроверкиПриостановленийТД);
КонецЕсли;
Если ТипЗнч(РезультатЗаполнения.ДляСотрудникаВведенСтраховойСтаж) = Тип("Булево") Тогда
ДляСотрудникаВведенСтраховойСтаж = РезультатЗаполнения.ДляСотрудникаВведенСтраховойСтаж;
КонецЕсли;
ОбновитьИсправленияОтпусков(РезультатРасчета);
Если РезультатРасчета.Успех Или РезультатРасчета.СреднийЗаработокИзменен Тогда
ЗаполнениеВыполнено = Истина;
КонецЕсли;
Если РезультатРасчета.СреднийЗаработокИзменен Тогда
УстановитьИнфонадписьРасчетаСреднегоЗаработка();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
КонецЕсли;
Если ТипЗнч(РезультатРасчета.ДоступенФлажокРассчитатьЗарплату) = Тип("Булево") Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "РассчитатьЗарплату", "Доступность",
РезультатРасчета.ДоступенФлажокРассчитатьЗарплату);
КонецЕсли;
Если РезультатРасчета.РассчитатьЗарплатуИзменен Тогда
РассчитатьЗарплатуПриИзмененииНаСервере();
КонецЕсли;
Если РезультатРасчета.Успех Тогда
ЗарплатаКадрыРасширенныйКлиентСервер.СброситьФлагНеобходимостиВыполненияРасчета(ЭтотОбъект);
НеобходимоПерезаполнитьНачисления = Ложь;
ТребуетсяОчиститьДанныеСреднегоЗаработка = Ложь;
УстановитьСвойствоДокументРассчитан();
КонецЕсли;
Если РезультатРасчета.ФлажокУчитыватьЗаработокПредыдущихСтрахователейЗаполнен Тогда
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Ложь;
КонецЕсли;
ОбработатьСообщенияПользователю();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты();
ОбновитьОстаткиДнейУхода = ПараметрыЗаполнения.ЗаполнитьПериодыУхода
Или РезультатЗаполнения.ПериодыУходаЗаполнены;
ПолностьюОбновитьФорму(Ложь, ОбновитьОстаткиДнейУхода);
ОбновитьСведенияДляФСС();
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Функция ПараметрыРасчета()
ПараметрыРасчета = Документы.БольничныйЛист.ПараметрыРасчета();
ПараметрыРасчета.ИспользуетсяРасчетЗарплаты = ИспользуетсяРасчетЗарплаты;
ПараметрыРасчета.ОчиститьСреднийЗаработок = ТребуетсяОчиститьДанныеСреднегоЗаработка;
ПараметрыРасчета.ЗаполнитьСреднийЗаработок = ТребуетсяОбновитьДанныеСреднегоЗаработка
Или ПараметрыРасчета.ОчиститьСреднийЗаработок;
ПараметрыРасчета.ОчищатьДенежноеСодержание = ТребуетсяОбновитьДанныеСреднегоЗаработка;
ПараметрыРасчета.ЗаполнитьФлажокУчитыватьЗаработокПредыдущихСтрахователей =
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей;
ПараметрыРасчета.ИдентификаторФормы = УникальныйИдентификатор;
ПараметрыРасчета.НазначенияРасчетаДенежногоСодержания = НазначенияРасчетаДенежногоСодержания;
Возврат ПараметрыРасчета;
КонецФункции
&НаСервере
Процедура ВыполнитьРасчетНачисленийНаСервере()
ВремяНачалаЗамера = ОценкаПроизводительности.НачатьЗамерВремени();
ОчиститьРассчитанныеДанные(Ложь);
ОписаниеРассчитываемойТаблицы = Новый Структура("ИмяТаблицы", "Удержания");
РассчитатьНачисленияНаСервере(ОписаниеРассчитываемойТаблицы);
ЗарплатаКадрыРасширенныйКлиентСервер.СброситьФлагНеобходимостиВыполненияРасчета(ЭтотОбъект);
ОценкаПроизводительности.ЗакончитьЗамерВремени("РасчетДокументаБольничныйЛист", ВремяНачалаЗамера);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьУдержания(МенеджерРасчета)
Если Не ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты) Тогда
Возврат;
КонецЕсли;
МенеджерРасчета.ЗаполнитьУдержанияСотрудникаЗаПериод(Объект.Сотрудник, Объект.ПериодРегистрации, КонецМесяца(Объект.ПериодРегистрации));
КонецПроцедуры
&НаСервере
Процедура РассчитатьНачисленияНаСервере(ОписаниеРассчитываемойТаблицы = Неопределено, СохранятьИсправления = Ложь)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Кэш = Новый Соответствие;
ПериодРасчетаЗарплаты = ПериодРасчетаЗарплатыДоНачалаОтсутствия(Кэш);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты, Кэш, СохранятьИсправления);
ЗаполнитьУдержания(МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИсточникиИзмененийМенеджераРасчета(МенеджерРасчета, ИзмененныеДанные);
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
МенеджерРасчета.РассчитатьЗарплату();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Процедура РасчетЗарплатыВДанныеФормы(ДанныеМенеджераРасчета)
ТаблицыНачислений = РасчетЗарплатыРасширенныйФормы.ТаблицыНачисленийФормы();
ТаблицыНачислений.Начисления = Объект.Начисления;
ТаблицыНачислений.НачисленияПерерасчет = Объект.НачисленияПерерасчет;
ТаблицыНачислений.НачисленияПерерасчетНулевыеСторно = Объект.НачисленияПерерасчетНулевыеСторно;
ТаблицыНачислений.УправленческиеНачисления = Объект.УправленческиеНачисления;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНачисленияВДанныеФормы(ТаблицыНачислений, ДанныеМенеджераРасчета.Начисления, Объект.Организация);
РасчетЗарплатыРасширенныйФормы.СортироватьПерерасчеты(Объект.НачисленияПерерасчет);
ТаблицыУдержаний = РасчетЗарплатыРасширенныйФормы.ТаблицыУдержанийФормы();
ТаблицыУдержаний.Удержания = Объект.Удержания;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыУдержанияВДанныеФормы(ТаблицыУдержаний, ДанныеМенеджераРасчета.Удержания);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНДФЛВДанныеФормы(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, ДанныеМенеджераРасчета.НДФЛ);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыПогашениеЗаймовВДанныеФормы(Объект.ПогашениеЗаймов, ДанныеМенеджераРасчета.ПогашениеЗаймов);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыКорректировкиВыплатыВДанныеФормы(Объект.КорректировкиВыплаты, ДанныеМенеджераРасчета.КорректировкиВыплаты);
ОбновитьНачисленоУдержаноИтог(ЭтотОбъект, НачисленияРаботодателя());
ОбновитьПерерасчетИтог(ЭтотОбъект);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтотОбъект, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтотОбъект, МассивОписанийТаблицФормы);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтотОбъект, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
УстановитьВидимостьПерерасчетов();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты();
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаСервере
Процедура ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета)
РасчетЗарплатыРасширенныйФормы.НачисленияВДанныеМенеджераРасчета(Объект.Начисления, МенеджерРасчета, Объект.Организация);
РасчетЗарплатыРасширенныйФормы.НачисленияПерерасчетСНулевымиСторноВДанныеМенеджераРасчета(Объект.НачисленияПерерасчет, Объект.НачисленияПерерасчетНулевыеСторно, МенеджерРасчета, Объект.Организация);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.УправленческиеНачисленияВДанныеМенеджераРасчета(Объект.УправленческиеНачисления, МенеджерРасчета);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.УдержанияВДанныеМенеджераРасчета(Объект.Удержания, МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.КорректировкиВыплатыВДанныеМенеджераРасчета(Объект.КорректировкиВыплаты, МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.ПогашениеЗаймовВДанныеМенеджераРасчета(Объект.ПогашениеЗаймов, МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.НДФЛВДанныеМенеджераРасчета(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, МенеджерРасчета);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты, Кэш, СохранятьИсправления = Истина)
МенеджерРасчета.ИсключаемыйРегистратор = Объект.Ссылка;
ИсправлениеДокументовРасчетЗарплаты.НастроитьМенеджерРасчета(МенеджерРасчета, ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьЗаймы = ПериодРасчетаЗарплаты <> Неопределено;
МенеджерРасчета.НастройкиРасчета.РассчитыватьУдержания = ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты);
МенеджерРасчета.НастройкиРасчета.РассчитыватьКорректировкиВыплаты = Истина;
МенеджерРасчета.НастройкиРасчета.СохранятьИсправления = СохранятьИсправления;
МенеджерРасчета.НастройкиРасчета.РасчетЗарплаты = ПериодРасчетаЗарплаты <> Неопределено;
МенеджерРасчета.НастройкиУдержаний.РассчитыватьТолькоПоТекущемуДокументу = Истина;
МенеджерРасчета.НастройкиНДФЛ.Сотрудники = Объект.Сотрудник;
МенеджерРасчета.НастройкиНДФЛ.ДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
МенеджерРасчета.НастройкиНДФЛ.ОкончательныйРасчет = Ложь;
МенеджерРасчета.НастройкиНДФЛ.ДоходПолученНаТерриторииРФ = Объект.ДоходПолученНаТерриторииРФ;
МенеджерРасчета.НастройкиПособий.Вставить("ЭЛНКарантинПоКоронавирусу", Объект.ЭЛНКарантинПоКоронавирусу);
ЗасчитыватьДанныеАвансов = Объект.РассчитатьЗарплату;
Если ЗасчитыватьДанныеАвансов
И ИсправлениеДокументовРасчетЗарплатыКлиентСервер.ИсправлениеВТекущемПериоде(ЭтаФорма)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ИсправленныйДокумент, "РассчитатьЗарплату") Тогда
ЗасчитыватьДанныеАвансов = Ложь
КонецЕсли;
МенеджерРасчета.НастройкиНДФЛ.ЗасчитыватьДанныеАвансов = ЗасчитыватьДанныеАвансов;
Если ПериодРасчетаЗарплаты <> Неопределено Тогда
МенеджерРасчета.НастройкиЗаймов.Сотрудники = Объект.Сотрудник;
МенеджерРасчета.НастройкиЗаймов.ДатаПогашения = ПериодРасчетаЗарплаты.ДатаОкончания;
КонецЕсли;
МенеджерРасчета.НастройкиБухучета.КоэффициентыСреднегоЗаработкаФССДокумента = Документы.БольничныйЛист.КоэффициентыСреднегоЗаработка(Объект);
МенеджерРасчета.НастройкиБухучета.КоэффициентыРаспределенияДенежногоСодержания = Объект.КоэффициентыРаспределенияДенежногоСодержания.Выгрузить();
ПараметрыОплаты = Документы.БольничныйЛист.ДополнительныеПараметрыРасчетаПособия(Объект);
МенеджерРасчета.ДополнительныеСвойства.Вставить("ПараметрыРасчетаПособияПоНетрудоспособности", ПараметрыОплаты);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСотрудника(Сотрудник, ОписаниеТаблицы) Экспорт
Объект.Удержания.Очистить();
РассчитатьСотрудникаНаСервере();
КонецПроцедуры
&НаСервере
Процедура РассчитатьСотрудникаНаСервере()
РассчитатьНачисленияНаСервере(, Истина);
КонецПроцедуры
&НаСервере
Процедура РассчитатьВсеНаСервере(ОписаниеТаблицы = Неопределено)
Кэш = Новый Соответствие;
ПериодРасчетаЗарплаты = ПериодРасчетаЗарплатыДоНачалаОтсутствия(Кэш);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты, Кэш);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИсточникиИзмененийМенеджераРасчета(МенеджерРасчета, ИзмененныеДанные);
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
МенеджерРасчета.РассчитатьЗарплату();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
КонецПроцедуры
#Область СреднийЗаработок
&НаСервере
Процедура ОчиститьДанныеСреднегоЗаработка(ОчищатьПараметрыПолученияСреднего = Истина)
Если Не ИспользуетсяРасчетЗарплаты Или Не ТребуетсяОбновитьДанныеСреднегоЗаработка Тогда
Возврат;
КонецЕсли;
Если ОчищатьПараметрыПолученияСреднего Тогда
Документы.БольничныйЛист.ОчиститьПараметрыСреднего(Объект);
КонецЕсли;
Документы.БольничныйЛист.ОчиститьСреднийЗаработок(Объект);
ОчиститьРассчитанныеДанные();
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ТребуетсяОчиститьДанныеСреднегоЗаработка = Ложь;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеДляРасчетаСреднего()
Если ТребуетсяОчиститьДанныеСреднегоЗаработка Тогда
ОчиститьДанныеСреднегоЗаработка(Ложь);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ПараметрыРасчета = ПараметрыРасчета();
ПараметрыРасчета.ЗаполнитьСреднийЗаработок = Истина;
РезультатРасчета = Документы.БольничныйЛист.РезультатРасчета();
Документ = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(Документ);
Документы.БольничныйЛист.ЗаполнитьСреднийЗаработок(Документ, ПараметрыРасчета, РезультатРасчета);
ЗначениеВРеквизитФормы(Документ, "Объект");
ДанныеВРеквизиты();
Если РезультатРасчета.СреднийЗаработокИзменен Тогда
НазначенияРасчетаДенежногоСодержания = РезультатРасчета.НазначенияРасчетаДенежногоСодержания;
КонецЕсли;
УстановитьИнфонадписьРасчетаСреднегоЗаработка();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
ТребуетсяОбновитьДанныеСреднегоЗаработка = Ложь;
КонецПроцедуры
&НаСервере
Функция ПараметрыРедактированияСреднегоЗаработка()
ПараметрыРедактирования = УчетПособийСоциальногоСтрахованияКлиентСервер.ПараметрыРедактированияСреднегоЗаработкаФССПоДокументу();
ПараметрыРедактирования.ДокументСсылка = Объект.Ссылка;
ПараметрыРедактирования.Сотрудник = Объект.Сотрудник;
ПараметрыРедактирования.Организация = Объект.Организация;
ПараметрыРедактирования.ДатаНачалаСобытия = Объект.ДатаНачалаСобытия;
ПараметрыРедактирования.НачалоПериодаРасчета = Объект.ПериодРасчетаСреднегоЗаработкаНачало;
ПараметрыРедактирования.ОкончаниеПериодаРасчета = Объект.ПериодРасчетаСреднегоЗаработкаОкончание;
ПараметрыРедактирования.ФиксПериодРасчета = Объект.ФиксПериодРасчетаСреднегоЗаработка;
ПараметрыРедактирования.ГодыПериодаРасчета = УчетПособийСоциальногоСтрахования.ГодыПериодаРасчетаСреднего(Объект);
ПараметрыРедактирования.ПорядокРасчета = Документы.БольничныйЛист.ПорядокРасчетаСреднегоЗаработкаФСС(Объект);
ПараметрыРасчета = ПараметрыРасчетаСреднегоДневногоЗаработкаФСС();
ПараметрыРедактирования.ПараметрыРасчета = ПараметрыРасчета;
ПараметрыРедактирования.ИспользоватьДниБолезниУходаЗаДетьми = ПараметрыРасчета.ИспользоватьДниБолезниУходаЗаДетьми;
ПараметрыРедактирования.УчитыватьДниПриостановленияТД = ПараметрыРасчета.УчитыватьДниПриостановленияТД;
ПараметрыРедактирования.ДнейПриостановленияТДЗаГод1 = ПараметрыРасчета.ДнейПриостановленияТДЗаГод1;
ПараметрыРедактирования.ДнейПриостановленияТДЗаГод2 = ПараметрыРасчета.ДнейПриостановленияТДЗаГод2;
ПараметрыРедактирования.УчитыватьЗаработокПредыдущихСтрахователей = Объект.УчитыватьЗаработокПредыдущихСтрахователей;
УчетПособийСоциальногоСтрахованияРасширенный.ЗаполнитьТаблицыДанныхСреднегоЗаработкаФССПоДокументу(Объект, ПараметрыРедактирования);
Возврат ПараметрыРедактирования;
КонецФункции
&НаКлиенте
Процедура ОткрытьСреднийЗаработокЗавершение(РезультатРедактирования, ДополнительныеПараметры) Экспорт
Если РезультатРедактирования = Неопределено Тогда
Возврат;
КонецЕсли;
ТребуетсяОбновитьДанныеСреднегоЗаработка = Ложь;
ПеренестиДанныеУчетаСреднегоЗаработкаВДокумент(РезультатРедактирования);
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаСервере
Процедура ПеренестиДанныеУчетаСреднегоЗаработкаВДокумент(РезультатРедактирования)
Объект.СреднийЗаработокФСС.Очистить();
Объект.ОтработанноеВремяДляСреднегоФСС.Очистить();
Объект.СреднийЗаработокДанныеСтрахователей.Очистить();
Объект.ПериодыБолезниУходаЗаДетьми.Очистить();
УчетПособийСоциальногоСтрахованияРасширенный.ЗаполнитьДанныеУчетаСреднегоЗаработкаФСС(Объект, РезультатРедактирования, ЭтотОбъект);
Если Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод <> РезультатРедактирования.ГодыПериодаРасчета[0]
Или Объект.ПериодРасчетаСреднегоЗаработкаВторойГод <> РезультатРедактирования.ГодыПериодаРасчета[1] Тогда
ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
КонецЕсли;
Объект.ФиксПериодРасчетаСреднегоЗаработка = РезультатРедактирования.ФиксПериодРасчета;
Объект.ПериодРасчетаСреднегоЗаработкаНачало = РезультатРедактирования.НачалоПериодаРасчета;
Объект.ПериодРасчетаСреднегоЗаработкаОкончание = РезультатРедактирования.ОкончаниеПериодаРасчета;
Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод = РезультатРедактирования.ГодыПериодаРасчета[0];
Объект.ПериодРасчетаСреднегоЗаработкаВторойГод = РезультатРедактирования.ГодыПериодаРасчета[1];
Объект.СреднийДневнойЗаработок = РезультатРедактирования.СреднийЗаработок;
Объект.СреднийДневнойЗаработокРК = РезультатРедактирования.СреднийЗаработокРК;
Объект.СреднийДневнойЗаработокСН = РезультатРедактирования.СреднийЗаработокСН;
Объект.СреднийЗаработокБольничныйЗаСчетРаботодателя = РезультатРедактирования.СреднийЗаработокБольничныйЗаСчетРаботодателя;
Объект.СреднийЗаработокБольничныйЗаСчетРаботодателяРК = РезультатРедактирования.СреднийЗаработокБольничныйЗаСчетРаботодателяРК;
Объект.СреднийЗаработокБольничныйЗаСчетРаботодателяСН = РезультатРедактирования.СреднийЗаработокБольничныйЗаСчетРаботодателяСН;
Объект.СреднийПоДаннымОрганизации = Объект.СреднийДневнойЗаработок;
Объект.СреднийПоДаннымОрганизацииРК = Объект.СреднийДневнойЗаработокРК;
Объект.СреднийПоДаннымОрганизацииСН = Объект.СреднийДневнойЗаработокСН;
ЗаполнитьПриостановленияТрудовыхДоговоров();
РассчитатьСреднийЗаработок();
ОбновитьЭлементыЗаработкаСтраницыГлавное();
КонецПроцедуры
&НаСервере
Процедура РассчитатьСреднийЗаработок()
УстановитьПривилегированныйРежим(Истина);
Документ = РеквизитФормыВЗначение("Объект");
Документы.БольничныйЛист.РассчитатьСреднийЗаработок(Документ);
ЗначениеВРеквизитФормы(Документ, "Объект");
ЗаполнениеВыполнено = Истина;
КонецПроцедуры
&НаСервере
Функция ПараметрыРасчетаСреднегоДневногоЗаработкаФСС()
Возврат Документы.БольничныйЛист.ПараметрыРасчетаСреднегоДневногоЗаработкаФСС(Объект);
КонецФункции
&НаСервере
Процедура ОбновитьЭлементыЗаработкаСтраницыГлавное()
БылПервыйГод = Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод;
БылВторойГод = Объект.ПериодРасчетаСреднегоЗаработкаВторойГод;
Если Не ИспользуетсяРасчетЗарплаты Тогда
Элементы.ОткрытьСреднийЗаработок.Видимость = Ложь;
Элементы.ИсточникСреднего.Видимость = Ложь;
Элементы.УчитыватьЗаработокПредыдущихСтрахователей.Видимость = Ложь;
Элементы.ДоплатаДоСреднегоСтраницы.Видимость = Ложь;
Элементы.ГруппаСреднийПоГодам.Видимость = Ложь;
Возврат;
КонецЕсли;
ИсточникЗаполнен = ЗначениеЗаполнено(Объект.ИсточникСреднего);
ИсточникУчетОрганизации = (Объект.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетОрганизации
Или Не ИсточникЗаполнен);
Если ИсточникЗаполнен
Или Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод >= СЭДОФСС.ГодНачалаСведенийОСреднемЗаработкеСФР() Тогда
Элементы.ИсточникСреднего.Видимость = Истина;
ЗаполнитьСписокВыбораИсточниковСреднего();
Иначе
Элементы.ИсточникСреднего.Видимость = Ложь;
КонецЕсли;
Элементы.УчитыватьЗаработокПредыдущихСтрахователей.Доступность = ДоступностьФлажкаУчитыватьЗаработокПредыдущихСтрахователей();
Если ВариантДоплаты = 0 Тогда
Элементы.ДоплатаДоСреднегоСтраницы.ТекущаяСтраница = Элементы.ДоплатаОтсутствует;
ИначеЕсли ВариантДоплаты = 1 Тогда
Элементы.ДоплатаДоСреднегоСтраницы.ТекущаяСтраница = Элементы.ДоплатаДоСреднегоЗаработка;
ИначеЕсли ВариантДоплаты = 2 Тогда
Элементы.ДоплатаДоСреднегоСтраницы.ТекущаяСтраница = Элементы.ДоплатаДоДенежногоСодержания;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"ДенежноеСодержаниеИнфо",
"Видимость",
Объект.ДоплачиватьДоДенежногоСодержания);
Элементы.ОткрытьСреднийЗаработок.Видимость = ИсточникУчетОрганизации;
Элементы.ГруппаПервыйРасчетныйГод.Видимость = ИсточникЗаполнен И ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений;
Элементы.ГруппаВторойРасчетныйГод.Видимость = ИсточникЗаполнен И ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений;
Элементы.ПервыйРасчетныйГодЗаработок.Гиперссылка = ИсточникЗаполнен И Не ИсточникУчетОрганизации;
Элементы.ВторойРасчетныйГодЗаработок.Гиперссылка = ИсточникЗаполнен И Не ИсточникУчетОрганизации;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокВыбораИсточниковСреднего()
Если Не ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений Тогда
Возврат;
КонецЕсли;
Элементы.ИсточникСреднего.СписокВыбора.Очистить();
Элементы.ИсточникСреднего.СписокВыбора.Добавить(
Перечисления.ИсточникиСреднегоДляПособий.УчетОрганизации,
СтрШаблон(НСтр("ru = 'Учет организации (%1)'"), Формат(Объект.СреднийПоДаннымОрганизации, "ЧН=")));
Фильтр = Новый Структура("ИсточникСреднего, ВидЗаработка");
Если Объект.УчитыватьЗаработокПредыдущихСтрахователей Тогда
Фильтр.ВидЗаработка = Перечисления.СпособыУчетаГодовогоЗаработкаСФР.ВсеСтрахователи;
Иначе
Фильтр.ВидЗаработка = Перечисления.СпособыУчетаГодовогоЗаработкаСФР.ТекущийСтрахователь;
КонецЕсли;
Фильтр.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетФонда;
Если Объект.СреднийПоДаннымУчетаФонда > 0
Или Объект.СреднийЗаработокСЭДО.НайтиСтроки(Фильтр).Количество() > 0 Тогда
ПредставлениеСуммы = Формат(Объект.СреднийПоДаннымУчетаФонда, "ЧН=");
Иначе
ПредставлениеСуммы = НСтр("ru = 'нет данных'");
КонецЕсли;
Элементы.ИсточникСреднего.СписокВыбора.Добавить(
Перечисления.ИсточникиСреднегоДляПособий.УчетФонда,
СтрШаблон(НСтр("ru = 'Учет Фонда (%1)'"), ПредставлениеСуммы));
Фильтр.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда;
Если Объект.СреднийИзВходящегоЗапросаФонда > 0
Или Объект.СреднийЗаработокСЭДО.НайтиСтроки(Фильтр).Количество() > 0 Тогда
ПредставлениеСуммы = Формат(Объект.СреднийИзВходящегоЗапросаФонда, "ЧН=");
Иначе
ПредставлениеСуммы = НСтр("ru = 'нет данных'");
КонецЕсли;
Элементы.ИсточникСреднего.СписокВыбора.Добавить(
Перечисления.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда,
СтрШаблон(НСтр("ru = 'Входящий запрос Фонда (%1)'"), ПредставлениеСуммы));
КонецПроцедуры
&НаСервере
Функция ДоступностьФлажкаУчитыватьЗаработокПредыдущихСтрахователей()
Возврат Документы.БольничныйЛист.ДоступенФлажокУчитыватьЗаработокПредыдущихСтрахователей(Объект);
КонецФункции
&НаСервере
Процедура УстановитьИнфонадписьРасчетаСреднегоЗаработка()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Элементы.ЗаполненностьДанныхИнфо.Видимость = Ложь;
Возврат;
КонецЕсли;
ИсточникУчетФонда = (Объект.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетФонда);
ИсточникВходящийЗапрос = (Объект.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.ВходящийЗапросФонда);
Если ИсточникУчетФонда Или ИсточникВходящийЗапрос Тогда
Если Не ЗначениеЗаполнено(Объект.ПервыйРасчетныйГодОснование)
Или Не ЗначениеЗаполнено(Объект.ВторойРасчетныйГодОснование) Тогда
ИнформацияОЗаполненности = УчетСреднегоЗаработка.ЗаполненнаяСтруктураИнфонадписиОСреднемЗаработке(
НСтр("ru = 'Данные о заработке неполные. Измените параметры расчета
|или <a href=""ЗапросСреднегоЗаработкаСЭДО"">получите данные СФР о среднем заработке</a>.'"),
БиблиотекаКартинок.Предупреждение);
Иначе
СреднийДневнойИзМРОТ = УчетПособийСоциальногоСтрахования.МинимальныйСреднедневнойЗаработокДляСравненияСМРОТ(
Объект.МинимальныйСреднедневнойЗаработок,
Объект.РайонныйКоэффициентРФНаНачалоСобытия,
Объект.ДатаНачалаСобытия);
Если Объект.СреднийДневнойЗаработок < СреднийДневнойИзМРОТ Тогда
ИнформацияОЗаполненности = УчетСреднегоЗаработка.ЗаполненнаяСтруктураИнфонадписиОСреднемЗаработке(
УчетПособийСоциальногоСтрахованияРасширенный.ПредупреждениеОРасчетеСреднегоИзМРОТ(СреднийДневнойИзМРОТ),
БиблиотекаКартинок.Предупреждение);
Иначе
ИнформацияОЗаполненности = Неопределено;
КонецЕсли;
КонецЕсли;
Иначе
ИнформацияОЗаполненности = УчетПособийСоциальногоСтрахованияРасширенный.ИнформацияОЗаполненностиДанныхСреднегоЗаработка(
Объект.Ссылка,
ЗаполнениеВыполнено,
ПараметрыРасчетаСреднегоДневногоЗаработкаФСС(),
Объект.СреднийДневнойЗаработок,
Объект.МинимальныйСреднедневнойЗаработок
);
КонецЕсли;
Если ИнформацияОЗаполненности = Неопределено Или ПустаяСтрока(Строка(ИнформацияОЗаполненности.Текст)) Тогда
Элементы.ЗаполненностьДанныхИнфо.Видимость = Ложь;
Иначе
Элементы.ЗаполненностьДанныхИнфо.Видимость = Истина;
Элементы.ЗаполненностьДанныхКартинка.Картинка = ИнформацияОЗаполненности.Картинка;
Элементы.ЗаполненностьДанныхИнформационныйТекст.Заголовок = ИнформацияОЗаполненности.Текст;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область РасчетЗарплатыРасширенный
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыСохраняемоеДенежноеСодержание()
Возврат КадровыйУчетРасширенныйКлиентСервер.ОписаниеТаблицыСохраняемоеДенежноеСодержание();
КонецФункции
&НаСервере
Процедура ДанныеВРеквизиты()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ЗарплатаКадрыРасширенный.ВводНачисленийДанныеВРеквизит(ЭтотОбъект, ОписанияТаблиц, 2);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
Модуль.ВводНачисленийДанныеВРеквизит(ЭтотОбъект, ОписаниеТаблицыСохраняемоеДенежноеСодержание(), 2);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриПолученииДанныхДокументаОплатыТруда(ЭтотОбъект);
КонецЕсли;
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтотОбъект, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаДанныеВРеквизит(ЭтотОбъект, ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна));
ОтражениеЗарплатыВБухучетеРасширенный.ОбъектПриЧтенииНаСервереПредставлениеРаспределения(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект));
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДанныеВРеквизит(ЭтотОбъект, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ИсправлениеДокументовЗарплатаКадры.ПрочитатьРеквизитыИсправления(ЭтотОбъект);
УстановитьПоляИсправления(ЭтотОбъект);
ЗаполнитьЗначениеКорректировкиВыплаты();
УстановитьОтображениеНомераПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура РеквизитыВДанные(ТекущийОбъект)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ТекущийОбъект.Показатели.Очистить();
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
Модуль.ДополнитьМассивОписанийТаблицФормыНачисленияЗарплаты(ОписанияТаблиц, ОписаниеТаблицыСохраняемоеДенежноеСодержание());
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплатаКлиентСервер");
Модуль.ПриЗаполненииМассиваОписанийТаблицНачисленияЗарплаты(ОписанияТаблиц);
КонецЕсли;
ОписанияТаблицДляРаспределенияРезультата = ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна);
ОписанияТаблицДляРаспределенияРезультата.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда = ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда();
ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
ЗарплатаКадрыРасширенный.ВводНачисленийРеквизитВДанные(ЭтотОбъект, ТекущийОбъект, ОписанияТаблиц, 2);
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаРеквизитВДанные(ЭтотОбъект, ТекущийОбъект, ОписанияТаблицДляРаспределенияРезультата);
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаРеквизитВДанные(ЭтотОбъект, ТекущийОбъект, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция МассивОписанийТаблицФормы(ПравоНаЧтениеДокументаБезОграничений)
МассивОписанийТаблицФормы = Новый Структура;
МассивОписанийТаблицФормы.Вставить("Начисления", ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений));
МассивОписанийТаблицФормы.Вставить("НачисленияПерерасчет", ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений));
Если ОбщегоНазначенияБЗККлиентСервер.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияБЗККлиентСервер.ОбщийМодуль("УправленческаяЗарплатаКлиентСервер");
Модуль.ПриЗаполненииСтруктурыОписанийТаблицНачисленияЗарплаты(МассивОписанийТаблицФормы);
КонецЕсли;
Возврат МассивОписанийТаблицФормы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений)
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "Начисления";
ОписаниеТаблицы.ПутьКДанным = "Объект.Начисления";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "ДатыНачисления";
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ОтображатьПоляНормыВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "Начисления,Удержания,НДФЛ,КорректировкиВыплаты";
ОписаниеТаблицы.СодержитПолеКодВычета = Истина;
ОписаниеТаблицы.СкрыватьПодразделениеВПростомРежиме = Истина;
ОписаниеТаблицы.СодержитПолеМестоПолученияДохода = Истина;
ОписаниеТаблицы.СодержитПолеИсходныйДокумент = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаСервереБезКонтекста
Функция ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений)
Возврат Документы.БольничныйЛист.ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений);
КонецФункции
&НаСервереБезКонтекста
Функция ОписаниеТаблицыПерерасчетовНулевыеСторно()
Возврат Документы.БольничныйЛист.ОписаниеТаблицыПерерасчетовНулевыеСторно();
КонецФункции
&НаСервереБезКонтекста
Функция ОписаниеТаблицыУдержаний()
Возврат Документы.БольничныйЛист.ОписаниеТаблицыУдержаний();
КонецФункции
&НаСервереБезКонтекста
Функция ОписаниеТаблицыНДФЛ()
Возврат Документы.БольничныйЛист.ОписаниеТаблицыНДФЛ();
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыКорректировкиВыплаты()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыКорректировкиВыплаты();
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыПогашениеЗаймов()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "ПогашениеЗаймов";
ОписаниеТаблицы.ПутьКДанным = "Объект.ПогашениеЗаймов";
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.НомерТаблицы = 5;
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтроки";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
ОписаниеТаблицы.УстанавливатьИдентификаторСтрокиРаспределенияРезультата = Истина;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписанияТаблицДляРаспределенияРезультата(ПравоНаЧтениеДокументаБезОграничений)
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Добавить(ОписаниеТаблицыКорректировкиВыплаты());
ОписанияТаблиц.Добавить(ОписаниеТаблицыПогашениеЗаймов());
Возврат ОписанияТаблиц;
КонецФункции
&НаКлиенте
Процедура ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле)
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") = 0 Тогда
Возврат;
КонецЕсли;
ЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуРедактированияРезультатовРаспределенияПоИсточникамФинансирования(ЭтотОбъект, ОписаниеТаблицы, ВыбраннаяСтрока, Объект.ПериодРегистрации);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеДокумента(Форма)
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеРасчетногоДокумента();
Описание.НачисленияИмя = "Начисления";
Описание.НачисленияПерерасчетИмя = "НачисленияПерерасчет";
Описание.УдержанияИмя = "Удержания";
Описание.НДФЛИмя = "НДФЛ";
Описание.КорректировкиВыплатыИмя = "КорректировкиВыплаты";
Описание.ПримененныеВычетыИмя = "ПримененныеВычетыНаДетейИИмущественные";
Описание.ПогашениеЗаймовИмя = "ПогашениеЗаймов";
Описание.МесяцНачисленияИмя = "ПериодРегистрации";
Описание.ИменаПолейНачисления = "ВидОплатыПособия,ВидОплатыЗаСчетРаботодателя,ВидНеоплачиваемогоВремени,НачисленияНачисление";
Описание.РегистрацияНачисленийДоступна = Форма.ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
Описание.ЕстьОплатаПоСреднемуФСС = Истина;
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Месяц", "МесяцНачисленияСтрокой"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Сотрудник", "Объект.Сотрудник"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Причина нетрудоспособн.", "Объект.ПричинаНетрудоспособности"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Освобождение от работы с", "Объект.ДатаНачала"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Освобождение от работы по", "Объект.ДатаОкончания"));
Описание.ПроверяемыеПериоды.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеПроверяемогоПериода("Освобождение от работы с", "Объект.ДатаНачала", "Освобождение от работы по", "Объект.ДатаОкончания"));
Если ОбщегоНазначенияКлиентСервер.ПолучитьРеквизитФормыПоПути(Форма, "Объект.НазначитьПособие") Тогда
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Дата начала нетрудоспособности", "Объект.ДатаНачалаСобытия"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Дата начала оплаты", "Объект.ДатаНачалаОплаты"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Дата окончания оплаты", "Объект.ДатаОкончанияОплаты"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Процент оплаты", "Объект.ПроцентОплаты"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Ограничение пособия", "Объект.ОграничениеПособия"));
Описание.ПроверяемыеПериоды.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеПроверяемогоПериода("Дата начала оплаты", "Объект.ДатаНачалаОплаты", "Дата окончания оплаты", "Объект.ДатаОкончанияОплаты"));
КонецЕсли;
Описание.ОписанияТаблицДляРаспределенияРезультата = СтруктураОписанияТаблицДляРаспределенияРезультата(Форма);
Если ОбщегоНазначенияБЗККлиентСервер.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияБЗККлиентСервер.ОбщийМодуль("УправленческаяЗарплатаКлиентСервер");
Модуль.ДополнитьОписаниеРасчетногоДокумента(Описание);
КонецЕсли;
Возврат Описание;
КонецФункции
&НаСервере
Процедура ЗаполнитьПериодРасчетаСреднегоЗаработка()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если Документы.БольничныйЛист.ЗаполнитьПериодРасчетаСреднегоЗаработка(Объект) Тогда
ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьСтарыеЗначенияКонтролируемыхПолей()Экспорт
Возврат СтарыеЗначенияКонтролируемыхПолей;
КонецФункции
&НаСервере
Функция ПолучитьКонтролируемыеПоля() Экспорт
КонтролируемыеПоля = Новый Структура;
НачисленияФиксРасчет = Новый Массив;
НачисленияФиксРасчет.Добавить("Результат");
НачисленияФиксРасчетВремени = Новый Массив;
НачисленияФиксРасчетВремени.Добавить("ОплаченоДней");
НачисленияФиксРасчетВремени.Добавить("ОплаченоЧасов");
НачисленияФиксРасчетВремени.Добавить("НормаДней");
НачисленияФиксРасчетВремени.Добавить("НормаЧасов");
НачисленияФиксСтрока = Новый Массив;
НачисленияФиксСтрока.Добавить("Сотрудник");
НачисленияФиксСтрока.Добавить("Подразделение");
НачисленияФиксСтрока.Добавить("Начисление");
НачисленияФиксСтрока.Добавить("ДатаНачала");
НачисленияФиксСтрока.Добавить("ДатаОкончания");
НачисленияФиксЗаполнение = Новый Массив;
НачисленияФиксЗаполнение.Добавить("МестоПолученияДохода");
НачисленияПоля = Новый Структура;
НачисленияПоля.Вставить("ФиксРасчет", НачисленияФиксРасчет);
НачисленияПоля.Вставить("ФиксЗаполнение", НачисленияФиксЗаполнение);
НачисленияПоля.Вставить("ФиксСтрока", НачисленияФиксСтрока);
НачисленияПоля.Вставить("ФиксРасчетВремени", НачисленияФиксРасчетВремени);
КонтролируемыеПоля.Вставить("Начисления", НачисленияПоля);
КонтролируемыеПоля.Вставить("НачисленияПерерасчет", НачисленияПоля);
КонтролируемыеПоля.Вставить("НДФЛ", УчетНДФЛРасширенный.КонтролируемыеПоляДляФиксацииРезультатов());
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ДополнитьСоставКонтролируемыхПолейНачисленияЗарплаты(КонтролируемыеПоля);
КонецЕсли;
Возврат КонтролируемыеПоля;
КонецФункции
&НаКлиенте
Процедура ПерезаполнитьНачисленияСотрудника(Сотрудники, СохранятьИсправления = Истина) Экспорт
ОчиститьСообщения();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьСтроку(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей) Экспорт
ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаСервере
Процедура ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей)
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокуРасчета(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект), ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьЗависимыеРезультаты(ПараметрыДляРаспределения) Экспорт
Если ПараметрыДляРаспределения.РаспределятьЗависимыеТаблицы Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере(ПараметрыДляРаспределения);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СтруктураОписанияТаблицДляРаспределенияРезультата(Форма) Экспорт
ОписанияТаблиц = Новый Структура;
ОписанияТаблиц.Вставить("Начисления", ОписаниеТаблицыНачислений(Форма.РегистрацияНачисленийДоступна));
ОписанияТаблиц.Вставить("НачисленияПерерасчет", ОписаниеТаблицыПерерасчетов(Форма.РегистрацияНачисленийДоступна));
ОписанияТаблиц.Вставить("Удержания", ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Вставить("НДФЛ", ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Вставить("КорректировкиВыплаты", ОписаниеТаблицыКорректировкиВыплаты());
ОписанияТаблиц.Вставить("ПогашениеЗаймов", ОписаниеТаблицыПогашениеЗаймов());
Возврат ОписанияТаблиц;
КонецФункции
#КонецОбласти
&НаКлиенте
Процедура ОбработчикОжиданияМесяцНачисленияПриИзменении()
ПериодРегистрацииПриИзмененииНаСервере();
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьРассчитанныеДанныеНаКлиенте()
ОчиститьРассчитанныеДанные();
КонецПроцедуры
&НаСервере
Процедура ОчиститьРассчитанныеДанные(ПерезаполнитьНачисления = Истина)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ЗапланироватьЗаполнениеСведенийДляФССЗависящихОтНачислений();
УстановитьПривилегированныйРежим(Истина);
Документы.БольничныйЛист.ОчиститьРассчитанныеДанные(Объект, ПерезаполнитьНачисления);
ОбновитьНачисленоУдержаноИтог(ЭтотОбъект, НачисленияРаботодателя());
ОбновитьПерерасчетИтог(ЭтотОбъект);
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьПерерасчетов()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ПерерасчетыДоступны = ИсправлениеДокументовРасчетЗарплатыКлиентСервер.ПерерасчетыДоступны(ЭтотОбъект);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияПерерасчет", "Видимость", ПерерасчетыДоступны);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПерерасчетГруппа", "Видимость", ПерерасчетыДоступны);
ИсправлениеДокументовРасчетЗарплатыКлиентСервер.УстановитьДоначислениеПриИсправлении(ЭтаФорма, ПерерасчетыДоступны);
КонецПроцедуры
&НаСервере
Процедура УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты()
Если Не ИспользуетсяРасчетЗарплаты
Или Не ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений Тогда
Возврат;
КонецЕсли;
ПроверяемыеНачисления = Новый Массив;
Для Каждого СтрокаТаблицы Из Объект.Начисления Цикл
Если ПроверяемыеНачисления.Найти(СтрокаТаблицы.Начисление) = Неопределено Тогда
ПроверяемыеНачисления.Добавить(СтрокаТаблицы.Начисление);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаТаблицы Из Объект.НачисленияПерерасчет Цикл
Если ПроверяемыеНачисления.Найти(СтрокаТаблицы.Начисление) = Неопределено Тогда
ПроверяемыеНачисления.Добавить(СтрокаТаблицы.Начисление);
КонецЕсли;
КонецЦикла;
УстановитьПривилегированныйРежим(Истина);
Обязательное = УчетНДФЛРасширенный.ДатаВыплатыОбязательнаКЗаполнению(Объект.ПорядокВыплаты, ПроверяемыеНачисления);
ОбщегоНазначенияБЗККлиентСервер.УстановитьОбязательностьПоляВводаТаблицыФормы(
ЭтотОбъект,
"ПланируемаяДатаВыплаты",
Обязательное);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьУдержаний()
УдержанияДоступны = УдержанияДоступны();
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "УдержаноВсего", "Видимость", УдержанияДоступны);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "УдержанияИзменить", "Видимость", УдержанияДоступны);
КонецПроцедуры
&НаСервере
Функция УдержанияДоступны()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат Ложь;
Иначе
Возврат ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты);
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Функция ЭтоМежрасчетнаяВыплата(ПорядокВыплаты)
Возврат РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(ПорядокВыплаты);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьНачисленоУдержаноИтог(Форма, НачисленияРаботодателя = Неопределено)
Если Не Форма.ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если НачисленияРаботодателя = Неопределено Тогда
НачисленияРаботодателя = Новый Массив;
КонецЕсли;
Объект = Форма.Объект;
Форма.НачисленоИтог = 0;
Форма.НачисленоРаботодатель = 0;
Форма.НачисленоФСС = 0;
Для Каждого СтрокаТаблицы Из Объект.Начисления Цикл
Если СтрокаТаблицы.Начисление = Объект.ВидОплатыПособия Тогда
Форма.НачисленоФСС = Форма.НачисленоФСС + СтрокаТаблицы.Результат;
ИначеЕсли СтрокаТаблицы.Начисление = Объект.ВидОплатыЗаСчетРаботодателя
ИЛИ НачисленияРаботодателя.Найти(СтрокаТаблицы.Начисление) <> Неопределено Тогда
Форма.НачисленоРаботодатель = Форма.НачисленоРаботодатель + СтрокаТаблицы.Результат;
КонецЕсли;
КонецЦикла;
Форма.НачисленоИтог = Объект.Начисления.Итог("Результат");
Форма.НДФЛ = УчетНДФЛКлиентСервер.ИтоговаяСуммаНДФЛпоДокументу(Объект, "Налог");
Форма.ПрочиеУдержания = Объект.Удержания.Итог("Результат")
+ Объект.ПогашениеЗаймов.Итог("ПогашениеЗайма")
+ Объект.ПогашениеЗаймов.Итог("ПогашениеПроцентов")
+ Объект.ПогашениеЗаймов.Итог("НалогНаМатериальнуюВыгоду");
Форма.УдержаноИтог = Форма.НДФЛ + Форма.ПрочиеУдержания;
Форма.КорректировкаВыплаты = Объект.КорректировкиВыплаты.Итог("КорректировкаВыплаты");
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПерерасчетИтог(Форма)
Если Не Форма.ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Форма.ПерерасчетИтог = Форма.Объект.НачисленияПерерасчет.Итог("Результат");
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПредупреждениеДокументНеРассчитан(Форма)
Элементы = Форма.Элементы;
Элементы.ЗаполненностьДанныхИнфо.Видимость = Истина;
Элементы.ЗаполненностьДанныхИнформационныйТекст.Заголовок = УчетСреднегоЗаработкаКлиентСервер.ТекстПредупрежденияДокументНеРассчитан();
Элементы.ЗаполненностьДанныхКартинка.Картинка = БиблиотекаКартинок.Предупреждение;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьСвойстваПоляПервичногоБольничногоЛиста(Форма)
Форма.Элементы.НадписьПервичныйЛистокНетрудоспособности.Доступность = Форма.Объект.ЯвляетсяПродолжениемБолезни;
Если ЗначениеЗаполнено(Форма.Объект.ПервичныйБольничныйЛист) Тогда
Форма.НадписьПервичныйЛистокНетрудоспособности = Строка(Форма.Объект.ПервичныйБольничныйЛист);
Иначе
Форма.НадписьПервичныйЛистокНетрудоспособности = НСтр("ru = 'Выбрать больничный...'");
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьСвойстваПолейДоплатыЗаДниНетрудоспособности(Форма)
Если Не Форма.ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ПроцентДоплатыЗаДниНетрудоспособности",
"Доступность",
Форма.Объект.ДоплачиватьДоСреднегоЗаработка);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ВидРасчетаДоплаты",
"Доступность",
Форма.Объект.ДоплачиватьДоСреднегоЗаработка);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ВидРасчетаДоплаты",
"АвтоОтметкаНезаполненного",
Форма.Объект.ДоплачиватьДоСреднегоЗаработка);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ВидРасчетаДоплаты",
"ОтметкаНезаполненного",
Не ЗначениеЗаполнено(Форма.Объект.ВидРасчетаДоплаты));
КонецПроцедуры
&НаСервере
Процедура УстановитьПроцентДоплатыЗаДниНетрудоспособности()
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДоплатуЗаДниБолезни")
Или Не ЗначениеЗаполнено(Объект.Организация)
Или ЗначениеЗаполнено(Объект.ПроцентДоплатыЗаДниНетрудоспособности) Тогда
Возврат;
КонецЕсли;
Объект.ПроцентДоплатыЗаДниНетрудоспособности = РасчетЗарплатыРасширенный.ПроцентДоплатыЗаДниНетрудоспособности(Объект.Организация);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДатуНачалаПоловиннойОплаты()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Документы.БольничныйЛист.ЗаполнитьДатуНачалаПоловиннойОплаты(Объект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьПолейПоПервичномуБольничномуЛисту(Форма)
Если Не Форма.ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Поля = Новый Массив;
Поля.Добавить("ПроцентОплатыБезЛьгот");
Поля.Добавить("ОграничениеПособияБезЛьгот");
Поля.Добавить("ФинансированиеФедеральнымБюджетом");
Поля.Добавить("ДатаНачалаСобытия");
Поля.Добавить("ПроцентОплаты");
Поля.Добавить("ОграничениеПособия");
Поля.Добавить("УчитыватьЗаработокПредыдущихСтрахователей");
Поля.Добавить("РасчетПоПравилам2010Года");
ПоляДоступны = Не ЗначениеЗаполнено(Форма.Объект.ПервичныйБольничныйЛист);
Для Каждого Поле Из Поля Цикл
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Форма.Элементы, Поле, "Доступность", ПоляДоступны);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбработатьСообщенияПользователю()
Сообщения = ПолучитьСообщенияПользователю(Ложь);
Для Каждого Сообщение Из Сообщения Цикл
Если СтрНайти(Сообщение.Поле, "ПериодРегистрации") Тогда
Сообщение.Поле = "";
Сообщение.ПутьКДанным = "ПериодРегистрацииСтрокой";
КонецЕсли;
Если СтрНайти(Сообщение.Поле, "ПервичныйБольничныйЛист") Тогда
Сообщение.Поле = "";
Сообщение.ПутьКДанным = "НадписьПервичныйЛистокНетрудоспособности";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьРассчитыватьПоПравилам2010()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Доступен = Объект.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ПоБеременностиИРодам
И ЗначениеЗаполнено(Объект.ДатаНачалаСобытия)
И Объект.ДатаНачалаСобытия < УчетПособийСоциальногоСтрахованияКлиентСервер.ДатаОтдельногоРасчетаПособийПоМатеринству();
ПравоПросмотра = РегистрацияНачисленийДоступна И ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений;
Элементы.РасчетПоПравилам2010Года.Видимость = Доступен И ПравоПросмотра;
Если Не Доступен Тогда
Объект.РасчетПоПравилам2010Года = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПроцентОплатыИОграничениеПособия()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Документы.БольничныйЛист.ЗаполнитьПроцентОплатыИОграничениеПособия(Объект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьНадписьСтаж(Форма)
Если Не Форма.ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если Форма.ДляСотрудникаВведенСтраховойСтаж Тогда
Объект = Форма.Объект;
НадписьСтаж = НСтр("ru = 'Страховой стаж: лет - %1; месяцев - %2.'");
Если Объект.ФинансированиеФедеральнымБюджетом = ПредопределенноеЗначение("Перечисление.ОснованияФинансированияПособияФедеральнымБюджетом.ЗачетНестраховыхПериодов")
И Объект.ПричинаНетрудоспособности <> ПредопределенноеЗначение("Перечисление.ПричиныНетрудоспособности.ТравмаНаПроизводстве")
И ЗначениеЗаполнено(Объект.СтажРасширенныйЛет + Объект.СтажРасширенныйМесяцев) Тогда
НадписьСтаж = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НадписьСтаж, Объект.СтажРасширенныйЛет, Объект.СтажРасширенныйМесяцев);
Иначе
НадписьСтаж = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НадписьСтаж, Объект.СтажЛет, Объект.СтажМесяцев);
КонецЕсли;
ИначеЕсли Форма.ДоступноИзменение Тогда
НадписьСтаж = НСтр("ru = 'Ввести страховой стаж...'");
Иначе
НадписьСтаж = НСтр("ru = 'Страховой стаж не введен'");
КонецЕсли;
Форма.НадписьСтаж = НадписьСтаж;
КонецПроцедуры
&НаСервере
Процедура ОпределитьВариантДоплаты()
ВариантДоплаты = Документы.БольничныйЛист.ВариантДоплаты(Объект);
КонецПроцедуры
&НаСервере
Процедура ОтключитьНеприменимыеВариантыДоплаты()
Документы.БольничныйЛист.ОтключитьНеприменимыеВариантыДоплаты(Объект, ВариантДоплаты);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьПорядкаВыплаты()
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"ПорядокВыплаты",
"Доступность",
Не УчетПособийСоциальногоСтрахования.ИспользуетсяУсловиеИсчисления(Объект, "47")
Или Объект.ПорядокВыплаты <> Перечисления.ХарактерВыплатыЗарплаты.Межрасчет);
КонецПроцедуры
&НаСервере
Процедура УстановитьПорядокВыплатыУволенному()
Документы.БольничныйЛист.ЗаполнитьПорядокВыплатыУволенному(Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПослеИзмененияСведенийОРасчетеНДФЛ(АдресРезультата, ПустойПараметр) Экспорт
Если ТипЗнч(АдресРезультата) = Тип("Строка") И ЭтоАдресВременногоХранилища(АдресРезультата) Тогда
ОбновитьДанныеНДФЛНаСервере(АдресРезультата);
ОбновитьНачисленоУдержаноИтог(ЭтотОбъект, НачисленияРаботодателя());
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеНДФЛНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
Объект.НДФЛ.Загрузить(Параметр.НДФЛ);
Объект.ПримененныеВычетыНаДетейИИмущественные.Загрузить(Параметр.ПримененныеВычетыНаДетейИИмущественные);
ИзмененныеДанные.Загрузить(Параметр.ИзмененныеДанные);
Если ИзмененныеДанные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ОписаниеТаблицы = ОписаниеТаблицыНДФЛ();
РассчитатьВсеНаСервере(ОписаниеТаблицы);
КонецПроцедуры
&НаКлиенте
Процедура ПослеИзмененияСведенийОбУдержаниях(АдресРезультата, ПустойПараметр) Экспорт
Если ТипЗнч(АдресРезультата) = Тип("Строка") И ЭтоАдресВременногоХранилища(АдресРезультата) Тогда
ОбновитьДанныеУдержанийНаСервере(АдресРезультата);
ОбновитьНачисленоУдержаноИтог(ЭтотОбъект, НачисленияРаботодателя());
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеУдержанийНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
Объект.Удержания.Загрузить(Параметр.Удержания.Выгрузить());
Объект.ПогашениеЗаймов.Загрузить(Параметр.ПогашениеЗаймов.Выгрузить());
ИзмененныеДанные.Загрузить(Параметр.ИзмененныеДанные.Выгрузить());
Если ИзмененныеДанные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ОписаниеТаблицы = ОписаниеТаблицыУдержаний();
РассчитатьВсеНаСервере(ОписаниеТаблицы);
КонецПроцедуры
&НаСервере
Функция ДанныеКорректировокВыплаты()
Возврат РасчетЗарплатыРасширенныйФормы.ДанныеКорректировокВыплаты(ЭтаФорма);
КонецФункции
&НаКлиенте
Процедура ПриОкончанииРедактированияКорректировокВыплаты(АдресРезультата, ПустойПараметр) Экспорт
Если ТипЗнч(АдресРезультата) = Тип("Строка") И ЭтоАдресВременногоХранилища(АдресРезультата) Тогда
ОбновитьДанныеКорректировокВыплатыНаСервере(АдресРезультата);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеКорректировокВыплатыНаСервере(АдресВременногоХранилища)
РасчетЗарплатыРасширенныйФормы.ОбновитьДанныеКорректировокВыплаты(ЭтаФорма, АдресВременногоХранилища);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьЗначениеКорректировкиВыплаты()
КорректировкаВыплаты = Объект.КорректировкиВыплаты.Итог("КорректировкаВыплаты");
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьРасчетныхПолей()
ИменаЭлементов = Новый Массив;
ИменаЭлементов.Добавить("РасчетРезультата");
ИменаЭлементов.Добавить("РасчетРезультата2");
ИменаЭлементов.Добавить("Условия");
ИменаЭлементов.Добавить("ОплатаСтраница");
ИменаЭлементов.Добавить("НачисленияСтраница");
ИменаЭлементов.Добавить("НачисленияПерерасчетСтраница");
ИменаЭлементов.Добавить("РассчитатьЗарплату");
ИменаЭлементов.Добавить("КорректировкаВыплатыГруппа");
ИменаЭлементов.Добавить("Сторнировать");
ЗарплатаКадрыРасширенный.УстановитьОтображениеПолейМногофункциональныхДокументов(ЭтотОбъект, ИменаЭлементов);
ЗарплатаКадрыРасширенный.УстановитьВидимостьКомандПечатиМногофункциональногоДокумента(ЭтотОбъект);
Если ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений Тогда
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьУдержаний();
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтотОбъект, Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьВидимостьПолейНормыВремени(
ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Объект.РассчитатьЗарплату);
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтотОбъект, Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "РайонныйКоэффициентРФНаНачалоСобытия", "Видимость", ПолучитьФункциональнуюОпциюФормы("ПрименятьРайонныйКоэффициент"));
ЗарплатаКадрыРасширенный.УстановитьОтображениеГруппыФормы(Элементы, "РасчетРезультата", "ТолькоПросмотр", Истина);
ЗарплатаКадрыРасширенный.УстановитьОтображениеГруппыФормы(Элементы, "РасчетРезультата2", "ТолькоПросмотр", Истина);
УстановитьПоляИсправления(ЭтаФорма);
Элементы.НачисленияПроцентОплаты.Видимость = Элементы.НачисленияПодробно.Пометка;
Элементы.НачисленияПроцентОплатыБезЛьгот.Видимость = Элементы.НачисленияПодробно.Пометка;
Элементы.НачисленияОграничениеПособия.Видимость = Элементы.НачисленияПодробно.Пометка;
Элементы.НачисленияОграничениеПособияБезЛьгот.Видимость = Элементы.НачисленияПодробно.Пометка;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриУстановкеВидимостиРасчетныхПолейДокументаОплатыТруда(ЭтотОбъект);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.УстановитьДоступностьКорректировкиВыплаты(
ЭтаФорма, ИспользуетсяРасчетЗарплаты, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьКнопокЭЛН()
Элементы.ПолучитьИзФСС.Доступность = ЕстьПраваНаРедактированиеКадровыхДанных;
Элементы.ЗагрузитьИзФайла.Доступность = ЕстьПраваНаРедактированиеКадровыхДанных;
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей()
БылиОграничения = ОграниченияНаУровнеЗаписей;
ПрочитатьПраваНаДокумент();
Если БылиОграничения.ЧтениеБезОграничений <> ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений
Или БылиОграничения.ИзменениеБезОграничений <> ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений
Или БылиОграничения.ИзменениеКадровыхДанных <> ОграниченияНаУровнеЗаписей.ИзменениеКадровыхДанных Тогда
Объект.ДокументРассчитан = ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
Объект.Рассчитал = Неопределено;
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтотОбъект, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
ПолностьюОбновитьФорму(Ложь, Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовокФлажкаРассчитатьЗарплату()
Если ЗначениеЗаполнено(Объект.ИсправленныйДокумент) Тогда
Элементы.РассчитатьЗарплату.Заголовок = НСтр("ru = 'Рассчитать зарплату за период до начала больничного'");
Иначе
Элементы.РассчитатьЗарплату.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Рассчитать зарплату за %1'"), ЗарплатаКадрыКлиентСервер.ПолучитьПредставлениеМесяца(Объект.ПериодРегистрации));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовокСреднийЗаработокГруппа()
Если ПолучитьФункциональнуюОпцию("РассчитыватьОтдельноСреднийЗаработокФССДляБольничногоЗаСчетРаботодателя") Тогда
ЗаголовокГруппы = НСтр("ru = 'Средний заработок (больн. за счет раб.)'");
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СреднийЗаработокГруппа", "Заголовок", ЗаголовокГруппы);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойствоРассчитатьЗарплату(Кэш)
ДоступенРасчетЗарплаты = Документы.БольничныйЛист.ДоступенФлажокРассчитатьЗарплату(Объект, Кэш);
Если Не ДоступенРасчетЗарплаты Тогда
Объект.РассчитатьЗарплату = Ложь;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "РассчитатьЗарплату", "Доступность", ДоступенРасчетЗарплаты);
РассчитатьЗарплатуПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Функция ПериодРасчетаЗарплатыДоНачалаОтсутствия(Кэш)
УстановитьСвойствоРассчитатьЗарплату(Кэш);
Возврат Документы.БольничныйЛист.ПериодРасчетаЗарплатыДоНачалаОтсутствия(Объект, Кэш);
КонецФункции
&НаСервере
Процедура ЗаполнитьДанныеФормыПоОрганизации()
Если ЗначениеЗаполнено(Объект.Организация) Тогда
ОбменЛисткамиНетрудоспособностиФСС.ЗаполнитьПериодРегистрацииВБольничном(Объект);
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтотОбъект, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
КонецЕсли;
УстановитьОтветственныхЛиц();
КонецПроцедуры
&НаСервере
Функция СведенияОбНДФЛ(ФизическоеЛицо = Неопределено) Экспорт
ДополнительныеСведения = УчетНДФЛФормыРасширенный.ДополнительныеДанныеДляПолученияСведенийОДоходахНДФЛДокумента();
ДополнительныеСведения.МесяцНачисления = Объект.ПериодРегистрации;
ДополнительныеСведения.ПорядокВыплаты = Объект.ПорядокВыплаты;
ДополнительныеСведения.ПланируемаяДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
СведенияОДоходахНДФЛ = УчетНДФЛФормыРасширенный.СведенияОДоходахНДФЛДокумента(Объект, "Начисления,НачисленияПерерасчет", ДополнительныеСведения);
АдресСведенийОбНДФЛ = УчетНДФЛФормыРасширенный.СведенияОбНДФЛ(ЭтотОбъект);
ДанныеОбНДФЛ = ПолучитьИзВременногоХранилища(АдресСведенийОбНДФЛ);
ДанныеОбНДФЛ.Вставить("СведенияОДоходах", СведенияОДоходахНДФЛ.СведенияОДоходах);
ДанныеОбНДФЛ.Вставить("ВычетыКДоходам", СведенияОДоходахНДФЛ.ВычетыКДоходам);
Возврат ПоместитьВоВременноеХранилище(ДанныеОбНДФЛ, ЭтотОбъект.УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция СведенияОбУдержаниях() Экспорт
Возврат РасчетЗарплатыРасширенный.СведенияОбУдержаниях(ЭтотОбъект);
КонецФункции
&НаСервере
Процедура УстановитьВидимостьПредупрежденияОНезаполненномСтаже()
ТребуетсяВводСтажа = ИспользуетсяРасчетЗарплаты И Не ДляСотрудникаВведенСтраховойСтаж И ЗначениеЗаполнено(Объект.Сотрудник);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СтажиНеЗаданыГруппа", "Видимость", ТребуетсяВводСтажа);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОткрытьДенежноеСодержаниеЗавершение(РезультатРедактирования, ДополнительныеПараметры) Экспорт
Если РезультатРедактирования <> Неопределено Тогда
ТребуетсяОбновитьДанныеСреднегоЗаработка = Ложь;
ПодключитьОбработчикРасчетаБезВыводаСообщений();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьНастройки()
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтотОбъект, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
Элементы.НачисленияПроцентОплаты.Видимость = Элементы.НачисленияПодробно.Пометка;
Элементы.НачисленияПроцентОплатыБезЛьгот.Видимость = Элементы.НачисленияПодробно.Пометка;
Элементы.НачисленияОграничениеПособия.Видимость = Элементы.НачисленияПодробно.Пометка;
Элементы.НачисленияОграничениеПособияБезЛьгот.Видимость = Элементы.НачисленияПодробно.Пометка;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьБухучетРезультатовРасчетаНаСервере(ИсходныеДанные)
Кэш = Новый Соответствие;
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
ПериодРасчетаЗарплаты = ПериодРасчетаЗарплатыДоНачалаОтсутствия(Кэш);
ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты, Кэш);
МенеджерРасчета.НастройкиБухучета.ПроверятьНеобходимостьПересчетаНДФЛ = МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ;
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
МенеджерРасчета.ЗаполнитьНастройкиОбновленияБухучета(ИсходныеДанные);
МенеджерРасчета.ОбновитьБухучетРезультатовРасчета();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
РасчетЗарплатыРасширенныйФормы.УстановитьТекущуюСтрокуТаблицыФормы(ЭтотОбъект, ИсходныеДанные.ИмяИсходнойТаблицы, ИсходныеДанные.НомерСтрокиИсходнойТаблицы);
КонецПроцедуры
&НаСервере
Процедура УстановитьИнфоНадписьЗамещения()
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ЦепочкиДокументов") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ЦепочкиДокументовФормы");
Модуль.УстановитьИнфоНадписьЗамещения(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПорядокВыплатыПриИзмененииНаСервере()
Документы.БольничныйЛист.ЗаполнитьПланируемуюДатуВыплаты(Объект, ЭтотОбъект["НастройкиДатВыплаты"]);
Кэш = Новый Соответствие;
УстановитьВидимостьУдержаний();
УстановитьСвойствоРассчитатьЗарплату(Кэш);
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты();
ЗаполнитьИсключаемыеПериодыНаСервере();
КонецПроцедуры
&НаСервере
Процедура УстановитьОтветственныхЛиц()
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ПодписиДокументов.ЗаполнитьПодписиПоОрганизации(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПодключаемыеКоманды(УправляемаяФорма)
ЭДОБЗККлиентСервер.ОбновитьКоманды(УправляемаяФорма, УправляемаяФорма.Объект, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьИзмененныеДанныеПерерасчета(ТекущиеДанные) Экспорт
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура ПослеУдаленияПерерасчета() Экспорт
РассчитатьСотрудникаНаСервере();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтображениеНомераПервичногоДокумента(УправляемаяФорма)
ЗарплатаКадрыКлиентСервер.УстановитьОтображениеНомеровДокумента(УправляемаяФорма);
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыСпособРасчетовЗаСчетРаботодателя()
ПоказыватьГруппу = Не РаботаВБюджетномУчреждении И Не Объект.ЯвляетсяПродолжениемБолезни И Объект.СотрудникДоговорник
И Объект.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ОбщееЗаболевание;
Если ПоказыватьГруппу Тогда
ПоказыватьГруппу = Объект.ДатаНачалаОплаты < ДатаНачалаОплатыЗаСчетСФР
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппаСпособРасчетовЗаСчетРаботодателя", "Видимость", ПоказыватьГруппу);
КонецПроцедуры
#КонецОбласти
#Область Инициализация
СтарыеЗначенияКонтролируемыхПолей = Новый Соответствие;
#КонецОбласти