Больничный лист / Форма документа / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем СтарыеЗначенияКонтролируемыхПолей Экспорт;

&НаКлиенте
Перем ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки;

#КонецОбласти


#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ЭтоНовый = Параметры.Ключ.Пустая();
	
	// Заполнение списков выбора, которые не зависят от данных (могут использоваться при обновлении подсказок).
	ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ЗаполнитьСписокВыбораКодУсловийИсчисления(Элементы.УсловияИсчисленияКод1);
	ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ЗаполнитьСписокВыбораКодУсловийИсчисления(Элементы.УсловияИсчисленияКод2);
	ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ЗаполнитьСписокВыбораКодУсловийИсчисления(Элементы.УсловияИсчисленияКод3);
	ОбменЛисткамиНетрудоспособностиФСС.КодыПричинИсправления(Элементы.КодПричиныИсправленияЭЛН.СписокВыбора);
	ПрямыеВыплатыПособийСоциальногоСтрахованияФормы.ЗаполнитьСписокВыбораКодПричиныНетрудоспособностиРодственников(
		Элементы.ПериодыУходаЗаРодственникамиКодПричины);
	
	ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, "ПериодыУходаЗаРодственникамиНадписьЛет");
	ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Текст", НСтр("ru = 'лет'"));
	ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, "ПериодыУходаЗаРодственникамиНадписьМесяцев");
	ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Текст", НСтр("ru = 'мес'"));
	
	ИменаПолей = "ПериодыУходаЗаРодственникамиЕстьОшибка, ПериодыУходаЗаРодственникамиТекстОшибки";
	ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, ИменаПолей);
	ОбщегоНазначенияБЗК.ДобавитьОтборУсловногоОформления(ОформлениеКД, "Объект.ПериодыУходаЗаРодственниками.Ошибка", "=", Ложь);
	ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Видимость", Ложь);
	ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Отображать", Ложь);
	
	ИменаПолей = "ПериодыУходаЗаРодственникамиИспользованоДней, ПериодыУходаЗаРодственникамиДнейПоловиннойОплаты";
	ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, ИменаПолей);
	ОбщегоНазначенияБЗК.ДобавитьОтборУсловногоОформления(ОформлениеКД, "Объект.ПериодыУходаЗаРодственниками.КоличествоДнейИзменено", "=", Истина);
	ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Шрифт", Новый Шрифт(ШрифтыСтиля.ОбычныйШрифтТекста, , , Истина));
	
	ИменаПолей = "ПериодыУходаЗаРодственникамиОстатокДнейЗаСлучай, ПериодыУходаЗаРодственникамиОстатокДнейПоловиннойОплаты";
	ОформлениеКД = ОбщегоНазначенияБЗК.ДобавитьУсловноеОформление(ЭтотОбъект, ИменаПолей);
	ОбщегоНазначенияБЗК.ДобавитьОтборУсловногоОформления(ОформлениеКД, "Объект.ПериодыУходаЗаРодственниками.МаксимумДнейЗаСлучай", "=", 0);
	ОбщегоНазначенияБЗК.УстановитьПараметрУсловногоОформления(ОформлениеКД, "Текст", "-");
	
	// СтандартныеПодсистемы.ВерсионированиеОбъектов
	ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов
	
	// СтандартныеПодсистемы.Свойства
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
	УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
	// Конец СтандартныеПодсистемы.Свойства
	
	// ЗарплатаКадрыПодсистемы.ПодписиДокументов
	ПодписиДокументов.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец ЗарплатаКадрыПодсистемы.ПодписиДокументов
	
	РасчетЗарплатыРасширенныйФормы.ИнициализироватьМеханизмПересчетаДокументаПриРедактировании(ЭтотОбъект);
	
	Если ЭтоНовый Тогда
		ЗапланироватьПолноеОбновлениеСведенийДляФСС();
		ИспользуетсяРасчетЗарплаты = ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная");
		ОграниченияНаУровнеЗаписей = Новый ФиксированнаяСтруктура("ЧтениеБезОграничений, ИзменениеБезОграничений, ИзменениеКадровыхДанных", Ложь, Ложь, Ложь);
		ДоступноИзменение = Пользователи.РолиДоступны("ПолныеПрава,ДобавлениеИзменениеПособийФСС");
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	
	РасчетЗарплатыРасширенныйФормы.ДокументыПриСозданииНаСервере(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект));
	
	УстановитьПривилегированныйРежим(Ложь);
	
	ЗаполнитьИсключаемыеПериоды = ОбщегоНазначенияБЗККлиентСервер.ЗначениеСвойства(Параметры, "ЗаполнитьИсключаемыеПериоды");
	Если ЗаполнитьИсключаемыеПериоды = Истина Тогда
		ЗаполнитьПараметрыОплаты(Истина);
	КонецЕсли;
	
	УстановитьДоступностьПолейВводаНачислений();
	
	Если ЭтоНовый Тогда
		
		ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
		ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
		
		Параметры.Свойство("Основание", ОснованиеПрогулНеявка);
		
		ЗначенияДляЗаполнения = Новый Структура;
		ЗначенияДляЗаполнения.Вставить("Организация",   "Объект.Организация");
		ЗначенияДляЗаполнения.Вставить("МесяцРасчета",  "Объект.ПериодРегистрации");
		ЗначенияДляЗаполнения.Вставить("Ответственный", "Объект.Ответственный");
		Если ЗначениеЗаполнено(Объект.Организация) Тогда
			ФиксированныеЗначения = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Организация");
			ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтотОбъект, ЗначенияДляЗаполнения, ФиксированныеЗначения);
			ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтотОбъект, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
		Иначе
			ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтотОбъект, ЗначенияДляЗаполнения);
		КонецЕсли;
		
		УстановитьОтветственныхЛиц();
		ОбновитьГоловнуюОрганизацию();
		
		Если Параметры.Свойство("Сотрудник") И ЗначениеЗаполнено(Параметры.Сотрудник) Тогда
			Объект.Сотрудник = Параметры.Сотрудник;
		КонецЕсли;
		
		НачатьИнициализациюФормы();
		ДобавитьРеквизитыИЭлементыФормы();
		
		Документы.БольничныйЛист.ЗаполнитьПланируемуюДатуВыплаты(Объект, ЭтотОбъект["НастройкиДатВыплаты"]);
		
		ОбновитьСведенияДляФСС();
		ОбновитьФормуПослеЗагрузкиЭЛН(Истина, Истина, Истина);
		
	Иначе
		
		Если Параметры.Свойство("ВыполнитьПерезаполнениеСведенийОСреднемЗаработке") Тогда
			ТребуетсяОбновитьДанныеСреднегоЗаработка = Истина;
			ВыводитьСообщенияПриРасчете = Ложь;
			РассчитатьНаСервере();
		КонецЕсли;
		
	КонецЕсли;
	
	Если ИспользуетсяРасчетЗарплаты Тогда
		ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(
			ЭтотОбъект, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений, Ложь);
		
		Если Не ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений И Объект.ДокументРассчитан Тогда
			ТолькоПросмотр = Истина;
			ЭтотОбъект.Элементы.НадписьСтаж.Гиперссылка = Ложь;
		КонецЕсли;
	КонецЕсли;
	
	РасчетЗарплатыРасширенныйФормы.УстановитьДоступныеХарактерыВыплаты(Элементы);
	
	ЗагрузитьНастройки();
	
	ЕстьПравоИзменения = Не ТолькоПросмотр И (Элементы.Найти("ФормаПровести") <> Неопределено);
	ОбъектРассчитан = Объект.Начисления.Количество() > 0;
	
	РасчетНеобходимоВыполнить = ЕстьПравоИзменения
		И Не ОбъектРассчитан
		И Не Объект.Проведен
		И ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
	
	Элементы.РассчитываетсяЭЛНГруппа.Видимость = ЕстьПравоИзменения
		И Не ОбъектРассчитан
		И ЗначениеЗаполнено(Объект.НомерЛисткаНетрудоспособности)
		И СведенияОбЭЛН.ЭтоЭЛН
		И ЗначениеЗаполнено(Объект.Сотрудник)
		И ЗначениеЗаполнено(Объект.ДатаНачалаСобытия)
		И ЗначениеЗаполнено(Объект.ДатаОкончания)
		И Не ЗначениеЗаполнено(Объект.ПорядокВыплаты);
	
	Если ЭтоНовый
		И ЗначениеЗаполнено(Объект.ДатаНачалаСобытия)
		И ЗначениеЗаполнено(Объект.ДатаНачала)
		И ЗначениеЗаполнено(Объект.ДатаОкончания)
		И (ЗначениеЗаполнено(Объект.Сотрудник)
			Или ЗначениеЗаполнено(Объект.ИсправленныйДокумент)
			Или ЗначениеЗаполнено(Объект.ПервичныйБольничныйЛист)) Тогда
		РасчетНеобходимоВыполнить = Истина;
	КонецЕсли;
	
	Параметры.ПолучитьЭЛНИзФСС = СведенияОбЭЛН.ЭтоЭЛН
		И СведенияОбЭЛН.ДоступенИсходныйXML
		И ЗначениеЗаполнено(Объект.НомерЛисткаНетрудоспособности)
		И (ЗначениеЗаполнено(Объект.Организация) Или ЗначениеЗаполнено(СведенияОбЭЛН.Организация))
		И ЗначениеЗаполнено(СведенияОбЭЛН.ДатаОкончания)
		И Не ЗначениеЗаполнено(Объект.ДатаОкончания)
		И Не Объект.ПометкаУдаления;
	Если Параметры.ПолучитьЭЛНИзФСС Тогда
		РасчетНеобходимоВыполнить = Истина;
		Элементы.РассчитываетсяЭЛНГруппа.Видимость = Истина;
	КонецЕсли;
	
	Если Элементы.РассчитываетсяЭЛНГруппа.Видимость Тогда
		РасчетНеобходимоВыполнить = Истина;
		Элементы.Страницы.ТолькоПросмотр = Истина;
	КонецЕсли;
	
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
		Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужбаФормы");
		Модуль.УстановитьПараметрыВыбораСотрудников(ЭтотОбъект, "Сотрудник");
	КонецЕсли;
	
	ОкончательныйРасчетНДФЛ = Ложь;
	
	НеобходимоПерезаполнитьНачисления = РасчетНеобходимоВыполнить;
	ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьСостояниеКнопкиФормыРассчитать(ЭтотОбъект, РасчетНеобходимоВыполнить);
	
	ПериодыУходаЗаРодственникамиПодробноОбновитьВидимость();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// ПроцессыОбработкиДокументов
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
		МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
		МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
	КонецЕсли;
	// Конец ПроцессыОбработкиДокументов
	
	// БлокировкаИзмененияОбъектов
	БлокировкаИзмененияОбъектов.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	// Конец БлокировкаИзмененияОбъектов
	
	// ЭДОБЗК
	ЭДОБЗК.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка, Объект);
	// Конец ЭДОБЗК
	
	// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
		МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов");
		МодульУчетОригиналовПервичныхДокументов.ПриСозданииНаСервере_ФормаДокумента(ЭтотОбъект, Элементы.Шапка);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
	
	// ИнтеграцияС1САрхивом 
	Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
		МодульОбменСАрхивом = ОбщегоНазначения.ОбщийМодуль("ОбменСАрхивом");
		МодульОбменСАрхивом.ПриСозданииНаСервере(ЭтотОбъект);
	КонецЕсли;
	// Конец ИнтеграцияС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САрхивом_Нажатие(Элемент)
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС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>.'");
			КонецЕсли;
			ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				ЗаголовокНадписи,
				ПолучитьНавигационнуюСсылку(СведенияОбЭЛН.Больничный),
				СведенияОбЭЛН.БольничныйПредставление,
				Объект.НомерЛисткаНетрудоспособности);
			Элементы.СсылкиБольничныхЭтогоЭЛН.Видимость = Истина;
			Элементы.СсылкиБольничныхЭтогоЭЛН.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(ЗаголовокНадписи);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ЕстьПособияЗаСчетФСС()
	Если ЕстьПособияЗаСчетФСС = Неопределено Тогда
		ЕстьПособияЗаСчетФСС = ПрямыеВыплатыПособийСоциальногоСтрахования.КоллекцияСодержитПособияЗаСчетФСС(
			Объект.Начисления.Выгрузить(, "Начисление").ВыгрузитьКолонку("Начисление"));
	КонецЕсли;
	Возврат ЕстьПособияЗаСчетФСС;
