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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	СотрудникиФизическихЛиц = СотрудникиФизическихЛиц(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметр.ФизическоеЛицо));

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область РедактированиеМесяцаСтрокой

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция КлючНастройкиКодДоходаНДФЛ()
	Возврат "КодДоходаНДФЛ" + Строка(Объект.ВидПризаПодарка);
КонецФункции

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

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

&НаСервере
Процедура УстановитьКатегориюДохода()
	
	Объект.КатегорияДохода = УчетНДФЛПовтИсп.КатегорияДоходаПоЕгоКоду(Объект.КодДоходаНДФЛ);
	УстановитьКатегориюДоходаНДФЛ();
	
КонецПроцедуры

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

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

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

&НаСервере
Функция НДФЛПодробнееНаСервере(ФизическиеЛица) Экспорт

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ПредусмотреноКолдоговоромПриИзмененииНаСервере()
	УстановитьВидДоходаСтраховыхВзносов();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#Область КонтролируемыеПоля

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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