Увольнение списком / Форма строки / Модуль формы

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

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

&НаКлиенте
Перем СотрудникУдаляемойСтроки;

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

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

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

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

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

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

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

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

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

// Обработчик подсистемы "ПодписиДокументов".
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементПриИзменении(Элемент) 
	ПодписиДокументовКлиент.ПриИзмененииПодписывающегоЛица(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементНажатие(Элемент) 
	ПодписиДокументовКлиент.РасширеннаяПодсказкаНажатие(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

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

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

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	ОрганизацияПриИзмененииНаСервере();
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

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

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

#Область РеквизитыПервичногоДокумента

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

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

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

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

&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	Оповещение = Новый ОписаниеОповещения("ДатаПервичногоДокументаНачалоВыбораЗавершение", ЭтотОбъект);
	ПоказатьВводДаты(Оповещение, ?(ЗначениеЗаполнено(Объект.ДатаПервичногоДокумента), Объект.ДатаПервичногоДокумента, Объект.Дата), НСтр("ru='Дата первичного документа'"), ЧастиДаты.Дата);
КонецПроцедуры

&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбораЗавершение(Дата, ДополнительныеПараметры) Экспорт
	
	Если ЗначениеЗаполнено(Дата) Тогда
		Объект.ДатаПервичногоДокумента = Дата;
		ДатаПервичногоДокументаПредставление = Формат(Дата,"ДФ=dd.MM.yyyy");
		Модифицированность = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаПервичногоДокументаОчистка(Элемент, СтандартнаяОбработка)
	Объект.ДатаПервичногоДокумента = Дата(1,1,1);
	Модифицированность = Истина;
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура МесяцНачисленияСтрокойНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
	
	ПриИзмененииМесяцаНачисления();
	
КонецПроцедуры

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

&НаКлиенте
Процедура МесяцНачисленияСтрокойАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачисленияСтрокойОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ДатаУвольненияПриИзменении(Элемент)
	
	ОбновитьРасчетДенежногоСодержания = Истина;
	ДатаУвольненияПриИзмененииНаСервере();
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОснованиеУвольненияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	КадровыйУчетКлиент.ОбработкаВыбораОснованиеУвольнения(Элемент, ВыбранноеЗначение, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияДнейЧасовВыходногоПособияПриИзменении()
	
	ДнейЧасовВыходногоПособияПриИзмененииНаСервере();
	ВыполнитьРасчетНачислений();
	
	ОтключитьОбработчикОжиданияФормы("ОбработчикОжиданияДнейЧасовВыходногоПособияПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияКоличествоМесяцевВыплатыДенежногоСодержанияПриИзменении()
	
	КоличествоМесяцевВыплатыДенежногоСодержанияПриИзмененииНаСервере();
	ВыполнитьРасчетНачислений();
	
	ОтключитьОбработчикОжиданияФормы("ОбработчикОжиданияКоличествоМесяцевВыплатыДенежногоСодержанияПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияИзменениеПараметровРасчетаВыходногоПособия()
	
	РассчитатьДнейЧасовВыходногоПособия();
	ДнейЧасовВыходногоПособияПриИзмененииНаСервере();
	ВыполнитьРасчетНачислений();
	
	ОтключитьОбработчикОжиданияФормы("ОбработчикОжиданияИзменениеПараметровРасчетаВыходногоПособия");
	
КонецПроцедуры

&НаКлиенте
Процедура ДнейЧасовВыходногоПособияПриИзменении(Элемент)
	
	ПодключитьОбработчикОжиданияФормы("ОбработчикОжиданияДнейЧасовВыходногоПособияПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура ДнейЧасовТрехКратногоШестикратногоВыходногоПособияПриИзменении(Элемент)
	
	ПодключитьОбработчикОжиданияФормы("ОбработчикОжиданияДнейЧасовВыходногоПособияПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура СреднемесячноеКоличествоДнейЧасовПриИзменении(Элемент)
	
	ПодключитьОбработчикОжиданияФормы("ОбработчикОжиданияИзменениеПараметровРасчетаВыходногоПособия");
	
КонецПроцедуры

&НаКлиенте
Процедура КратностьВыходногоПособияПриИзменении(Элемент)
	
	ПодключитьОбработчикОжиданияФормы("ОбработчикОжиданияИзменениеПараметровРасчетаВыходногоПособия");
	
КонецПроцедуры

&НаКлиенте
Процедура ПределДоходаНеОблагаемогоНДФЛПриИзменении(Элемент)
		
	Объект.ФиксПределДоходаНеОблагаемогоНДФЛ = Истина;
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

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

&НаКлиенте
Процедура УчитыватьЗаработокПредыдущихСтрахователейПриИзменении(Элемент)
	
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

&НаКлиенте
Процедура ИсточникСреднегоПриИзменении(Элемент)
	
	ВыполнитьРасчетНачислений();	
	ОбновитьЭлементыРасчетаСреднегоЗаработкаФСС();
	
КонецПроцедуры

&НаКлиенте
Процедура ПериодРасчетаСреднегоЗаработкаПервыйГодПриИзменении(Элемент)
	
	ПриИзмененииГодовПериодаРасчета(БылПервыйГод, "ПериодРасчетаСреднегоЗаработкаПервыйГод");
	БылПервыйГод = Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод;
	
КонецПроцедуры

&НаКлиенте
Процедура ПериодРасчетаСреднегоЗаработкаВторойГодПриИзменении(Элемент)
	
	ПриИзмененииГодовПериодаРасчета(БылВторойГод, "ПериодРасчетаСреднегоЗаработкаВторойГод");
	БылВторойГод = Объект.ПериодРасчетаСреднегоЗаработкаВторойГод;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииГодовПериодаРасчета(ГодДоИзменения, ИмяРеквизита)
	
	Отказ = Ложь;
	
	Если Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод >= Объект.ПериодРасчетаСреднегоЗаработкаВторойГод Тогда
		// Ошибка настройки периода
		Отказ = Истина;
	КонецЕсли;
	
	Если Объект.ПериодРасчетаСреднегоЗаработкаВторойГод >= Год(Объект.ДатаУвольнения) Тогда
		Отказ = Истина;
	КонецЕсли;
	
	Если Отказ Тогда
		Объект[ИмяРеквизита] = ГодДоИзменения;
		Возврат;
	КонецЕсли;
	
	Объект.ФиксПериодРасчетаСреднегоЗаработкаСФР =
		Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод <> Объект.ПериодРасчетаСреднегоЗаработкаВторойГод - 1
		Или Объект.ПериодРасчетаСреднегоЗаработкаВторойГод <> Год(Объект.ДатаУвольнения) - 1;

	ПерезаполнятьСреднийЗаработокСФР = Истина;
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура КоличествоМесяцевВыплатыДенежногоСодержанияПриИзменении(Элемент)
	
	ПодключитьОбработчикОжиданияФормы("ОбработчикОжиданияКоличествоМесяцевВыплатыДенежногоСодержанияПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура ДолжностьЗамещаласьМенее12МесяцевПриИзменении(Элемент)
	
	ОбновитьРасчетДенежногоСодержания = Истина;
	ВыполнитьРасчетНачислений();

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

&НаКлиенте
Процедура ПризнакКомпенсацииОтпускаПриИзменении(Элемент)
	
	ПризнакКомпенсацииОтпускаПриИзмененииНаСервере();
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ВидРасчетаКомпенсацииОсновногоОтпускаПриИзменении(Элемент)
	
	ВидРасчетаКомпенсацииОсновногоОтпускаПриИзмененииНаСервере();
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыходноеПособиеПриИзменении(Элемент)
	
	УстановитьИспользованиеСреднечасовогоЗаработка();	
	
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

&НаКлиенте
Процедура УчитыватьМРОТПриОплатеПоСреднемуЗаработкуПриИзменении(Элемент)
	
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

&НаКлиенте
Процедура ДоначислитьЗарплатуПриНеобходимостиПриИзменении(Элемент)
	
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура Подключаемый_ПорядокВыплатыПриИзменении(Элемент)
	
	ПорядокВыплатыПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПланируемаяДатаВыплатыПриИзменении(Элемент)
	
	ВыполнитьРасчетНачислений();
	УстановитьВидимостьКолонокПрогрессивногоНалога(Объект.ПланируемаяДатаВыплаты);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ДокументРассчитанПриИзменении(Элемент)
	ДокументРассчитанПриИзменении();
КонецПроцедуры

&НаКлиенте
Процедура Сверхурочно1_5ПриИзменении(Элемент)
	ВыполнитьРасчетНачислений();
КонецПроцедуры

&НаКлиенте
Процедура Сверхурочно2ПриИзменении(Элемент)
	ВыполнитьРасчетНачислений();
КонецПроцедуры

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

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

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

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

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

#Область КадровыеРешения

&НаКлиенте
Процедура Подключаемый_РешениеИнфоНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
	
	КадровыеРешенияКлиент.ОбработкаНавигационнойСсылкиРешения(ЭтотОбъект, НавигационнаяСсылка, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура Подключаемый_КоличествоДнейЧасовКомпенсацииПриУвольнении(Элемент)
	
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КомпенсацияЗаНеотработанныеДниЧасыПриУвольнении(Элемент)
	
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура МесяцНачалаРасчетовСтрокойНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
	
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОбработчикОжиданияМесяцНачалаРасчетовПриИзменении()
	
	ВыполнитьРасчетНачислений();
	
	ОтключитьОбработчикОжиданияФормы("ОбработчикОжиданияМесяцНачалаРасчетовПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачалаРасчетовСтрокойАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура МесяцНачалаРасчетовСтрокойОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	
	ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
	
КонецПроцедуры

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

// ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки

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

&НаКлиенте
Процедура НаименованиеДокументаПриИзменении(Элемент)
	
	ЭлектронныеТрудовыеКнижкиКлиент.НаименованиеДокументаПриИзменении(Объект.Организация, "Увольнение", Объект.НаименованиеДокумента);
	
КонецПроцедуры

&НаКлиенте
Процедура НаименованиеДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ЭлектронныеТрудовыеКнижкиКлиент.НаименованиеДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура НаименованиеДокументаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ЭлектронныеТрудовыеКнижкиКлиент.НаименованиеДокументаОбработкаВыбора(
		Объект.НаименованиеДокумента, ВыбранноеЗначение, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура НаименованиеДокументаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	
	ЭлектронныеТрудовыеКнижкиКлиент.НаименованиеДокументаАвтоПодбор(
		Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура НаименованиеВторогоДокументаОснованияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ЭлектронныеТрудовыеКнижкиКлиент.НаименованиеДокументаОбработкаВыбора(
		Объект.НаименованиеВторогоДокументаОснования, ВыбранноеЗначение, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

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

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

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

// Конец ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки

// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()

	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
		МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент");
		МодульУчетОригиналовПервичныхДокументовКлиент.ОткрытьМенюВыбораСостояния(ЭтотОбъект,Элементы["ДекорацияСостояниеОригинала"]);
	КонецЕсли;
	
КонецПроцедуры
//Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыДополнительныеОтпуска

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

&НаКлиенте
Процедура ДополнительныеОтпускаВидРасчетаКомпенсацииПриИзменении(Элемент)
	
	РассчитатьСохраняемоеДенежноеСодержание();
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисления

&НаКлиенте
Процедура НачисленияПриИзменении(Элемент)
	НачисленияПриИзмененииНаСервере();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура НачисленияПослеУдаления(Элемент)
	РассчитатьСотрудника(СотрудникУдаляемойСтроки, КадровыйУчетРасширенныйКлиентСервер.ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецПроцедуры

&НаКлиенте
Процедура НачисленияРезультатПриИзменении(Элемент)
	ОбновитьНачисленоИтог(ЭтотОбъект, НачисленияГрупп());
КонецПроцедуры

&НаКлиенте
Процедура НачисленияПериодДействияПриИзменении(Элемент)
	ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры

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

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

&НаКлиенте
Процедура НачисленияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура НачисленияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПособия

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

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

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

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

&НаКлиенте
Процедура ПособияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	Если НоваяСтрока Тогда
		Элементы.Пособия.ТекущиеДанные.Сотрудник = Объект.Сотрудник;
	КонецЕсли;

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

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

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

&НаКлиенте
Процедура ПособияПослеУдаления(Элемент) 
	РассчитатьСотрудника(СотрудникУдаляемойСтроки, КадровыйУчетРасширенныйКлиентСервер.ОписаниеТаблицыПособия(РегистрацияНачисленийДоступна));
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ПособияПериодДействияПриИзменении(Элемент)
	ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.Пособия.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПособияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ПособияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПособияПерерасчет

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

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

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

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

&НаКлиенте
Процедура ПособияПерерасчетПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	Если НоваяСтрока Тогда
		Элементы.ПособияПерерасчет.ТекущиеДанные.Сотрудник = Объект.Сотрудник;
	КонецЕсли;

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

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

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

&НаКлиенте
Процедура ПособияПерерасчетПослеУдаления(Элемент) 
	РассчитатьСотрудника(СотрудникУдаляемойСтроки, КадровыйУчетРасширенныйКлиентСервер.ОписаниеТаблицыПособияПерерасчеты(РегистрацияНачисленийДоступна));
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ПособияПерерасчетПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ПособияПерерасчетПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыУдержания

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

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

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

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

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

	РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтотОбъект, "Удержания", Элементы.Удержания.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура УдержанияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыНдфл

&НаКлиенте
Процедура НДФЛПриИзменении(Элемент)
	УстановитьСвойствоДокументРассчитан();
КонецПроцедуры

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

&НаКлиенте
Процедура НДФЛПередНачаломИзменения(Элемент, Отказ)
	// Механизм закладки примененные вычеты.
	УчетНДФЛКлиент.НДФЛПередНачаломИзменения(ЭтотОбъект, Элементы.НДФЛ.ТекущиеДанные, Отказ);
КонецПроцедуры

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

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

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПримененныеВычетыКДоходам

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПримененныеВычетыНаДетейИИмущественные

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

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

&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПередУдалением(Элемент, Отказ)
	
	УчетНДФЛКлиент.МожноИзменятьПримененныеВычеты(ЭтотОбъект, Отказ);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	УчетНДФЛКлиент.ВычетыПриНачалеРедактирования(Элемент.ТекущиеДанные, НоваяСтрока, Элементы.НДФЛ.ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	Если ОтменаРедактирования Тогда
		Возврат;
	КонецЕсли;
	
	ВычетыПриОкончанииРедактирования(Элемент.ТекущиеДанные, ОтменаРедактирования, "ИдентификаторСтрокиНДФЛ");
	ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ();
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисленияПерерасчет

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

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

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

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

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

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

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

&НаКлиенте
Процедура НачисленияПерерасчетПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
	
	Если ОтменаРедактирования Тогда
		Возврат;
	КонецЕсли;
	
	ДобавитьИзмененныеДанныеПерерасчета(Элемент.ТекущиеДанные);
	
КонецПроцедуры

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

&НаКлиенте
Процедура НачисленияПерерасчетПослеУдаления(Элемент)
	ПослеУдаленияПерерасчета();
КонецПроцедуры

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

&НаКлиенте
Процедура НачисленияПерерасчетРезультатПриИзменении(Элемент)
	ОбновитьПерерасчетИтог(ЭтотОбъект);
КонецПроцедуры

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

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

&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияПриИзменении(Элемент)
	ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры

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

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

&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПогашениеЗаймов

&НаКлиенте
Процедура ПогашениеЗаймовПриИзменении(Элемент)
	
	ПогашениеЗаймовПриИзмененииНаСервере();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПогашениеЗаймовПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	ОбновитьУдержаноИтог(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПогашениеЗаймовПослеУдаления(Элемент)
	
	ОбновитьУдержаноИтог(ЭтотОбъект);
	
КонецПроцедуры

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыВзносы

&НаКлиенте
Процедура ВзносыПриИзменении(Элемент)
	УстановитьСвойствоДокументРассчитан();
КонецПроцедуры

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

&НаКлиенте
Процедура ВзносыДатаПолученияДоходаПриИзменении(Элемент)
	ДанныеТекущейСтроки = Элементы.Взносы.ТекущиеДанные;
	УчетСтраховыхВзносовКлиент.ВзносыДатаПолученияДоходаСтрокойПриИзменении(ДанныеТекущейСтроки, "ДатаПолученияДохода", "ДатаПолученияДоходаСтрокой", Модифицированность);
КонецПроцедуры

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

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

&НаКлиенте
Процедура ВзносыДатаПолученияДоходаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ВзносыДатаПолученияДоходаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыКорректировкиВыплаты

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыЛьготы

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЛьготыДатаОкончанияПриИзменении(Элемент)
	
	ОбновитьНачисленоИтог(ЭтотОбъект, НачисленияГрупп());
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыКадровыйРезерв

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыУправленческиеНачисления

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура РасчетДенежногоСодержанияПриИзменении(Элемент)
	
	ОбновитьРасчетДенежногоСодержания = Истина;
	РасчетДенежногоСодержанияПриИзмененииНаСервере();
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ ПОДСИСТЕМЫ "АНАЛИЗ ТЕКУЧЕСТИ ПЕРСОНАЛА"

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

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

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

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

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

&НаКлиенте
Процедура ПричинаУвольненияОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

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

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

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

#Область ОбработчикиКомандФормы

// Конец ИнтеграцияС1САрхивом

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ОбновитьПодключаемыеКоманды(ЭтотОбъект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// СтандартныеПодсистемы.Свойства
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
	УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.Свойства

#Область ОбработчикиСобытийПроцессыОбработкиДокументов

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
	ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
	ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправлению(Команда)
	ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправлению(ЭтотОбъект);
КонецПроцедуры

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

// БлокировкаИзмененияОбъектов

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

// Конец БлокировкаИзмененияОбъектов

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОткрытьСреднийЗаработокВыходногоПособияЗавершение(РезультатРедактирования, ДополнительныеПараметры) Экспорт	

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

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

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

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

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

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

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

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

	Если РасчетПоДенежномуСодержанию Тогда
		НазначениеРасчетаСтрока = "ЕжегодныйОтпуск"
	КонецЕсли;
	
	Возврат НазначениеРасчетаСтрока;
КонецФункции

&НаСервере
Функция ВидаРасчетаСодержитПоказатель(ВидРасчета, Показатель)
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Ссылка", ВидРасчета);
	Запрос.УстановитьПараметр("Показатель", Показатель);
	Запрос.Текст =
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	НачисленияПоказатели.Показатель КАК Показатель
		|ИЗ
		|	ПланВидовРасчета.Начисления.Показатели КАК НачисленияПоказатели
		|ГДЕ
		|	НачисленияПоказатели.Ссылка = &Ссылка
		|	И НачисленияПоказатели.Показатель = &Показатель
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ ПЕРВЫЕ 1
		|	УдержанияПоказатели.Показатель
		|ИЗ
		|	ПланВидовРасчета.Удержания.Показатели КАК УдержанияПоказатели
		|ГДЕ
		|	УдержанияПоказатели.Ссылка = &Ссылка
		|	И УдержанияПоказатели.Показатель = &Показатель";
	
	УстановитьПривилегированныйРежим(Истина);
	РезультатЗапроса = Запрос.Выполнить();
	УстановитьПривилегированныйРежим(Ложь);
	
	Возврат Не РезультатЗапроса.Пустой();
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция РасчетДенежногоСодержанияРедактировался(ДенежноеСодержание)

	Для каждого СтрокаТЧ Из ДенежноеСодержание Цикл
		Если СтрокаТЧ.ФиксРасчет Тогда
			Возврат Истина;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Ложь;

КонецФункции

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОК(Команда)
	
	ЗавершитьРедактированиеСтрокиДокумента();
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ПересчитатьПределДоходаНеОблагаемогоНДФЛ(Команда)
	
	Объект.ФиксПределДоходаНеОблагаемогоНДФЛ = Ложь;
	РассчитатьПределДоходаНеОблагаемогоНДФЛ();
	ВыполнитьРасчетНачислений();
	
КонецПроцедуры

#Область Подключаемый_КадровыйРезерв

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

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

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

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

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

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

// ИнтеграцияС1САрхивом

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграцииС1САрхивом(Команда)
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
		МодульОбменСАрхивомКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСАрхивомКлиент");
		МодульОбменСАрхивомКлиент.ВыполнитьПодключаемуюКоманду(Команда, ЭтотОбъект, Объект);
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ИнтеграцияС1САрхивом_Нажатие(Элемент)
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
		МодульОбменСАрхивомКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСАрхивомКлиент");
		МодульОбменСАрхивомКлиент.Нажатие(Элемент, ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

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

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

#Область СлужебныеПроцедурыИФункции

// СтандартныеПодсистемы.Свойства 

&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
	УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры

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

&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()

	УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);

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

// Конец СтандартныеПодсистемы.Свойства

// СтандартныеПодсистемы.КонтрольВеденияУчета

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

// Конец СтандартныеПодсистемы.КонтрольВеденияУчета

#Область Подключаемый_КадровыйРезерв

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

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

#Область ПриПолученииДанныхНаСервере

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаписатьИЗакрытьНаКлиенте(Результат, ДополнительныеПараметры) Экспорт 
	
	ПараметрыЗаписи = Новый Структура("РежимЗаписи", ?(Объект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
	ЗаписатьНаКлиенте(Истина, ПараметрыЗаписи);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОчиститьРассчитанныеДанныеНаКлиенте()
	
	ОчиститьРассчитанныеДанные();
	
КонецПроцедуры

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

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

#Область ИсправлениеДокументов

&НаКлиенте
Процедура УстановитьПоляИсправленияНаКлиенте() Экспорт
	
	УстановитьПоляИсправления(ЭтаФорма);

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПоляИсправления(Форма)

	ИсправлениеДокументовЗарплатаКадрыКлиентСервер.УстановитьПоляИсправления(Форма);
	
КонецПроцедуры

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

#Область ЗаполнениеИРасчетНачислений

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

&НаКлиенте
Процедура РассчитатьНачисленияНаКлиенте()
	
	Если ПодключенОбработчикОжидания("РассчитатьНачисленияНаКлиенте") Тогда
		
		ОчиститьСообщения();
		ВыполнитьРасчетНачисленийНаСервере();
		
		ОтключитьОбработчикОжиданияФормы("РассчитатьНачисленияНаКлиенте");
		
	КонецЕсли;
	
КонецПроцедуры

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


#Область РассчитатьНачисленияНаСервере

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

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

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

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

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

&НаСервере
Функция ИспользоватьУдержания(ПризнакКомпенсацииУдержания)
	Возврат ПризнакКомпенсацииУдержания = Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.УдержатьЗаИспользованныеАвансом
		И СпособУдержанияИзлишнеНачисленныхОтпускных <> Перечисления.СпособыУдержанияИзлишнеНачисленныхОтпускных.СторнированиеРанееНачисленныхСумм;
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьКомпенсацииЗаОтпуск(ТаблицаНачислений, МенеджерРасчета, ДополнительныеВидыРасчета, ЗначенияПоказателейДляКомпенсаций = Неопределено)
	
	ДатаКомпенсации = НачалоДня(Объект.ДатаУвольнения);
	Если Не ЗначениеЗаполнено(Объект.ДатаУвольнения) Тогда
		ДатаКомпенсации = НачалоДня(Объект.ПериодРегистрации);
	КонецЕсли;
	
	ПоказательДней = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.КоличествоДнейКомпенсации");
	ПоказательСреднийЗаработок = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СреднийЗаработокОбщий");
	ПоказательДенежноеСодержание = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СохраняемоеДенежноеСодержание");
	ПоказательМесячноеДенежноеСодержание = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.МесячноеДенежноеСодержание");
	
	ЗначениеПоказателяУчитыватьМРОТ = ?(Объект.УчитыватьМРОТПриОплатеПоСреднемуЗаработку, 1, 0);
	ПоказательУчитыватьМРОТ = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.УчитыватьМРОТ");
	
	ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
	ДополнительныеПараметры.Индексации = Объект.ДанныеОбИндексации;
	ДополнительныеПараметры.ДатаНачалаСобытия = Объект.ДатаУвольнения + 86400;
	ДополнительныеПараметры.НачалоПериода = Объект.ПериодРасчетаСреднегоЗаработкаНачало;
	ДополнительныеПараметры.ОкончаниеПериода = Объект.ПериодРасчетаСреднегоЗаработкаОкончание;
	ДополнительныеПараметры.ПоЧасам = КадровыйУчетРасширенныйКлиентСервер.ЭтоСреднечасовойЗаработокВДокументеУвольнение();
	
	ПоКалендарнымДням = ОстаткиОтпусков.ОписаниеВидаОтпуска(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"), ОтпускВРабочихДняхПоДоговору).СпособРасчетаПоКалендарнымДням;
	ЗначенияПоказателейСреднегоЗаработка = Неопределено;
	ДатаНачалаРаздельногоРасчетаРКСН = УчетНДФЛРасширенный.ДатаЗаконаПроРКиЕАЭС();
	
	Если Объект.ПризнакКомпенсацииУдержанияОтпуска = Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.КомпенсироватьНеИспользованные Тогда				
		Если Объект.ДнейКомпенсацииУдержанияОтпуска > 0 Тогда
				
			Если ПоКалендарнымДням Тогда
				ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;
			Иначе
				ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоШестидневке;
			КонецЕсли;
			
			НовыйИнтервал = ТаблицаНачислений.Добавить();
			НовыйИнтервал.Сотрудник = Объект.Сотрудник;
			НовыйИнтервал.Начисление = Объект.ВидРасчетаКомпенсацииУдержанияОтпуска;
			НовыйИнтервал.ДатаНачала = ДатаКомпенсации;
			НовыйИнтервал.ДатаОкончания	= ДатаКомпенсации;
			НовыйИнтервал.ПериодРегистрации = Объект.ПериодРегистрации;
			НовыйИнтервал.Дополнительно = Новый Структура;
			НовыйИнтервал.Дополнительно.Вставить("НачалоРасчетногоПериода", Объект.ПериодРасчетаСреднегоЗаработкаНачало);
			НовыйИнтервал.Дополнительно.Вставить("ОкончаниеРасчетногоПериода", Объект.ПериодРасчетаСреднегоЗаработкаОкончание);
			МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательДней, Объект.ДнейКомпенсацииУдержанияОтпуска);
			Если Объект.РасчетДенежногоСодержания Тогда
				МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательДенежноеСодержание, Объект.СохраняемоеДенежноеСодержание);
				МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательМесячноеДенежноеСодержание, Объект.МесячноеДенежноеСодержание);
				ЗначенияПоказателейСреднегоЗаработка = ЗначенияПоказателейДляКомпенсаций;
			Иначе
				Значение = ЗначениеСреднегоЗаработкаДляКомпенсацииОтпуска(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"));
				МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСреднийЗаработок, Значение);
				ЗначенияПоказателейСреднегоЗаработка = УчетСреднегоЗаработкаКлиентСервер.ЗначенияПоказателейСреднегоЗаработкаОбщего(Объект.СреднийЗаработокОбщий, Объект.ОтработанноеВремяДляСреднегоОбщий, ДополнительныеПараметры);
			КонецЕсли;
			МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательУчитыватьМРОТ, ЗначениеПоказателяУчитыватьМРОТ);
			Если Не Объект.РасчетДенежногоСодержания И ПолучитьФункциональнуюОпцию("ИндексироватьСреднийЗаработокЧастично") Тогда
				УчетСреднегоЗаработка.ДобавитьЗначенияПоказателейЧастичнойИндексацииОтпусков(Объект, МенеджерРасчета, НовыйИнтервал, ПоКалендарнымДням);
			КонецЕсли;
			
			//Дополнительные начисления долей РК, СН
			ВидыРасчетаДолейРКСН = ДополнительныеВидыРасчета.Получить(Объект.ВидРасчетаКомпенсацииУдержанияОтпуска);
			Если ВидыРасчетаДолейРКСН <> Неопределено И Объект.ПланируемаяДатаВыплаты >= ДатаНачалаРаздельногоРасчетаРКСН Тогда
				Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК, Объект.ПланируемаяДатаВыплаты) Тогда
					НоваяСтрока = ТаблицаНачислений.Добавить();
					ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
					НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК;
					РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
				КонецЕсли;
				
				Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН, Объект.ПланируемаяДатаВыплаты) Тогда
					НоваяСтрока = ТаблицаНачислений.Добавить();
					ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
					НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН;
					РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
				КонецЕсли;
			Иначе
				НулевыеЗначенияПоказателейРКСН = Справочники.ПоказателиРасчетаЗарплаты.НулевыеЗначенияПоказателейРКСН();
				РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НовыйИнтервал, МенеджерРасчета, НулевыеЗначенияПоказателейРКСН);	
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	ОтборСтрок = Новый Структура("ПризнакКомпенсацииУдержания");
	ОтборСтрок.ПризнакКомпенсацииУдержания = Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.КомпенсироватьНеИспользованные;
	НайденныеСтроки = Объект.ДополнительныеОтпуска.НайтиСтроки(ОтборСтрок);
	Для Каждого СтрокаОтпуска Из НайденныеСтроки Цикл
		Если СтрокаОтпуска.ДнейКомпенсацииУдержания = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		ПолучатьЗначенияПоказателейСреднего = Ложь;
		Если ПоКалендарнымДням <> ОстаткиОтпусков.ОписаниеВидаОтпуска(СтрокаОтпуска.ВидОтпуска, ОтпускВРабочихДняхПоДоговору).СпособРасчетаПоКалендарнымДням Тогда
			ПоКалендарнымДням = Не ПоКалендарнымДням;
			ПолучатьЗначенияПоказателейСреднего = Истина;
		ИначеЕсли ЗначенияПоказателейСреднегоЗаработка = Неопределено Тогда
			ПолучатьЗначенияПоказателейСреднего = Истина;		
		КонецЕсли;
		
		Если ПолучатьЗначенияПоказателейСреднего Тогда
			Если ПоКалендарнымДням Тогда
				ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням;
			Иначе
				ДополнительныеПараметры.СпособРасчетаОтпуска = Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоШестидневке;
			КонецЕсли;
			ЗначенияПоказателейСреднегоЗаработка = УчетСреднегоЗаработкаКлиентСервер.ЗначенияПоказателейСреднегоЗаработкаОбщего(Объект.СреднийЗаработокОбщий, Объект.ОтработанноеВремяДляСреднегоОбщий, ДополнительныеПараметры);
		КонецЕсли;
		
		НовыйИнтервал = ТаблицаНачислений.Добавить();
		НовыйИнтервал.Сотрудник = Объект.Сотрудник;
		НовыйИнтервал.Начисление = СтрокаОтпуска.ВидРасчетаКомпенсацииУдержания;
		НовыйИнтервал.ДатаНачала = ДатаКомпенсации;
		НовыйИнтервал.ДатаОкончания = ДатаКомпенсации;
		НовыйИнтервал.ПериодРегистрации = Объект.ПериодРегистрации;
		МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательДней, СтрокаОтпуска.ДнейКомпенсацииУдержания);
		Если Объект.РасчетДенежногоСодержания Тогда
			МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательДенежноеСодержание, Объект.СохраняемоеДенежноеСодержание);
			МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательМесячноеДенежноеСодержание, Объект.МесячноеДенежноеСодержание);
			ЗначенияПоказателейСреднегоЗаработка = ЗначенияПоказателейДляКомпенсаций;
		Иначе
			Значение = ЗначениеСреднегоЗаработкаДляКомпенсацииОтпуска(СтрокаОтпуска.ВидОтпуска);
			МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательСреднийЗаработок, Значение);
		КонецЕсли;
		МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, ПоказательУчитыватьМРОТ, ЗначениеПоказателяУчитыватьМРОТ);
		Если Не Объект.РасчетДенежногоСодержания И ПолучитьФункциональнуюОпцию("ИндексироватьСреднийЗаработокЧастично") Тогда
			УчетСреднегоЗаработка.ДобавитьЗначенияПоказателейЧастичнойИндексацииОтпусков(Объект, МенеджерРасчета, НовыйИнтервал, ПоКалендарнымДням);
		КонецЕсли;
		//Дополнительные начисления долей РК, СН
		ВидыРасчетаДолейРКСН = ДополнительныеВидыРасчета.Получить(СтрокаОтпуска.ВидРасчетаКомпенсацииУдержания);
		Если ВидыРасчетаДолейРКСН <> Неопределено И Объект.ПланируемаяДатаВыплаты >= ДатаНачалаРаздельногоРасчетаРКСН Тогда
			Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК, Объект.ПланируемаяДатаВыплаты) Тогда
				НоваяСтрока = ТаблицаНачислений.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
				НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиРК;
				РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
			КонецЕсли;
			
			Если РасчетЗарплатыРасширенный.ЗаполнятьНачислениеДолиРКСН(ЗначенияПоказателейСреднегоЗаработка, ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН, Объект.ПланируемаяДатаВыплаты) Тогда
				НоваяСтрока = ТаблицаНачислений.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрока, НовыйИнтервал);
				НоваяСтрока.Начисление = ВидыРасчетаДолейРКСН.ВидРасчетаДолиСН;
				РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НоваяСтрока, МенеджерРасчета, ЗначенияПоказателейСреднегоЗаработка);
			КонецЕсли;
		Иначе
			НулевыеЗначенияПоказателейРКСН = Справочники.ПоказателиРасчетаЗарплаты.НулевыеЗначенияПоказателейРКСН();
			РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(НовыйИнтервал, МенеджерРасчета, НулевыеЗначенияПоказателейРКСН);	
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьКомпенсациюНеИспользованныхОтгулов(ТаблицаНачислений, МенеджерРасчета, КомпенсируемыеДниОтгулов, КомпенсируемыеЧасыОтгулов)
	
	Если Объект.ДниНакопленныхОтгулов = 0
		И Объект.ЧасыНакопленныхОтгулов = 0 Тогда
		
		Возврат;
	КонецЕсли;
	
	ОстатокДней = Объект.ДниНакопленныхОтгулов;
	ОстатокЧасов = Объект.ЧасыНакопленныхОтгулов;
	
	//Компенсация по Объект.ОтработанныеДни
	Для Каждого ОтработанныйДень Из Объект.ОтработанныеДни Цикл
		
		МесяцОтработанногоДня = НачалоМесяца(ОтработанныйДень.Дата);
		КомпенсацияДня = ?(ОтработанныйДень.Часы <> 0, Ложь, Истина);
		
		Если КомпенсацияДня Тогда
			СоответствиеКомпенсации = КомпенсируемыеДниОтгулов;
			ВидРасчетаКомпенсацииОтгула = Объект.ВидРасчетаКомпенсацияНеИспользованныхДнейОтдыха;
			ЗначениеДнейЧасов = 1;
			ОстатокДней = ОстатокДней - ЗначениеДнейЧасов;	
		Иначе
			СоответствиеКомпенсации = КомпенсируемыеЧасыОтгулов;
			ВидРасчетаКомпенсацииОтгула = Объект.ВидРасчетаКомпенсацияНеИспользованныхЧасовОтдыха;
			ЗначениеДнейЧасов = ОтработанныйДень.Часы;
			ОстатокЧасов = ОстатокЧасов - ЗначениеДнейЧасов;
		КонецЕсли;
		
		Если СоответствиеКомпенсации.Получить(МесяцОтработанногоДня) = Неопределено Тогда
			СоответствиеКомпенсации.Вставить(МесяцОтработанногоДня, ТаблицаКомпенсируемыхОтгулов());
			СтрокаКомпенсацииОтгулов = ДобавитьСтрокуКомпенсацииОтгулов(ТаблицаНачислений, МенеджерРасчета, МесяцОтработанногоДня, ВидРасчетаКомпенсацииОтгула);
		КонецЕсли;
		
		ТаблицаПериода = СоответствиеКомпенсации.Получить(МесяцОтработанногоДня);
		НоваяСтрока = ТаблицаПериода.Добавить();
		НоваяСтрока.Период = МесяцОтработанногоДня;
		НоваяСтрока.Дата = ОтработанныйДень.Дата;
		НоваяСтрока.Значение = ЗначениеДнейЧасов;
			
	КонецЦикла;
	
	Если ОстатокДней = 0 И ОстатокЧасов = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
		|	ДанныеОбИспользованииОтгулов.Регистратор КАК Регистратор
		|ПОМЕСТИТЬ ВТРегистраторыИспользованияОтгулов
		|ИЗ
		|	РегистрНакопления.ДанныеОбИспользованииОтгулов КАК ДанныеОбИспользованииОтгулов
		|ГДЕ
		|	(ДанныеОбИспользованииОтгулов.ОтработанныйДень В (&ОтработанныеДни)
		|			ИЛИ ДанныеОбИспользованииОтгулов.ВидДвижения = &ВидДвиженияРасход
		|				И ДанныеОбИспользованииОтгулов.Период < &ДатаУвольнения)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ДниЧасыОтгулов.Период КАК Дата,
		|	НАЧАЛОПЕРИОДА(ДниЧасыОтгулов.Период, МЕСЯЦ) КАК Период,
		|	СУММА(ДниЧасыОтгулов.Дни) КАК Дни,
		|	СУММА(ДниЧасыОтгулов.Часы) КАК Часы
		|ИЗ
		|	РегистрНакопления.ДниЧасыОтгулов КАК ДниЧасыОтгулов
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТРегистраторыИспользованияОтгулов КАК ВТРегистраторыИспользованияОтгулов
		|		ПО ДниЧасыОтгулов.Регистратор = ВТРегистраторыИспользованияОтгулов.Регистратор
		|ГДЕ
		|	ДниЧасыОтгулов.Сотрудник = &Сотрудник
		|	И ВТРегистраторыИспользованияОтгулов.Регистратор ЕСТЬ NULL
		|	И ДниЧасыОтгулов.ВидДвижения = &ВидДвиженияПриход
		|	И ДниЧасыОтгулов.Период < &ДатаУвольнения
		|
		|СГРУППИРОВАТЬ ПО
		|	ДниЧасыОтгулов.Период,
		|	НАЧАЛОПЕРИОДА(ДниЧасыОтгулов.Период, МЕСЯЦ)
		|
		|УПОРЯДОЧИТЬ ПО
		|	Период УБЫВ,
		|	Дата УБЫВ
		|ИТОГИ ПО
		|	Период";
	
	Запрос.УстановитьПараметр("ВидДвиженияПриход", ВидДвиженияНакопления.Приход);
	Запрос.УстановитьПараметр("ВидДвиженияРасход", ВидДвиженияНакопления.Расход);
	Запрос.УстановитьПараметр("ДатаУвольнения", Объект.ДатаУвольнения);
	Запрос.УстановитьПараметр("Сотрудник", Объект.Сотрудник);
	Запрос.УстановитьПараметр("ОтработанныеДни", Объект.ОтработанныеДни.Выгрузить(, "Дата"));
	
	РезультатЗапроса = Запрос.Выполнить();	
	ВыборкаИтоги = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока ВыборкаИтоги.Следующий() Цикл
		
		ТаблицаКомпенсируемыеДнейОтгулов = КомпенсируемыеДниОтгулов.Получить(ВыборкаИтоги.Период);
		ТаблицаКомпенсируемыеЧасовОтгулов = КомпенсируемыеЧасыОтгулов.Получить(ВыборкаИтоги.Период);
		
		Если ОстатокДней > 0 И ВыборкаИтоги.Дни > 0 Тогда	
			Если ТаблицаКомпенсируемыеДнейОтгулов = Неопределено Тогда
				ТаблицаКомпенсируемыеДнейОтгулов = ТаблицаКомпенсируемыхОтгулов();
				КомпенсируемыеДниОтгулов[ВыборкаИтоги.Период] = ТаблицаКомпенсируемыеДнейОтгулов;
				СтрокаКомпенсацииОтгулов = ДобавитьСтрокуКомпенсацииОтгулов(ТаблицаНачислений, МенеджерРасчета, ВыборкаИтоги.Период, Объект.ВидРасчетаКомпенсацияНеИспользованныхДнейОтдыха);
			КонецЕсли;
		КонецЕсли;
		
		Если ОстатокЧасов > 0 И ВыборкаИтоги.Часы > 0 Тогда
			Если ТаблицаКомпенсируемыеЧасовОтгулов = Неопределено Тогда
				ТаблицаКомпенсируемыеЧасовОтгулов = ТаблицаКомпенсируемыхОтгулов();
				КомпенсируемыеЧасыОтгулов[ВыборкаИтоги.Период] = ТаблицаКомпенсируемыеЧасовОтгулов;
				СтрокаКомпенсацииОтгулов = ДобавитьСтрокуКомпенсацииОтгулов(ТаблицаНачислений, МенеджерРасчета, ВыборкаИтоги.Период, Объект.ВидРасчетаКомпенсацияНеИспользованныхЧасовОтдыха);
			КонецЕсли;	
		КонецЕсли;

		Выборка = ВыборкаИтоги.Выбрать();
		Пока Выборка.Следующий() Цикл
			
			ОстатокДней = ДобавитьКомпенсациюОтгула(ТаблицаКомпенсируемыеДнейОтгулов, Выборка, ОстатокДней, "Дни");	
			ОстатокЧасов = ДобавитьКомпенсациюОтгула(ТаблицаКомпенсируемыеЧасовОтгулов, Выборка, ОстатокЧасов, "Часы");
			
		КонецЦикла;	
		
	КонецЦикла;
			
КонецПроцедуры

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

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

&НаСервере
Процедура ЗаполнитьОтрицательныеНачисленияЗаОтпуск(ТаблицаНачислений, МенеджерРасчета)
	
	Если СпособУдержанияИзлишнеНачисленныхОтпускных <> Перечисления.СпособыУдержанияИзлишнеНачисленныхОтпускных.СторнированиеРанееНачисленныхСумм Тогда
		Возврат;
	КонецЕсли;
	
	ТаблицаНачислений.Колонки.Добавить("ЗначениеПоказателяДлительностиОтпуска", Новый ОписаниеТипов("Число"));
	
	ПоказательДней = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.КоличествоДнейОтпуска");
	КоличествоПоказателей = ЗарплатаКадрыРасширенныйПовтИсп.МаксимальноеКоличествоПоказателейИспользуемыхПриРасчете();
	
	МассивВидыОтпусков = Новый Массив;
	ДлительностьОтпусков = Новый Соответствие;
	// Основной отпуск
	Если Объект.ПризнакКомпенсацииУдержанияОтпуска = Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.УдержатьЗаИспользованныеАвансом Тогда
		Если Объект.ДнейКомпенсацииУдержанияОтпуска > 0 Тогда
			ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
			МассивВидыОтпусков.Добавить(ВидОтпуска);
			ДлительностьОтпусков.Вставить(ВидОтпуска, Объект.ДнейКомпенсацииУдержанияОтпуска);
		КонецЕсли;
	КонецЕсли;
	// Дополнительные отпуска
	ОтборСтрок = Новый Структура("ПризнакКомпенсацииУдержания");
	ОтборСтрок.ПризнакКомпенсацииУдержания = Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.УдержатьЗаИспользованныеАвансом;
	НайденныеСтроки = Объект.ДополнительныеОтпуска.НайтиСтроки(ОтборСтрок);
	Для Каждого СтрокаОтпуска Из НайденныеСтроки Цикл
		МассивВидыОтпусков.Добавить(СтрокаОтпуска.ВидОтпуска);
		ДлительностьОтпусков.Вставить(СтрокаОтпуска.ВидОтпуска, СтрокаОтпуска.ДнейКомпенсацииУдержания);
	КонецЦикла;
	
	ИсключаемыеРегистраторы = ИсключаемыеРегистраторы();
	НачисленныеОтпуска = УчетНачисленнойЗарплатыРасширенный.НачисленныеОтпускаПоПериодамИВидам(Объект.Сотрудник, МассивВидыОтпусков, ИсключаемыеРегистраторы, Объект.РасчетДенежногоСодержания);
	
	ОтпускаВидыРасчета = НачисленныеОтпуска.ВыгрузитьКолонку("Начисление");
	ВидыОтпусков = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(ОтпускаВидыРасчета, "ВидОтпуска");
	ДанныеВидовРасчетов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(ОтпускаВидыРасчета, "КатегорияНачисленияИлиНеоплаченногоВремени, ОсновнойВидРасчета");
	КатегорииОплатыДолейРКСН = ПланыВидовРасчета.Начисления.КатегорииНачисленийОплатыДолейРКиСН();
	
	Длительность = 0;
	ВидОтпускаПредыдущий = Неопределено;
	Для Каждого СтрокаОтпуска Из НачисленныеОтпуска Цикл
		
		ВидОтпуска = ВидыОтпусков[СтрокаОтпуска.Начисление];
		Если ВидОтпуска <> ВидОтпускаПредыдущий Тогда
			ВидОтпускаПредыдущий = ВидОтпуска;
			Длительность = ДлительностьОтпусков.Получить(ВидОтпуска);
		КонецЕсли;
		
		КатегорияНачисленияОтпуска = ДанныеВидовРасчетов[СтрокаОтпуска.Начисление].КатегорияНачисленияИлиНеоплаченногоВремени;
		СтрокаОплатыДолиРКСН = КатегорииОплатыДолейРКСН.Найти(КатегорияНачисленияОтпуска) <> Неопределено;
		
		Если Длительность = 0 И Не СтрокаОплатыДолиРКСН Тогда
			Продолжить;
		КонецЕсли;
		
		НовыйИнтервал = ТаблицаНачислений.Добавить();
		НовыйИнтервал.Сотрудник = Объект.Сотрудник;
		НовыйИнтервал.СторнируемыйДокумент = СтрокаОтпуска.СторнируемыйДокумент;
		НовыйИнтервал.Начисление = СтрокаОтпуска.Начисление;
		НовыйИнтервал.ДатаНачала = СтрокаОтпуска.ДатаНачала;
		НовыйИнтервал.ПериодРегистрации = Объект.ПериодРегистрации;
		НовыйИнтервал.ФиксЗаполнение = Истина;
		НовыйИнтервал.ФиксРасчетВремени = Истина;
		НовыйИнтервал.Владелец = "Начисления";
		НовыйИнтервал.ОсновнойВидРасчета = ДанныеВидовРасчетов[СтрокаОтпуска.Начисление].ОсновнойВидРасчета;
		НовыйИнтервал.КатегорияНачисления = КатегорияНачисленияОтпуска;
		
		Для НомерПоказателя = 1 По КоличествоПоказателей Цикл
			Показатель = СтрокаОтпуска["Показатель" + НомерПоказателя];
			Если Показатель = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			ЗначениеПоказателя = СтрокаОтпуска["Значение" + НомерПоказателя];
			Если Показатель = ПоказательДней Тогда
				Если СтрокаОплатыДолиРКСН Тогда
					Продолжить;
				КонецЕсли;
				
				Если Длительность >= ЗначениеПоказателя Тогда
					ЗначениеПоказателя = -ЗначениеПоказателя;
				Иначе
					ЗначениеПоказателя = -Длительность;
					// Вычислим даты отрицательного отпуска.
					ОтпускВРабочихДняхПоДоговору = ОстаткиОтпусков.ОтпускСотрудникаВРабочихДняхПоДоговору(
					Объект.Сотрудник, СтрокаОтпуска.ДатаНачала);
					ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
					Если ЗначениеЗаполнено(СтрокаОтпуска.ДатаНачала) Тогда
						ДлительностьОтпускаЦелая = Цел(Длительность) + ?((Длительность - Цел(Длительность)) > 0, 1, 0);
						СтрокаОтпуска.ДатаОкончания = КонецДня(
						ОстаткиОтпусковКлиентСервер.ДатаОкончанияОтпуска(
						СтрокаОтпуска.Сотрудник, СтрокаОтпуска.ДатаНачала, ДлительностьОтпускаЦелая, ОписаниеВидаОтпуска));
					КонецЕсли;
				КонецЕсли;
				Длительность = Длительность + ЗначениеПоказателя;
				НовыйИнтервал.ЗначениеПоказателяДлительностиОтпуска = ЗначениеПоказателя;
			КонецЕсли;
			МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(НовыйИнтервал, Показатель, ЗначениеПоказателя);
		КонецЦикла;
		
		НовыйИнтервал.ДатаОкончания = СтрокаОтпуска.ДатаОкончания;
				
	КонецЦикла;
	
	//Заполним длительность и дату окончания отпуска в строках оплат долей рк, сн
	Для Каждого Стр Из ТаблицаНачислений Цикл
		
		Если КатегорииОплатыДолейРКСН.Найти(Стр.КатегорияНачисления) = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		Отбор = Новый Структура("Начисление, ДатаНачала, ПериодРегистрации, Сотрудник");
		ЗаполнитьЗначенияСвойств(Отбор, Стр);
		Отбор.Начисление = Стр.ОсновнойВидРасчета;
		СтрокиОсновногоНачисления = ТаблицаНачислений.НайтиСтроки(Отбор);
		Если СтрокиОсновногоНачисления.Количество() > 0 Тогда
			Стр.ДатаОкончания = СтрокиОсновногоНачисления[0].ДатаОкончания;
			ЗначениеПоказателя = СтрокиОсновногоНачисления[0].ЗначениеПоказателяДлительностиОтпуска;
			МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(Стр, ПоказательДней, ЗначениеПоказателя);
		КонецЕсли;
		
	КонецЦикла;
	
	ТаблицаНачислений.Колонки.Удалить("ОсновнойВидРасчета");
	ТаблицаНачислений.Колонки.Удалить("КатегорияНачисления");
	ТаблицаНачислений.Колонки.Удалить("ЗначениеПоказателяДлительностиОтпуска");
	
КонецПроцедуры

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

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

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

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

&НаСервере
Функция ДанныеДляУчетаПособийПриУвольнении()
		
	ДанныеУвольняемыхСотрудников = Новый Соответствие;	
	ДанныеДляУчетаПособийПриУвольнении = Документы.Увольнение.ДанныеДляУчетаПособийПриУвольненииПустая();
		
	ДанныеДляУчетаПособийПриУвольнении.ПределДоходаНеОблагаемогоСтраховымиВзносами = Объект.ПределДоходаНеОблагаемогоСтраховымиВзносами;
	ДанныеДляУчетаПособийПриУвольнении.ПределДоходаНеОблагаемогоНДФЛ = Объект.ПределДоходаНеОблагаемогоНДФЛ;

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

&НаСервере
Функция ДобавитьСтрокуКомпенсацииОтгулов(ТаблицаНачислений, МенеджерРасчета, ПериодДействия, ВидРасчетаКомпенсацииОтгулов)

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

&НаСервере
Функция ДобавитьКомпенсациюОтгула(ТаблицаКомпенсируемыхОтгулов, Выборка, Остаток, ИмяПоля) Экспорт
	
	Если Остаток > 0 И Выборка[ИмяПоля] > 0 Тогда
		СтрокаКомпенсируемогоОтгула = ТаблицаКомпенсируемыхОтгулов.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаКомпенсируемогоОтгула, Выборка);
		СтрокаКомпенсируемогоОтгула.Значение = Мин(Остаток, Выборка[ИмяПоля]);
		
		Остаток = Остаток - Выборка[ИмяПоля];
	КонецЕсли;
	
	Возврат Остаток;
	
КонецФункции

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

&НаСервере
Процедура ЗаполнитьЗависимыеНачисленияКомпенсацииОтгуловПрошлыхПериодов(МенеджерРасчета)

	НачисленияЗаднимЧислом = ИсправлениеДокументовРасчетЗарплаты.ПустаяТаблицаНачисленийЗаднимЧислом();
	
	Для Каждого СтрокаНачисления Из МенеджерРасчета.Начисления Цикл
		
		Если СтрокаНачисления.Начисление.КатегорияНачисленияИлиНеоплаченногоВремени = Перечисления.КатегорииНачисленийИНеоплаченногоВремени.КомпенсацияНеИспользованныхДнейЧасовОтдыха 
			И НачалоМесяца(СтрокаНачисления.ДатаНачала) < НачалоМесяца(Объект.ДатаУвольнения) Тогда
			
			НоваяСтрока = НачисленияЗаднимЧислом.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаНачисления);
			НоваяСтрока.ВидРасчета = СтрокаНачисления.Начисление;
			НоваяСтрока.ПериодДействия = НачалоМесяца(СтрокаНачисления.ДатаНачала);
			НоваяСтрока.ПериодДействияНачало = СтрокаНачисления.ДатаНачала;
			НоваяСтрока.ПериодДействияКонец = СтрокаНачисления.ДатаОкончания;
			
		//Если есть строки с другими категориями начислений прошлых периодов действия, значит перерасчеты уже заполнены	
		ИначеЕсли СтрокаНачисления.Начисление.КатегорияНачисленияИлиНеоплаченногоВремени <> Перечисления.КатегорииНачисленийИНеоплаченногоВремени.КомпенсацияНеИспользованныхДнейЧасовОтдыха 
			И НачалоМесяца(СтрокаНачисления.ДатаНачала) < НачалоМесяца(Объект.ДатаУвольнения) Тогда	
			Возврат;
		КонецЕсли;
		
	КонецЦикла;
	
	ДанныеПерерасчетаЗависимыеНачисления = ИсправлениеРасчетовБЗК.НачисленияПерерасчетПоНачисленияЗаднимЧислом(Объект.Организация, Объект.ПериодРегистрации, НачисленияЗаднимЧислом, СсылкаНаОбъект);
	Если ДанныеПерерасчетаЗависимыеНачисления.Количество() > 0 Тогда
		ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеПерерасчетаЗависимыеНачисления, МенеджерРасчета.Зарплата.Начисления);
	КонецЕсли;
	
КонецПроцедуры

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

#Область ПодключениеМеханизмаРасчетаНачислений

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

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

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

&НаКлиенте
Процедура ДополнитьСтроку(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей) Экспорт
	ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры

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

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

#Область ОписанияДокументаТаблицПанелей

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

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

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

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

&НаКлиенте
Функция ОписаниеПанелиВычетыНаКлиенте() Экспорт
	Возврат ОписаниеПанелиВычеты();
КонецФункции

&НаСервере
Функция ОписаниеПанелиВычетыНаСервере() Экспорт
	Возврат ОписаниеПанелиВычеты();
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ОписанияТаблицДляРаспределенияРезультата(ПравоНаЧтениеДокументаБезОграничений)

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

КонецФункции

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

#Область КонтролируемыеПоля

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

&НаКлиенте
Функция ПолучитьСтарыеЗначенияКонтролируемыхПолей() Экспорт
	Возврат СтарыеЗначенияКонтролируемыхПолей;
КонецФункции

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

#Область СреднийЗаработок

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоУвольнениеВПоследнийДеньМесяца(Объект)
	Возврат КонецДня(Объект.ДатаУвольнения) = КонецМесяца(Объект.ДатаУвольнения);
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоУвольнениеБудущимМесяцем(Объект)
	Возврат НачалоДня(Объект.ДатаУвольнения) > КонецМесяца(Объект.ПериодРегистрации);
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ЭтоУвольнениеВМесяцеПриемаНаРаботу(ДатаУвольнения, ДатаПриема)
	Возврат НачалоМесяца(ДатаУвольнения) = НачалоМесяца(ДатаПриема);
КонецФункции

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ПараметрыРасчетаСреднегоДневногоЗаработкаФСС()
		
	ПериодРасчетаСреднегоЗаработкаНачало = Дата(?(Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод = 0, 1, Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод), 1, 1);
	ПериодРасчетаСреднегоЗаработкаОкончание = Дата(?(Объект.ПериодРасчетаСреднегоЗаработкаВторойГод = 0, 1, Объект.ПериодРасчетаСреднегоЗаработкаВторойГод), 12, 31);
	
	ПараметрыРасчета = УчетПособийСоциальногоСтрахованияКлиентСервер.ПараметрыРасчетаСреднегоДневногоЗаработкаФСС();
	ПараметрыРасчета.ДатаНачалаСобытия = Объект.ДатаУвольнения;
	ПараметрыРасчета.ПериодРасчетаСреднегоЗаработкаНачало = ПериодРасчетаСреднегоЗаработкаНачало;
	ПараметрыРасчета.ПериодРасчетаСреднегоЗаработкаОкончание = ПериодРасчетаСреднегоЗаработкаОкончание;
	ПараметрыРасчета.РасчетныеГоды = УчетПособийСоциальногоСтрахования.ГодыПериодаРасчетаСреднего(Объект);
	ПараметрыРасчета.ПрименяетсяФЗ_421_2014 = УчетПособийСоциальногоСтрахования.ПрименяетсяФЗ_421_2014(Объект.ФизическоеЛицо, Объект.ДатаУвольнения);
	ПараметрыРасчета.ПрименяетсяФЗ_20_2023 = УчетПособийСоциальногоСтрахования.ПрименяетсяФЗ_20_2023(Объект.ФизическоеЛицо, Объект.ДатаУвольнения);
	ПараметрыРасчета.ДанныеНачислений = Объект.СреднийЗаработокФСС;
	ПараметрыРасчета.ДанныеСтрахователей = Объект.СреднийЗаработокДанныеСтрахователей;
	ПараметрыРасчета.СреднийЗаработокСЭДО = Объект.СреднийЗаработокСЭДО;
	ПараметрыРасчета.УчитыватьЗаработокПредыдущихСтрахователей = Объект.УчитыватьЗаработокПредыдущихСтрахователей;
	ПараметрыРасчета.ДанныеВремени = Объект.ОтработанноеВремяДляСреднегоФСС;
	ПараметрыРасчета.ИспользоватьДниБолезниУходаЗаДетьми = Истина;
	ПараметрыРасчета.ПорядокРасчета = ПорядокРасчетаСреднегоЗаработкаФСС();
	ПараметрыРасчета.РайонныйКоэффициентРФ = Объект.РайонныйКоэффициентРФНаНачалоСобытия;
	ПараметрыРасчета.ДоляНеполногоВремени = Объект.ДоляНеполногоВремени;
	ПараметрыРасчета.Сотрудник = Объект.Сотрудник;
	
	Если ПараметрыРасчета.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаФСС.Постановление2010 Тогда
		ПараметрыРасчета.ПрименятьПредельнуюВеличину = Ложь;
	ИначеЕсли ПараметрыРасчета.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаФСС.Постановление2011 Тогда
		ПараметрыРасчета.ПрименятьПредельнуюВеличину = Истина;
	КонецЕсли;
	
	Возврат ПараметрыРасчета;
	
КонецФункции

&НаСервере
Функция ПорядокРасчетаСреднегоЗаработкаФСС()
	
	ПорядокРасчета = УчетПособийСоциальногоСтрахованияКлиентСервер.ПорядокРасчетаСреднегоЗаработкаФСС(Объект.ДатаУвольнения);
	
	Возврат ПорядокРасчета;
	
КонецФункции

&НаСервере
Процедура РассчитатьСреднийЗаработокФСС()
	
	// Кэширование параметров.
	ШаблонПараметровСтрокой = ОбщегоНазначения.ЗначениеВСтрокуXML(ПараметрыРасчетаСреднегоДневногоЗаработкаФСС());

	ПараметрыРасчетаУчетОрганизации = ОбщегоНазначения.ЗначениеИзСтрокиXML(ШаблонПараметровСтрокой);
	ПараметрыРасчетаУчетОрганизации.ПолучатьДанныеПоГодам = Истина;
	СреднийПоДаннымОрганизации = УчетПособийСоциальногоСтрахования.СреднийДневнойЗаработокФСС(ПараметрыРасчетаУчетОрганизации);
	
	//Средний по данным фонда
	ПараметрыРасчетаУчетФонда = ОбщегоНазначения.ЗначениеИзСтрокиXML(ШаблонПараметровСтрокой);
	ПараметрыРасчетаУчетФонда.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетФонда;
	ПараметрыРасчетаУчетФонда.ПолучатьДанныеПоГодам = Истина;
	СреднийПоДаннымУчетаФонда = УчетПособийСоциальногоСтрахования.СреднийДневнойЗаработокФСС(ПараметрыРасчетаУчетФонда);
	
	// Заполнение источника среднего.
	Если Не ЗначениеЗаполнено(Объект.ИсточникСреднего)
		И Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод >= СЭДОФСС.ГодНачалаСведенийОСреднемЗаработкеСФР() Тогда
		Объект.ИсточникСреднего = СЭДОФСС.ИсточникСреднегоПоУмолчанию(
			Объект.Организация,
			Объект.ФизическоеЛицо,
			Объект.ДатаУвольнения,
			Объект.УчитыватьЗаработокПредыдущихСтрахователей);
		Если Не ЗначениеЗаполнено(Объект.ИсточникСреднего) Тогда
			Максимальный = Макс(СреднийПоДаннымОрганизации,СреднийПоДаннымУчетаФонда);
			Если Максимальный = СреднийПоДаннымОрганизации Тогда
				Объект.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетОрганизации;
			Иначе
				Объект.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетФонда;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	Объект.СреднийЗаработокСФР = ?(Объект.ИсточникСреднего = Перечисления.ИсточникиСреднегоДляПособий.УчетОрганизации, СреднийПоДаннымОрганизации, СреднийПоДаннымУчетаФонда);
	
	ПараметрыРасчета = ?(ПараметрыРасчетаУчетОрганизации.ИсточникСреднего = Объект.ИсточникСреднего, ПараметрыРасчетаУчетОрганизации, ПараметрыРасчетаУчетФонда);
		
	Объект.МинимальныйСреднедневнойЗаработок = УчетПособийСоциальногоСтрахования.МинимальныйСреднедневнойЗаработокФСС(ПараметрыРасчета);
	
	ЗаполнитьЗначенияСвойств(Объект, ИнформацияОВыбранномСреднемЗаработкеСЭДО(ПараметрыРасчета));
	
	ЗаполнитьИнформациюОЗаполненностиДанныхСреднегоФСС();
	
КонецПроцедуры

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

#Область РедактированиеНДФЛ

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

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

&НаСервере
Процедура ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ()
	
	УчетНДФЛФормы.ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ(ЭтотОбъект);
	
КонецПроцедуры

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

&НаСервере
Процедура УстановитьФиксРасчетСтрокНДФЛ(СтруктураПоиска)
	
	УчетНДФЛФормы.УстановитьФиксРасчетСтрокНДФЛ(ЭтотОбъект, СтруктураПоиска);
	
КонецПроцедуры

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

#Область СервернаяЧастьОбработчиковСобытийЭлементовФормы

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

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

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

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

&НаСервере
Процедура УстановитьПризнакУвольненияОсновногоСотрудника(ВидЗанятости)
	
	Объект.УвольнениеСОсновногоМестаРаботы =
		(ВидЗанятости <> Перечисления.ВидыЗанятости.ВнутреннееСовместительство);
	
	УстановитьДоступностьОтображенияВТрудовойКнижке();
	
КонецПроцедуры

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

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

#Область ОчиститьОбновитьДанныеПоСотруднику

&НаСервере
Процедура ОчиститьДанныеСреднегоЗаработка()
	
	Если Не ИспользуетсяРасчетЗарплаты Тогда
		Возврат;
	КонецЕсли;

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

&НаСервере
Процедура ОчиститьНачисления()
	
	Объект.Начисления.Очистить();
	Объект.НачисленияПерерасчет.Очистить();
	Объект.РаспределениеПоТерриториямУсловиямТруда.Очистить();
	
	ОбновитьИтоги(ЭтотОбъект, НачисленияГрупп());
	
КонецПроцедуры

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

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

&НаСервере
Процедура ОбновитьДолюНеполногоВремени(КадровыеДанные)
	Объект.ДоляНеполногоВремени = КадровыеДанные.ДоляНеполногоРабочегоВремени;
КонецПроцедуры

&НаСервере
Процедура ОбновитьРайонныйКоэффициентРФНаНачалоСобытия(КадровыеДанные)
	
	Если ТипЗнч(КадровыеДанные.РайонныйКоэффициентРФ) = Тип("Число")
		И КадровыеДанные.РайонныйКоэффициентРФ >= 1 Тогда
		Объект.РайонныйКоэффициентРФНаНачалоСобытия = КадровыеДанные.РайонныйКоэффициентРФ;
	Иначе
		ОбъектРК = РасчетЗарплатыРасширенный.ИсточникРайонногоКоэффициентаРФ(КадровыеДанные);
		Если Не ЗначениеЗаполнено(ОбъектРК) Тогда
			ОбъектРК = Объект.Организация;
		КонецЕсли;
		Объект.РайонныйКоэффициентРФНаНачалоСобытия = РасчетЗарплатыРасширенный.РайонныйКоэффициентРФ(ОбъектРК);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура РассчитатьКоличествоДнейКомпенсацииУдержанияОтпускаНаСервере(РассчитатьДополнительныеОтпуска = Истина)
	
	Объект.ПризнакКомпенсацииУдержанияОтпуска = Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.НеИспользовать;
	Объект.ДнейКомпенсацииУдержанияОтпуска = Неопределено;  
	Объект.РабочийГодС = Неопределено; 
	Объект.РабочийГодПо = Неопределено;
	Если РассчитатьДополнительныеОтпуска Тогда
		Объект.ДополнительныеОтпуска.Очистить();
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Объект.Сотрудник) Или Не ЗначениеЗаполнено(Объект.ДатаУвольнения) Тогда
		Возврат
	КонецЕсли;
	
	ИсключаемыеРегистраторы = ИсключаемыеРегистраторы();
	
	ОтраслевыеОсобенности = Неопределено;
	
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ОбразовательныеУчреждения") Тогда
		МодульОбразовательныеУчрежденияФормы = ОбщегоНазначения.ОбщийМодуль("ОбразовательныеУчрежденияФормы");
		ОтраслевыеОсобенности = МодульОбразовательныеУчрежденияФормы.ПолучитьПланПримененияОсобенностей(ЭтотОбъект);
	КонецЕсли;
	
	Результат = ОстаткиОтпусков.ОстатокОтпускаСотрудникаНаДату(
		Объект.Сотрудник,
		Объект.ДатаУвольнения,
		ИсключаемыеРегистраторы,
		Истина,
		ОтраслевыеОсобенности,
		Объект.СтатьяТКРФ);
		
	Если ОтраслевыеОсобенности <> Неопределено Тогда
		МодульОбразовательныеУчрежденияФормы.ВывестиИндикаторыОсобенностейКомпенсации(ЭтотОбъект, ОтраслевыеОсобенности);
	КонецЕсли;
	
	Объект.РабочийГодС	= Результат.РабочийГодС;
	Объект.РабочийГодПо	= Объект.ДатаУвольнения;
	
	ВидыОтпусковНеПодлежащихКомпенсацииПриУвольнении = ОстаткиОтпусков.ВидыОтпусковНеПодлежащихКомпенсацииПриУвольнении();
	ВидОтпускаОсновной = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
	
	Для Каждого Остаток Из Результат.ОстаткиВРазрезеВидовОтпусков Цикл
		Если НЕ ВидыОтпусковНеПодлежащихКомпенсацииПриУвольнении.Найти(Остаток.ВидЕжегодногоОтпуска) = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Если Остаток.ВидЕжегодногоОтпуска = ВидОтпускаОсновной Тогда
			Объект.ПризнакКомпенсацииУдержанияОтпуска	= ?(Остаток.КоличествоДней > 0, Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.КомпенсироватьНеИспользованные,Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.УдержатьЗаИспользованныеАвансом);
			Объект.ДнейКомпенсацииУдержанияОтпуска		= ?(Остаток.КоличествоДней > 0, Остаток.КоличествоДней, Остаток.КоличествоДней * (-1));
			Объект.РабочийГодС = Остаток.РабочийГодС;
			Объект.РабочийГодПо = Объект.ДатаУвольнения;
		ИначеЕсли РассчитатьДополнительныеОтпуска Тогда
			Если ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная") Тогда
				Строка = Объект.ДополнительныеОтпуска.Добавить();
				Строка.ВидОтпуска									= Остаток.ВидЕжегодногоОтпуска;
				Строка.ПризнакКомпенсацииУдержания					= ?(Остаток.КоличествоДней > 0, Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.КомпенсироватьНеИспользованные,Перечисления.КомпенсацияУдержаниеОтпускаПриУвольнении.УдержатьЗаИспользованныеАвансом);
				Строка.ДнейКомпенсацииУдержания						= ?(Остаток.КоличествоДней > 0, Остаток.КоличествоДней, Остаток.КоличествоДней * (-1));
				Строка.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск 	= Остаток.РабочийГодС;
				Строка.КонецПериодаЗаКоторыйПредоставляетсяОтпуск 	= Мин(Объект.ДатаУвольнения, Остаток.РабочийГодПо);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	НастроитьОтображениеДнейКомпенсации();
	ПризнакКомпенсацииОтпускаПриИзмененииНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура РассчитатьКоличествоЧасовКомпенсацииСуммированногоУчетаНаСервере()

	Объект.Сверхурочно1_5 = 0;
	Объект.Сверхурочно2 = 0;
	
	Если НЕ ЗначениеЗаполнено(Объект.Сотрудник)
		Или Не ЗначениеЗаполнено(Объект.ДатаУвольнения) Тогда
		
		Возврат;
		
	КонецЕсли;
	
	Если НЕ ИспользоватьОплатуПереработокСуммированногоУчета Тогда
		Возврат;
	КонецЕсли;
	
	// Вычисляем незакрытые периоды по предыдущим проведенным документам
	ПериодСуммированногоУчета = УчетРабочегоВремениРасширенный.ПериодСуммированногоУчетаПоПрошлымДокументам(Объект.Организация, Объект.ДатаУвольнения, Объект.Сотрудник);
	Если ПериодСуммированногоУчета = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	// Получаем переработки
	ТаблицаСотрудников = РасчетЗарплатыРасширенный.ПоказателиСуммированногоУчетаСотрудниковЗаПериод(
							ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект.Сотрудник),
							НачалоМесяца(ПериодСуммированногоУчета.ПериодСуммированногоУчетаНачало),
							КонецДня(Объект.ДатаУвольнения));
							
							
	Если ТаблицаСотрудников.Количество() > 0 Тогда
		Объект.Сверхурочно1_5 = Макс(ТаблицаСотрудников[0].Переработки, 0);
	КонецЕсли;

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

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