КонецФункции

&НаСервере
Функция ЭтоНСПЗ()
	Возврат Документы.БольничныйЛист.ЭтоНСПЗ(Объект);
КонецФункции

#КонецОбласти

#Область СЭДО

&НаСервере
Процедура ОбновитьЭлементыСЭДО()
	// СЭДО по выплате пособий - Только для вступивших в прямые выплаты.
	Если Не ИспользоватьПрямыеВыплатыФСС Тогда
		Элементы.СЭДОГруппа.Видимость = Ложь;
		Возврат;
	КонецЕсли;
	// СЭДО - только для ЭЛН.
	Если Не СведенияОбЭЛН.ЭтоЭЛН Тогда
		Элементы.СЭДОГруппа.Видимость = Ложь;
		Возврат;
	КонецЕсли;
	// СЭДО с 2022 года.
	Если ЗначениеЗаполнено(Объект.ДатаНачалаСобытия)
		И Объект.ДатаНачалаСобытия < СЭДОФСС.ДатаНачалаПроактивныхВыплат() Тогда
		Элементы.СЭДОГруппа.Видимость = Ложь;
		Возврат;
	КонецЕсли;
	
	Элементы.СЭДОГруппа.Видимость = Истина;
	
	ЕстьВходящийЗапрос            = ЗначениеЗаполнено(ВходящийЗапрос);
	ЕстьОтветНаЗапрос             = ЗначениеЗаполнено(ОтветНаЗапрос);
	ЕстьСообщениеОСтраховомСлучае = ЗначениеЗаполнено(СообщениеОСтраховомСлучае);
	ЕстьДанныеСФРДляРасчетаПособия = ЗначениеЗаполнено(ДанныеСФРДляРасчетаПособия);
	Выплачивается                 = Объект.ПособиеВыплачиваетсяФСС И Не СведенияОбЭЛН.Аннулирован;
	
	Элементы.ВходящийЗапросОтсутствуетГруппа.Видимость = Выплачивается И Не ЕстьВходящийЗапрос И Не ЕстьОтветНаЗапрос;
	Элементы.СообщитьОСтраховомСлучаеГруппа.Видимость  = Не ЕстьСообщениеОСтраховомСлучае;
	Элементы.СообщениеОСтраховомСлучае.Видимость       = ЕстьСообщениеОСтраховомСлучае;
	Элементы.ДанныеСФРДляРасчетаПособия.Видимость      = ЕстьДанныеСФРДляРасчетаПособия;
	Элементы.ВходящийЗапрос.Видимость                  = ЕстьВходящийЗапрос;
	Элементы.ОтветНаЗапросОтсутствуетГруппа.Видимость  = Не ЕстьОтветНаЗапрос И ЕстьВходящийЗапрос;
	Элементы.ОтветНаЗапросГруппа.Видимость             = ЕстьОтветНаЗапрос;
	
	Если СведенияОбЭЛН.Аннулирован Тогда
		Элементы.АннулированГруппа.Видимость = Истина;
		Если ЗначениеЗаполнено(СведенияОбЭЛН.ДубликатБольничный) Тогда
			Элементы.ДубликатНадпись.Видимость = Истина;
			Элементы.ДубликатНадпись.Заголовок = СтрШаблон(
				НСтр("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") Тогда
		// Для 65+ не требуется отправка реестров ЭЛН.
		ОтправитьЭЛН   = Ложь;
		ИсправлениеЭЛН = Ложь;
		
	ИначеЕсли Не ЕстьПособияЗаСчетФСС() Тогда
		// Если пособие не назначается то сведения для ЭЛН направлять не нужно.
		// Фонд не требует представления документов, если не было исчислено пособие.
		ОтправитьЭЛН   = Ложь;
		ИсправлениеЭЛН = Ложь;
		
	ИначеЕсли Не ЭтоНСПЗ() Тогда
		// Для обычных пособий сдаваемых в электронной форме не требуется отправлять сведения об ЭЛН,
		// т.к. данные для ЭЛН заполняются из других источников.
		ОтправитьЭЛН   = Ложь;
		ИсправлениеЭЛН = Ложь;
		
	ИначеЕсли ЗначениеЗаполнено(ВходящийЗапрос) Тогда
		// Для пособий отправляемых через СЭДО не требуется отправлять сведения об ЭЛН,
		// т.к. данные для ЭЛН заполняются из данных ответа на запрос СЭДО.
		ОтправитьЭЛН   = Ложь;
		ИсправлениеЭЛН = Ложь;
		
	ИначеЕсли Не ЗначениеЗаполнено(СведенияОбЭЛН.ПринятыйРеестр) Тогда
		// Требуется первичная отправка ЭЛН.
		ОтправитьЭЛН   = Истина;
		ИсправлениеЭЛН = Ложь;
		
	Иначе
		
		ПодготовитьДанныеПринятогоРеестраЭЛН();
		Если СведенияОбЭЛН.ДанныеПринятогоРеестра.ОсновноеМестоРаботы = Неопределено Тогда
			ИзменилисьДанные = Истина; // Нештатная ситуация - строка ЭЛН исчезла из принятого реестра.
		Иначе
			ДанныеБольничного = ОбменЛисткамиНетрудоспособностиФСС.ДанныеБольничногоОтправляемыеВФСС(Объект);
			ИзменилисьДанные = Не ОбщегоНазначенияБЗК.ЗначенияСовпадают(СведенияОбЭЛН.ДанныеПринятогоРеестра, ДанныеБольничного);
		КонецЕсли;
		
		ОтправитьЭЛН   = ИзменилисьДанные;
		ИсправлениеЭЛН = ИзменилисьДанные;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьЭлементыЭЛН()
	
	Элементы.ПодменюЭЛНВыгрузитьФайл.Видимость           = СведенияОбЭЛН.ДоступенИсходный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();
	УстановитьДоступностьПолейВводаНачислений();
	НастроитьЭлементыДополненияПричиныНетрудоспособности();
	
	Если ИспользуетсяРасчетЗарплаты Тогда
		ОпределитьВариантДоплаты();
		ОтключитьНеприменимыеВариантыДоплаты();
	КонецЕсли;
	ОбновитьЭлементыЗаработкаСтраницыГлавное();
	ОбновитьЭлементыСпособРасчетовЗаСчетРаботодателя();
	
КонецПроцедуры

&НаСервере
Процедура НазначитьПособиеПриИзмененииНаСервере()
	
	ЗаполнитьСсылкиНачислений(Ложь);
	
	Кэш = Новый Соответствие;
	
	Если Объект.НазначитьПособие Тогда
		// Пользователь включил флажок "Оплачивать".
		// 1. Полное заполнение параметров оплаты.
		Объект.АвтозаполнениеПериодовОплаты = Истина;
		Документы.БольничныйЛист.ЗаполнитьПараметрыОплаты(Объект, Кэш);
		// 2. Если после заполнения флажок "Оплачивать" оказался отключен, то он принудительно снова включается.
		Если Не Объект.НазначитьПособие Тогда
			Объект.НазначитьПособие = Истина;
			Объект.АвтозаполнениеПериодовОплаты = Ложь;
		КонецЕсли;
	Иначе
		// Пользователь отключил флажок "Оплачивать". Период оплаты очищается,
		// а таблица исключаемых периодов НЕ очищается, поскольку она может содержать причины неоплаты пособия.
		Объект.АвтозаполнениеПериодовОплаты = Ложь;
		Объект.ДатаНачалаОплаты             = Неопределено;
		Объект.ДатаОкончанияОплаты          = Неопределено;
		Объект.ДнейОплаты                   = 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 дней;'"),
		ДнейПростоя) + ": ";
	ЗаголовокНадписи = СтроковыеФункции.ФорматированнаяСтрока(ЗаголовокНадписи);
	Элементы.ПериодыПростояЗаголовок.Заголовок = ЗаголовокНадписи;
	Элементы.ПериодыПростояВШапкеЗаголовок.Заголовок = ЗаголовокНадписи;
	ТекстНадписи = СтрСоединить(ПредставленияПериодовПростоя, ", ");
	Элементы.ПериодыПростояНадпись.Заголовок = ТекстНадписи;
	Элементы.ПериодыПростояВШапкеНадпись.Заголовок = ТекстНадписи;
