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

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

&НаКлиенте
Перем СтарыеЗначенияКонтролируемыхПолей;

&НаКлиенте
Перем АктивизированныйСотрудник;

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

&НаКлиенте
Перем СотрудникиКРасчету Экспорт;

&НаКлиенте
Перем ЗакрытьПослеЗаписи;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ПорядокВыплатыПриИзменении(Элемент)
	
	ПорядокВыплатыПриИзмененииНаСервере();

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

&НаКлиенте
Процедура Подключаемый_ПланируемаяДатаВыплатыПриИзменении(Элемент)
	
	ПланируемаяДатаВыплатыПриИзмененииНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбораЗавершение(Дата, ДополнительныеПараметры) Экспорт
	
	Если ЗначениеЗаполнено(Дата) Тогда
		Объект.ДатаПервичногоДокумента = Дата;
		ДатаПервичногоДокументаПредставление = Формат(Дата,"ДФ=dd.MM.yyyy");
		Модифицированность = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаПервичногоДокументаОчистка(Элемент, СтандартнаяОбработка)
	Объект.ДатаПервичногоДокумента = Дата(1,1,1);
	Модифицированность = Истина;
КонецПроцедуры

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

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

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

// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисленияДолейРКСН

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

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

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

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

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

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

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

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

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

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

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

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

// ИнтеграцияС1САрхивом

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

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

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

// Конец ИнтеграцияС1САрхивом

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПересчитатьДокумент(Команда)
	ПересчитатьДокументНаКлиенте();
КонецПроцедуры

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

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

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

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

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

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


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

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

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

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

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

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

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

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

&НаКлиенте
Процедура УстановитьПоляИсправленияНаКлиенте() Экспорт
	
	УстановитьПоляИсправления(ЭтаФорма);

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПоляИсправления(Форма)

	ИсправлениеДокументовЗарплатаКадрыКлиентСервер.УстановитьПоляИсправления(Форма);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ПолучитьКонтролируемыеПоля()Экспорт
	
	НачисленияФиксРасчет = Новый Массив;
	НачисленияФиксРасчет.Добавить("Результат");
	
	НачисленияПерерасчетФиксРасчет = Новый Массив;
	НачисленияПерерасчетФиксРасчет.Добавить("Результат");
	НачисленияПерерасчетФиксРасчет.Добавить("ОтработаноДней");
	НачисленияПерерасчетФиксРасчет.Добавить("ОтработаноЧасов");
	НачисленияПерерасчетФиксРасчет.Добавить("НормаДней");
	НачисленияПерерасчетФиксРасчет.Добавить("НормаЧасов");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УстановитьИнфоНадписьВидПростоя()
	
	Если ПозицияСелектораОбстоятельств = 0 Тогда
		Текст = НСтр("ru = 'Время простоя не будет оплачено'");
		НомерСтраницыВариантов = 0;
	ИначеЕсли ПозицияСелектораОбстоятельств = 1 Тогда
		Текст = НСтр("ru = 'Время простоя будет оплачено по среднему заработку'");
		НомерСтраницыВариантов = 0;
	ИначеЕсли ПозицияСелектораОбстоятельств = 2 Тогда
		Текст = НСтр("ru = 'Время простоя будет оплачено по текущему тарифу сотрудника'");
		НомерСтраницыВариантов = 0;
	ИначеЕсли ПозицияСелектораОбстоятельств = 3 Тогда
		Текст = НСтр("ru = 'Время отстранения не будет оплачено'");
		НомерСтраницыВариантов = 1;
	ИначеЕсли ПозицияСелектораОбстоятельств = 4 Тогда
		Текст = НСтр("ru = 'Время отстранения будет оплачено по текущему тарифу сотрудника'");
		НомерСтраницыВариантов = 1;
	ИначеЕсли ПозицияСелектораОбстоятельств = 5 Тогда
		Текст = НСтр("ru = 'Время приостановки работы будет оплачено по текущему тарифу сотрудника'");
		НомерСтраницыВариантов = 2;
	КонецЕсли;
	
	Если НомерСтраницыВариантов = 0 Тогда
		Элементы.СелекторОбстоятельств.ТекущаяСтраница = Элементы.СтраницаПростой;
	ИначеЕсли НомерСтраницыВариантов = 1 Тогда
		Элементы.СелекторОбстоятельств.ТекущаяСтраница = Элементы.СтраницаОтстранение;
	ИначеЕсли НомерСтраницыВариантов = 2 Тогда
		Элементы.СелекторОбстоятельств.ТекущаяСтраница = Элементы.СтраницаДругиеВарианты;
	КонецЕсли;
	
	Элементы.Информация.РасширеннаяПодсказка.Заголовок = Текст;
	
КонецПроцедуры

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

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

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

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

&НаСервере

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РаспределениеПоТерриториямУсловиямТруда

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область УточнениеВидаВремени

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

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

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

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

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

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

#Область СреднийЗаработок

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

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

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

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

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

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

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

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

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

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

КонецФункции

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

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

&НаСервере
Функция ИспользоватьСреднечасовойЗаработок(ДанныеСотрудника)
	
	Если ДанныеСотрудника.Свойство("ВремяВЧасах") Тогда 
		Возврат ДанныеСотрудника["ВремяВЧасах"];
	КонецЕсли;
	
	Возврат ИспользуетсяСреднечасовойЗаработок;
	
КонецФункции

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

&НаСервере
Функция КоэффициентыРаспределенияСреднегоЗаработкаДокумента()

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

КонецФункции

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

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

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

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

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

#Область Инициализация

СтарыеЗначенияКонтролируемыхПолей = Новый Соответствие;
СотрудникиКРасчету = Новый Соответствие;
ЗакрытьПослеЗаписи = Ложь;

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

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