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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ТекущиеПозицииПодробно(Команда)
	ТекущиеПозицииПодробноНаСервере();
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ДополнитьПоТекущейКадровойРасстановке(Команда)
	
	ДополнитьПоТекущейКадровойРасстановкеНаКлиенте();
	
КонецПроцедуры

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

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

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

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

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


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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьВидимостьКолонокТекущихЗначений()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОтображаемыеПоказатели

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

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

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

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

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

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

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

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

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

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