&НаСервере
Процедура РассчитатьДнейЧасовВыходногоПособия()

	Объект.ДнейЧасовВыходногоПособия = Объект.СреднемесячноеКоличествоДнейЧасов * Объект.КратностьВыходногоПособия;
	
КонецПроцедуры

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

&НаСервере
Процедура ДнейЧасовВыходногоПособияПриИзмененииНаСервере()
	
	УстановитьПривилегированныйРежим(Истина);
	ОбновитьФормуПоВидуДоговора();
	ЗаполнитьВидРасчетаВыходногоПособия();
	УстановитьПривилегированныйРежим(Ложь);
	
КонецПроцедуры

&НаСервере
Процедура КоличествоМесяцевВыплатыДенежногоСодержанияПриИзмененииНаСервере()
	
	УстановитьПривилегированныйРежим(Истина);
	ЗаполнитьВидРасчетаМесячноеДенежноеСодержание();
	УстановитьПривилегированныйРежим(Ложь);
	
КонецПроцедуры

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

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

&НаСервере
Процедура ПогашениеЗаймовПриИзмененииНаСервере()
	
	УстановитьСвойствоДокументРассчитан();

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

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

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

&НаСервере
Процедура ДополнительныеОтпускаВидОтпускаПриИзмененииНаСервере(ИдентификаторСтроки)
	
	Строка = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(ИдентификаторСтроки);
	ОбновитьРабочийГодДополнительногоОтпуска(Строка);
	
