Оплата дней ухода за детьми-инвалидами / Форма документа / Модуль формы

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

///////////////////////////////////////////////////////////////////////////////
// Подключение механизма расчета начислений.

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

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

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

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

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

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

	ОписаниеТаблицы.ИмяРеквизитаПериод 							= "ПериодРегистрации";
	ОписаниеТаблицы.ИмяРеквизитаДокументОснование 				= "ДокументОснование";
	
	Возврат ОписаниеТаблицы;
	
КонецФункции

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыКорректировкиВыплаты()
	
	ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыКорректировкиВыплаты();
	Возврат ОписаниеТаблицы;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

///////////////////////////////////////////////////////////////////////////////
// Обслуживание элементов формы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Объект.Начисления.Очистить();
	Объект.НачисленияПерерасчет.Очистить();
	Объект.РаспределениеПоТерриториямУсловиямТруда.Очистить();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ОбновитьВариантРасчета()

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

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

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

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

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

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

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

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

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

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

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

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

#Область УточнениеВидаВремени

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

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

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

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

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

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

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

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


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

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

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

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