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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// Процедура заполняет таблицу формы в которой редактируются список сотрудников и их показатели.
// Данные для заполнения берутся из Объект.ПоказателиСотрудников.
&НаСервере
Процедура ПоказателиСотрудниковВРеквизитФормы(КоэффициентыСотрудников, ЗначенияПоказателейСотрудников, ТекущиеЗначенияПоказателей, ВремяРегистрацииСотрудников)
	
	СотрудникиДаты = Новый ТаблицаЗначений;
	СотрудникиДаты.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
	СотрудникиДаты.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
	
	УникальныеСотрудники = Новый Соответствие;
	
	Для Каждого СтрокаСотрудника Из КоэффициентыСотрудников Цикл
		
		Если УникальныеСотрудники.Получить(СтрокаСотрудника.Сотрудник) <> Неопределено Тогда 
			Продолжить;
		КонецЕсли;
		
		НоваяСтрока = СотрудникиДаты.Добавить();
		НоваяСтрока.Сотрудник = СтрокаСотрудника.Сотрудник;
		НоваяСтрока.Период = ВремяРегистрацииСотрудников.Получить(СтрокаСотрудника.Сотрудник);
		
		УникальныеСотрудники.Вставить(СтрокаСотрудника.Сотрудник, Истина);
		
	КонецЦикла;
	
	Запрос = Новый Запрос;
	
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос.УстановитьПараметр("СотрудникиДаты", СотрудникиДаты);
	
	Запрос.Текст =
		"ВЫБРАТЬ
		|	СотрудникиДаты.Период,
		|	СотрудникиДаты.Сотрудник
		|ПОМЕСТИТЬ ВТСотрудникиПериоды
		|ИЗ
		|	&СотрудникиДаты КАК СотрудникиДаты";
	
	Запрос.Выполнить();
	
	ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиПериоды");
	КадровыеДанные = "ДолжностьПоШтатномуРасписанию";
	КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, Истина, КадровыеДанные);
	
	ПозицииШтатногоРасписания = Новый Соответствие;
	
	Запрос.Текст =
		"ВЫБРАТЬ
		|	КадровыеДанныеСотрудников.Сотрудник,
		|	КадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию
		|ИЗ
		|	ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл 
		ПозицииШтатногоРасписания.Вставить(Выборка.Сотрудник, Выборка.ДолжностьПоШтатномуРасписанию);
	КонецЦикла;
	
	ПоказателиТарифныхСтавокСотрудников = ТекущиеЗначенияПоказателей.Скопировать(,"Сотрудник, ПоказательТарифнойСтавки");
	ПоказателиТарифныхСтавокСотрудников.Свернуть("Сотрудник, ПоказательТарифнойСтавки");
	
	Отбор = Новый Структура;
	
	ПоказательИнфо = Неопределено;
	ФорматнаяСтрока = Неопределено;
	
	// И коэффициенты индексации
	Для каждого КоэффициентСотрудника Из КоэффициентыСотрудников Цикл
		
		Отбор.Очистить();
		Отбор.Вставить("Сотрудник", КоэффициентСотрудника.Сотрудник);
		Строки = ПоказателиСотрудников.НайтиСтроки(Отбор);
		Если Строки.Количество() > 0 Тогда
			Строка = Строки[0];
		Иначе
			Строка = ПоказателиСотрудников.Добавить();
			Строка["Сотрудник"] = КоэффициентСотрудника.Сотрудник;
			Строка["ФиксСтрока"] = КоэффициентСотрудника.ФиксСтрока;
		КонецЕсли;
		
		Для каждого КолонкаПоказатель Из Объект.Показатели Цикл
			
			Отбор.Вставить("Показатель", КолонкаПоказатель.Показатель);
			ЗначенияПоказателяСотрудника = ЗначенияПоказателейСотрудников.НайтиСтроки(Отбор);
			
			Если ЗначенияПоказателяСотрудника.Количество() > 0 Тогда
				Строка[ИмяРеквизитаТабличноеПредставление(КолонкаПоказатель.ПутьКДанным)] = ЗначенияПоказателяСотрудника.Количество() > 1;
				Значения = Новый Массив;
				Для Каждого ЗначениеПоказателяСотрудника Из ЗначенияПоказателяСотрудника Цикл
					Строка[КолонкаПоказатель.ПутьКДанным] = ЗначениеПоказателяСотрудника.Значение;
					Значения.Добавить(ЗначениеПоказателяСотрудника.Значение);
					
					НоваяСтрока = Строка[ИмяРеквизитаТаблицаПоказателя(КолонкаПоказатель.ПутьКДанным)].Добавить();
					НоваяСтрока.ДокументОснование = ЗначениеПоказателяСотрудника.ДокументОснование;
					НоваяСтрока.Значение = ЗначениеПоказателяСотрудника.Значение;
				КонецЦикла;
				Строка[ИмяРеквизитаПредставлениеТаблицы(КолонкаПоказатель.ПутьКДанным)] = СтрСоединить(Значения, "; ");
			КонецЕсли;
			
			Если НЕ ТекущиеЗначенияПоказателей = Неопределено Тогда
				
				ТекущиеЗначенияПоказателя = ТекущиеЗначенияПоказателей.НайтиСтроки(Отбор);
				Если ТекущиеЗначенияПоказателя.Количество() > 0 Тогда
					ПоказательИнфо = ЗарплатаКадрыРасширенный.СведенияОПоказателеРасчетаЗарплаты(КолонкаПоказатель.Показатель);	
					ФорматнаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ЧДЦ=%1; ЧРГ=", ПоказательИнфо["Точность"]);
					Значения = Новый Массив;
					Для Каждого ТекущееЗначениеПоказателя Из ТекущиеЗначенияПоказателя Цикл
						Строка[ИмяРеквизитаПоказательИспользуется(КолонкаПоказатель.ПутьКДанным)] = Истина;
						Строка[ИмяРеквизитаПоказательТекущееЗначение(КолонкаПоказатель.ПутьКДанным)] = ТекущееЗначениеПоказателя.Значение;
						
						СуммаПодстановки = Строка(Формат(ТекущееЗначениеПоказателя.Значение, ФорматнаяСтрока));
						Значения.Добавить(СуммаПодстановки);
						
						НоваяСтрока = Строка[ИмяРеквизитаТаблицаТекущиеЗначенияПоказателя(КолонкаПоказатель.ПутьКДанным)].Добавить();
						НоваяСтрока.ДокументОснование = ТекущееЗначениеПоказателя.ДокументОснование;
						НоваяСтрока.Значение = ТекущееЗначениеПоказателя.Значение;
					КонецЦикла;
					
					ПредставлениеТекущего = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(СтрСоединить(Значения, "; "), 9, " ");
					Строка[ИмяРеквизитаПоказательТекущееЗначениеПредставление(КолонкаПоказатель.ПутьКДанным)] =
						СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'было: %1'"),ПредставлениеТекущего);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
		
		Строка["КоэффициентИндексацииСотрудника"] = КоэффициентСотрудника.КоэффициентИндексации;
		Строка.ДолжностьПоШтатномуРасписанию = ПозицииШтатногоРасписания.Получить(КоэффициентСотрудника.Сотрудник);
		Строка.ВремяРегистрации = ВремяРегистрацииСотрудников.Получить(Строка.Сотрудник);
		
	КонецЦикла;
	
	Для каждого ПоказательТарифнойСтавкиСотрудника Из ПоказателиТарифныхСтавокСотрудников Цикл
		
		Отбор.Очистить();
		Отбор.Вставить("Сотрудник", ПоказательТарифнойСтавкиСотрудника.Сотрудник);
		Строки = ПоказателиСотрудников.НайтиСтроки(Отбор);
		Если Строки.Количество() > 0 Тогда
			Строка = Строки[0];
		Иначе
			Строка = ПоказателиСотрудников.Добавить();
			Строка["Сотрудник"] = ПоказательТарифнойСтавкиСотрудника.Сотрудник;
		КонецЕсли;
		
		Строка["ПоказательТарифнойСтавки"] = ПоказательТарифнойСтавкиСотрудника["ПоказательТарифнойСтавки"];
		
	КонецЦикла;
	
	КоэффициентыСотрудников.Очистить();
	ЗначенияПоказателейСотрудников.Очистить();
	