КонецПроцедуры

&НаСервере
Процедура ДополнительныеОтпускаКоличествоДнейКомпенсацииПриИзмененииНаСервере(ИдентификаторСтроки)
	
	Строка = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(ИдентификаторСтроки);
	ОбновитьРабочийГодДополнительногоОтпуска(Строка);

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

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

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

#Область ОбновитьИтоги

&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьИтоги(Форма, ГруппыНачислений = Неопределено)
	ОбновитьНачисленоИтог(Форма, ГруппыНачислений);
	ОбновитьУдержаноИтог(Форма);
	ОбновитьПерерасчетИтог(Форма);
	ОбновитьПерерасчетПособийИтог(Форма);
КонецПроцедуры

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

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

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

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

	Форма.ПерерасчетИтог = Форма.Объект.НачисленияПерерасчет.Итог("Результат");		
КонецПроцедуры

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

	Форма.ПерерасчетПособийИтог = Форма.Объект.ПособияПерерасчет.Итог("Результат");		
КонецПроцедуры

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

#Область РедактированиеПроцентаЕНВДВФормеДокумента

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

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

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

&НаКлиенте
Процедура Подключаемый_ПроцентЕНВДСтрокаПриИзменении(Элемент)
	
	ОтражениеЗарплатыВБухучетеКлиент.ПроцентЕНВДСтрокаПриИзменении(ЭтотОбъект, Элемент, ЭтотОбъект.ПроцентЕНВДСтрока);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПроцентЕНВДСтрокаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ОтражениеЗарплатыВБухучетеКлиент.ПроцентЕНВДСтрокаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
	
