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