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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ПодготовитьСтруктуруОбъектаДляРасчетаДенежногоСодержания() 

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

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

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

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

БлокировкаИзмененияОбъектовКлиент.РазблокироватьФормуОбъекта(ЭтотОбъект, Объект.Ссылка);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ИнициализацияФормы

&НаСервере
Процедура ПриПолученииДанныхНаСервере()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура РассчитатьНачисленияНаСервере(ВыводитьСообщения = Ложь)
	
	ВремяНачалаЗамера = ОценкаПроизводительности.НачатьЗамерВремени();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат ОписаниеДокумента;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если Форма.Объект.БухучетУказываетсяРаспределением Тогда
		Форма.Элементы.СтраницыБухучет.ТекущаяСтраница = Форма.Элементы.СтраницаБухучетРаспределение;
	Иначе
		Форма.Элементы.СтраницыБухучет.ТекущаяСтраница = Форма.Элементы.СтраницаБухучет;
	КонецЕсли;

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

&НаКлиенте
Процедура ИзменитьБухучетРаспределениеЗавершение(Результат, Параметры) Экспорт

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

&НаСервере
Процедура ИзменитьБухучетРаспределениеЗавершениеНаСервере(Результат)

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

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

&НаСервере
Процедура ЗаполнитьПредставлениеРаспределенияБухучета()

	Элементы.ПредставлениеРаспределенияБухучета.Заголовок = ОтражениеЗарплатыВБухучетеРасширенный.ПредставлениеРаспределенияБухучетаДокумента(Объект.НастройкиБухучета);

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

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

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

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

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

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