КонецПроцедуры

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

#Область РаспределениеПоТерриториямУсловиямТруда

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

&НаКлиенте
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
	ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры

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

&НаКлиенте
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
	ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры

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

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

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

#Область КлючевыеРеквизитыЗаполненияФормы

// Функция возвращает описание таблиц формы подключенных к механизму ключевых реквизитов формы.
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыТаблицыОчищаемыеПриИзменении() Экспорт
	
	Возврат Новый Массив;
	
КонецФункции 

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

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

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

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

#Область АдаптацияУвольнение

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

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

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

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

&НаКлиенте
Процедура ОбработчикОжиданияМесяцНачисленияПриИзменении()
	
	ПриИзмененииМесяцаНачисления();
	ОтключитьОбработчикОжиданияФормы("ОбработчикОжиданияМесяцНачисленияПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииМесяцаНачисления()
	
	ОбработатьИзменениеМесяцНачисленияНаСервере();
	ВыполнитьРасчетНачислений();
	
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьВидимостьПерерасчетов()
	
	Если Не ИспользуетсяРасчетЗарплаты Тогда
		Возврат;
	КонецЕсли;

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

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

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

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

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

&НаКлиенте
Процедура ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка = Истина)

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьВидимостьСуммированногоУчета()

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

