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

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

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

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

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

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

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

	ОбновитьДанныеНачислений();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОтношениеКЕНВДПриИзменении(Элемент)
	ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ИтогВзносы(КоллекцияСтрок)

	ИтогВзносы = 0;
	Для Каждого Строка Из КоллекцияСтрок Цикл
		ИтогВзносы = ИтогВзносы + Строка.ИтогВзносыСтрока;
	КонецЦикла;
	
	Возврат ИтогВзносы;
	
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура РассчитатьНДФЛИВзносыНаСервере(ФизическоеЛицо = Неопределено, ЗаполнятьУдержания = Истина)

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

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

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

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

#Область ПлановыеПрочиеДоходы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбновитьРеквизитыПеречисленияНДФЛ()

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

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

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

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

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

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

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

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

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

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

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