КонецПроцедуры

&НаСервере
Функция ПредставлениеНеучтенныхПериодовПростоя(Кэш)
	// Отсутствуют предупреждения по исключаемым периодам проверим по периодам простоя
	// Сравниваются 2 массива дней - Объект.ИсключаемыеПериоды и ДатыКИсключению.
	ДатыКУчетуПростоя = Документы.БольничныйЛист.ДатыКУчетуПростоя(Объект, Кэш);
	Если ДатыКУчетуПростоя.Колонки.Найти("Найдена") <> Неопределено Тогда
		Возврат Неопределено; // Повторный вызов.
	КонецЕсли;
	ДатыКУчетуПростоя.Колонки.Добавить("Найдена", Новый ОписаниеТипов("Булево"));
	УчтенныеДаты = ОбщегоНазначенияБЗК.ТаблицаДатИзТаблицыПериодов(
		Объект.ПериодыПростоя, Объект.ДатаНачала, Объект.ДатаОкончания);
	УчтенныеДаты.Свернуть("Дата");
	УчтенныеДаты.Сортировать("Дата");
	УчтенныеДаты.Колонки.Добавить("Избыточна", Новый ОписаниеТипов("Булево"));
	Для Каждого УчтеннаяДата Из УчтенныеДаты Цикл
		ДатаПростоя = ДатыКУчетуПростоя.Найти(УчтеннаяДата.Дата, "Дата");
		Если ДатаПростоя = Неопределено Тогда
			УчтеннаяДата.Избыточна = Истина;
		Иначе
			ДатаПростоя.Найдена = Истина;
		КонецЕсли;
	КонецЦикла;
	// Отличия - повод нажать кнопку "Обновить" или ввести исправление больничного.
	Представление = "";
	// Формирование html-представления периодов в разрезе документов.
	НеучтенныеДаты = ДатыКУчетуПростоя.Скопировать(Новый Структура("Найдена", Ложь));
	Если НеучтенныеДаты.Количество() > 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ГодаПриИзмененииНаСервере()
	ТребуетсяПрочитатьФлажокУчитыватьЗаработокПредыдущихСтрахователей = Истина;
	Объект.ФиксПериодРасчетаСреднегоЗаработка = Ложь;
	ЗаполнитьПериодРасчетаСреднегоЗаработка();
	ОбновитьДанныеДляРасчетаСреднего();
	ОбновитьЭлементыЗаработкаСтраницыГлавное();
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры

&НаСервере
Функция ПредставлениеНеучтенныхИсключаемыхПериодов(Кэш)
	// Сравниваются 2 массива дней - Объект.ИсключаемыеПериоды и ДатыКИсключению.
	ДатыКИсключению = Документы.БольничныйЛист.ДатыКИсключению(Объект, Кэш);
	Если ДатыКИсключению.Колонки.Найти("Найдена") <> Неопределено Тогда
		Возврат Неопределено; // Повторный вызов.
	КонецЕсли;
	ДатыКИсключению.Колонки.Добавить("Найдена", Новый ОписаниеТипов("Булево"));
	ИсключенныеДаты = Документы.БольничныйЛист.ИсключенныеДаты(Объект, Кэш);
	ИсключенныеДаты.Колонки.Добавить("Избыточна", Новый ОписаниеТипов("Булево"));
	Для Каждого ИсключеннаяДата Из ИсключенныеДаты Цикл
		Если ИсключеннаяДата.Регистрировать Тогда
			Продолжить; // Неоплачиваемый больничный.
		КонецЕсли;
		ДатаКИсключению = ДатыКИсключению.Найти(ИсключеннаяДата.Дата, "Дата");
		Если ДатаКИсключению = Неопределено Тогда
			// Дата отпуска или простоя избыточно учтена в больничном (избыточно добавлена в исключаемые периоды).
			ИсключеннаяДата.Избыточна = Истина;
		Иначе
			// Отметка даты что она учтена и в больничном и в отпусках (с какой причиной учтена - не важно).
			ДатаКИсключению.Найдена = Истина;
		КонецЕсли;
	КонецЦикла;
	// Отличия - повод нажать кнопку "Обновить" или ввести исправление больничного.
	Представление = "";
	// Формирование html-представления периодов в разрезе документов.
	НеучтенныеДатыКИсключению = ДатыКИсключению.Скопировать(Новый Структура("Найдена", Ложь));
	Если НеучтенныеДатыКИсключению.Количество() > 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 = 'Средний заработок (больн. за счет раб.)'");
		ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СреднийЗаработокГруппа", "Заголовок", ЗаголовокГруппы);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьСвойствоРассчитатьЗарплату(Кэш)
	ДоступенРасчетЗарплаты = Документы.БольничныйЛист.ДоступенФлажокРассчитатьЗарплату(Объект, Кэш);
	Если Не ДоступенРасчетЗарплаты Тогда
		Объект.РассчитатьЗарплату = Ложь;
	КонецЕсли;
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "РассчитатьЗарплату", "Доступность", ДоступенРасчетЗарплаты);
	РассчитатьЗарплатуПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Функция ПериодРасчетаЗарплатыДоНачалаОтсутствия(Кэш)
	УстановитьСвойствоРассчитатьЗарплату(Кэш);
	Возврат Документы.БольничныйЛист.ПериодРасчетаЗарплатыДоНачалаОтсутствия(Объект, Кэш);