&НаСервере
Процедура УстановитьДоступностьПолейСреднегоЗаработка()

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

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

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

&НаСервере
Функция НадписьДнейЧасов()
	Если ИспользуетсяСреднечасовойЗаработок Тогда
		Возврат НСтр("ru='час.'");
	Иначе
		Возврат НСтр("ru='дн.'");
	КонецЕсли; 
КонецФункции

&НаСервере
Функция ЗаголовокСреднемесячногоКоличестваДнейЧасов()
	Если ИспользуетсяСреднечасовойЗаработок Тогда
		Возврат НСтр("ru='Среднемесячное количество часов'");
	Иначе
		Возврат НСтр("ru='Среднемесячное количество дней'");
	КонецЕсли; 
КонецФункции

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьОтпускВРабочихДняхПоДоговору()
	
	ОтпускВРабочихДняхПоДоговору = ОстаткиОтпусков.ОтпускСотрудникаВРабочихДняхПоДоговору(Объект.Сотрудник, Объект.ДатаУвольнения);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗакрытьПослеПроведения(Результат, ДополнительныеПараметры) Экспорт
	
	Закрыть();
	
КонецПроцедуры

&НаСервере
Функция СтруктураСОписаниемДокумента(РассчитатьНачисления = Ложь)
	
	Если РассчитатьНачисления Тогда
		РассчитатьНачисленияНаСервере();
	КонецЕсли;
	
	РеквизитыВДанные(Объект);

	ОписаниеДокумента = ЗарплатаКадрыРасширенныйВызовСервера.СтруктураПоМетаданным("Документ.Увольнение");
	ЗарплатаКадрыРасширенный.ЗаполнитьОбъектПоОбразцу(ОписаниеДокумента, Объект);
	
	ОписаниеДокумента.Вставить("ЗаполнениеВыполнено", ЗаполнениеВыполнено);
	
	Возврат ОписаниеДокумента;
	
