Начисление за первую половину месяца / Форма документа / Модуль формы

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

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

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

&НаКлиенте
Перем НДФЛВычетыПередУдалением;

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

///////////////////////////////////////////////////////////////////////////////
// Редактирование месяца строкой.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ИзменитьЛичныеВычеты(Команда)
	УчетНДФЛКлиентРасширенный.ИзменитьЛичныеВычеты(ЭтаФорма);
КонецПроцедуры

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

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

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

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

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

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

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

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

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

#Область ПодключаемыеКомандыУдалитьСотрудника

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

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

&НаКлиенте
Процедура Подключаемый_НДФЛУдалитьСотрудника(Команда)
	
	ТекущиеДанные = Элементы.НДФЛ.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено Тогда 
		УдалитьСотрудникаНаСервере(ТекущиеДанные.ФизическоеЛицо);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

///////////////////////////////////////////////////////////////////////////////
// Обработчики событий таблицы Начисления.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////
// Обработчики событий таблицы Удержания.

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

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

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////
// Обработчики событий таблицы НДФЛ.

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

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

&НаКлиенте
Процедура НДФЛПередНачаломИзменения(Элемент, Отказ)
	// Механизм закладки примененные вычеты.
	УчетНДФЛКлиент.НДФЛПередНачаломИзменения(ЭтаФорма, Элементы.НДФЛ.ТекущиеДанные, Отказ);
КонецПроцедуры

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

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

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////
// Обработчики событий таблиц ПримененныеВычетыКДоходам.

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

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

////////////////////////////////////////////////////////////////////////////////
// Обработчики событий таблиц ПримененныеВычетыИИмущественные (на детей и имущественные).

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

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

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

&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПослеУдаления(Элемент, Отказ)
	
	ВычетыПослеУдаления(НДФЛВычетыПередУдалением,"ИдентификаторСтрокиНДФЛ");
	ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция СтруктураОписанияТаблицДляРаспределенияРезультата()

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

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

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

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

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

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

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

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

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

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

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

// Период начисления
&НаКлиенте
Процедура УстановитьПериодНачисления()
	
	Объект.ОкончаниеПериодаНачисления = Дата(Год(Объект.МесяцНачисления), Месяц(Объект.МесяцНачисления), 15);
	
КонецПроцедуры

// Заполнение и расчет начислений.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Возврат Описание;
КонецФункции

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

	Возврат Описание;
КонецФункции

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

&НаКлиентеНаСервереБезКонтекста
Функция ОписанияТаблицДляРаспределенияРезультата()

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьВторичныеДанныеФормыПримененныеВычеты()
	
	УчетНДФЛФормы.ЗаполнитьВторичныеДанныеТабличныхЧастей(ЭтаФорма);
	
КонецПроцедуры

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

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

&НаСервере
Процедура ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ()
	
	УчетНДФЛФормы.ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

	Возврат КонтролируемыеПоля;
	
КонецФункции

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура УдалитьСотрудникаНаСервере(Сотрудник)
	
	Если Не УдалитьДанныеСотрудникаНаСервере(Сотрудник) Тогда 
		РассчитатьСотрудникаНаСервере(Сотрудник);
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Процедура УдержанияПослеУдаленияНаСервере()
	
	РассчитатьИтогУдержано(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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