КонецФункции

&НаСервере
Процедура ЗаполнитьДанныеФормыПоОрганизации()
	
	Если ЗначениеЗаполнено(Объект.Организация) Тогда
		ОбменЛисткамиНетрудоспособностиФСС.ЗаполнитьПериодРегистрацииВБольничном(Объект);
		ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтотОбъект, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
	КонецЕсли;

	УстановитьОтветственныхЛиц();
	
КонецПроцедуры

&НаСервере
Функция СведенияОбНДФЛ(ФизическоеЛицо = Неопределено) Экспорт
	
	ДополнительныеСведения = УчетНДФЛФормыРасширенный.ДополнительныеДанныеДляПолученияСведенийОДоходахНДФЛДокумента();
	ДополнительныеСведения.МесяцНачисления = Объект.ПериодРегистрации;
	ДополнительныеСведения.ПорядокВыплаты = Объект.ПорядокВыплаты;
	ДополнительныеСведения.ПланируемаяДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
	
	СведенияОДоходахНДФЛ = УчетНДФЛФормыРасширенный.СведенияОДоходахНДФЛДокумента(Объект, "Начисления,НачисленияПерерасчет", ДополнительныеСведения);	
	АдресСведенийОбНДФЛ = УчетНДФЛФормыРасширенный.СведенияОбНДФЛ(ЭтотОбъект);
	
	ДанныеОбНДФЛ = ПолучитьИзВременногоХранилища(АдресСведенийОбНДФЛ);
	ДанныеОбНДФЛ.Вставить("СведенияОДоходах", СведенияОДоходахНДФЛ.СведенияОДоходах);
	ДанныеОбНДФЛ.Вставить("ВычетыКДоходам", СведенияОДоходахНДФЛ.ВычетыКДоходам);
	
	Возврат ПоместитьВоВременноеХранилище(ДанныеОбНДФЛ, ЭтотОбъект.УникальныйИдентификатор);
	