КонецФункции

&НаКлиенте
Процедура ПередЗакрытиемФормыРедактированияСтрокиДокументаЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	ОписаниеДокумента = СтруктураСОписаниемДокумента();
	Модифицированность = Ложь;
	Закрыть(ОписаниеДокумента);
	
КонецПроцедуры

&НаСервере
Процедура ОбновитьДанныеОстатковОтгулов(ЗаполнитьДанныеДокумента = Ложь)

	ДниЧасыНакопленныхОтгулов = УчетРабочегоВремениРасширенный.ДниЧасыНакопленныхОтгулов(
		Объект.Организация, Объект.Сотрудник, КонецДня(Объект.ДатаУвольнения) + 1, Объект.Ссылка, Объект.ИсправленныйДокумент);
	
	НадписьОстаткиОтгулов = "";
	Если ДниЧасыНакопленныхОтгулов.РасходДнейОтгула > 0 ИЛИ ДниЧасыНакопленныхОтгулов.РасходЧасовОтгула > 0 Тогда
		
		Если ДниЧасыНакопленныхОтгулов.РасходДнейОтгула > 0 И ДниЧасыНакопленныхОтгулов.РасходЧасовОтгула > 0 Тогда
			НадписьОстаткиОтгулов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'У сотрудника остались неиспользованными %1 дн. и %2 ч. отгулов.'"),
				ДниЧасыНакопленныхОтгулов.РасходДнейОтгула,
				ДниЧасыНакопленныхОтгулов.РасходЧасовОтгула);
		ИначеЕсли ДниЧасыНакопленныхОтгулов.РасходДнейОтгула > 0 Тогда
			НадписьОстаткиОтгулов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'У сотрудника остались неиспользованными %1 дн. отгулов.'"),
				ДниЧасыНакопленныхОтгулов.РасходДнейОтгула);
		Иначе
			НадписьОстаткиОтгулов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'У сотрудника остались неиспользованными %1 ч. отгулов.'"),
				ДниЧасыНакопленныхОтгулов.РасходЧасовОтгула);
		КонецЕсли;
		
	КонецЕсли;
	
	Если ЗаполнитьДанныеДокумента Тогда
		Объект.ДниНакопленныхОтгулов = ДниЧасыНакопленныхОтгулов.РасходДнейОтгула;
		Объект.ЧасыНакопленныхОтгулов = ДниЧасыНакопленныхОтгулов.РасходЧасовОтгула;
	КонецЕсли;
	
	ЗарплатаКадрыКлиентСервер.УстановитьРасширеннуюПодсказкуЭлементуФормы(
		ЭтотОбъект,
		"КомпенсацияОтгуловГруппа",
		НадписьОстаткиОтгулов);
	
