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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОтношениеКЕНВДПриИзменении(Элемент)
	ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ОткрытьЗаявкуСотрудника(Команда)

	ПоказатьЗначение(, Объект.ЗаявкаСотрудника);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОформитьОтпускБезОплатыСовместителю(Команда)
	
	Совместитель = Неопределено;
	ОрганизацияСовместителя = Неопределено;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗавершитьИнициализациюФормы(ТекущийОбъект)

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

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

	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

	УточнитьПризнакДлительнойКомандировки();
		
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

	УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);

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

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

&НаСервере
Процедура ЗаполнитьТаблицуКоэффициентыРаспределенияСреднегоЗаработка()

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

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

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

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

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

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

	Возврат КадровыйУчетРасширенныйКлиентСервер.ОписаниеТаблицыСохраняемоеДенежноеСодержание();

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

///////////////////////////////////////////////////////////////////////////////
// Механизмы связанные с регистрацией внутрисменных отклонений.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОтсутствияПоДругимМестамРаботы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ЭДОБЗК

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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