КонецФункции

&НаСервере
Функция СведенияОбУдержаниях() Экспорт
	
	Возврат РасчетЗарплатыРасширенный.СведенияОбУдержаниях(ЭтотОбъект);
	
КонецФункции

&НаСервере
Процедура УстановитьВидимостьПредупрежденияОНезаполненномСтаже()
	
	ТребуетсяВводСтажа = ИспользуетсяРасчетЗарплаты И Не ДляСотрудникаВведенСтраховойСтаж И ЗначениеЗаполнено(Объект.Сотрудник);
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СтажиНеЗаданыГруппа", "Видимость", ТребуетсяВводСтажа);
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьОткрытьДенежноеСодержаниеЗавершение(РезультатРедактирования, ДополнительныеПараметры) Экспорт
	
	Если РезультатРедактирования <> Неопределено Тогда
		ТребуетсяОбновитьДанныеСреднегоЗаработка = Ложь;
		ПодключитьОбработчикРасчетаБезВыводаСообщений();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНастройки()

	Если РегистрацияНачисленийДоступна Тогда
		РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
		РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтотОбъект, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
		
		Элементы.НачисленияПроцентОплаты.Видимость              = Элементы.НачисленияПодробно.Пометка;
		Элементы.НачисленияПроцентОплатыБезЛьгот.Видимость      = Элементы.НачисленияПодробно.Пометка;
		Элементы.НачисленияОграничениеПособия.Видимость         = Элементы.НачисленияПодробно.Пометка;
		Элементы.НачисленияОграничениеПособияБезЛьгот.Видимость = Элементы.НачисленияПодробно.Пометка;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьБухучетРезультатовРасчетаНаСервере(ИсходныеДанные)
	Кэш = Новый Соответствие;
	МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
	ПериодРасчетаЗарплаты = ПериодРасчетаЗарплатыДоНачалаОтсутствия(Кэш);
	ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты, Кэш);
	МенеджерРасчета.НастройкиБухучета.ПроверятьНеобходимостьПересчетаНДФЛ = МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ;
	ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
	
	МенеджерРасчета.ЗаполнитьНастройкиОбновленияБухучета(ИсходныеДанные);
	МенеджерРасчета.ОбновитьБухучетРезультатовРасчета();
	РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
	
	РасчетЗарплатыРасширенныйФормы.УстановитьТекущуюСтрокуТаблицыФормы(ЭтотОбъект, ИсходныеДанные.ИмяИсходнойТаблицы, ИсходныеДанные.НомерСтрокиИсходнойТаблицы);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьИнфоНадписьЗамещения()
	
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ЦепочкиДокументов") Тогда
		Модуль = ОбщегоНазначения.ОбщийМодуль("ЦепочкиДокументовФормы");
		Модуль.УстановитьИнфоНадписьЗамещения(ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПорядокВыплатыПриИзмененииНаСервере()
	
	Документы.БольничныйЛист.ЗаполнитьПланируемуюДатуВыплаты(Объект, ЭтотОбъект["НастройкиДатВыплаты"]);
	
	Кэш = Новый Соответствие;
	УстановитьВидимостьУдержаний();
	УстановитьСвойствоРассчитатьЗарплату(Кэш);
	УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты();
	
	ЗаполнитьИсключаемыеПериодыНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура УстановитьОтветственныхЛиц()
	
	Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
		Возврат;
	КонецЕсли;
	
	// ЗарплатаКадрыПодсистемы.ПодписиДокументов
	ПодписиДокументов.ЗаполнитьПодписиПоОрганизации(ЭтотОбъект);
	// Конец ЗарплатаКадрыПодсистемы.ПодписиДокументов
	
КонецПроцедуры

// ЭДОБЗК

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПодключаемыеКоманды(УправляемаяФорма)
	ЭДОБЗККлиентСервер.ОбновитьКоманды(УправляемаяФорма, УправляемаяФорма.Объект, Истина);
КонецПроцедуры

// Конец ЭДОБЗК

&НаКлиенте
Процедура ДобавитьИзмененныеДанныеПерерасчета(ТекущиеДанные) Экспорт
	
	РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
		ИзмененныеДанные,
		"Начисления",
		Объект.ФизическоеЛицо,
		ТекущиеДанные.Сотрудник,
		ТекущиеДанные.Начисление);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеУдаленияПерерасчета() Экспорт
	РассчитатьСотрудникаНаСервере();
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтображениеНомераПервичногоДокумента(УправляемаяФорма)
	
	ЗарплатаКадрыКлиентСервер.УстановитьОтображениеНомеровДокумента(УправляемаяФорма);
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьЭлементыСпособРасчетовЗаСчетРаботодателя()

	ПоказыватьГруппу = Не РаботаВБюджетномУчреждении И Не Объект.ЯвляетсяПродолжениемБолезни И Объект.СотрудникДоговорник
		И Объект.ПричинаНетрудоспособности = Перечисления.ПричиныНетрудоспособности.ОбщееЗаболевание;
		
	Если ПоказыватьГруппу Тогда
		ПоказыватьГруппу = Объект.ДатаНачалаОплаты < ДатаНачалаОплатыЗаСчетСФР
	КонецЕсли;
		
	ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
		"ГруппаСпособРасчетовЗаСчетРаботодателя", "Видимость", ПоказыватьГруппу);

КонецПроцедуры

#КонецОбласти


#Область Инициализация

СтарыеЗначенияКонтролируемыхПолей = Новый Соответствие;

#КонецОбласти

Связанные материалы