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