#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПодписиДокументов.ПриСозданииНаСервере(ЭтотОбъект);
Если Параметры.Ключ.Пустая() Тогда
ЗначенияДляЗаполнения = Новый Структура("Организация, Ответственный, МесяцРасчета",
"Объект.Организация",
"Объект.Ответственный",
"Объект.ПериодРегистрации");
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтотОбъект, ЗначенияДляЗаполнения);
Если Не ЗначениеЗаполнено(Объект.ПериодРегистрации) Тогда
Объект.ПериодРегистрации = НачалоМесяца(ТекущаяДатаСеанса());
КонецЕсли;
Объект.РаспределятьРезультатыРасчета = Истина;
Объект.ПланируемаяДатаВыплаты = НачалоДня(ТекущаяДатаСеанса()) + 86400;
ЗаполнитьДанныеФормыПоОрганизации();
ЗарплатаКадрыРасширенный.УстановитьНаименованиеПервичногоДокумента(Объект);
ПриПолученииДанныхНаСервере();
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ФинансовыйУчет") Тогда
МодульФинансовыйУчетФормы = ОбщегоНазначения.ОбщийМодуль("ФинансовыйУчетФормы");
МодульФинансовыйУчетФормы.ДокументВыплатыРаботыУслугиДополнитьФорму(ЭтотОбъект);
КонецЕсли;
КонецЕсли;
ДатаПрежняя = Объект.Дата;
ДатаПлатежаНДФЛПрежняя = Объект.ДатаПлатежаНДФЛ;
ПеречислениеНДФЛРеквизитыПрежняя = Объект.ПеречислениеНДФЛРеквизиты;
ПеречислениеНДФЛВыполненоПрежняя = Объект.ПеречислениеНДФЛВыполнено;
ОбновитьФормуПоНастройкамПеречисленияНДФЛ(ЭтотОбъект, Объект.ПеречислениеНДФЛВыполнено, Объект.РегистрироватьВыплатуВедомостью);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПриПолученииДанныхНаСервере();
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ФинансовыйУчет") Тогда
МодульФинансовыйУчетФормы = ОбщегоНазначения.ОбщийМодуль("ФинансовыйУчетФормы");
МодульФинансовыйУчетФормы.ДокументВыплатыРаботыУслугиДополнитьФорму(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УстановитьДоступностьКодаВычета();
УстановитьДоступностьСуммыВычета();
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
РеквизитВДанные(ТекущийОбъект);
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Отказ);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(
ЭтотОбъект,
ТекущийОбъект,
ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗакрытием(ЭтотОбъект, Объект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ПриПолученииДанныхНаСервере();
ПодписиДокументов.ПослеЗаписиНаСервере(ЭтотОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Оповестить("Запись_ВыплатаБывшимСотрудникам", ПараметрыЗаписи, Объект.Ссылка);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
РеквизитВДанные(ТекущийОбъект);
Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда
Отказ = Истина;
КонецЕсли;
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ИзмененыРезультатыРасчетаНДФЛ" И Источник.ВладелецФормы = ЭтотОбъект Тогда
ОбновитьДанныеНДФЛНаСервере(Параметр);
ИначеЕсли ИмяСобытия = "ИзмененыРезультатыРасчетаУдержаний" И Источник.ВладелецФормы = ЭтотОбъект Тогда
ОбновитьДанныеУдержанийНаСервере(Параметр);
ИначеЕсли ИмяСобытия = "ИзмененСохраняемыйЗаработокНаВремяТрудоустройства" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеСохраняемогоСреднегоЗаработка(Параметр);
КонецЕсли;
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ЗарплатаКадрыРасширенныйКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтотОбъект);
ОбработатьИзменениеОрганизацииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
ОбработатьИзменениеДатыДокументаНаСервере();
ДатаПрежняя = Объект.Дата;
УстановитьОтветственныхЛиц();
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НомерПриИзменении(Элемент)
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВидВыплатыПриИзменении(Элемент)
ОбработатьВидВыплатыПриИзмененииНаСервере();
УстановитьДоступностьКодаВычета();
УстановитьДоступностьСуммыВычета();
КонецПроцедуры
&НаКлиенте
Процедура ПланируемаяДатаВыплатыПриИзменении(Элемент)
Если Объект.ПеречислениеНДФЛВыполнено И (Не ЗначениеЗаполнено(Объект.ДатаПлатежаНДФЛ) Или Объект.ДатаПлатежаНДФЛ < Объект.ПланируемаяДатаВыплаты) Тогда
Объект.ДатаПлатежаНДФЛ = Объект.ПланируемаяДатаВыплаты;
КонецЕсли;
РассчитатьНДФЛИВзносыВсем();
КонецПроцедуры
&НаКлиенте
Процедура КодВычетаНДФЛПриИзменении(Элемент)
ОчиститьРезультатыВСтрокахТаблицы();
УстановитьДоступностьСуммыВычета();
РассчитатьНДФЛИВзносыВсем();
КонецПроцедуры
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
Если ПодразделениеПрежнее <> Объект.Подразделение Тогда
РассчитатьНДФЛИВзносыВсем();
КонецЕсли;
ПодразделениеПрежнее = Объект.Подразделение;
КонецПроцедуры
#Область РедактированиеМесяцаСтрокой
&НаКлиенте
Процедура ПериодРегистрацииПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтотОбъект, "Объект.ПериодРегистрации", "ПериодРегистрацииСтрокой", Модифицированность);
ПриИзмененииПериодаРегистрации();
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ПериодРегистрацииНачалоВыбораЗавершение", ЭтотОбъект);
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтотОбъект, ЭтотОбъект, "Объект.ПериодРегистрации", "ПериодРегистрацииСтрокой", , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
ПриИзмененииПериодаРегистрации();
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтотОбъект, "Объект.ПериодРегистрации", "ПериодРегистрацииСтрокой", Направление, Модифицированность);
ПодключитьОбработчикОжидания("ОбработчикОжиданияПериодаРегистрацииПриИзменении", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПериодРегистрацииОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область РеквизитыПервичногоДокумента
&НаКлиенте
Процедура НаименованиеПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ОткрытьФормуСпискаЗначенийСтроковогоРеквизита(Элемент,
СтандартнаяОбработка, "ПервичныйДокумент", НСтр("ru = 'Первичные документы'"), НСтр("ru = 'Первичный документ'"));
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда
Объект.НаименованиеПервичногоДокумента = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ПодборЗначенияСтроковогоРеквизита(Текст, ДанныеВыбора, СтандартнаяОбработка, "ПервичныйДокумент");
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения("ДатаПервичногоДокументаНачалоВыбораЗавершение", ЭтотОбъект);
ПоказатьВводДаты(Оповещение, ?(ЗначениеЗаполнено(Объект.ДатаПервичногоДокумента), Объект.ДатаПервичногоДокумента, Объект.Дата), НСтр("ru='Дата первичного документа'"), ЧастиДаты.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбораЗавершение(Дата, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(Дата) Тогда
Объект.ДатаПервичногоДокумента = Дата;
ДатаПервичногоДокументаПредставление = Формат(Дата,"ДФ=dd.MM.yyyy");
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаОчистка(Элемент, СтандартнаяОбработка)
Объект.ДатаПервичногоДокумента = Дата(1,1,1);
Модифицированность = Истина;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура РегистрироватьВыплатуВедомостьюПриИзменении(Элемент)
Если Объект.РегистрироватьВыплатуВедомостью Тогда
ПеречислениеНДФЛВыполненоПрежняя = Объект.ПеречислениеНДФЛВыполнено;
Объект.ПеречислениеНДФЛВыполнено = Ложь;
Иначе
Объект.ПеречислениеНДФЛВыполнено = ПеречислениеНДФЛВыполненоПрежняя;
КонецЕсли;
ОбновитьРеквизитыПеречисленияНДФЛ();
ОбновитьФормуПоНастройкамПеречисленияНДФЛ(ЭтотОбъект, Объект.ПеречислениеНДФЛВыполнено, Объект.РегистрироватьВыплатуВедомостью);
КонецПроцедуры
&НаКлиенте
Процедура ПеречислениеНДФЛВыполненоПриИзменении(Элемент)
ОбновитьРеквизитыПеречисленияНДФЛ();
ОбновитьФормуПоНастройкамПеречисленияНДФЛ(ЭтотОбъект, Объект.ПеречислениеНДФЛВыполнено, Объект.РегистрироватьВыплатуВедомостью);
КонецПроцедуры
&НаКлиенте
Процедура СтатьяФинансированияПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура СтатьяРасходовПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура СпособОтраженияЗарплатыВБухучетеПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура ОтношениеКЕНВДПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисления
&НаКлиенте
Процедура НачисленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ЗарплатаКадрыРасширенныйКлиент.ВыполнитьКомандуПросмотрСтраховыхВзносов(ЭтотОбъект, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
ПодробнееОРасчетеНДФЛ(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
ОткрытьФормуСохраняемыйСреднийЗаработок(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачислений(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияФизическоеЛицоПриИзменении(Элемент)
ДанныеСтроки = Элементы.НачисленияУдержанияВзносы.ТекущиеДанные;
Если ДанныеСтроки.ФизическоеЛицо <> УдаляемоеФизическоеЛицо Тогда
УдалитьДанныеУдаляемогоФизическогоЛица();
УдаляемоеФизическоеЛицо = ДанныеСтроки.ФизическоеЛицо;
ДанныеСтроки.ФиксСуммаВычета = Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеСтроки.ФизическоеЛицо)
И НЕ ДатаРожденияЗаполнена(ДанныеСтроки.ФизическоеЛицо)
И Объект.ПланируемаяДатаВыплаты < УчетСтраховыхВзносовКлиентСервер.ДатаОбъединенияСтраховойИНакопительнойЧастейВзносовПФР() Тогда
ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='У %1 не заполнена дата рождения'"),
ДанныеСтроки.ФизическоеЛицо);
ДанныеСтроки.ФизическоеЛицо = ПредопределенноеЗначение("Справочник.ФизическиеЛица.ПустаяСсылка");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
РассчитатьНДФЛиВзносыПоТекущейСтроке();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияНачисленоПриИзменении(Элемент)
ДанныеСтроки = Элементы.НачисленияУдержанияВзносы.ТекущиеДанные;
Если ДанныеСтроки <> Неопределено Тогда
ДанныеСтроки.ФиксСуммаВычета = Ложь;
КонецЕсли;
РассчитатьНДФЛиВзносыПоТекущейСтроке();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияСуммаВычетаПриИзменении(Элемент)
ДанныеСтроки = Элементы.НачисленияУдержанияВзносы.ТекущиеДанные;
Если ДанныеСтроки <> Неопределено Тогда
ДанныеСтроки.ФиксСуммаВычета = Истина;
КонецЕсли;
РассчитатьНДФЛиВзносыПоТекущейСтроке();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияНДФЛПриИзменении(Элемент)
Если РасчетНДФЛНарастающимИтогомСНачалаГода Тогда
Возврат;
КонецЕсли;
ЗаполнитьКВыплатеПоСтроке(ЭтотОбъект, Элементы.НачисленияУдержанияВзносы.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияУдержанияВзносыПередУдалением(Элемент, Отказ)
Если Элементы.НачисленияУдержанияВзносы.ТекущиеДанные <> Неопределено Тогда
УдаляемоеФизическоеЛицо = Элементы.НачисленияУдержанияВзносы.ТекущиеДанные.ФизическоеЛицо;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияУдержанияВзносыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если Элементы.НачисленияУдержанияВзносы.ТекущиеДанные <> Неопределено Тогда
Если НоваяСтрока И Копирование Тогда
Элементы.НачисленияУдержанияВзносы.ТекущиеДанные.ФизическоеЛицо = ПредопределенноеЗначение("Справочник.ФизическиеЛица.ПустаяСсылка");
Иначе
УдаляемоеФизическоеЛицо = Элементы.НачисленияУдержанияВзносы.ТекущиеДанные.ФизическоеЛицо;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияУдержанияВзносыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
УдаляемоеФизическоеЛицо = ПредопределенноеЗначение("Справочник.ФизическиеЛица.ПустаяСсылка");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
ДобавитьНовыеСтроки(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ВыбранноеЗначение));
ИначеЕсли ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда
ДобавитьНовыеСтроки(ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияУдержанияВзносыПослеУдаления(Элемент)
УдалитьДанныеУдаляемогоФизическогоЛица();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияУдержанияВзносыСкидкаПоВзносамПриИзменении(Элемент)
ДанныеСтроки = Элементы.НачисленияУдержанияВзносы.ТекущиеДанные;
Если ДанныеСтроки <> Неопределено Тогда
ДанныеСтроки.ФиксСуммаВычета = Истина;
КонецЕсли;
РассчитатьНДФЛиВзносыПоТекущейСтроке();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПодборБывшихСотрудников(Команда)
ФизическиеЛицаЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуПодбораФизическихЛицПоРоли(
Элементы.НачисленияУдержанияВзносы,
Объект.Организация,
ПредопределенноеЗначение("Перечисление.РолиФизическихЛиц.БывшийСотрудник"),
АдресСпискаПодобранныхФизическихЛиц());
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьСотрудника(Команда)
ПересчитатьСотрудникаНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементПриИзменении(Элемент)
ПодписиДокументовКлиент.ПриИзмененииПодписывающегоЛица(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементНажатие(Элемент)
ПодписиДокументовКлиент.РасширеннаяПодсказкаНажатие(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура ВводДанныхОПеречисленииНДФЛ(Команда)
ЗарплатаКадрыРасширенныйКлиент.ВвестиДанныеОПеречисленииНДФЛВБюджет(ЭтотОбъект, Объект.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(
Команда,
ЭтотОбъект,
Объект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ОбработчикиСобытийПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Команда, Объект)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Контекст, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийСледующемуНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьДанныеУдаляемогоФизическогоЛица()
Если ЗначениеЗаполнено(УдаляемоеФизическоеЛицо) Тогда
УдалитьДанныеНДФЛФизическогоЛица(Объект, УдаляемоеФизическоеЛицо);
СтрокиФизическогоЛица = Объект.НачисленияУдержанияВзносы.НайтиСтроки(Новый Структура("ФизическоеЛицо", УдаляемоеФизическоеЛицо));
Если СтрокиФизическогоЛица.Количество() > 0 Тогда
РассчитатьНДФЛиВзносыВСтроке(СтрокиФизическогоЛица[0].ПолучитьИдентификатор());
Иначе
Отбор = Новый Структура("ФизическоеЛицо", УдаляемоеФизическоеЛицо);
УдаляемыеУдержания = Объект.Удержания.НайтиСтроки(Отбор);
ИдентификаторыСтрок = Новый Соответствие;
Для Каждого Удержание Из УдаляемыеУдержания Цикл
ИдентификаторыСтрок.Вставить(Удержание.ИдентификаторСтрокиВидаРасчета, Истина);
Объект.Удержания.Удалить(Удержание);
КонецЦикла;
Если ИдентификаторыСтрок.Количество() > 0 Тогда
КоличествоСтрок = Объект.Показатели.Количество();
Для Сч = 1 По КоличествоСтрок Цикл
СтрокаТаблицы = Объект.Показатели[КоличествоСтрок - Сч];
Если ИдентификаторыСтрок[СтрокаТаблицы.ИдентификаторСтрокиВидаРасчета] <> Неопределено Тогда
Объект.Показатели.Удалить(СтрокаТаблицы);
КонецЕсли;
КонецЦикла;
КонецЕсли;
УдаляемыеКоэффициентыРаспределения = Объект.КоэффициентыРаспределенияПособия.НайтиСтроки(Отбор);
Для Каждого СтрокаТаблицы Из УдаляемыеКоэффициентыРаспределения Цикл
Объект.КоэффициентыРаспределенияПособия.Удалить(СтрокаТаблицы);
КонецЦикла;
КонецЕсли;
УдаляемоеФизическоеЛицо = ПредопределенноеЗначение("Справочник.ФизическиеЛица.ПустаяСсылка");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьНачисленияСотрудника(Сотрудники, СохранятьИсправления = Истина) Экспорт
РассчитатьНДФЛИВзносыНаСервере(Сотрудники, Не СохранятьИсправления);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьСуммыВычета()
Элементы.НачисленияСуммаВычета.ТолькоПросмотр = Не ЗначениеЗаполнено(Объект.КодВычетаНДФЛ);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьКодаВычета()
Элементы.КодВычетаНДФЛ.ТолькоПросмотр = НЕ ЗначениеЗаполнено(КодДоходаНДФЛ);
КонецПроцедуры
&НаКлиенте
Процедура ПодробнееОРасчетеНДФЛ(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя <> "НачисленияНДФЛ" Тогда
Возврат;
КонецЕсли;
Если Не РасчетНДФЛНарастающимИтогомСНачалаГода Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ФизическоеЛицо = Элементы.НачисленияУдержанияВзносы.ТекущиеДанные.ФизическоеЛицо;
УчетНДФЛКлиент.ОткрытьФормуПодробнееОРасчетеНДФЛ(Объект.Организация, ЭтотОбъект, Объект.ПериодРегистрации, ФизическоеЛицо,
Объект.ПланируемаяДатаВыплаты, Не Объект.РаспределятьРезультатыРасчета);
КонецПроцедуры
&НаКлиенте
Процедура ПодробнееОРасчетеУдержаний(Команда)
ОписаниеДокумента = ОписаниеДокумента();
Если Не Объект.РаспределятьРезультатыРасчета Тогда
ОписаниеДокумента.НеРаспределятьПоСтатьямФинансирования = Истина;
КонецЕсли;
РасчетЗарплатыРасширенныйКлиент.ОткрытьФормуПодробнееОРасчетеУдержаний(Объект, "ВыплатаБывшимСотрудникам", ЭтотОбъект, ОписаниеДокумента);
КонецПроцедуры
&НаСервере
Функция НДФЛПодробнееНаСервере(ФизическиеЛица) Экспорт
Если ТипЗнч(ФизическиеЛица) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическиеЛица);
Иначе
СписокФизическихЛиц = ФизическиеЛица;
КонецЕсли;
ДокументОбъект = РеквизитФормыВЗначение("Объект");
Возврат УчетНДФЛФормы.РегистрНалоговогоУчетаПоНДФЛ(ДокументОбъект, Модифицированность, СписокФизическихЛиц, Объект.ПериодРегистрации);
КонецФункции
&НаКлиенте
Процедура ОткрытьФормуСохраняемыйСреднийЗаработок(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя <> "НачисленияНачислено" Тогда
Возврат;
КонецЕсли;
Если Объект.ВидВыплаты <> ПредопределенноеЗначение("Справочник.ВидыВыплатБывшимСотрудникам.СохраняемыйЗаработокНаВремяТрудоустройства") Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ПараметрыОткрытия = ПараметрыОткрытияФормыСохраняемыйСреднийЗаработок();
ОткрытьФорму("Документ.ВыплатаБывшимСотрудникам.Форма.СохраняемыйСреднийЗаработок", ПараметрыОткрытия, ЭтаФорма);
КонецПроцедуры
&НаСервере
Функция ПараметрыОткрытияФормыСохраняемыйСреднийЗаработок()
ИдентификаторСтроки = Элементы.НачисленияУдержанияВзносы.ТекущаяСтрока;
ДанныеНачислений = Объект.НачисленияУдержанияВзносы.НайтиПоИдентификатору(ИдентификаторСтроки);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ФизическоеЛицо", ДанныеНачислений.ФизическоеЛицо);
ПараметрыОткрытия.Вставить("Начислено", ДанныеНачислений.Начислено);
ПараметрыОткрытия.Вставить("Организация", Объект.Организация);
Отбор = Новый Структура("ФизическоеЛицо", ДанныеНачислений.ФизическоеЛицо);
СтрокиСреднегоЗаработка = Объект.ОплатаПоСреднемуЗаработку.НайтиСтроки(Отбор);
Если СтрокиСреднегоЗаработка.Количество() > 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;
Для Каждого Строка Из КоллекцияСтрок Цикл
ИтогВзносы = ИтогВзносы + Строка.ИтогВзносыСтрока;
КонецЦикла;
Возврат ИтогВзносы;
КонецФункции
&НаСервере
Процедура УстановитьФункциональныеОпцииФормы()
ПараметрыФО = Новый Структура("Организация, Период", Объект.Организация, НачалоДня(Объект.ПериодРегистрации));
УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеОрганизацииНаСервере()
ЗаполнитьДанныеФормыПоОрганизации();
УстановитьФункциональныеОпцииФормы();
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеДатыДокументаНаСервере()
УстановитьФункциональныеОпцииФормы();
Если НачалоМесяца(ДатаПрежняя) <> НачалоМесяца(Объект.Дата) Тогда
РассчитатьНДФЛИВзносыВсем();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьВидВыплатыПриИзмененииНаСервере()
Если Не ЗначениеЗаполнено(Объект.ВидВыплаты) Тогда
Объект.КодВычетаНДФЛ = Справочники.ВидыВычетовНДФЛ.ПустаяСсылка();
Иначе
КодДоходаНДФЛ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ВидВыплаты, "КодДоходаНДФЛ");
СоответствиеДоступныхВычетовДоходам = УчетНДФЛ.ВычетыКДоходам(Год(Объект.Дата));
УстановитьСписокВыбораКодВычетаНДФЛ(Элементы.КодВычетаНДФЛ, КодДоходаНДФЛ, СоответствиеДоступныхВычетовДоходам);
ОписаниеКодаДохода = УчетНДФЛВызовСервера.ПолучитьОписаниеКодаДохода(КодДоходаНДФЛ);
Объект.КодВычетаНДФЛ = ОписаниеКодаДохода.ВычетПоУмолчанию;
КонецЕсли;
УстановитьРежимРасчетаНДФЛИОтображениеЭлементовРедактированияНДФЛ();
ОчиститьРезультатыВСтрокахТаблицы();
РассчитатьНДФЛИВзносыВсем();
ОтражениеЗарплатыВБухучетеРасширенный.УстановитьПодсказкуВводаСтатьиРасходовВыплатыБывшимСотрудникам(
ЭтотОбъект, Объект.ВидВыплаты, Объект.ПериодРегистрации);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьСписокВыбораКодВычетаНДФЛ(ЭлементКодВычетаНДФЛ, КодДоходаНДФЛ, СоответствиеДоступныхВычетовДоходам)
МассивДоступныхВычетов = СоответствиеДоступныхВычетовДоходам.Получить(КодДоходаНДФЛ);
Если МассивДоступныхВычетов = Неопределено Тогда
ЭлементКодВычетаНДФЛ.СписокВыбора.Очистить();
Иначе
ЭлементКодВычетаНДФЛ.СписокВыбора.ЗагрузитьЗначения(МассивДоступныхВычетов);
КонецЕсли;
ЭлементКодВычетаНДФЛ.ТолькоПросмотр = (МассивДоступныхВычетов = Неопределено);
КонецПроцедуры
&НаСервере
Процедура ОчиститьРезультатыВСтрокахТаблицы()
ИменаКолонок = Новый Массив;
ИменаКолонок.Добавить("НДФЛ");
ИменаКолонок.Добавить("СуммаВычета");
ИменаКолонок.Добавить("СкидкаПоВзносам");
ИменаКолонок.Добавить("Удержано");
ИменаКолонок.Добавить("КВыплате");
ИменаКолонок.Добавить("ИтогВзносыСтрока");
ИменаКолонок.Добавить("ФФОМС");
ИменаКолонок.Добавить("ФФОМСЕНВД");
ИменаКолонок.Добавить("ТФОМС");
ИменаКолонок.Добавить("ТФОМСЕНВД");
ИменаКолонок.Добавить("ФСС");
ИменаКолонок.Добавить("ФССЕНВД");
ИменаКолонок.Добавить("ФССНесчастныеСлучаи");
ИменаКолонок.Добавить("ПФРНакопительная");
ИменаКолонок.Добавить("ПФРНакопительнаяЕНВД");
ИменаКолонок.Добавить("ПФРСтраховая");
ИменаКолонок.Добавить("ПФРСтраховаяЕНВД");
ИменаКолонок.Добавить("ПФРПоСуммарномуТарифу");
ИменаКолонок.Добавить("ПФРПоСуммарномуТарифуЕНВД");
ИменаКолонок.Добавить("ПФРДоПредельнойВеличины");
ИменаКолонок.Добавить("ПФРДоПредельнойВеличиныЕНВД");
ИменаКолонок.Добавить("ПФРСПревышения");
ИменаКолонок.Добавить("ПФРСПревышенияЕНВД");
Для каждого Строка Из Объект.НачисленияУдержанияВзносы Цикл
Для Каждого ИмяКолонки Из ИменаКолонок Цикл
Строка[ИмяКолонки] = 0;
КонецЦикла;
Строка.ФиксСуммаВычета =Ложь;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДатаРожденияЗаполнена(ФизическоеЛицо)
ДатаРождения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ФизическоеЛицо, "ДатаРождения");
Возврат ЗначениеЗаполнено(ДатаРождения);
КонецФункции
&НаСервере
Процедура РассчитатьИтогиНаСервере()
Для Каждого Строка Из Объект.НачисленияУдержанияВзносы Цикл
ЗаполнитьИтогВзносовПоСтроке(Строка);
ЗаполнитьКВыплатеПоСтроке(ЭтотОбъект, Строка);
КонецЦикла;
ИтогВзносы = ИтогВзносы(Объект.НачисленияУдержанияВзносы);
ЗарплатаКадрыРасширенный.ВводНачисленийДанныеВРеквизит(
ЭтотОбъект, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеТаблицыУдержаний()), 2);
КонецПроцедуры
&НаСервере
Функция АдресСпискаПодобранныхФизическихЛиц()
Возврат ПоместитьВоВременноеХранилище(Объект.НачисленияУдержанияВзносы.Выгрузить(,"ФизическоеЛицо").ВыгрузитьКолонку("ФизическоеЛицо"), УникальныйИдентификатор);
КонецФункции
&НаСервере
Процедура ДобавитьНовыеСтроки(ФизическиеЛица)
Для Каждого ФизическоеЛицо Из ФизическиеЛица Цикл
СтрокиНачислений = Объект.НачисленияУдержанияВзносы.НайтиСтроки(Новый Структура("ФизическоеЛицо", ФизическоеЛицо));
Если СтрокиНачислений.Количество() = 0 Тогда
НоваяСтрока = Объект.НачисленияУдержанияВзносы.Добавить();
НоваяСтрока.ФизическоеЛицо = ФизическоеЛицо;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтветственныхЛиц()
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ПодписиДокументов.ЗаполнитьПодписиПоОрганизации(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеФормыПоОрганизации()
Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ЗапрашиваемыеЗначения = Новый Структура("Организация, МесяцРасчета", "Объект.Организация", "Объект.ПериодРегистрации");
ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтотОбъект, ЗапрашиваемыеЗначения, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Организация"));
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтотОбъект, "Объект.ПериодРегистрации", "ПериодРегистрацииСтрокой");
УстановитьОтветственныхЛиц();
КонецПроцедуры
&НаСервере
Процедура ПриПолученииДанныхНаСервере()
РаботаВБюджетномУчреждении = ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении");
ИспользоватьСтатьиФинансирования = ПолучитьФункциональнуюОпцию("ИспользоватьСтатьиФинансированияЗарплата");
СоответствиеДоступныхВычетовДоходам = УчетНДФЛ.ВычетыКДоходам(Год(Объект.Дата));
КодДоходаНДФЛ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ВидВыплаты, "КодДоходаНДФЛ");
УстановитьСписокВыбораКодВычетаНДФЛ(Элементы.КодВычетаНДФЛ, КодДоходаНДФЛ, СоответствиеДоступныхВычетовДоходам);
ПодразделениеПрежнее = Объект.Подразделение;
УстановитьРежимРасчетаНДФЛИОтображениеЭлементовРедактированияНДФЛ();
Для Каждого Строка Из Объект.НачисленияУдержанияВзносы Цикл
ЗаполнитьИтогВзносовПоСтроке(Строка);
КонецЦикла;
ИтогВзносы = ИтогВзносы(Объект.НачисленияУдержанияВзносы);
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтотОбъект, "Объект.ПериодРегистрации", "ПериодРегистрацииСтрокой");
УстановитьФункциональныеОпцииФормы();
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтотОбъект, ОписаниеТаблицыУдержаний(), "Удержания", , Ложь);
ЗарплатаКадрыРасширенный.ВводНачисленийДанныеВРеквизит(ЭтотОбъект, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеТаблицыУдержаний()), 2);
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыЗаполнитьПредупреждения(ЭтотОбъект);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтотОбъект);
ОтражениеЗарплатыВБухучетеРасширенный.УстановитьПодсказкуВводаСтатьиРасходовВыплатыБывшимСотрудникам(ЭтотОбъект, Объект.ВидВыплаты, Объект.ПериодРегистрации);
УстановитьНачальныеЗначенияПеречислениеНДФЛ();
РасчетЗарплатыРасширенныйФормы.ДокументыНачисленийДополнитьФормуРезультатыРаспределения(ЭтотОбъект, ОписанияТаблицДляРаспределенияРезультата());
Если Объект.РаспределятьРезультатыРасчета Тогда
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаДанныеВРеквизит(ЭтотОбъект, ОписанияТаблицДляРаспределенияРезультата());
ОтражениеЗарплатыВБухучетеРасширенный.ОбъектПриЧтенииНаСервереПредставлениеРаспределения(ЭтотОбъект, ОписаниеДокумента());
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияУдержанияВзносыКомандаРедактированияРаспределения", "Видимость", Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СведенияОбНДФЛ(ФизическоеЛицо = Неопределено) Экспорт
ТекущиеДанные = Объект.НачисленияУдержанияВзносы.НайтиПоИдентификатору(Элементы.НачисленияУдержанияВзносы.ТекущаяСтрока);
АдресСведенийОбНДФЛ = УчетНДФЛФормыРасширенный.СведенияОбНДФЛ(ЭтотОбъект, ТекущиеДанные.ФизическоеЛицо);
ПараметрыРасчета = УчетПрочихДоходов.ПараметрыРасчета(Объект);
ПараметрыРасчета.СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТекущиеДанные.ФизическоеЛицо);
УчетПрочихДоходов.РезультатРасчетаЗаполнитьНачисления(Объект, ПараметрыРасчета);
СведенияОДоходахНДФЛ = УчетПрочихДоходов.СведенияОДоходахНДФЛДокумента(Объект, ПараметрыРасчета);
ДанныеОбНДФЛ = ПолучитьИзВременногоХранилища(АдресСведенийОбНДФЛ);
ДанныеОбНДФЛ.Вставить("СведенияОДоходах", СведенияОДоходахНДФЛ.СведенияОДоходах);
ДанныеОбНДФЛ.Вставить("ВычетыКДоходам", СведенияОДоходахНДФЛ.ВычетыКДоходам);
ДанныеОбНДФЛ.Вставить("БухучетПрочихДоходов", Истина);
МаксимальныйИдентификаторСтрокиНДФЛ = УчетНДФЛФормы.МаксимальныйИдентификаторСтрокиНДФЛ(Объект.НДФЛ);
ДанныеОбНДФЛ.Вставить("МаксимальныйИдентификаторСтрокиНДФЛ", МаксимальныйИдентификаторСтрокиНДФЛ);
Возврат ПоместитьВоВременноеХранилище(ДанныеОбНДФЛ, УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция СведенияОбУдержаниях() Экспорт
Возврат РасчетЗарплатыРасширенный.СведенияОбУдержаниях(ЭтотОбъект);
КонецФункции
&НаСервере
Процедура РассчитатьНДФЛИВзносыНаСервере(ФизическоеЛицо = Неопределено, ЗаполнятьУдержания = Истина)
СписокФизическихЛиц = Неопределено;
ДанныеСтроки = Неопределено;
Если ФизическоеЛицо = Неопределено Тогда
СписокФизическихЛиц = Неопределено;
ИначеЕсли ТипЗнч(ФизическоеЛицо) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическоеЛицо);
ИначеЕсли ТипЗнч(ФизическоеЛицо) = Тип("Массив") Тогда
СписокФизическихЛиц = ФизическоеЛицо;
КонецЕсли;
Если ЗаполнятьУдержания Тогда
УчетПрочихДоходов.ЗаполнитьУдержанияФизическихЛиц(Объект, СписокФизическихЛиц);
КонецЕсли;
ПараметрыРасчета = УчетПрочихДоходов.ПараметрыРасчетаДокумента();
ПараметрыРасчета.СписокФизическихЛиц = СписокФизическихЛиц;
ПараметрыРасчета.РасчетНДФЛНарастающимИтогомСНачалаГода = РасчетНДФЛНарастающимИтогомСНачалаГода;
ДанныеРасчета = УчетПрочихДоходов.РассчитатьДокумент(Объект, ПараметрыРасчета);
УчетПрочихДоходов.РезультатРасчетаВДанныеФормы(ЭтотОбъект, ДанныеРасчета);
КонецПроцедуры
&НаСервере
Процедура УстановитьРежимРасчетаНДФЛИОтображениеЭлементовРедактированияНДФЛ()
РасчетНДФЛНарастающимИтогомСНачалаГода = УчетНДФЛФормыРасширенный.РасчетНДФЛНарастающимИтогомСНачалаГода(Объект.ВидВыплаты);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"НачисленияНДФЛ",
"ТолькоПросмотр",
РасчетНДФЛНарастающимИтогомСНачалаГода);
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеНДФЛНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
КонтролируемыеПоля = Новый Структура;
ОписаниеДокумента = ОписаниеДокумента();
ОписаниеДокумента.ПримененныеВычетыИмя = "ПримененныеВычетыНаДетейИИмущественные";
ОтборСтрокФизическихЛиц = Новый Структура("ФизическоеЛицо", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметр.ФизическоеЛицо));
РасчетЗарплатыРасширенный.ЗаменитьСтрокиНДФЛ(Объект.НДФЛ, Параметр.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, Параметр.ПримененныеВычетыНаДетейИИмущественные, КонтролируемыеПоля, ОписаниеДокумента, ОтборСтрокФизическихЛиц, Ложь);
ФизическиеЛицаКРасчету = Новый Массив;
Для Каждого СтрокаНачислений Из Параметр.Начисления Цикл
СтрокиНачисленияУдержанияВзносы = Объект.НачисленияУдержанияВзносы.НайтиСтроки(Новый Структура("ФизическоеЛицо", СтрокаНачислений.ФизическоеЛицо));
Если СтрокиНачисленияУдержанияВзносы.Количество() > 0 Тогда
Если СтрокиНачисленияУдержанияВзносы[0].СуммаВычета <> СтрокаНачислений.СуммаВычета Тогда
ФизическиеЛицаКРасчету.Добавить(СтрокаНачислений.ФизическоеЛицо);
КонецЕсли;
СтрокиНачисленияУдержанияВзносы[0].СуммаВычета = СтрокаНачислений.СуммаВычета;
СтрокиНачисленияУдержанияВзносы[0].ФиксСуммаВычета = Истина;
КонецЕсли;
КонецЦикла;
Модифицированность = Истина;
ПараметрыРасчета = УчетПрочихДоходов.ПараметрыРасчетаДокумента();
ПараметрыРасчета.РасчетНДФЛНарастающимИтогомСНачалаГода = РасчетНДФЛНарастающимИтогомСНачалаГода;
ПараметрыРасчета.ОбновитьБухУчетНачислений = Ложь;
ПараметрыРасчета.ИспользоватьСтатьиФинансирования = ИспользоватьСтатьиФинансирования;
ПараметрыРасчета.РассчитатьНалогиИВзносы = ФизическиеЛицаКРасчету.Количество() > 0;
ПараметрыРасчета.РассчитатьУдержания = ПараметрыРасчета.РассчитатьНалогиИВзносы;
ПараметрыРасчета.СписокФизическихЛиц = ОтборСтрокФизическихЛиц.ФизическоеЛицо;
ДанныеРасчета = УчетПрочихДоходов.РассчитатьДокумент(Объект, ПараметрыРасчета);
УчетПрочихДоходов.РезультатРасчетаВДанныеФормы(ЭтотОбъект, ДанныеРасчета);
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеУдержанийНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
Объект.Удержания.Загрузить(Параметр.Удержания.Выгрузить());
Для Каждого Строка Из Объект.НачисленияУдержанияВзносы Цикл
Удержано = 0;
СтрокиУдержаний = Объект.Удержания.НайтиСтроки(Новый Структура("ФизическоеЛицо", Строка.ФизическоеЛицо));
Для Каждого СтрокаУдержания Из СтрокиУдержаний Цикл
Удержано = Удержано + СтрокаУдержания.Результат;
КонецЦикла;
Строка.Удержано = Удержано;
КонецЦикла;
Модифицированность = Истина;
РассчитатьИтогиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПересчитатьСотрудникаНаСервере()
Если Не ДокументГотовКРасчету() Тогда
Возврат
КонецЕсли;
ИменаПолейВзносов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(УчетСтраховыхВзносовКлиентСервер.РассчитываемыеВзносы(Ложь,,Ложь));
ВыбранныеФизическиеЛица = Новый Массив;
Для Каждого ИдентификаторСтроки Из Элементы.НачисленияУдержанияВзносы.ВыделенныеСтроки Цикл
ДанныеСтроки = Объект.НачисленияУдержанияВзносы.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ЗначениеЗаполнено(ДанныеСтроки.ФизическоеЛицо) Тогда
ВыбранныеФизическиеЛица.Добавить(ДанныеСтроки.ФизическоеЛицо);
Иначе
ДанныеСтроки.Начислено = 0;
ДанныеСтроки.НДФЛ = 0;
ДанныеСтроки.СуммаВычета = 0;
ДанныеСтроки.Удержано = 0;
ДанныеСтроки.КВыплате = 0;
ДанныеСтроки.ИтогВзносыСтрока = 0;
Для Каждого ИмяПоля Из ИменаПолейВзносов Цикл
Если ЗначениеЗаполнено(ИмяПоля) Тогда
ДанныеСтроки[ИмяПоля] = 0
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если ВыбранныеФизическиеЛица.Количество() Тогда
РассчитатьНДФЛИВзносыНаСервере(ВыбранныеФизическиеЛица);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ДокументГотовКРасчету(ВыводитьСообщения = Ложь)
КонтейнерОшибок = Неопределено;
Если Не ЗначениеЗаполнено(Объект.ПериодРегистрации) Тогда
ТекстСообщения = НСтр("ru = 'Не указан месяц начисления.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ПериодРегистрации", ТекстСообщения, "");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Организация"" не заполнено.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.Организация", ТекстСообщения, "");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Объект.ВидВыплаты) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Вид выплаты"" не заполнено.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ВидВыплаты", ТекстСообщения, "");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Объект.ПланируемаяДатаВыплаты) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Дата выплаты дохода"" не заполнено.'");
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(КонтейнерОшибок, "Объект.ПланируемаяДатаВыплаты", ТекстСообщения, "");
КонецЕсли;
КонтейнерСодержитОшибки = Ложь;
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(КонтейнерОшибок, КонтейнерСодержитОшибки);
Если Не ВыводитьСообщения Тогда
ПолучитьСообщенияПользователю(Истина);
КонецЕсли;
Возврат Не КонтейнерСодержитОшибки;
КонецФункции
&НаКлиенте
Процедура ОбработчикОжиданияПериодаРегистрацииПриИзменении()
ПриИзмененииПериодаРегистрацииНаСервере();
КонецПроцедуры
#Область КлючевыеРеквизитыЗаполненияФормы
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыТаблицыОчищаемыеПриИзменении() Экспорт
Массив = Новый Массив;
Массив.Добавить("Объект.НачисленияУдержанияВзносы");
Массив.Добавить("Объект.НДФЛ");
Массив.Добавить("Объект.ПримененныеВычетыНаДетейИИмущественные");
Массив.Добавить("Объект.Удержания");
Массив.Добавить("Объект.Показатели");
Возврат Массив;
КонецФункции
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыОписаниеКлючевыхРеквизитов() Экспорт
Массив = Новый Массив;
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Организация", НСтр("ru = 'организации'")));
Возврат Массив;
КонецФункции
#КонецОбласти
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеДокумента()
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеРасчетногоДокумента();
Описание.МесяцНачисленияИмя = "ПериодРегистрации";
Описание.УдержанияИмя = "Удержания";
Описание.ПериодДействияВШапке = Истина;
Описание.ПримененныеВычетыИмя = "ПримененныеВычетыНаДетейИИмущественные";
Описание.ВидНачисленияВШапке = Истина;
Описание.ВидНачисленияИмя = "ВидВыплаты";
Описание.НачисленияИмя = "НачисленияУдержанияВзносы";
Описание.ИменаПолейНачисления = "НачисленияУдержанияВзносы";
Описание.НДФЛИмя = "НДФЛ";
ОписанияТаблицДляРаспределенияРезультата = Новый Структура;
ОписанияТаблицДляРаспределенияРезультата.Вставить("НачисленияУдержанияВзносы", ОписаниеТаблицыНачислений());
ОписанияТаблицДляРаспределенияРезультата.Вставить("Удержания", ОписаниеТаблицыУдержаний());
ОписанияТаблицДляРаспределенияРезультата.Вставить("НДФЛ", ОписаниеТаблицыНДФЛ());
Описание.ОписанияТаблицДляРаспределенияРезультата = ОписанияТаблицДляРаспределенияРезультата;
Описание.БухучетПрочихДоходов = Истина;
Возврат Описание;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыУдержаний()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ИмяРеквизитаВидРасчета = "Удержание";
ОписаниеТаблицы.ИмяТаблицы = "Удержания";
ОписаниеТаблицы.НомерТаблицы = 3;
ОписаниеТаблицы.СодержитПолеВидРасчета = Истина;
ОписаниеТаблицы.СодержитПолеСотрудник = Ложь;
ОписаниеТаблицы.ПутьКДанным = "Объект.Удержания";
ОписаниеТаблицы.ПутьКДаннымПоказателей = "Объект.Показатели";
ОписаниеТаблицы.ИмяРеквизитаДатаНачала = "ДатаНачала";
ОписаниеТаблицы.ИмяРеквизитаДатаОкончания = "ДатаОкончания";
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
ОписаниеТаблицы.БухучетПрочихДоходов = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНачислений()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияУдержанияВзносы";
ОписаниеТаблицы.ПутьКДанным = "Объект.НачисленияУдержанияВзносы";
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтроки";
ОписаниеТаблицы.СодержитПолеСотрудник = Ложь;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ИмяРеквизитаВидРасчета = "ВидВыплаты";
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияНачислено";
ОписаниеТаблицы.ИмяПоляРезультат = "Начислено";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НДФЛ,Удержания";
ОписаниеТаблицы.ИмяРеквизитаДатаНачала = Неопределено;
ОписаниеТаблицы.ИмяРеквизитаДатаОкончания = Неопределено;
ОписаниеТаблицы.ИмяРеквизитаОтработаноДней = Неопределено;
ОписаниеТаблицы.ИмяРеквизитаОтработаноЧасов = Неопределено;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = Неопределено;
ОписаниеТаблицы.БухучетПрочихДоходов = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНДФЛ()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НДФЛ";
ОписаниеТаблицы.ПутьКДанным = "Объект.НДФЛ";
ОписаниеТаблицы.ИмяПоляРезультат = "Налог";
ОписаниеТаблицы.НомерТаблицы = 2;
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтрокиНДФЛ";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
ОписаниеТаблицы.БухучетПрочихДоходов = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписанияТаблицДляРаспределенияРезультата()
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений());
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыНДФЛ());
Возврат ОписанияТаблиц;
КонецФункции
&НаКлиенте
Процедура ВыполнитьКомандуРедактированияРезультатовРаспределенияНачислений(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") = 0 Тогда
Возврат;
КонецЕсли;
Если Не Объект.РаспределятьРезультатыРасчета Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуРедактированияРезультатовРаспределенияПоИсточникамФинансирования(ЭтотОбъект, ОписаниеТаблицыНачислений(), ВыбраннаяСтрока, Объект.ПериодРегистрации);
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьЗависимыеРезультаты(ПараметрыДляРаспределения) Экспорт
Если ПараметрыДляРаспределения.РаспределятьЗависимыеТаблицы Тогда
РаспределитьЗависимыеРезультатыНаСервере(ПараметрыДляРаспределения);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РаспределитьЗависимыеРезультатыНаСервере(ПараметрыДляРаспределения)
ПараметрыРасчета = УчетПрочихДоходов.ПараметрыРасчетаДокумента();
ПараметрыРасчета.СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ПараметрыДляРаспределения.Сотрудник);
ПараметрыРасчета.ОбновитьБухУчетНачислений = Ложь;
ПараметрыРасчета.ОбновитьБухУчетУдержаний = Истина;
ПараметрыРасчета.ОбновитьБухУчетНДФЛ = Истина;
ПараметрыРасчета.РассчитатьНалогиИВзносы = ПараметрыДляРаспределения.ТребуетсяПересчетНДФЛ;
ПараметрыРасчета.РассчитатьУдержания = ПараметрыДляРаспределения.ТребуетсяПересчетНДФЛ;
ПараметрыРасчета.РасчетНДФЛНарастающимИтогомСНачалаГода = РасчетНДФЛНарастающимИтогомСНачалаГода;
ПараметрыРасчета.ИспользоватьСтатьиФинансирования = ИспользоватьСтатьиФинансирования;
ДанныеРасчета = УчетПрочихДоходов.РассчитатьДокумент(Объект, ПараметрыРасчета);
УчетПрочихДоходов.РезультатРасчетаВДанныеФормы(ЭтотОбъект, ДанныеРасчета);
КонецПроцедуры
&НаСервере
Процедура РеквизитВДанные(ТекущийОбъект)
УчетПрочихДоходов.РеквизитФормыВДанныеДокумента(ТекущийОбъект, ЭтотОбъект, ОписаниеДокумента());
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииПериодаРегистрации()
ПриИзмененииПериодаРегистрацииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииПериодаРегистрацииНаСервере()
РассчитатьНДФЛИВзносыВсем();
ОтражениеЗарплатыВБухучетеРасширенный.УстановитьПодсказкуВводаСтатьиРасходовВыплатыБывшимСотрудникам(
ЭтотОбъект, Объект.ВидВыплаты, Объект.ПериодРегистрации);
КонецПроцедуры
&НаСервере
Процедура УстановитьНачальныеЗначенияПеречислениеНДФЛ()
Если УчетНДФЛ.РегистрироватьПеречисленныйНалог(Объект.Дата)Тогда
ПоказыватьВводДокументаПеречисленияНДФЛ = Ложь;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ВнешниеХозяйственныеОперации.УчетНДФЛВХО") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УчетНДФЛВХО");
ПоказыватьВводДокументаПеречисленияНДФЛ = Модуль.ПоказыватьВводДокументаПеречисленияНДФЛ()
И ПолучитьФункциональнуюОпцию("ВестиРасчетыСБюджетомПоНДФЛ");
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ВводДанныхОПеречисленииНДФЛ", "Видимость", ПоказыватьВводДокументаПеречисленияНДФЛ);
ПоказыватьПеречислениеНДФЛ = УчетНДФЛ.РегистрироватьПеречисленныйНалог(Объект.Дата) И (Объект.ПеречислениеНДФЛВыполнено Или Не ПолучитьФункциональнуюОпцию("ВестиРасчетыСБюджетомПоНДФЛ"));
Если ПоказыватьПеречислениеНДФЛПрежняя = Неопределено Тогда
ПоказыватьПеречислениеНДФЛПрежняя = ПоказыватьПеречислениеНДФЛ;
Иначе
ПоказыватьПеречислениеНДФЛ = ПоказыватьПеречислениеНДФЛ Или ПоказыватьПеречислениеНДФЛПрежняя;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппаПеречислениеНДФЛ", "Видимость", ПоказыватьПеречислениеНДФЛ);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ГруппаПеречислениеНДФЛ", "Видимость", Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ВводДанныхОПеречисленииНДФЛ", "Видимость", Ложь);
КонецЕсли;
ПоказыватьРегистрациюВыплатВедомостью = ПолучитьФункциональнуюОпцию("ИспользоватьВедомостиДляВыплатыПрочихДоходов");
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьРеквизитыПеречисленияНДФЛ()
Если Объект.ПеречислениеНДФЛВыполнено Тогда
Объект.ДатаПлатежаНДФЛ = ДатаПлатежаНДФЛПрежняя;
Объект.ПеречислениеНДФЛРеквизиты = ПеречислениеНДФЛРеквизитыПрежняя;
Иначе
ДатаПлатежаНДФЛПрежняя = Объект.ДатаПлатежаНДФЛ;
Объект.ДатаПлатежаНДФЛ = Дата(1,1,1);
ПеречислениеНДФЛРеквизитыПрежняя = Объект.ПеречислениеНДФЛРеквизиты;
Объект.ПеречислениеНДФЛРеквизиты = "";
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьФормуПоНастройкамПеречисленияНДФЛ(Форма, ПеречислениеНДФЛВыполнено, РегистрироватьВыплатуВедомостью);
ВыплатаРегистрируетсяВедомостью = Форма.ПоказыватьРегистрациюВыплатВедомостью И РегистрироватьВыплатуВедомостью;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.КоманднаяПанель.ПодчиненныеЭлементы,
"ФормаОбработкаСозданиеВедомостейПрочихДоходовСоздатьВедомостиПрочихДоходовПоДокументу",
"Видимость",
ВыплатаРегистрируетсяВедомостью);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ГруппаПеречислениеНДФЛ",
"Доступность",
Не ВыплатаРегистрируетсяВедомостью);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ВводДанныхОПеречисленииНДФЛ",
"Доступность",
Не ВыплатаРегистрируетсяВедомостью);
Если Не ВыплатаРегистрируетсяВедомостью Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ВводДанныхОПеречисленииНДФЛ",
"Доступность",
Не ПеречислениеНДФЛВыполнено);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ДатаПлатежаНДФЛ",
"Доступность",
ПеречислениеНДФЛВыполнено);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ДатаПлатежаНДФЛ",
"АвтоОтметкаНезаполненного",
ПеречислениеНДФЛВыполнено);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ДатаПлатежаНДФЛ",
"ОтметкаНезаполненного",
ПеречислениеНДФЛВыполнено И Не ЗначениеЗаполнено(Форма.Объект.ДатаПлатежаНДФЛ));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ПеречислениеНДФЛРеквизиты",
"Доступность",
ПеречислениеНДФЛВыполнено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьБухучетРезультатовРасчета()
Если ИспользоватьСтатьиФинансирования И Объект.НачисленияУдержанияВзносы.Количество() > 0 Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьБухучетРезультатовРасчетаНаСервере()
УчетПрочихДоходов.ОбновитьБухучетРезультатовРасчета(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьДанныеНДФЛФизическогоЛица(Объект, ФизическоеЛицо)
СтрокиНДФЛ = Объект.НДФЛ.НайтиСтроки(Новый Структура("ФизическоеЛицо", ФизическоеЛицо));
Для каждого СтрокаНДФЛ Из СтрокиНДФЛ Цикл
СтрокиВычетов = Объект.ПримененныеВычетыНаДетейИИмущественные.НайтиСтроки(
Новый Структура("ИдентификаторСтрокиНДФЛ", СтрокаНДФЛ.ИдентификаторСтрокиНДФЛ));
Для каждого СтрокаВычетов Из СтрокиВычетов Цикл
Объект.ПримененныеВычетыНаДетейИИмущественные.Удалить(СтрокаВычетов);
КонецЦикла;
Объект.НДФЛ.Удалить(СтрокаНДФЛ);
КонецЦикла;
КонецПроцедуры
#КонецОбласти