КонецПроцедуры

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

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

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

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

&НаСервереБезКонтекста
Функция ПроверитьПересечениеПериодовОтсутствияНаСервере(СсылкаНаОбъект, СсылкаНаИсправленныйДокумент, Сотрудник, ДатаУвольнения)
	
	ИсходныеДанные = СостоянияСотрудников.ПустаяТаблицаДанныхСостоянийСотрудника();
	
	НоваяСтрока = ИсходныеДанные.Добавить();
	НоваяСтрока.Сотрудник = Сотрудник;
	НоваяСтрока.Состояние = Перечисления.СостоянияСотрудника.Увольнение;
	НоваяСтрока.Начало = ДатаУвольнения + 86400;
	
	Возврат СостоянияСотрудников.ПроверитьПересечениеПериодовОтсутствия(ИсходныеДанные, СсылкаНаОбъект, СсылкаНаИсправленныйДокумент);
	
КонецФункции

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

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

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

&НаСервере
Процедура РассчитатьПределДоходаНеОблагаемогоНДФЛ()
	
	КоэффициентТерриториальныхУсловий = ?(Объект.ДействуютСеверныеТерриториальныеУсловия, 6, 3);
	МинимальныйСреднедневнойЗаработокДляСравненияСМРОТ = УчетПособийСоциальногоСтрахования.МинимальныйСреднедневнойЗаработокДляСравненияСМРОТ(
															Объект.МинимальныйСреднедневнойЗаработок, 
															Объект.РайонныйКоэффициентРФнаНачалоСобытия, 
															Объект.ДатаУвольнения);
	Объект.ПределДоходаНеОблагаемогоНДФЛ = Макс(Объект.СреднийЗаработокСФР, МинимальныйСреднедневнойЗаработокДляСравненияСМРОТ) * 30.4 * КоэффициентТерриториальныхУсловий;
	
КонецПроцедуры

&НаСервере
Процедура РассчитатьПределДоходаНеОблагаемогоСтраховымиВзносами()

	КоэффициентТерриториальныхУсловий = ?(Объект.ДействуютСеверныеТерриториальныеУсловия, 6, 3);
	Если Объект.РасчетДенежногоСодержания Тогда
		ПределДоходаВзносы = Объект.МесячноеДенежноеСодержание * КоэффициентТерриториальныхУсловий;
	Иначе
		Если РасчетВыходногоПособияПоПостановлению504() Тогда
			ПределДоходаВзносы = Объект.СреднийЗаработокВыходногоПособия * Объект.СреднемесячноеКоличествоДнейЧасов * КоэффициентТерриториальныхУсловий;
		Иначе
			ПределДоходаВзносы = Объект.СреднийЗаработокВыходногоПособия * Объект.ДнейЧасовТрехКратногоШестикратногоВыходногоПособия;
		КонецЕсли;
	КонецЕсли;
	
	Объект.ПределДоходаНеОблагаемогоСтраховымиВзносами = ПределДоходаВзносы;
	
КонецПроцедуры

#Область ОбработчикиОжиданияФормы

