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