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

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

&НаКлиенте
Перем ПараметрыОбработчикаОжидания;

&НаКлиенте
Перем ФормаДлительнойОперации;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	ЗаполнитьДанныеФормыПоОрганизации();
КонецПроцедуры

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

///////////////////////////////////////////////////////
// Редактирование месяца строкой.

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПроверкаШтатногоРасписания(Команда)
	
	ПроверкаШтатногоРасписанияНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции механизма выполнения длительных операций.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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