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