Начальная штатная расстановка / Форма документа / Модуль формы

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

&НаКлиенте
Перем ТекущийСотрудник;

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

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

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

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

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

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

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

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

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

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

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

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

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


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

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

&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	
	НастроитьОтображениеПодразделений();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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


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

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

&НаКлиенте
Процедура СотрудникиСотрудникПриИзменении(Элемент)
	
	СотрудникиСотрудникПриИзмененииНаСервере(Элементы.Сотрудники.ТекущаяСтрока, ТекущийСотрудник);
	ТекущийСотрудник = Элементы.Сотрудники.ТекущиеДанные.Сотрудник;
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура СотрудникиДолжностьПоШтатномуРасписаниюПриИзменении(Элемент)
	
	Если ЗначениеЗаполнено(Элементы.Сотрудники.ТекущиеДанные.ДолжностьПоШтатномуРасписанию) Тогда
		
		ЗаполнитьПоДолжностиПоШтатномуРасписанию();
			
	КонецЕсли; 
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура СотрудникиГрафикРаботыПриИзменении(Элемент)
	СотрудникиГрафикРаботыПриИзмененииНаСервере();
КонецПроцедуры

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеПраваНаОтпускПоКоллекцииСтрок(Форма, КоллекцияСтрок)
	
	ПредставлениеПрава = "";
	
	Для каждого СтрокаТЧЕжегодныеОтпуска Из КоллекцияСтрок Цикл
		
		ОсновнойОтпуск = Ложь;
			
		Если СтрокаТЧЕжегодныеОтпуска.ВидЕжегодногоОтпуска = ПредопределенноеЗначение("Справочник.ВидыОтпусков.Основной") Тогда
			
			ОсновнойОтпуск = Истина;
			ПредставлениеСтроки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru='%1 (%2) дн.'"),
			СтрокаТЧЕжегодныеОтпуска.КоличествоДнейВГод,
			СтрокаТЧЕжегодныеОтпуска.КоличествоДней);
			
		Иначе
			Если ЭтоСтажевыйОтпуск(СтрокаТЧЕжегодныеОтпуска.ВидЕжегодногоОтпуска) Тогда
				ПредставлениеСтроки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru='%1 (%2) дн.'"),
				СтрокаТЧЕжегодныеОтпуска.ВидЕжегодногоОтпуска,
				СтрокаТЧЕжегодныеОтпуска.КоличествоДней);
			Иначе
				ПредставлениеСтроки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru='%1: %2 (%3) дн.'"),
				СтрокаТЧЕжегодныеОтпуска.ВидЕжегодногоОтпуска,
				СтрокаТЧЕжегодныеОтпуска.КоличествоДнейВГод,
				СтрокаТЧЕжегодныеОтпуска.КоличествоДней);
			КонецЕсли;
			
		КонецЕсли;
		
		
		Если ОсновнойОтпуск Тогда
			ПредставлениеПрава = ПредставлениеСтроки + Символы.ПС + ПредставлениеПрава;
		Иначе
			
			ПредставлениеПрава = ?(ПустаяСтрока(ПредставлениеПрава), "", ПредставлениеПрава + ",")
				+ ПредставлениеСтроки;
			
		КонецЕсли;
		
	КонецЦикла;
		
	Если ПустаяСтрока(ПредставлениеПрава) Тогда
		Если Форма.ТолькоПросмотр Тогда
			ПредставлениеПрава = НСтр("ru='Не задано'");
		Иначе
			ПредставлениеПрава = НСтр("ru='Ввести'");
		КонецЕсли;
	КонецЕсли; 
	
	Возврат ПредставлениеПрава;
	
КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеПересчетаТарифныхСтавок(СтрокаСотрудника)
	
	СовокупнаяТарифнаяСтавка = Формат(СтрокаСотрудника.СовокупнаяТарифнаяСтавка, "ЧДЦ=0; ЧН="); 
	ПорядокПересчета = ?(ЗначениеЗаполнено(СтрокаСотрудника.ПорядокРасчетаСтоимостиЕдиницыВремени),
		СтрокаСотрудника.ПорядокРасчетаСтоимостиЕдиницыВремени, НСтр("ru = 'По умолчанию'"));
		
	Возврат	СовокупнаяТарифнаяСтавка + ", " + ПорядокПересчета;
	
КонецФункции

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УдалитьДанныеСотрудников()
	
	Для Каждого ИдентификаторСтрокиСотрудника Из Элементы.Сотрудники.ВыделенныеСтроки Цикл
		СтрокаСотрудника = Объект.Сотрудники.НайтиПоИдентификатору(ИдентификаторСтрокиСотрудника);
		УдалитьДанныеСотрудника(СтрокаСотрудника.Сотрудник);
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервере
Процедура УдалитьСоответствиеСкопированныхСтрок(Ключ)
	
	ПромежуточноеСоответствиеКопируемыхСтрок = 
		ПромежуточноеСоответствие(СоответствиеКопируемыхСтрок);
		
	ПромежуточноеСоответствиеКопируемыхСтрок.Удалить(Ключ);
	
	СоответствиеКопируемыхСтрок = Новый ФиксированноеСоответствие(ПромежуточноеСоответствиеКопируемыхСтрок);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьДанныеТарифнойСеткиПоИдентификаторуСтроки(ИдентификаторСтрокиСотрудников)
	
	ТекущиеДанные = Объект.Сотрудники.НайтиПоИдентификатору(ИдентификаторСтрокиСотрудников);
	Если ТекущиеДанные <> Неопределено Тогда
		ЗаполнитьДанныеТарифнойСетки(ТекущиеДанные);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаписатьНаКлиенте(ЗакрытьПослеЗаписи, ПараметрыЗаписи, ОповещениеЗавершения = Неопределено)

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

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

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

&НаСервере
Процедура УстановитьИнформациюПоКорректностиЗаполненияОтпусковСтрокиСотрудников(СтрокаСотрудника);

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

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

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

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

	НоваяСтрокаСотрудников.КоличествоСтавок = 1;
	
	НоваяСтрокаСотрудников.СпособРасчетаАванса = СпособРасчетаАванса;
	Если НоваяСтрокаСотрудников.СпособРасчетаАванса = ПредопределенноеЗначение("Перечисление.СпособыРасчетаАванса.ПроцентомОтТарифа") Тогда
		НоваяСтрокаСотрудников.Аванс = РазмерАвансаПоУмолчанию;
	КонецЕсли;
	
	НоваяСтрокаСотрудников.ВидЗанятости = ПредопределенноеЗначение("Перечисление.ВидыЗанятости.ОсновноеМестоРаботы");
	
	НоваяСтрокаСотрудников.Подразделение = Подразделение;
	
КонецПроцедуры

&НаСервере
Процедура СотрудникиОбработкаВыбораНаСервере(ВыбранныеСотрудники)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ДатаОстатковОтпусков(Месяц)
	
	Возврат Месяц - 86400;
	
КонецФункции

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

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