Начисление прочих доходов / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если Не ЗначениеЗаполнено(ЭтотОбъект.ДолжностьИсполнителя) Тогда
		ДанныеЗаполнения.Свойство("ДолжностьИсполнителя", ЭтотОбъект.ДолжностьИсполнителя);
	КонецЕсли;

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

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

#Область ЗаполнениеИРасчет	

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

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

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

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

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

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

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

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

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