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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервереБезКонтекста
Функция СостояниеПоВидуОтпуска(ВидОтпуска)
	Возврат СостоянияСотрудников.СостояниеПоВидуОтпуска(ВидОтпуска);
КонецФункции

&НаСервереБезКонтекста
Функция ВидОтпускаПоСостоянию(Состояние)
	Возврат СостоянияСотрудников.ВидОтпускаПоСостоянию(Состояние)
КонецФункции

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

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

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

// ЭДОБЗК

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

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

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

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

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

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

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

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

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