КонецПроцедуры

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

&НаСервере
Процедура РеквизитВДанные(ТекущийОбъект)
	ПоказателиСотрудниковВДанныеФормы(ТекущийОбъект);
КонецПроцедуры	

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

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

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

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

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

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

#Область ФОТ

&НаСервере
Процедура ЗаполнитьФОТПоСотрудникам()
	Для каждого СтрокаСотрудника Из ПоказателиСотрудников Цикл
		СтрокаСотрудника.ФОТ = ФОТСотрудника(СтрокаСотрудника.Сотрудник);
	КонецЦикла;
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

#Область Отрисовка_формы

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

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

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

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

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

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

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

&НаСервере
Функция ИмяГруппаПоказатель()
	Возврат "ГруппаПоказатель";
КонецФункции 

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

&НаСервере
Функция ИмяРеквизитаПоказательТекущееЗначение(ИмяРеквизита)
	Возврат ИмяРеквизита + "ТекущееЗначение";
КонецФункции

&НаСервере
Функция ИмяРеквизитаПоказательТекущееЗначениеПредставление(ИмяРеквизита)
	Возврат ИмяРеквизита + "ТекущееЗначениеПредставление";
КонецФункции

&НаСервере
Функция ИмяРеквизитаПоказатель(НовоеЗначение, ИмяРеквизита)
	Возврат ?(НовоеЗначение, ИмяРеквизита, ИмяРеквизитаПоказательТекущееЗначениеПредставление(ИмяРеквизита));
КонецФункции

&НаСервере
Функция ИмяРеквизитаТаблицаПоказателя(ИмяРеквизита)
	Возврат ИмяРеквизита + "Таблица";
КонецФункции 

&НаСервере
Функция ИмяРеквизитаТаблицаТекущиеЗначенияПоказателя(ИмяРеквизита)
	Возврат ИмяРеквизита + "ТаблицаТекущиеЗначения";
КонецФункции 

&НаСервере
Функция ИмяРеквизитаПредставлениеТаблицы(ИмяРеквизита)
	Возврат ИмяРеквизита + "ПредставлениеТаблицы";
КонецФункции 

&НаСервере
Функция ИмяРеквизитаТабличноеПредставление(ИмяРеквизита)
	Возврат ИмяРеквизита + "ТабличноеПредставление";
КонецФункции 

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

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

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

#Область Серверные_обработчики_событий_формы

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

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

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

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

&НаСервере
Процедура КоэффициентИндексацииПриИзмененииНаСервере()
	ПересчитатьФорму();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ЗаполнитьПоказателиПоУмолчанию

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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