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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

&НаКлиенте
Процедура СотрудникиПослеУдаления(Элемент)
	
	Если ЗначениеЗаполнено(ИдентификаторТекущейСтрокиСотрудника) Тогда
		УдалитьДанныеПоСотрудникам(ИдентификаторТекущейСтрокиСотрудника);
		ИдентификаторТекущейСтрокиСотрудника = 0;
	КонецЕсли;
	
КонецПроцедуры

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

	
	ЗаполнитьЗначенияСовокупныхТарифныхСтавокСотрудников(СтрокиСотрудников, РассчитанныеДанные.ТарифныеСтавки);
	
КонецПроцедуры

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

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

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

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

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

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

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

	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаСервере
Процедура ДобавитьБухучетНачислений(ИзмеренияДаты, МассивНачислений, ИдентификаторСтрокиСотрудника)

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

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

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

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

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

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

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

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

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