&НаКлиенте
Процедура ПодключитьОбработчикОжиданияФормы(ИмяОбработчика, ПодключитьОбработчик = Истина)
	
	Если ПустаяСтрока(ОбработчикиОжидания) Тогда
		ОбработчикиОжидания = ИмяОбработчика;
	Иначе
		ОбработчикиОжидания = ОбработчикиОжидания + "," + ИмяОбработчика;
	КонецЕсли;
	
	Если ПодключитьОбработчик Тогда
		ПодключитьОбработчикОжидания(ИмяОбработчика, 0.3, Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОтключитьОбработчикОжиданияФормы(ИмяОбработчика)
	
	Если ОбработчикиОжидания = ИмяОбработчика Тогда
		ОбработчикиОжидания = "";
	ИначеЕсли Не ПустаяСтрока(ОбработчикиОжидания) Тогда
		
		ОбработчикиОжидания = СтрЗаменить(ОбработчикиОжидания, ИмяОбработчика, "");
		ОбработчикиОжидания = СтрЗаменить(ОбработчикиОжидания, ",,", ",");
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Функция ПодключенОбработчикОжидания(ИмяОбработчика)
	
	Возврат СтрНайти(ОбработчикиОжидания, ИмяОбработчика) > 0
	
КонецФункции

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

#Область ПособияСоциальногоСтрахования

&НаКлиенте
Процедура ОткрытьУведомлениеОПрекращенииПособия(ОбъектЗаписан, ПараметрыЗаписи) Экспорт
	ПрямыеВыплатыПособийСоциальногоСтрахованияКлиент.ОткрытьУведомлениеОПрекращенииПособия(СсылкаНаОбъект);
КонецПроцедуры

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

// ЗарплатаКадрыРасширеннаяПодсистемы.ПособияСоциальногоСтрахования
&НаКлиенте
Процедура Подключаемый_ОбновитьЭлементыПособийНаКлиенте()
	ОбновитьЭлементыПособий();
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ЭлементыПособийОбработкаНавигационнойСсылки(Элемент, Адрес, СтандартнаяОбработка)
	УчетПособийСоциальногоСтрахованияРасширенныйКлиент.ОбработкаНавигационнойСсылки(
		ЭтотОбъект,
		Элемент,
		Адрес,
		СтандартнаяОбработка,
		Объект.Сотрудник);
КонецПроцедуры
// Конец ЗарплатаКадрыРасширеннаяПодсистемы.ПособияСоциальногоСтрахования

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

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

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

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

&НаКлиенте
Процедура ОбновитьСправкиСотрудникаНаКлиенте(Результат, ДополнительныеПараметры) Экспорт
	
	ОбновитьСправкиСотрудника();
	
КонецПроцедуры

&НаСервере
Процедура НастроитьОтображениеДнейКомпенсации(ЗначениеРассчитано = Истина)
	
	Если Не ЗначениеРассчитано Тогда
		Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ОбразовательныеУчреждения") Тогда
			МодульОбразовательныеУчрежденияФормы = ОбщегоНазначения.ОбщийМодуль("ОбразовательныеУчрежденияФормы");
			МодульОбразовательныеУчрежденияФормы.УстановитьНеопределенноеСостояниеИндикаторовОсобенностей(ЭтотОбъект);
		КонецЕсли;
	КонецЕсли;
	
	Группа = Элементы.ДнейКомпенсации;
	Поле = Элементы.ДнейКомпенсацииУдержанияОтпуска;
	Поле.Шрифт = Новый Шрифт(,,ЗначениеРассчитано = Ложь);
	
	Если ЗначениеРассчитано <> Истина И Поле.Доступность И Не ТолькоПросмотр Тогда
		
		Группа.РасширеннаяПодсказка.Заголовок =	Новый ФорматированнаяСтрока(
			НСтр("ru = 'Рассчитать'"),,,, "Рассчитать#КоличествоДнейКомпенсации");
		Группа.РасширеннаяПодсказка.УстановитьДействие(
			"ОбработкаНавигационнойСсылки", "Подключаемый_КомпенсацияОтпускаОбработкаНавигационнойСсылки");
		Группа.ОтображениеПодсказки = ОтображениеПодсказки.ОтображатьСправа;
		
	Иначе
		Группа.ОтображениеПодсказки = ОтображениеПодсказки.Нет;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КомпенсацияОтпускаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ЧастиСсылки = СтрРазделить(НавигационнаяСсылка, "#");
	
	Команда = ЧастиСсылки[0];
	
	Если Команда = "Рассчитать" Тогда
		Модифицированность = Истина;
		Объект.ФиксКоличествоДнейКомпенсацииОтпуска = Ложь;
		РассчитатьКоличествоДнейКомпенсацииУдержанияОтпускаНаСервере(Ложь);
		ВыполнитьРасчетНачислений();
	КонецЕсли;
	
КонецПроцедуры

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

#Область МеханизмОсобенностейКомпенсацииОтпускаПриУвольнении

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

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

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

// ЭДОБЗК

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

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

&НаСервере
Процедура ОбновитьИнформациюОБудущихМероприятиях()
	
	ЭлектронныеТрудовыеКнижки.ОбновитьГруппуИнформацииОБудущихМероприятиях(ЭтотОбъект, Объект.ДатаУвольнения);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииБудущихМероприятий(Результат, ДополнительныеПараметры) Экспорт
	
	ОбновитьИнформациюОБудущихМероприятиях();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПослеУдаленияПерерасчета() Экспорт
	
	РассчитатьСотрудникаНаСервере(Объект.Сотрудник,
		КадровыйУчетРасширенныйКлиентСервер.ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
		
КонецПроцедуры

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

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

&НаКлиенте
Процедура ДниНакопленныхОтгуловПриИзменении(Элемент)
	
	ДниНакопленныхОтгуловПриИзмененииНаСервере();
	ПодключитьОбработчикОжиданияФормы("ОбработчикОжиданияДниНакопленныхОтгуловПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияДниНакопленныхОтгуловПриИзменении()
	
	ВыполнитьРасчетНачислений();
	ОтключитьОбработчикОжиданияФормы("ОбработчикОжиданияДниНакопленныхОтгуловПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура ЧасыНакопленныхОтгуловПриИзменении(Элемент)
	
	ЧасыНакопленныхОтгуловПриИзмененииНаСервере();
	ПодключитьОбработчикОжиданияФормы("ОбработчикОжиданияЧасыНакопленныхОтгуловПриИзменении");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияЧасыНакопленныхОтгуловПриИзменении()
	
	ВыполнитьРасчетНачислений();
	ОтключитьОбработчикОжиданияФормы("ОбработчикОжиданияЧасыНакопленныхОтгуловПриИзменении");
	
КонецПроцедуры

// Функция возвращает виды расчета, хранящихся в документе. 
//
// Возвращаемое значение - тип Массив.
&НаСервере
Функция ВидыРасчетаДокумента()

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

	Возврат МассивВидовРасчета;
	
КонецФункции

&НаСервере
Функция ТаблицаСпециализированныхНачислений(МенеджерРасчета)

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

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

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

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

&НаСервере
Функция ИнформацияОВыбранномСреднемЗаработкеСЭДО(ПараметрыРасчета)

	Результат = Новый Структура;
	Результат.Вставить("ПервыйРасчетныйГодЗаработок", 0);
	Результат.Вставить("ПервыйРасчетныйГодОснование", Неопределено);
	Результат.Вставить("ВторойРасчетныйГодЗаработок", 0);
	Результат.Вставить("ВторойРасчетныйГодОснование", Неопределено);
	
	ДанныеПоГоду = ПараметрыРасчета.ДанныеПоГодам[Объект.ПериодРасчетаСреднегоЗаработкаПервыйГод];
	Если ДанныеПоГоду <> Неопределено Тогда
		Результат.ПервыйРасчетныйГодЗаработок = ДанныеПоГоду.УчтенныйЗаработок;
		Результат.ПервыйРасчетныйГодОснование = ДанныеПоГоду.Основание;
	КонецЕсли;
	ДанныеПоГоду = ПараметрыРасчета.ДанныеПоГодам[Объект.ПериодРасчетаСреднегоЗаработкаВторойГод];
	Если ДанныеПоГоду <> Неопределено Тогда
		Результат.ВторойРасчетныйГодЗаработок = ДанныеПоГоду.УчтенныйЗаработок;
		Результат.ВторойРасчетныйГодОснование = ДанныеПоГоду.Основание;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Процедура ПриИзмененииОтработанныхДнейНаСервере(ДанныеСотрудника)
	
	УдалитьОтработанныеДниЧасы(ДанныеСотрудника.ВыборОтработанныхЧасов);
	Для Каждого ОтработанныйДень Из ДанныеСотрудника.ВыбранныеДни Цикл 
		НоваяСтрока = Объект.ОтработанныеДни.Добавить();
		НоваяСтрока.Дата = ОтработанныйДень;
		Если ДанныеСотрудника.ВыборОтработанныхЧасов Тогда 
			НоваяСтрока.Часы = ДанныеСотрудника.ОтработанныеЧасы[ОтработанныйДень];
		КонецЕсли;
	КонецЦикла;
	
	УстановитьПредставлениеОтработанныхДней();
	
КонецПроцедуры

&НаСервере
Процедура ДниНакопленныхОтгуловПриИзмененииНаСервере()
	
	ЗаполнитьОтработанныеДни();
	УстановитьПредставлениеОтработанныхДней();
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьОтработанныеДни()
	
	УдалитьОтработанныеДниЧасы();
	
	Если Объект.ДниНакопленныхОтгулов = 0
		Или Объект.ДатаУвольнения < УчетОтгулов.НачалоУчетаОтработанныхДней() Тогда 
		Возврат;
	КонецЕсли;
	
	ДанныеСотрудников = УчетОтгулов.СведенияОбОтработанныхДнях(Объект.Сотрудник, Объект.ДатаУвольнения, СсылкаНаОбъект, СсылкаНаИсправленныйДокумент);
	
	ДанныеСотрудника = ДанныеСотрудников.Получить(Объект.Сотрудник);
	Если ДанныеСотрудника = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	КоличествоОтработанныхДней = Объект.ДниНакопленныхОтгулов - ДанныеСотрудника.ОстатокДоНачалаУчетаОтгулов;
	Если КоличествоОтработанныхДней <= 0 Тогда 
		Возврат;
	КонецЕсли;
	
	ОтработанныеДниВсего = 0;
	Для Каждого ОтработанныйДень Из ДанныеСотрудника.НеиспользованныеОтработанныеДни Цикл  
		Если ОтработанныйДень >= Объект.ДатаУвольнения
			Или ОтработанныеДниВсего = КоличествоОтработанныхДней Тогда 
			Прервать;
		КонецЕсли;
		НоваяСтрока = Объект.ОтработанныеДни.Добавить();
		НоваяСтрока.Дата = ОтработанныйДень;
		ОтработанныеДниВсего = ОтработанныеДниВсего + 1;
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ПроверитьОстатокОтработанныхДней()
	
	Если Объект.ДниНакопленныхОтгулов = 0
		Или Объект.ДатаУвольнения < УчетОтгулов.НачалоУчетаОтработанныхДней() Тогда 
		Возврат;
	КонецЕсли;
	
	ДанныеСотрудников = УчетОтгулов.СведенияОбОтработанныхДнях(Объект.Сотрудник, Объект.ДатаУвольнения, СсылкаНаОбъект, СсылкаНаИсправленныйДокумент);
	
	ДанныеСотрудника = ДанныеСотрудников.Получить(Объект.Сотрудник);
	Если ДанныеСотрудника = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	КоличествоОтработанныхДней = Объект.ДниНакопленныхОтгулов - ДанныеСотрудника.ОстатокДоНачалаУчетаОтгулов;
	Если КоличествоОтработанныхДней <= 0 Тогда 
		Возврат;
	КонецЕсли;
	
	ОтработанныеДни = Объект.ОтработанныеДни.НайтиСтроки(Новый Структура("Часы", 0));
	Если ОтработанныеДни.Количество() < КоличествоОтработанныхДней Тогда
		ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'У сотрудника недостаточно отработанных дней для компенсации отгула'"), , "ДниНакопленныхОтгулов", "Объект");
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаСервере
Процедура ОбновитьВидимостьЭлементовВыходногоПособия()

	РасчетПоСреднемесячномуКоличествуДнейЧасов = РасчетВыходногоПособияПоПостановлению504();
	Элементы.ГруппаДнейЧасовВыходногоПособия.Видимость = Не РасчетПоСреднемесячномуКоличествуДнейЧасов;
	Элементы.ГруппаКратностьВыходногоПособия.Видимость = РасчетПоСреднемесячномуКоличествуДнейЧасов;
	
КонецПроцедуры

&НаСервере
Функция ТаблицаКомпенсируемыхОтгулов()

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

&НаСервере
Процедура ЧасыНакопленныхОтгуловПриИзмененииНаСервере()
	
	ЗаполнитьОтработанныеЧасы();
	УстановитьПредставлениеОтработанныхДней();
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьОтработанныеЧасы()
	
	УдалитьОтработанныеДниЧасы(Истина);
	
	Если Объект.ЧасыНакопленныхОтгулов = 0
		Или Объект.ДатаУвольнения < УчетОтгулов.НачалоУчетаОтработанныхДней() Тогда 
		Возврат;
	КонецЕсли;
	
	ДанныеСотрудников = УчетОтгулов.СведенияОбОтработанныхЧасах(Объект.Сотрудник, Объект.ДатаУвольнения, СсылкаНаОбъект, СсылкаНаИсправленныйДокумент);
	
	ДанныеСотрудника = ДанныеСотрудников.Получить(Объект.Сотрудник);
	Если ДанныеСотрудника = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	ОтработанныеЧасыВсего = 0;
	Для Каждого ОтработанныйДень Из ДанныеСотрудника.НеиспользованныеОтработанныеДни Цикл 
		ОтработанныеЧасы = ДанныеСотрудника.ОтработанныеЧасы[ОтработанныйДень];
		Если ОтработанныеЧасы = Неопределено Тогда 
			Продолжить;
		КонецЕсли;
		Если ОтработанныйДень >= Объект.ДатаУвольнения
			Или ОтработанныеЧасыВсего + ОтработанныеЧасы > Объект.ЧасыНакопленныхОтгулов Тогда 
			Прервать;
		КонецЕсли;
		НоваяСтрока = Объект.ОтработанныеДни.Добавить();
		НоваяСтрока.Дата = ОтработанныйДень;
		НоваяСтрока.Часы = ОтработанныеЧасы;
		ОтработанныеЧасыВсего = ОтработанныеЧасыВсего + ОтработанныеЧасы;
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура УдалитьОтработанныеДниЧасы(УдалитьЧасы = Ложь)
	
	УдалитьДни = Не УдалитьЧасы;
	СтрокиКУдалению = Новый Массив;
	Для Каждого ОтработанныйДень Из Объект.ОтработанныеДни Цикл 
		Если УдалитьЧасы И ОтработанныйДень.Часы <> 0 Тогда
			СтрокиКУдалению.Добавить(ОтработанныйДень);
		ИначеЕсли УдалитьДни И ОтработанныйДень.Часы = 0 Тогда
			СтрокиКУдалению.Добавить(ОтработанныйДень);
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого СтрокаКУдалению Из СтрокиКУдалению Цикл 
		Объект.ОтработанныеДни.Удалить(СтрокаКУдалению);
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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