#Область ОписаниеПеременных
&НаКлиенте
Перем СтарыеЗначенияКонтролируемыхПолей;
&НаКлиенте
Перем СотрудникиПередУдалением;
&НаКлиенте
Перем НДФЛВычетыПередУдалением;
&НаКлиенте
Перем ПараметрыОбработчикаОжидания;
&НаКлиенте
Перем ФормаДлительнойОперации;
&НаКлиенте
Перем СотрудникиКРасчету Экспорт;
&НаКлиенте
Перем ЗакрытьПослеЗаписи;
&НаКлиенте
Перем ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
РасчетЗарплатыРасширенныйФормы.ДокументыПриСозданииНаСервере(ЭтаФорма);
РасчетЗарплатыРасширенныйФормы.ИнициализироватьМеханизмПересчетаДокументаПриРедактировании(ЭтаФорма);
Если Параметры.Ключ.Пустая() Тогда
ЗначенияДляЗаполнения = Новый Структура("Организация, Ответственный, Месяц",
"Объект.Организация", "Объект.Ответственный", "Объект.МесяцНачисления");
Если ПолучитьФункциональнуюОпцию("ВыполнятьРасчетЗарплатыПоПодразделениям") Тогда
ЗначенияДляЗаполнения.Вставить("Подразделение", "Объект.Подразделение");
КонецЕсли;
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтаФорма, ЗначенияДляЗаполнения);
Объект.УдержатьНалогПриВыплатеАванса = УчетНДФЛ.ДоходыУчитываютсяТолькоПоДатеВыплаты(Объект.МесяцНачисления);
Объект.ОкончаниеПериодаНачисления = Дата(Год(Объект.МесяцНачисления), Месяц(Объект.МесяцНачисления), 15);
ЗарплатаКадрыРасширенный.УстановитьНаименованиеПервичногоДокумента(Объект);
ПриПолученииДанныхНаСервере(РеквизитФормыВЗначение("Объект"));
РасчетЗарплатыРасширенный.УстановитьПланируемуюДатуВыплаты(ЭтотОбъект, ОписаниеДокумента(Ложь));
УстановитьСвойстваЭлементовНДФЛ();
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"НачислениеЗарплатыВоеннослужащим",
"Видимость",
ИспользоватьВоеннуюСлужбу);
Если Параметры.ЗначенияЗаполнения.Свойство("НачислениеЗарплатыВоеннослужащим") Тогда
Параметры.ЗначенияЗаполнения.Свойство("НачислениеЗарплатыВоеннослужащим", Объект.НачислениеЗарплатыВоеннослужащим);
Иначе
Объект.НачислениеЗарплатыВоеннослужащим = ИспользоватьВоеннуюСлужбу;
КонецЕсли;
КонецЕсли;
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужбаФормы");
Модуль.УстановитьПараметрыВыбораСотрудников(ЭтаФорма, "НачисленияСотрудник,УдержанияФизЛицо,НДФЛФизическоеЛицо");
КонецЕсли;
ОкончательныйРасчетНДФЛ = Ложь;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
ПриПолученииДанныхНаСервере(ТекущийОбъект);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"НачислениеЗарплатыВоеннослужащим",
"Видимость",
ИспользоватьВоеннуюСлужбу);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонтрольВеденияУчетаБЗК.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ЗакрытьПослеЗаписи = Истина;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗакрытием(ЭтотОбъект, Объект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки = ОценкаПроизводительностиКлиент.ЗамерВремени();
КонецЕсли;
РасчетЗарплатыРасширенныйКлиент.ПередЗаписьюДокументаСоСпискомСотрудников(ЭтаФорма, "ПередЗаписьюОкончание", Отказ, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
РеквизитыВДанные(ТекущийОбъект);
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Отказ);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
КонтрольВеденияУчетаБЗК.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ПриПолученииДанныхНаСервере(ТекущийОбъект, Ложь);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ОценкаПроизводительностиКлиент.УстановитьКлючевуюОперациюЗамера(ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки, "ПроведениеДокументаНачислениеЗаПервуюПоловинуМесяца");
КонецЕсли;
Оповестить("Запись_НачислениеЗаПервуюПоловинуМесяца", ПараметрыЗаписи, Объект.Ссылка);
Если ЗакрытьПослеЗаписи Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(ТекущийОбъект);
Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда
Отказ = Истина;
КонецЕсли;
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
ОрганизацияПриИзмененииНаСервере()
КонецПроцедуры
&НаКлиенте
Процедура ПодразделениеОрганизацииПриИзменении(Элемент)
ЗарплатаКадрыКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
РассчитатьИтогиПоДокументу();
КонецПроцедуры
&НаКлиенте
Процедура ИсчислятьНалогПриОкончательномРасчетеПриИзменении(Элемент)
ИсчислятьНалогПриОкончательномРасчетеПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПланируемаяДатаВыплатыПриИзменении(Элемент)
ИсчислятьНалогПриОкончательномРасчетеПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтаФорма, "Объект.МесяцНачисления", "МесяцНачисленияСтрокой", Модифицированность);
ПриИзмененииМесяцаНачисления();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("МесяцНачисленияСтрокойНачалоВыбораЗавершение", ЭтотОбъект);
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, ЭтаФорма, "Объект.МесяцНачисления", "МесяцНачисленияСтрокой", , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
ПриИзмененииМесяцаНачисления();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтаФорма, "Объект.МесяцНачисления", "МесяцНачисленияСтрокой", Направление, Модифицированность);
ПодключитьОбработчикОжидания("ОбработчикОжиданияМесяцНачисленияПриИзменении", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НомерПриИзменении(Элемент)
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
#Область РеквизитыПервичногоДокумента
&НаКлиенте
Процедура НаименованиеПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ОткрытьФормуСпискаЗначенийСтроковогоРеквизита(Элемент,
СтандартнаяОбработка, "ПервичныйДокумент", НСтр("ru = 'Первичные документы'"), НСтр("ru = 'Первичный документ'"));
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда
Объект.НаименованиеПервичногоДокумента = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ПодборЗначенияСтроковогоРеквизита(Текст, ДанныеВыбора, СтандартнаяОбработка, "ПервичныйДокумент");
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения("ДатаПервичногоДокументаНачалоВыбораЗавершение", ЭтотОбъект);
ПоказатьВводДаты(Оповещение, ?(ЗначениеЗаполнено(Объект.ДатаПервичногоДокумента), Объект.ДатаПервичногоДокумента, Объект.Дата), НСтр("ru='Дата первичного документа'"), ЧастиДаты.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбораЗавершение(Дата, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(Дата) Тогда
Объект.ДатаПервичногоДокумента = Дата;
ДатаПервичногоДокументаПредставление = Формат(Дата,"ДФ=dd.MM.yyyy");
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаОчистка(Элемент, СтандартнаяОбработка)
Объект.ДатаПервичногоДокумента = Дата(1,1,1);
Модифицированность = Истина;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыКорректировкиВыплаты
&НаКлиенте
Процедура КорректировкиВыплатыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыКорректировкиВыплаты(), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура КорректировкиВыплатыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если ИспользоватьСтатьиФинансирования Тогда
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
Если ТекущиеДанные.РезультатРаспределения = Неопределено И ЗначениеЗаполнено(АдресТаблицыРаспределенияУдержаний) Тогда
ТекущиеДанные.РезультатРаспределения = РезультатРаспределенияИзВременногоХранилища(ТекущиеДанные.ИдентификаторСтроки, АдресТаблицыРаспределенияУдержаний, ОписаниеТаблицыКорректировкиВыплаты());
КонецЕсли;
ОтражениеЗарплатыВБухучетеКлиентСерверРасширенный.ПерераспределитьКорректировкиВыплаты(ТекущиеДанные, РаботаВБюджетномУчреждении);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
#Область ОбработчикиСобытийПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Команда, Объект)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Контекст, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийСледующемуНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Заполнить(Команда)
УИДЗамера = ОценкаПроизводительностиКлиент.ЗамерВремени("ЗаполнениеДокументаНачислениеЗаПервуюПоловинуМесяца",,Ложь);
ОчиститьСообщения();
Если Не РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента()) Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыРасширенныйКлиент.ЗаполнитьДокументНачисленияЗарплаты(ЭтаФорма);
ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УИДЗамера);
УИДЗамера = Неопределено;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПодробно(Команда)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений());
РасчетЗарплатыРасширенныйВызовСервера.СохранитьНастройкуРежимаОтображенияПодробно(Объект.Ссылка, Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений());
КонецПроцедуры
&НаКлиенте
Процедура УдержанияПодробно(Команда)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.УдержанияПодробно.Пометка, ОписаниеТаблицыУдержаний());
РасчетЗарплатыРасширенныйВызовСервера.СохранитьНастройкуРежимаОтображенияПодробно(Объект.Ссылка, Элементы.УдержанияПодробно.Пометка, ОписаниеТаблицыУдержаний());
КонецПроцедуры
&НаКлиенте
Процедура Исправить(Команда)
Основание = Новый Структура("Ссылка, Действие", Объект.Ссылка, "Исправить");
ПараметрыФормы = Новый Структура("Основание", Основание);
ОткрытьФорму("Документ.НачислениеЗаПервуюПоловинуМесяца.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура Сторнировать(Команда)
ПараметрыФормы = Новый Структура("Основание", Объект.Ссылка);
ОткрытьФорму("Документ.СторнированиеНачислений.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьИсправленныйДокумент(Команда)
ПараметрыФормы = Новый Структура("Ключ", Объект.ИсправленныйДокумент);
ОткрытьФорму("Документ.НачислениеЗаПервуюПоловинуМесяца.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьДокументИсправление(Команда)
ПараметрыФормы = Новый Структура("ИсправленныйДокумент", Объект.Ссылка);
ОткрытьФорму("Документ.НачислениеЗаПервуюПоловинуМесяца.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьДокументСторно(Команда)
ПараметрыФормы = Новый Структура("СторнированныйДокумент", Объект.Ссылка);
ОткрытьФорму("Документ.СторнированиеНачислений.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыНачислений());
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияОтменитьВсеИсправления(Команда)
РасчетЗарплатыКлиент.ОтменитьВсеИсправления(ЭтаФорма, ОписаниеТаблицыНачислений());
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_УдержанияОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыУдержаний());
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_УдержанияОтменитьВсеИсправления(Команда)
РасчетЗарплатыКлиент.ОтменитьВсеИсправления(ЭтаФорма, ОписаниеТаблицыУдержаний());
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НДФЛОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыНДФЛ());
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НДФЛОтменитьВсеИсправления(Команда)
РасчетЗарплатыКлиент.ОтменитьВсеИсправления(ЭтаФорма, ОписаниеТаблицыНДФЛ());
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ИзменитьЛичныеВычеты(Команда)
УчетНДФЛКлиентРасширенный.ИзменитьЛичныеВычеты(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьДокумент(Команда)
ПересчитатьДокументНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
ЗакрытьПослеЗаписи = Истина;
Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение));
КонецПроцедуры
&НаКлиенте
Процедура РегистрНалоговогоУчетаПоНДФЛ(Команда)
НДФЛВыделенныеСтроки = Элементы.НДФЛ.ВыделенныеСтроки;
Если НДФЛВыделенныеСтроки.Количество() = 0 Тогда
Возврат;
КонецЕсли;
РегистрНалоговогоУчетаПоНДФЛ = НДФЛПодробнееНаСервере(НДФЛВыделенныеСтроки);
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Отчет.РегистрНалоговогоУчетаПоНДФЛ", "РегистрНалоговогоУчетаПоНДФЛ",
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект.Ссылка), ЭтаФорма, Новый Структура("ПечатаемыйДокумент", РегистрНалоговогоУчетаПоНДФЛ));
КонецПроцедуры
&НаКлиенте
Процедура ПодборСотрудников(Команда)
ПараметрыОткрытия = Новый Структура;
СтруктураОтбора = Новый Структура("ПоказыватьДоговорниковГПХ", Ложь);
Если ИспользоватьВоеннуюСлужбу Тогда
СтруктураОтбора.Вставить("НачислениеЗарплатыВоеннослужащим", Объект.НачислениеЗарплатыВоеннослужащим);
КонецЕсли;
ПараметрыОткрытия.Вставить("Отбор", СтруктураОтбора);
КадровыйУчетРасширенныйКлиент.ДобавитьПараметрыОтбораПоФункциональнойОпцииВыполнятьРасчетЗарплатыПоПодразделениям(
ЭтаФорма, ПараметрыОткрытия);
КадровыйУчетКлиент.ВыбратьСотрудниковРаботающихВПериодеПоПараметрамОткрытияФормыСписка(
Элементы.Начисления,
Объект.Организация,
Объект.Подразделение,
Объект.МесяцНачисления,
КонецМесяца(Объект.МесяцНачисления),
,
АдресСпискаПодобранныхСотрудников(),
Новый Структура("Отбор", СтруктураОтбора));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПересчитатьСотрудника(Команда)
ОценкаПроизводительностиКлиент.ЗамерВремени("ПерерасчетСотрудникаВФормеДокументаНачислениеЗаПервуюПоловинуМесяца");
РасчетЗарплатыРасширенныйКлиент.ПересчитатьСотрудника(ЭтаФорма, "Начисления", "Сотрудник", Тип("СправочникСсылка.Сотрудники"));
УчетНДФЛКлиент.НДФЛПриАктивизацииСтроки(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_УдержанияПересчитатьСотрудника(Команда)
РасчетЗарплатыРасширенныйКлиент.ПересчитатьСотрудника(ЭтаФорма, "Удержания", "ФизическоеЛицо", Тип("СправочникСсылка.ФизическиеЛица"));
УчетНДФЛКлиент.НДФЛПриАктивизацииСтроки(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НДФЛПересчитатьСотрудника(Команда)
РасчетЗарплатыРасширенныйКлиент.ПересчитатьСотрудника(ЭтаФорма, "НДФЛ", "ФизическоеЛицо", Тип("СправочникСсылка.ФизическиеЛица"));
УчетНДФЛКлиент.НДФЛПриАктивизацииСтроки(ЭтаФорма);
КонецПроцедуры
#Область ПодключаемыеКомандыУдалитьСотрудника
&НаКлиенте
Процедура Подключаемый_НачисленияУдалитьСотрудника(Команда)
ТекущиеДанные = Элементы.Начисления.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
УдалитьСотрудникаНаСервере(ТекущиеДанные.Сотрудник);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_УдержанияУдалитьСотрудника(Команда)
ТекущиеДанные = Элементы.Удержания.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
УдалитьСотрудникаНаСервере(ТекущиеДанные.ФизическоеЛицо);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НДФЛУдалитьСотрудника(Команда)
ТекущиеДанные = Элементы.НДФЛ.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
УдалитьСотрудникаНаСервере(ТекущиеДанные.ФизическоеЛицо);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаСервере
Процедура ОрганизацияПриИзмененииНаСервере()
УстановитьФункциональныеОпцииФормы(ЭтотОбъект);
РасчетЗарплатыРасширенныйФормы.ОбновитьПлановыеДатыВыплатыПоОрганизации(ЭтотОбъект);
РасчетЗарплатыРасширенный.УстановитьПланируемуюДатуВыплаты(ЭтотОбъект, ОписаниеДокумента());
РасчетЗарплатыРасширенныйФормы.ДополнитьДанныеФормыРаспределенияПоТерриториямУсловиямТруда(ЭтотОбъект, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
РассчитатьИтогиПоДокументу();
ОтложитьРасчетНалогаВАвансеДоРасчетаЗарплаты = УчетНДФЛРасширенный.ОтложитьРасчетНалогаВАвансеДоРасчетаЗарплаты(Объект.Организация);
УстановитьСвойстваЭлементовНДФЛ();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииМесяцаНачисленияНаСервере()
РассчитатьИтогиПоДокументу();
РасчетЗарплатыРасширенный.УстановитьПланируемуюДатуВыплаты(ЭтотОбъект, ОписаниеДокумента());
Объект.УдержатьНалогПриВыплатеАванса = УчетНДФЛРасширенный.УдерживатьНалогПриВыплатеАванса(Объект.Организация, Объект.МесяцНачисления);
УстановитьСвойстваЭлементовНДФЛ();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыНачислений(), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыНачислений();
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтаФорма, ОписаниеТаблицыВидовРасчета, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыНачислений();
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыВидовРасчета, Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "Начисления", Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ОбработкаПодбораНаКлиенте(ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияСотрудникПриИзменении(Элемент)
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыНачислений();
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыВидовРасчета, Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияНачислениеПриИзменении(Элемент)
ОписаниеТаблицы = ОписаниеТаблицыНачислений();
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтаФорма, ОписаниеТаблицы, 2);
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицы, Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДатаНачалаПриИзменении(Элемент)
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыНачислений();
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыВидовРасчета, Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДатаОкончанияПриИзменении(Элемент)
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыНачислений();
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыВидовРасчета, Ложь, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "Начисления", Элементы.Начисления.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыНачислений());
НачисленияПриОкончанииРедактированияНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередУдалением(Элемент, Отказ)
СотрудникиПередУдалением = РасчетЗарплатыРасширенныйКлиент.ВыделенныеСотрудникиКоллекции(Объект.Начисления, Элементы.Начисления.ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПослеУдаления(Элемент)
РассчитатьСотрудника(СотрудникиПередУдалением, ОписаниеТаблицыНачислений());
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура УдержанияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыУдержаний(), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура УдержанияПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "Удержания", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УдержанияУдержаниеПриИзменении(Элемент)
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыУдержаний();
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтаФорма, ОписаниеТаблицыВидовРасчета, 2);
КонецПроцедуры
&НаКлиенте
Процедура УдержанияДокументОснованиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыРасширенныйКлиент.УстановитьОграничениеТипаДокументаУдержанияПоКатегории(
Элемент, Элементы.Удержания.ТекущиеДанные, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура УдержанияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "Удержания", Элементы.Удержания.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура УдержанияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Удержания",
ТекущиеДанные.ФизическоеЛицо,
,
ТекущиеДанные.Удержание);
КонецПроцедуры
&НаКлиенте
Процедура УдержанияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ИспользоватьСтатьиФинансирования Тогда
Если ТекущиеДанные <> Неопределено Тогда
ОтражениеЗарплатыВБухучетеКлиентСерверРасширенный.ПерераспределитьУдержания(ТекущиеДанные, РаботаВБюджетномУчреждении);
КонецЕсли;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыУдержаний());
РассчитатьИтогУдержано(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура УдержанияПередУдалением(Элемент, Отказ)
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Удержания",
ТекущиеДанные.ФизическоеЛицо,
,
ТекущиеДанные.Удержание);
КонецПроцедуры
&НаКлиенте
Процедура УдержанияПослеУдаления(Элемент)
УдержанияПослеУдаленияНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура НДФЛВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыНДФЛ(), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НДФЛПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "НДФЛ", Истина);
УчетНДФЛКлиент.НДФЛПриАктивизацииСтроки(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура НДФЛПередНачаломИзменения(Элемент, Отказ)
УчетНДФЛКлиент.НДФЛПередНачаломИзменения(ЭтаФорма, Элементы.НДФЛ.ТекущиеДанные, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура НДФЛПередУдалением(Элемент, Отказ)
НДФЛВыделенныеСтроки = Новый Массив;
Для Каждого ИдентификаторСтрок ИЗ Элементы.НДФЛ.ВыделенныеСтроки Цикл
СтрокаТаблицы = Объект.НДФЛ.НайтиПоИдентификатору(ИдентификаторСтрок);
Если СтрокаТаблицы <> Неопределено Тогда
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(ИзмененныеДанные, "НДФЛ", СтрокаТаблицы.ФизическоеЛицо);
НДФЛВыделенныеСтроки.Добавить(СтрокаТаблицы.ИдентификаторСтрокиНДФЛ);
КонецЕсли;
КонецЦикла;
УчетНДФЛКлиент.НДФЛПередУдалением(ЭтаФорма, НДФЛВыделенныеСтроки, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура НДФЛПослеУдаления(Элемент)
УчетНДФЛКлиентРасширенный.УдалитьПримененныеВычеты(ЭтаФорма);
НДФЛПослеУдаленияНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура НДФЛПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(ИзмененныеДанные, "НДФЛ", ТекущиеДанные.ФизическоеЛицо);
КонецПроцедуры
&НаКлиенте
Процедура НДФЛПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если ИспользоватьСтатьиФинансирования Тогда
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ОтражениеЗарплатыВБухучетеКлиентСерверРасширенный.ПерераспределитьНДФЛ(ТекущиеДанные, РаботаВБюджетномУчреждении);
КонецЕсли;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыНДФЛ(), , Ложь);
УчетНДФЛКлиент.НДФЛУстановитьДоступностьЭлементовЛичныхВычетов(ЭтаФорма);
НДФЛПриОкончанииРедактированияНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура НДФЛПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "НДФЛ", Элементы.НДФЛ.ТекущиеДанные, НоваяСтрока, Копирование);
УчетНДФЛКлиент.НДФЛПриНачалеРедактирования(ЭтаФорма, Элементы.НДФЛ.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыЛичныеПриИзменении(Элемент)
УчетНДФЛКлиент.НДФЛПриОкончанииРедактирования(ЭтаФорма);
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыНДФЛ(), , Ложь);
УчетНДФЛКлиент.НДФЛУстановитьДоступностьЭлементовЛичныхВычетов(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыЛичныеПриИзмененииНалоговаяБаза(Элемент)
УчетНДФЛКлиент.НДФЛПриОкончанииРедактирования(ЭтаФорма);
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыНДФЛ(), , Ложь);
УчетНДФЛКлиент.НДФЛУстановитьДоступностьЭлементовЛичныхВычетов(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыКДоходамПередНачаломИзменения(Элемент, Отказ, Копирование, Родитель, Группа)
УчетНДФЛКлиентРасширенный.ПримененныеВычетыКДоходам(ЭтаФорма, Элемент, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыКДоходамПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ВычетыПриОкончанииРедактирования(Элемент.ТекущиеДанные, ОтменаРедактирования, "ФизическоеЛицо,Подразделение");
ОбновитьПредставлениеВычетовКДоходамСтрокиНДФЛ();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
УчетНДФЛКлиент.МожноИзменятьПримененныеВычеты(ЭтаФорма, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПередНачаломИзменения(Элемент, Отказ)
УчетНДФЛКлиентРасширенный.ПримененныеВычетыНаДетейИИмущественныеПередНачаломИзменения(ЭтаФорма, Элемент, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПередУдалением(Элемент, Отказ)
ТекущиеДанные = Элемент.ТекущиеДанные;
НДФЛВычетыПередУдалением = Новый Структура();
НДФЛВычетыПередУдалением.Вставить("ИдентификаторСтрокиНДФЛ",ТекущиеДанные.ИдентификаторСтрокиНДФЛ);
УчетНДФЛКлиент.МожноИзменятьПримененныеВычеты(ЭтаФорма, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПослеУдаления(Элемент, Отказ)
ВычетыПослеУдаления(НДФЛВычетыПередУдалением,"ИдентификаторСтрокиНДФЛ");
ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
УчетНДФЛКлиент.ВычетыПриНачалеРедактирования(Элемент.ТекущиеДанные, НоваяСтрока, Элементы.НДФЛ.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ВычетыПриОкончанииРедактирования(Элемент.ТекущиеДанные, ОтменаРедактирования, "ИдентификаторСтрокиНДФЛ");
ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеМесяцПериодаПредоставленияВычетаСтрокойПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы[ОписаниеПанелиВычетыНаКлиенте().ИмяГруппыФормыПанелиВычеты + "ВычетыНаДетейИИмущественные"].ТекущиеДанные, "МесяцПериодаПредоставленияВычета", "МесяцПериодаПредоставленияВычетаСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеМесяцПериодаПредоставленияВычетаСтрокойНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, Элементы[ОписаниеПанелиВычетыНаКлиенте().ИмяГруппыФормыПанелиВычеты + "ВычетыНаДетейИИмущественные"].ТекущиеДанные, "МесяцПериодаПредоставленияВычета", "МесяцПериодаПредоставленияВычетаСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеМесяцПериодаПредоставленияВычетаСтрокойРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы[ОписаниеПанелиВычетыНаКлиенте().ИмяГруппыФормыПанелиВычеты + "ВычетыНаДетейИИмущественные"].ТекущиеДанные, "МесяцПериодаПредоставленияВычета", "МесяцПериодаПредоставленияВычетаСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеМесяцПериодаПредоставленияВычетаСтрокойАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВычетыНаДетейИИмущественныеМесяцПериодаПредоставленияВычетаСтрокойОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОткрытьОтчетПоПроблемам(ЭлементИлиКоманда, НавигационнаяСсылка, СтандартнаяОбработка)
КонтрольВеденияУчетаКлиентБЗК.ОткрытьОтчетПоПроблемамОбъекта(ЭтотОбъект, Объект.Ссылка, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьЗависимыеРезультаты(ПараметрыДляРаспределения) Экспорт
Если ПараметрыДляРаспределения.РаспределятьЗависимыеТаблицы Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере(ПараметрыДляРаспределения);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СтруктураОписанияТаблицДляРаспределенияРезультата()
ОписанияТаблиц = Новый Структура;
ОписанияТаблиц.Вставить("Начисления", ОписаниеТаблицыНачислений());
ОписанияТаблиц.Вставить("Удержания", ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Вставить("НДФЛ", ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Вставить("КорректировкиВыплаты", ОписаниеТаблицыКорректировкиВыплаты());
Возврат ОписанияТаблиц;
КонецФункции
&НаСервере
Процедура ПриПолученииДанныхНаСервере(ТекущийОбъект, ДополнятьФорму = Истина)
ИспользоватьВоеннуюСлужбу = Ложь;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
НастройкиПриложения = Новый Структура;
НастройкиПриложения.Вставить("ИспользоватьВоеннуюСлужбу", Ложь);
НастройкиПриложения.Вставить("ВыплачиватьАвансыВоеннослужащимПоКонтракту", Ложь);
НастройкиПриложения.Вставить("НачислятьОкладЗаКлассныйЧинМуниципальнымСлужащим", Ложь);
НастройкиПриложения.Вставить("ИспользоватьРасчетСохраняемогоДенежногоСодержания", Ложь);
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
Модуль.НастройкиПрограммыБюджетногоУчреждения(НастройкиПриложения);
ИспользоватьВоеннуюСлужбу = НастройкиПриложения.ИспользоватьВоеннуюСлужбу И НастройкиПриложения.ВыплачиватьАвансыВоеннослужащимПоКонтракту;
КонецЕсли;
РаботаВБюджетномУчреждении = ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении");
ИспользоватьСтатьиФинансирования = ПолучитьФункциональнуюОпцию("ИспользоватьСтатьиФинансированияЗарплатаРасширенный");
Если Не ФормаДополнена И ДополнятьФорму Тогда
ДополнитьФорму();
КонецЕсли;
ДанныеВРеквизиты(ТекущийОбъект);
УчетНДФЛФормы.ЗаполнитьВторичныеДанныеТабличныхЧастей(ЭтаФорма);
УстановитьФункциональныеОпцииФормы(ЭтаФорма);
Если ДополнятьФорму Тогда
ОтложитьРасчетНалогаВАвансеДоРасчетаЗарплаты = УчетНДФЛРасширенный.ОтложитьРасчетНалогаВАвансеДоРасчетаЗарплаты(Объект.Организация);
УстановитьСвойстваЭлементовНДФЛ();
КонецЕсли;
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтаФорма, "Объект.МесяцНачисления", "МесяцНачисленияСтрокой");
УстановитьДоступностьКомандыЗаполнитьССохранениемИсправлений(НайденыИсправленияПриОткрытии);
ЗагрузитьНастройки();
РассчитатьИтогиПоДокументу();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка = Истина)
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") = 0 Тогда
Возврат;
КонецЕсли;
ЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуРедактированияРезультатовРаспределенияПоИсточникамФинансирования(ЭтаФорма, ОписаниеТаблицы, ВыбраннаяСтрока, Объект.МесяцНачисления);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаСервере
Процедура НачисленияПриОкончанииРедактированияНаСервере()
ЗаполнитьВторичныеДанныеФормыПримененныеВычеты();
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаСервере
Процедура НДФЛПриОкончанииРедактированияНаСервере()
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура НДФЛПослеУдаленияНаСервере()
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
РассчитатьИтогУдержано(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОжиданияМесяцНачисленияПриИзменении()
ПриИзмененииМесяцаНачисления();
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииМесяцаНачисления()
ЗарплатаКадрыКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
УстановитьПериодНачисления();
ПриИзмененииМесяцаНачисленияНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПериодНачисления()
Объект.ОкончаниеПериодаНачисления = Дата(Год(Объект.МесяцНачисления), Месяц(Объект.МесяцНачисления), 15);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСотрудника(Сотрудник, ОписаниеТаблицы) Экспорт
Если Не ЗначениеЗаполнено(Сотрудник) Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Сотрудник) <> Тип("Массив") Тогда
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник);
Иначе
Сотрудники = Сотрудник;
КонецЕсли;
МассивСотрудниковКРасчету = Новый Массив;
Для Каждого СотрудникРасчета Из Сотрудники Цикл
Если НЕ РасчетЗарплатыРасширенныйКлиент.ДобавитьСотрудникаКРасчету(ЭтаФорма, СотрудникРасчета, ОписаниеТаблицы) Тогда
МассивСотрудниковКРасчету.Добавить(СотрудникРасчета);
КонецЕсли;
КонецЦикла;
Если МассивСотрудниковКРасчету.Количество() > 0 Тогда
РассчитатьСотрудникаНаСервере(МассивСотрудниковКРасчету, ОписаниеТаблицы);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РассчитатьСотрудникаНаСервере(Сотрудник, ОписаниеТаблицы = Неопределено, РассчитатьИтоги = Истина)
Отбор = СотрудникиФизическиеЛицаОтбор(Сотрудник);
Если Отбор = Неопределено Тогда
Возврат;
КонецЕсли;
СотрудникиКРасчетуОтбор = Отбор.СотрудникиКРасчету;
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.МесяцНачисления, Объект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(Отбор.ФизическиеЛица, МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИсточникиИзмененийМенеджераРасчета(МенеджерРасчета, ИзмененныеДанные);
ПозицииВставки = Новый Структура;
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета, Отбор, ПозицииВставки);
МенеджерРасчета.РассчитатьЗарплату();
ДанныеДляЗаполненияВДанныеФормы(МенеджерРасчета.Зарплата, ПозицииВставки);
УчетНДФЛФормы.ЗаполнитьВторичныеДанныеТабличныхЧастей(ЭтаФорма, , СотрудникиКРасчетуОтбор);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы();
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы, СотрудникиКРасчетуОтбор);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы, СотрудникиКРасчетуОтбор);
ЗарплатаКадрыРасширенныйКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы, СотрудникиКРасчетуОтбор);
Если РассчитатьИтоги Тогда
РассчитатьИтогиПоДокументу();
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда(), СотрудникиКРасчетуОтбор);
КонецПроцедуры
&НаСервере
Процедура ПересчитатьНДФЛ()
УстановитьПривилегированныйРежим(Истина);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.МесяцНачисления, Объект.Организация);
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник");
ФизическиеЛицаСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Сотрудники, "ФизическоеЛицо");
ФизическиеЛица = ОбщегоНазначения.ВыгрузитьКолонку(ФизическиеЛицаСотрудников, "Значение");
ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛица, МенеджерРасчета);
МенеджерРасчета.НастройкиРасчета.ФизическиеЛица = ФизическиеЛица;
Если Не РассчитыватьНДФЛ() Тогда
Объект.НДФЛ.Очистить();
Объект.КорректировкиВыплаты.Очистить();
Объект.ПримененныеВычетыНаДетейИИмущественные.Очистить();
КонецЕсли;
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
МенеджерРасчета.ПересчитатьНДФЛ();
ДанныеДляЗаполненияВДанныеФормы(МенеджерРасчета.Зарплата);
УчетНДФЛФормы.ЗаполнитьВторичныеДанныеТабличныхЧастей(ЭтаФорма);
РассчитатьИтогУдержано(ЭтаФорма);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Функция СотрудникиФизическиеЛицаОтбор(Сотрудники)
СотрудникиДокумента = Новый Массив;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СотрудникиДокумента, ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Истина);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Сотрудники", Сотрудники);
Запрос.УстановитьПараметр("СотрудникиДокумента", СотрудникиДокумента);
Если ТипЗнч(Сотрудники) = Тип("СправочникСсылка.ФизическиеЛица")
Или ТипЗнч(Сотрудники) = Тип("Массив") И Сотрудники.Количество() > 0 И ТипЗнч(Сотрудники[0]) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
ФизическиеЛица = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудники);
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Ссылка КАК Сотрудник,
| Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&СотрудникиДокумента)
| И Сотрудники.ФизическоеЛицо В(&Сотрудники)";
СотрудникиФизическиеЛица = Запрос.Выполнить().Выбрать();
Если ТипЗнч(Сотрудники) <> Тип("Массив") Тогда
ФизическиеЛица = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудники);
Иначе
ФизическиеЛица = Сотрудники;
КонецЕсли;
Иначе
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Сотрудники.ФизическоеЛицо
|ПОМЕСТИТЬ ВТФизическиеЛица
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&Сотрудники)
|;
|
|
|ВЫБРАТЬ
| Сотрудники.Ссылка КАК Сотрудник,
| ФизическиеЛица.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТФизическиеЛица КАК ФизическиеЛица
| ПО Сотрудники.ФизическоеЛицо = ФизическиеЛица.ФизическоеЛицо
| И (Сотрудники.Ссылка В (&СотрудникиДокумента))
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Сотрудники.Ссылка,
| Сотрудники.ФизическоеЛицо
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&Сотрудники)
|;
|
|
|ВЫБРАТЬ
| ВТФизическиеЛица.ФизическоеЛицо
|ИЗ
| ВТФизическиеЛица КАК ВТФизическиеЛица";
Результат = Запрос.ВыполнитьПакет();
ФизическиеЛица = Результат[2].Выгрузить().ВыгрузитьКолонку("ФизическоеЛицо");
СотрудникиФизическиеЛица = Результат[1].Выбрать();
КонецЕсли;
Отбор = Новый Структура("СотрудникиКРасчету, ФизическиеЛицаСотрудников, ФизическиеЛицаОтбор, ФизическиеЛица");
Отбор.ФизическиеЛица = ФизическиеЛица;
Отбор.ФизическиеЛицаСотрудников = Новый Соответствие;
Отбор.ФизическиеЛицаОтбор = Новый Соответствие;
Отбор.СотрудникиКРасчету = Новый Массив;
Пока СотрудникиФизическиеЛица.Следующий() Цикл
Отбор.ФизическиеЛицаСотрудников.Вставить(СотрудникиФизическиеЛица.Сотрудник, СотрудникиФизическиеЛица.ФизическоеЛицо);
Отбор.СотрудникиКРасчету.Добавить(СотрудникиФизическиеЛица.Сотрудник);
КонецЦикла;
Для каждого ФизическоеЛицо Из ФизическиеЛица Цикл
Отбор.ФизическиеЛицаОтбор.Вставить(ФизическоеЛицо, Истина)
КонецЦикла;
Возврат Отбор;
КонецФункции
&НаСервере
Процедура ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета, Отбор = Неопределено, ПозицииВставки = Неопределено)
ДанныеРезультатовРаспределенияНачислений = Неопределено;
Если ЗначениеЗаполнено(АдресТаблицыРаспределенияНачислений) Тогда
ДанныеРезультатовРаспределенияНачислений = ПолучитьИзВременногоХранилища(АдресТаблицыРаспределенияНачислений);
КонецЕсли;
ДанныеРезультатовРаспределенияУдержаний = Неопределено;
Если ЗначениеЗаполнено(АдресТаблицыРаспределенияУдержаний) Тогда
ДанныеРезультатовРаспределенияУдержаний = ПолучитьИзВременногоХранилища(АдресТаблицыРаспределенияУдержаний);
КонецЕсли;
ДанныеРаспределенияПоТерриториямУсловиямТруда = Неопределено;
Если ЗначениеЗаполнено(АдресТаблицыРаспределенияПоТерриториямУсловиямТруда) Тогда
ДанныеРаспределенияПоТерриториямУсловиямТруда = ПолучитьИзВременногоХранилища(АдресТаблицыРаспределенияПоТерриториямУсловиямТруда);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.НачисленияВДанныеМенеджераРасчета(Объект.Начисления, МенеджерРасчета, Объект.Организация, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.УдержанияВДанныеМенеджераРасчета(Объект.Удержания, МенеджерРасчета, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.НДФЛВДанныеМенеджераРасчета(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, МенеджерРасчета, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.КорректировкиВыплатыВДанныеМенеджераРасчета(Объект.КорректировкиВыплаты, МенеджерРасчета, Отбор, ПозицииВставки, ДанныеРезультатовРаспределенияУдержаний);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНастройкиМенеджераРасчета(СотрудникиФизическиеЛица, МенеджерРасчета)
МенеджерРасчета.ИсключаемыйРегистратор = Объект.Ссылка;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьУдержания = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ = РассчитыватьНДФЛ();
МенеджерРасчета.НастройкиРасчета.РассчитыватьКорректировкиВыплаты = Истина;
МенеджерРасчета.НастройкиУдержаний.РассчитыватьТолькоПоТекущемуДокументу = Истина;
МенеджерРасчета.НастройкиНДФЛ.Сотрудники = СотрудникиФизическиеЛица;
МенеджерРасчета.НастройкиНДФЛ.ДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
МенеджерРасчета.НастройкиНДФЛ.ОкончательныйРасчет = ОкончательныйРасчетНДФЛ;
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьНачисленияСотрудника(Сотрудники, СохранятьИсправления = Истина) Экспорт
Если Не РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента()) Тогда
Возврат;
КонецЕсли;
ПерезаполнитьДанныеФормыНаКлиенте(Сотрудники, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДанныеФормыНаКлиенте() Экспорт
ИтогНачислено = 0;
ИтогУдержано = 0;
РасчетЗарплатыРасширенныйКлиентСервер.ОчиститьТаблицыДокумента(ЭтаФорма, ОписаниеДокумента());
Результат = РезультатЗаполненияВДлительнойОперации();
Если Результат.ЗаданиеВыполнено Тогда
РасчетЗарплатыРасширенныйКлиент.ОчиститьСписокСотрудниковКРасчету(ЭтаФорма);
ОповеститьОбИзменении(Объект.Ссылка);
Иначе
ИдентификаторЗадания = Результат.ИдентификаторЗадания;
АдресХранилища = Результат.АдресХранилища;
ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина);
ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтаФорма, ИдентификаторЗадания);
КонецЕсли;
РасчетЗарплатыКлиент.УстановитьОтображениеКнопкиПересчитать(ЭтаФорма, СотрудникиКРасчету.Количество() > 0);
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьДанныеФормыНаКлиенте(Сотрудники = Неопределено, СохранятьИсправления = Истина) Экспорт
ИтогНачислено = 0;
ИтогУдержано = 0;
Если Не РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента()) Тогда
Возврат;
КонецЕсли;
Результат = ПерезаполнитьДанныеФормыНаСервере(Сотрудники, СохранятьИсправления, СотрудникиКРасчету);
Если Результат.ЗаданиеВыполнено Тогда
РасчетЗарплатыРасширенныйКлиент.ОчиститьСписокСотрудниковКРасчету(ЭтаФорма, Сотрудники);
ОповеститьОбИзменении(Объект.Ссылка);
УстановитьЗначенияКонтролируемыхПолей();
УчетНДФЛКлиент.НДФЛПриАктивизацииСтроки(ЭтаФорма);
Иначе
ИдентификаторЗадания = Результат.ИдентификаторЗадания;
АдресХранилища = Результат.АдресХранилища;
ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина);
ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтаФорма, ИдентификаторЗадания);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПерезаполнитьДанныеФормыНаСервере(Сотрудники = Неопределено, СохранятьИсправления = Истина, СотрудникиКРасчету = Неопределено) Экспорт
ИспользоватьДлительнуюОперацию = Истина;
Если Сотрудники <> Неопределено Тогда
ИспользоватьДлительнуюОперацию = Ложь;
Отбор = СотрудникиФизическиеЛицаОтбор(Сотрудники);
СотрудникиОтбор = Отбор.СотрудникиКРасчету;
Иначе
СотрудникиОтбор = Неопределено;
КонецЕсли;
Результат = РасчетЗарплатыРасширенный.ПерезаполнитьДанныеФормы(
ЭтаФорма, ОписаниеДокумента(), СотрудникиОтбор, СохранятьИсправления, ИспользоватьДлительнуюОперацию);
Если СотрудникиКРасчету <> Неопределено Тогда
ПересчитатьДокументНаСервере(СотрудникиКРасчету);
КонецЕсли;
Если Результат <> Неопределено Тогда
АдресХранилища = Результат.АдресХранилища;
КонецЕсли;
Если Результат <> Неопределено И Результат.ЗаданиеВыполнено Тогда
ЗаполнениеПослеВыполненияДлительнойОперации();
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
РассчитатьИтогиПоДокументу();
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПересчитатьСотрудника(ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля) Экспорт
Если Не РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента()) Тогда
Возврат;
КонецЕсли;
ПересчитатьСотрудникаНаСервере(ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля);
КонецПроцедуры
&НаСервере
Процедура ПересчитатьСотрудникаНаСервере(ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля)
РасчетЗарплатыРасширенный.ПересчитатьСотрудникаНаСервере(ЭтаФорма, ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля);
РассчитатьИтогиПоДокументу();
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьСтроку(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей) Экспорт
ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаСервере
Процедура ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей)
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеДокумента(), ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаСервере
Функция РезультатЗаполненияВДлительнойОперации()
СтруктураПараметров = РасчетЗарплатыРасширенныйКлиентСервер.ПараметрыПолученияДанныхЗаполненияДокумента();
СтруктураПараметров.ОписаниеДокумента = ОписаниеДокумента();
СтруктураПараметров.Организация = Объект.Организация;
СтруктураПараметров.ДокументСсылка = Объект.Ссылка;
СтруктураПараметров.Подразделение = Объект.Подразделение;
СтруктураПараметров.МесяцНачисления = Объект.МесяцНачисления;
СтруктураПараметров.ОкончаниеПериода = КонецДня(Объект.ОкончаниеПериодаНачисления);
СтруктураПараметров.РежимНачисления = Перечисления.РежимНачисленияЗарплаты.РасчетПервойПоловиныМесяца;
СтруктураПараметров.ДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
СтруктураПараметров.ОкончательныйРасчетНДФЛ = ОкончательныйРасчетНДФЛ;
СтруктураПараметров.ИспользоватьВоеннуюСлужбу = ИспользоватьВоеннуюСлужбу;
СтруктураПараметров.НачислениеЗарплатыВоеннослужащим = Объект.НачислениеЗарплатыВоеннослужащим;
НаименованиеЗадания = НСтр("ru = 'Заполнение документа ""Начисление зарплаты""'");
Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
УникальныйИдентификатор,
"Документы.НачислениеЗаПервуюПоловинуМесяца.ПодготовитьДанныеДляЗаполнения",
СтруктураПараметров,
НаименованиеЗадания);
АдресХранилища = Результат.АдресХранилища;
Если Результат.ЗаданиеВыполнено Тогда
ЗаполнениеПослеВыполненияДлительнойОперации();
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнениеПослеВыполненияДлительнойОперации()
СтруктураДанных = ПолучитьИзВременногоХранилища(АдресХранилища);
Если ТипЗнч(СтруктураДанных) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
ДанныеДляЗаполнения = Неопределено;
Если СтруктураДанных.Свойство("ДанныеДляЗаполненияТаблицДокумента", ДанныеДляЗаполнения) Тогда
Объект.Начисления.Очистить();
Объект.Удержания.Очистить();
Объект.НДФЛ.Очистить();
Объект.ПримененныеВычетыНаДетейИИмущественные.Очистить();
Объект.КорректировкиВыплаты.Очистить();
ДанныеДляЗаполненияВДанныеФормы(ДанныеДляЗаполнения);
УчетНДФЛФормы.ЗаполнитьВторичныеДанныеТабличныхЧастей(ЭтаФорма);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы();
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецЕсли;
Если СтруктураДанных.Свойство("ДанныеДляПерезаполненияТаблицДокумента", ДанныеДляЗаполнения) Тогда
ДанныеДляЗаполненияВДанныеФормы(ДанныеДляЗаполнения, СтруктураДанных.СтруктураПараметров.ПозицииВставки);
УчетНДФЛФормы.ЗаполнитьВторичныеДанныеТабличныхЧастей(ЭтаФорма,,СтруктураДанных.СтруктураПараметров.Сотрудники);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы();
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы, СтруктураДанных.СтруктураПараметров.Сотрудники);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы, СтруктураДанных.СтруктураПараметров.Сотрудники);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы, СтруктураДанных.СтруктураПараметров.Сотрудники);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
РассчитатьИтогиПоДокументу();
КонецПроцедуры
&НаСервере
Процедура ДанныеДляЗаполненияВДанныеФормы(ДанныеМенеджера, ПозицииВставки = Неопределено)
СортироватьДанныеДляЗаполнения(ДанныеМенеджера);
ТаблицыНачислений = РасчетЗарплатыРасширенныйФормы.ТаблицыНачисленийФормы();
ТаблицыНачислений.Начисления = Объект.Начисления;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНачисленияВДанныеФормы(ТаблицыНачислений, ДанныеМенеджера.Начисления, Объект.Организация, Объект.МесяцНачисления, ПозицииВставки);
ТаблицыУдержаний = РасчетЗарплатыРасширенныйФормы.ТаблицыУдержанийФормы();
ТаблицыУдержаний.Удержания = Объект.Удержания;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыУдержанияВДанныеФормы(ТаблицыУдержаний, ДанныеМенеджера.Удержания, , ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНДФЛВДанныеФормы(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, ДанныеМенеджера.НДФЛ, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыКорректировкиВыплатыВДанныеФормы(Объект.КорректировкиВыплаты, ДанныеМенеджера.КорректировкиВыплаты, ПозицииВставки);
КонецПроцедуры
&НаСервере
Процедура СортироватьДанныеДляЗаполнения(ДанныеЗаполнения)
СортироватьРезультатРасчетаНачислений(ДанныеЗаполнения.Начисления);
СортироватьРезультатыРасчетаПоФизическимЛицам(ДанныеЗаполнения);
КонецПроцедуры
&НаСервере
Процедура СортироватьРезультатРасчетаНачислений(ТаблицаНачислений)
СортируемыеКоллекции = Новый Массив;
Коллекция = СотрудникиФормыРасширенный.СортируемаяКоллекцияСотрудников(ТаблицаНачислений);
Коллекция.ОписаниеКоллекции.Псевдоним = "Начисления";
Коллекция.ОписаниеКоллекции.ИмяПоляСотрудник = "Сотрудник";
Коллекция.ОписаниеКоллекции.ИмяПоляПодразделение = "Подразделение";
Коллекция.ОписаниеКоллекции.ИмяПоляПериод = "ДатаНачала";
СортируемыеКоллекции.Добавить(Коллекция);
МетаданныеРеквизитов = Метаданные.Документы.НачислениеЗаПервуюПоловинуМесяца.ТабличныеЧасти.Начисления.Реквизиты;
НастройкиСортировки = СотрудникиФормыРасширенный.НастройкиСортировкиПоУмолчанию();
СотрудникиФормыРасширенный.ДобавитьДополнительноеПолеСортировки(Коллекция, "Начисление.ОчередностьРасчета", МетаданныеРеквизитов.Начисление.Тип);
СотрудникиФормыРасширенный.ДобавитьДополнительноеПолеСортировки(Коллекция, "Начисление.РеквизитДопУпорядочивания", МетаданныеРеквизитов.Начисление.Тип);
СотрудникиФормыРасширенный.ДобавитьДополнительноеПолеСортировки(Коллекция, "ДокументОснование", МетаданныеРеквизитов.ДокументОснование.Тип);
СотрудникиФормыРасширенный.ДобавитьДополнительноеПолеСортировки(Коллекция, "ДатаНачала", МетаданныеРеквизитов.ДатаНачала.Тип);
УстановитьПривилегированныйРежим(Истина);
ПорядокСортировки = СотрудникиФормыРасширенный.ПорядокСтрокКоллекцийСотрудников(СортируемыеКоллекции, НастройкиСортировки);
УстановитьПривилегированныйРежим(Ложь);
Если Не ПорядокСортировки.Свойство("Начисления") Тогда
Возврат;
КонецЕсли;
ТаблицаНачислений.Колонки.Добавить("Порядок", Новый ОписаниеТипов("Число"));
Для Каждого СтрокаПорядка Из ПорядокСортировки.Начисления Цикл
СтрокаТаблицы = ТаблицаНачислений[СтрокаПорядка.ИндексСтрокиИсходнойТаблицы];
СтрокаТаблицы.Порядок = СтрокаПорядка.Порядок;
КонецЦикла;
ТаблицаНачислений.Сортировать("Порядок");
ТаблицаНачислений.Колонки.Удалить("Порядок");
КонецПроцедуры
&НаСервере
Процедура СортироватьРезультатыРасчетаПоФизическимЛицам(ДанныеЗаполнения)
СортируемыеКоллекции = Новый Массив;
Коллекция = СотрудникиФормыРасширенный.СортируемаяКоллекцияФизическихЛиц(ДанныеЗаполнения.Удержания);
Коллекция.ОписаниеКоллекции.Псевдоним = "Удержания";
Коллекция.ОписаниеКоллекции.ИмяПоляФизическоеЛицо = "ФизическоеЛицо";
МетаданныеРеквизитов = Метаданные.Документы.НачислениеЗаПервуюПоловинуМесяца.ТабличныеЧасти.Удержания.Реквизиты;
СотрудникиФормыРасширенный.ДобавитьДополнительноеПолеСортировки(Коллекция, "Удержание.ОчередностьРасчета", МетаданныеРеквизитов.Удержание.Тип);
СотрудникиФормыРасширенный.ДобавитьДополнительноеПолеСортировки(Коллекция, "Удержание", МетаданныеРеквизитов.Удержание.Тип);
СортируемыеКоллекции.Добавить(Коллекция);
Коллекция = СотрудникиФормыРасширенный.СортируемаяКоллекцияФизическихЛиц(ДанныеЗаполнения.НДФЛ);
Коллекция.ОписаниеКоллекции.Псевдоним = "НДФЛ";
Коллекция.ОписаниеКоллекции.ИмяПоляФизическоеЛицо = "ФизическоеЛицо";
МетаданныеРеквизитов = Метаданные.Документы.НачислениеЗаПервуюПоловинуМесяца.ТабличныеЧасти.НДФЛ.Реквизиты;
СотрудникиФормыРасширенный.ДобавитьДополнительноеПолеСортировки(Коллекция, "МесяцНалоговогоПериода", МетаданныеРеквизитов.МесяцНалоговогоПериода.Тип);
СотрудникиФормыРасширенный.ДобавитьДополнительноеПолеСортировки(Коллекция, "Подразделение", МетаданныеРеквизитов.Подразделение.Тип);
СортируемыеКоллекции.Добавить(Коллекция);
Коллекция = СотрудникиФормыРасширенный.СортируемаяКоллекцияФизическихЛиц(ДанныеЗаполнения.КорректировкиВыплаты);
Коллекция.ОписаниеКоллекции.Псевдоним = "КорректировкиВыплаты";
Коллекция.ОписаниеКоллекции.ИмяПоляФизическоеЛицо = "ФизическоеЛицо";
СортируемыеКоллекции.Добавить(Коллекция);
УстановитьПривилегированныйРежим(Истина);
ПорядокСортировки = СотрудникиФормыРасширенный.ПорядокСортировкиКоллекцияФизическихЛиц(СортируемыеКоллекции, Объект.Организация, КонецМесяца(Объект.МесяцНачисления));
УстановитьПривилегированныйРежим(Ложь);
Для Каждого КлючЗначение Из ПорядокСортировки Цикл
ТаблицаИсходныхДанных = ДанныеЗаполнения[КлючЗначение.Ключ];
ТаблицаИсходныхДанных.Колонки.Добавить("Порядок", Новый ОписаниеТипов("Число"));
Для Каждого СтрокаПорядка Из КлючЗначение.Значение Цикл
СтрокаТаблицы = ТаблицаИсходныхДанных[СтрокаПорядка.ИндексСтрокиИсходнойТаблицы];
СтрокаТаблицы.Порядок = СтрокаПорядка.Порядок;
КонецЦикла;
ТаблицаИсходныхДанных.Сортировать("Порядок");
ТаблицаИсходныхДанных.Колонки.Удалить("Порядок");
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗаданиеВыполнено(ИдентификаторЗадания)
Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
КонецФункции
&НаСервереБезКонтекста
Функция СообщенияФоновогоЗадания(ИдентификаторЗадания)
СообщенияПользователю = Новый Массив;
ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
Если ФоновоеЗадание <> Неопределено Тогда
СообщенияПользователю = ФоновоеЗадание.ПолучитьСообщенияПользователю();
КонецЕсли;
Возврат СообщенияПользователю;
КонецФункции
&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеЗадания()
Попытка
Если ФормаДлительнойОперации.Открыта()
И ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗадания Тогда
Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда
РасчетЗарплатыРасширенныйКлиент.ОчиститьСписокСотрудниковКРасчету(ЭтаФорма);
ЗаполнениеПослеВыполненияДлительнойОперации();
ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации);
Иначе
ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
ПодключитьОбработчикОжидания(
"Подключаемый_ПроверитьВыполнениеЗадания",
ПараметрыОбработчикаОжидания.ТекущийИнтервал,
Истина);
КонецЕсли;
КонецЕсли;
Исключение
ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации);
СообщенияПользователю = СообщенияФоновогоЗадания(ИдентификаторЗадания);
Если СообщенияПользователю <> Неопределено Тогда
Для каждого СообщениеФоновогоЗадания Из СообщенияПользователю Цикл
СообщениеФоновогоЗадания.Сообщить();
КонецЦикла;
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
ОповеститьОбИзменении(Объект.Ссылка);
КонецПроцедуры
&НаСервере
Функция ОписаниеДокумента(УчитыватьОпцииНДФЛ = Истина)
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеРасчетногоДокумента();
Описание.Окончание = "ОкончаниеПериодаНачисления";
Описание.РежимНачисления = Перечисления.РежимНачисленияЗарплаты.РасчетПервойПоловиныМесяца;
Описание.НачисленияИмя = "Начисления";
Описание.НачисленияКоманднаяПанельИмя = "КомандыНачисления";
Описание.УдержанияИмя = "Удержания";
Описание.УдержанияКоманднаяПанельИмя = "УдержанияАвтоКоманды";
Если Не УчитыватьОпцииНДФЛ Тогда
Описание.НДФЛИмя = "НДФЛ";
Описание.ПримененныеВычетыИмя = "ПримененныеВычетыНаДетейИИмущественные";
ИначеЕсли Не РассчитыватьНДФЛ() Тогда
Описание.НДФЛИмя = Неопределено;
Описание.ПримененныеВычетыИмя = Неопределено;
Иначе
Описание.НДФЛИмя = "НДФЛ";
Описание.ПримененныеВычетыИмя = "ПримененныеВычетыНаДетейИИмущественные";
КонецЕсли;
Описание.НДФЛКоманднаяПанельИмя = "НДФЛАвтоКоманды";
Описание.КорректировкиВыплатыИмя = "КорректировкиВыплаты";
Описание.ОписанияТаблиц.Вставить("Начисления", ОписаниеТаблицыНачислений());
Описание.ОписанияТаблиц.Вставить("Удержания", ОписаниеТаблицыУдержаний());
Описание.ОписанияТаблиц.Вставить("НДФЛ", ОписаниеТаблицыНДФЛ());
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента(НСтр("ru = 'Дата окончания начисления'"), "Объект.ОкончаниеПериодаНачисления"));
Описание.ОписанияТаблицДляРаспределенияРезультата = СтруктураОписанияТаблицДляРаспределенияРезультата();
Возврат Описание;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеПанелиВычеты()
ОписаниеПанелиВычеты = УчетНДФЛКлиентСервер.ОписаниеПанелиВычеты();
ОписаниеТабличнойЧастиНДФЛ = УчетНДФЛКлиентСервер.ОписаниеТабличнойЧастиНДФЛ();
ОписаниеТабличнойЧастиНДФЛ.ИспользуетсяФиксРасчет = Истина;
ОписаниеТабличнойЧастиНДФЛ.ИмяПоляПериод = "";
ОписаниеПанелиВычеты.ТабличнаяЧастьНДФЛ = ОписаниеТабличнойЧастиНДФЛ;
РасчетЗарплатыКлиентСервер.ДополнитьОписаниеПанелиВычеты(ОписаниеПанелиВычеты);
ОписаниеТабличнойЧастиКорректировкиВыплаты = РасчетЗарплатыКлиентСервер.ОписаниеТабличнойЧастиКорректировкиВыплаты();
ОписаниеТабличнойЧастиКорректировкиВыплаты.ИспользуетсяФиксРасчет = Истина;
ОписаниеПанелиВычеты.ТабличнаяЧастьКорректировкиВыплаты = ОписаниеТабличнойЧастиКорректировкиВыплаты;
НастраиваемыеПанели = Новый Соответствие;
НастраиваемыеПанели.Вставить("ВычетыЛичные", Истина);
НастраиваемыеПанели.Вставить("ВычетыНаДетейИИмущественные", "Объект.ПримененныеВычетыНаДетейИИмущественные");
НастраиваемыеПанели.Вставить("ВычетыКДоходам", "Объект.Начисления");
ОписаниеПанелиВычеты.НастраиваемыеПанели = НастраиваемыеПанели;
Возврат ОписаниеПанелиВычеты;
КонецФункции
&НаКлиенте
Функция ОписаниеПанелиВычетыНаКлиенте() Экспорт
Возврат ОписаниеПанелиВычеты();
КонецФункции
&НаСервере
Функция ОписаниеПанелиВычетыНаСервере() Экспорт
Возврат ОписаниеПанелиВычеты();
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНачислений()
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
Описание.СодержитПолеСотрудник = Истина;
Описание.ИмяРеквизитаСотрудник = "Сотрудник";
Описание.ИмяПоляДляВставкиПоказателей = "ДатыНачисления";
Описание.СодержитПолеКодВычета = Истина;
Описание.ИмяРеквизитаДокументОснование = "ДокументОснование";
Описание.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияРезультат";
Описание.ВставлятьПослеПоля = Истина;
Описание.ОтображатьПоляОписанияВремени = Истина;
Описание.ОтображатьПоляНормыВремени = Истина;
Описание.УправлятьОтображениемПолейОписанияВремени = Истина;
Описание.РаспределениеРезультатовЗависимыеТаблицы = "Начисления,Удержания,НДФЛ";
Описание.ПутьКДаннымАдресРаспределенияРезультатовВХранилище = "АдресТаблицыРаспределенияНачислений";
Описание.ПутьКДаннымАдресРаспределенияПоТерриториямУсловиямТруда = "АдресТаблицыРаспределенияПоТерриториямУсловиямТруда";
Описание.ОтменятьВсеИсправления = Истина;
Описание.СодержитПолеМестоПолученияДохода = Истина;
Возврат Описание;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыУдержаний()
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
Описание.ИмяРеквизитаВидРасчета = "Удержание";
Описание.ИмяТаблицы = "Удержания";
Описание.ПутьКДанным = "Объект.Удержания";
Описание.ИмяПоляДляВставкиПоказателей = "УдержанияРезультат";
Описание.НомерТаблицы = 2;
Описание.СодержитПолеСотрудник = Истина;
Описание.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
Описание.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
Описание.ИмяПоляДляВставкиРаспределенияРезультатов = "УдержанияРезультат";
Описание.ВставлятьПослеПоля = Истина;
Описание.ОтменятьВсеИсправления = Истина;
Возврат Описание;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНДФЛ()
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
Описание.ИмяТаблицы = "НДФЛ";
Описание.ПутьКДанным = "Объект.НДФЛ";
Описание.ИмяПоляДляВставкиПоказателей = "Налог";
Описание.ИмяРеквизитаПериод = "МесяцНалоговогоПериода";
Описание.ИмяПоляРезультат = "Налог";
Описание.НомерТаблицы = 3;
Описание.СодержитПолеВидРасчета = Ложь;
Описание.СодержитПолеСотрудник = Истина;
Описание.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
Описание.ОтменятьВсеИсправления = Истина;
Описание.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
Описание.ИмяПоляДляВставкиРаспределенияРезультатов = "НДФЛМесяцНалоговогоПериода";
Описание.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтрокиНДФЛ";
Возврат Описание;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция МассивОписанийТаблицФормы()
МассивОписанийТаблицФормы = Новый Структура;
МассивОписанийТаблицФормы.Вставить("Начисления", ОписаниеТаблицыНачислений());
МассивОписанийТаблицФормы.Вставить("Удержания", ОписаниеТаблицыУдержаний());
Возврат МассивОписанийТаблицФормы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписанияТаблицДляРаспределенияРезультата()
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений());
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Добавить(ОписаниеТаблицыКорректировкиВыплаты());
Возврат ОписанияТаблиц;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыКорректировкиВыплаты()
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыКорректировкиВыплаты();
Описание.ПроверяемыеРеквизиты = "ФизическоеЛицо";
Описание.ПутьКДаннымАдресРаспределенияРезультатовВХранилище = "АдресТаблицыРаспределенияУдержаний";
Описание.ОтображатьПоляРаспределенияРезультатов = Истина;
Возврат Описание;
КонецФункции
&НаСервере
Процедура ДополнитьФорму(КонтролируемыеПоля = Неопределено, ОписаниеПанелиВычеты = Неопределено, ОписаниеКлючевыхРеквизитов = Неопределено, ТаблицыОчищаемыеПриИзменении = Неопределено)
РасчетЗарплатыРасширенныйФормы.ДокументыНачисленийДополнитьФорму(ЭтаФорма, ОписаниеДокумента(Ложь));
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыНачислений();
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыВидовРасчета, "Начисления", "КомандыНачисления",,КонтролируемыеПоля);
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыУдержаний();
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыВидовРасчета, "Удержания", "УдержанияАвтоКоманды", , КонтролируемыеПоля);
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыНДФЛ();
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыВидовРасчета, "", "АвтоКоманды", , КонтролируемыеПоля);
РасчетЗарплатыРасширенныйФормы.ПорядокВыплатыЗарплатыДополнитьФорму(ЭтаФорма);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПорядокВыплаты", "Видимость", Ложь);
УчетНДФЛФормы.ДополнитьФормуПанельюВычетов(ЭтаФорма, ОписаниеПанелиВычеты);
ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыЗаполнитьПредупреждения(ЭтаФорма, ОписаниеКлючевыхРеквизитов);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма, , ОписаниеКлючевыхРеквизитов, ТаблицыОчищаемыеПриИзменении);
РасчетЗарплатыРасширенныйФормы.ДокументыНачисленийДополнитьФормуРезультатыРаспределения(ЭтаФорма, ОписанияТаблицДляРаспределенияРезультата());
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДополнитьФорму(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ДобавитьКомандуУдалитьСотрудника();
КонецПроцедуры
&НаСервере
Процедура ДанныеВРеквизиты(ТекущийОбъект)
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ИнициализироватьИсточникиДанныхФормыПриПолученииДанных(ТекущийОбъект, МенеджерВременныхТаблиц);
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений());
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяВТРаспределение", "ВТРаспределениеРезультатовНачислений");
ДополнительныеПараметры.Вставить("ИмяВТПредставлениеРаспределения", "ВТПредставлениеРаспределенияНачислений");
ДополнительныеПараметры.Вставить("ПодготовленаВТВычетыКДоходам", Ложь);
ДополнительныеПараметры.Вставить("Период", '00010101');
ДополнительныеПараметры.Вставить("ОписаниеПанелиВычеты", ОписаниеПанелиВычеты());
ДополнительныеПараметры.Вставить("ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда", ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ДополнительныеПараметры.Вставить("КонтролируемыеПоля", ПолучитьКонтролируемыеПоля());
ЗарплатаКадрыРасширенный.ВводНачисленийДанныеВРеквизит(ЭтаФорма, ОписанияТаблиц, 2, , ФормаДополнена);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы();
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаДанныеВРеквизит(ЭтаФорма, ОписанияТаблицДляРаспределенияРезультата());
ЗарплатаКадрыРасширенный.ЗаполнитьТаблицуВидовРасчетаПоДаннымОбъекта(ЭтотОбъект, ТекущийОбъект, ОписаниеТаблицыКорректировкиВыплаты(), МенеджерВременныхТаблиц, ДополнительныеПараметры);
ОтражениеЗарплатыВБухучетеРасширенный.ОбъектПриЧтенииНаСервереПредставлениеРаспределения(ЭтаФорма, ОписаниеДокумента());
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДанныеВРеквизит(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура РеквизитыВДанные(ТекущийОбъект)
ТекущийОбъект.Показатели.Очистить();
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений());
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ЗарплатаКадрыРасширенный.ВводНачисленийРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблиц, 2);
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблицДляРаспределенияРезультата());
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьФункциональныеОпцииФормы(Форма)
ПараметрыФО = Новый Структура("Организация", Форма.Объект.Организация);
Форма.УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьЗначенияКонтролируемыхПолей()
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "Начисления", Истина);
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "Удержания", Истина);
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "НДФЛ", Истина);
КонецПроцедуры
&НаСервере
Функция НДФЛПодробнееНаСервере(ИдентификаторыСтрок)
ФизическиеЛица = Новый Массив;
Для каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
ФизическиеЛица.Добавить(Объект.НДФЛ.НайтиПоИдентификатору(ИдентификаторСтроки).ФизическоеЛицо);
КонецЦикла;
ДокументОбъект = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(ДокументОбъект);
Возврат УчетНДФЛФормы.РегистрНалоговогоУчетаПоНДФЛ(ДокументОбъект, Модифицированность, ФизическиеЛица, Объект.МесяцНачисления);
КонецФункции
&НаСервере
Процедура ЗаполнитьВторичныеДанныеФормыПримененныеВычеты()
УчетНДФЛФормы.ЗаполнитьВторичныеДанныеТабличныхЧастей(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ВычетыПриОкончанииРедактирования(ТекущиеДанные, ОтменаРедактирования, КлючиПоиска)
Если НЕ Элементы[ОписаниеПанелиВычеты().ТабличнаяЧастьНДФЛ.ИмяТаблицыФормы].ТекущиеДанные.ФиксРасчет Тогда
Если УчетНДФЛКлиентРасширенный.ВычетыИзменены(ЭтаФорма, ТекущиеДанные, ОтменаРедактирования) Тогда
СтруктураПоиска = Новый Структура(КлючиПоиска);
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ТекущиеДанные);
УстановитьФиксРасчетСтрокНДФЛ(СтруктураПоиска);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВычетыПослеУдаления(ТекущиеДанные, КлючиПоиска)
Если НЕ Элементы[ОписаниеПанелиВычеты().ТабличнаяЧастьНДФЛ.ИмяТаблицыФормы].ТекущиеДанные.ФиксРасчет Тогда
СтруктураПоиска = Новый Структура(КлючиПоиска);
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ТекущиеДанные);
УстановитьФиксРасчетСтрокНДФЛ(СтруктураПоиска);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ()
УчетНДФЛФормы.ОбновитьПредставлениеВычетовНаДетейИИмущественныхСтрокиНДФЛ(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ОбновитьПредставлениеВычетовКДоходамСтрокиНДФЛ()
УчетНДФЛФормы.ОбновитьПредставлениеВычетовКДоходамСтрокиНДФЛ(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура УстановитьФиксРасчетСтрокНДФЛ(СтруктураПоиска)
УчетНДФЛФормы.УстановитьФиксРасчетСтрокНДФЛ(ЭтаФорма, СтруктураПоиска);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьИтогНачислено(Форма)
ОписанияСоставляющихНачисления = Новый Массив;
ОписанияСоставляющихНачисления.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеСуммируемогоРеквизита("Результат", НСтр("ru='зарплата'")));
ОписанияСоставляющих = Новый Массив;
ОписанияСоставляющих.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеТабличнойЧасти("Объект.Начисления", ОписанияСоставляющихНачисления));
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейРассчитатьИтог(Форма, "ИтогНачислено", ОписанияСоставляющих);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьИтогУдержано(Форма)
ОписанияСоставляющихУдержания = Новый Массив;
ОписанияСоставляющихУдержания.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеСуммируемогоРеквизита("Результат", НСтр("ru='удержания'")));
ОписанияСоставляющихНДФЛ = Новый Массив;
ОписанияСоставляющихНДФЛ.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеСуммируемогоРеквизита("Налог", НСтр("ru='НДФЛ'")));
ОписанияСоставляющихНДФЛ.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеСуммируемогоРеквизита("НалогСПревышения", НСтр("ru='НДФЛ с прев. 15%'")));
ОписанияСоставляющихНДФЛ.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеСуммируемогоРеквизита("НалогСПревышенияПоСтавке18", НСтр("ru='НДФЛ с прев. 18%'")));
ОписанияСоставляющихНДФЛ.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеСуммируемогоРеквизита("НалогСПревышенияПоСтавке20", НСтр("ru='НДФЛ с прев. 20%'")));
ОписанияСоставляющихНДФЛ.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеСуммируемогоРеквизита("НалогСПревышенияПоСтавке22", НСтр("ru='НДФЛ с прев. 22%'")));
ОписанияСоставляющих = Новый Массив;
ОписанияСоставляющих.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеТабличнойЧасти("Объект.Удержания", ОписанияСоставляющихУдержания));
ОписанияСоставляющих.Добавить(
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейОписаниеТабличнойЧасти("Объект.НДФЛ", ОписанияСоставляющихНДФЛ));
ЗарплатаКадрыКлиентСервер.ИтогиТабличныхЧастейРассчитатьИтог(Форма, "ИтогУдержано", ОписанияСоставляющих);
КонецПроцедуры
&НаСервере
Процедура РассчитатьИтогиПоДокументу()
РассчитатьИтогНачислено(ЭтаФорма);
РассчитатьИтогУдержано(ЭтаФорма);
КонецПроцедуры
&НаСервере
Функция ПолучитьКонтролируемыеПоля() Экспорт
НачисленияФиксРасчет = Новый Массив;
НачисленияФиксРасчет.Добавить("Результат");
НачисленияФиксРасчетВремени = Новый Массив;
НачисленияФиксРасчетВремени.Добавить("ОтработаноДней");
НачисленияФиксРасчетВремени.Добавить("ОтработаноЧасов");
НачисленияФиксРасчетВремени.Добавить("ОплаченоДней");
НачисленияФиксРасчетВремени.Добавить("ОплаченоЧасов");
НачисленияФиксРасчетВремени.Добавить("НормаДней");
НачисленияФиксРасчетВремени.Добавить("НормаЧасов");
НачисленияФиксСтрока = Новый Массив;
НачисленияФиксСтрока.Добавить("Сотрудник");
НачисленияФиксСтрока.Добавить("Подразделение");
НачисленияФиксСтрока.Добавить("Начисление");
НачисленияФиксСтрока.Добавить("ДатаНачала");
НачисленияФиксСтрока.Добавить("ДатаОкончания");
НачисленияФиксЗаполнение = Новый Массив;
НачисленияФиксЗаполнение.Добавить("МестоПолученияДохода");
УдержанияФиксРасчет = Новый Массив;
УдержанияФиксРасчет.Добавить("Результат");
КонтролируемыеПоля = Новый Структура("Начисления, Удержания, НДФЛ",
Новый Структура("ФиксРасчет, ФиксЗаполнение, ФиксСтрока, ФиксРасчетВремени",
НачисленияФиксРасчет,
НачисленияФиксЗаполнение,
НачисленияФиксСтрока,
НачисленияФиксРасчетВремени),
Новый Структура("ФиксРасчет, ФиксЗаполнение",
УдержанияФиксРасчет,
Новый Массив),
УчетНДФЛРасширенный.КонтролируемыеПоляДляФиксацииРезультатов());
КонтролируемыеПоля.Вставить("КорректировкиВыплаты", РасчетЗарплатыРасширенный.КонтролируемыеПоляКорректировкиВыплатыДляФиксацииРезультатов());
Возврат КонтролируемыеПоля;
КонецФункции
&НаКлиенте
Функция ПолучитьСтарыеЗначенияКонтролируемыхПолей() Экспорт
Возврат СтарыеЗначенияКонтролируемыхПолей;
КонецФункции
&НаКлиенте
Процедура ПересчитатьДокументНаКлиенте()
ПересчитатьДокументНаСервере(СотрудникиКРасчету);
РасчетЗарплатыРасширенныйКлиент.ОчиститьСписокСотрудниковКРасчету(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПересчитатьДокументНаСервере(СотрудникиКРасчету)
Для каждого ТаблицаССотрудниками Из СотрудникиКРасчету Цикл
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(ТаблицаССотрудниками.Значение.СписокСотрудников, "Ключ");
РассчитатьСотрудникаНаСервере(Сотрудники, ТаблицаССотрудниками.Значение.ОписаниеТаблицы, Ложь);
КонецЦикла;
РассчитатьИтогиПоДокументу();
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписьюОкончание(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ПересчитатьДокументНаКлиенте();
Записать(Параметры);
Иначе
ЗакрытьПослеЗаписи = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ЕстьИсправленныеСтроки() Экспорт
Возврат ЕстьИсправленныеСтрокиНаСервере();
КонецФункции
&НаСервере
Функция ЕстьИсправленныеСтрокиНаСервере()
Возврат РасчетЗарплатыРасширенныйФормы.ЕстьИсправленныеСтроки(ЭтаФорма);
КонецФункции
&НаСервере
Процедура ДобавитьКомандуУдалитьСотрудника()
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная") Тогда
Возврат;
КонецЕсли;
ОписаниеДокумента = ОписаниеДокумента();
ТаблицыДокумента = Новый Массив;
ТаблицыДокумента.Добавить("Начисления");
ТаблицыДокумента.Добавить("Удержания");
ТаблицыДокумента.Добавить("НДФЛ");
Для Каждого ТаблицаДокумента Из ТаблицыДокумента Цикл
ИмяТаблицы = ОписаниеДокумента[ТаблицаДокумента + "Имя"];
Если ИмяТаблицы <> Неопределено Тогда
ИмяКоманднойПанели = Неопределено;
ОписаниеДокумента.Свойство(ТаблицаДокумента + "КоманднаяПанельИмя", ИмяКоманднойПанели);
ДобавитьКомандуУдалитьСотрудникаВТаблицуДокумента(ИмяТаблицы, ИмяКоманднойПанели);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДобавитьКомандуУдалитьСотрудникаВТаблицуДокумента(ИмяТаблицы, ИмяКоманднойПанели)
Если Элементы.Найти(ИмяТаблицы) = Неопределено Тогда
Возврат;
КонецЕсли;
Если Команды.Найти(ИмяТаблицы + "УдалитьСотрудника") <> Неопределено Тогда
Возврат;
КонецЕсли;
КомандаУдалитьСотрудника = Команды.Добавить(ИмяТаблицы + "УдалитьСотрудника");
КомандаУдалитьСотрудника.Действие = "Подключаемый_" + ИмяТаблицы + "УдалитьСотрудника";
КомандаУдалитьСотрудника.Заголовок = НСтр("ru = 'Удалить сотрудника'");
КомандаУдалитьСотрудника.Подсказка = НСтр("ru = 'Данные по выбранному сотруднику удаляются со всех таблиц документа'");
КомандаУдалитьСотрудника.Картинка = БиблиотекаКартинок.Удалить;
КомандаУдалитьСотрудника.Отображение = ОтображениеКнопки.КартинкаИТекст;
КомандаУдалитьСотрудника.ИзменяетСохраняемыеДанные = Истина;
Если ИмяКоманднойПанели = Неопределено Тогда
ИмяКоманднойПанели = ИмяТаблицы + "КоманднаяПанель";
КонецЕсли;
КоманднаяПанельТаблицы = Элементы.Найти(ИмяКоманднойПанели);
Если КоманднаяПанельТаблицы <> Неопределено Тогда
Если КоманднаяПанельТаблицы.ПодчиненныеЭлементы.Количество() = 0 Тогда
МестоВставки = Неопределено;
Иначе
МестоВставки = КоманднаяПанельТаблицы.ПодчиненныеЭлементы[0];
КонецЕсли;
ИмяЭлемента = ИмяТаблицы + "КоманднаяПанельПересчитатьСотрудникаГруппа";
ГруппаКнопок = Элементы.Найти(ИмяЭлемента);
Если ГруппаКнопок = Неопределено Тогда
ГруппаКнопок = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), КоманднаяПанельТаблицы, МестоВставки);
ГруппаКнопок.Вид = ВидГруппыФормы.ГруппаКнопок;
ГруппаКнопок.Заголовок = НСтр("ru = 'Обновление строк документа'");
КонецЕсли;
ИмяЭлемента = ИмяТаблицы + "КоманднаяПанельУдалитьСотрудника";
Если Элементы.Найти(ИмяЭлемента) = Неопределено Тогда
КнопкаУдалитьСотрудника = Элементы.Добавить(ИмяЭлемента, Тип("КнопкаФормы"), ГруппаКнопок);
КнопкаУдалитьСотрудника.ИмяКоманды = ИмяТаблицы + "УдалитьСотрудника";
КнопкаУдалитьСотрудника.ТолькоВоВсехДействиях = Истина;
КонецЕсли;
КонтекстноеМеню = Элементы[ИмяТаблицы].КонтекстноеМеню;
МестоВставки = Неопределено;
Если КонтекстноеМеню.ПодчиненныеЭлементы.Количество() > 0 Тогда
МестоВставки = КонтекстноеМеню.ПодчиненныеЭлементы[0];
КонецЕсли;
ИмяЭлемента = ИмяТаблицы + "КонтекстноеМенюПересчитатьСотрудникаГруппа";
ГруппаКнопок = Элементы.Найти(ИмяЭлемента);
Если ГруппаКнопок = Неопределено Тогда
ГруппаКнопок = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), КонтекстноеМеню, МестоВставки);
ГруппаКнопок.Вид = ВидГруппыФормы.ГруппаКнопок;
ГруппаКнопок.Заголовок = НСтр("ru = 'Обновление строк документа'");
КонецЕсли;
ИмяЭлемента = ИмяТаблицы + "КонтекстноеМенюУдалитьСотрудника";
Если Элементы.Найти(ИмяЭлемента) = Неопределено Тогда
КнопкаУдалитьСотрудника = Элементы.Добавить(ИмяЭлемента, Тип("КнопкаФормы"), ГруппаКнопок);
КнопкаУдалитьСотрудника.ИмяКоманды = ИмяТаблицы + "УдалитьСотрудника";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалитьСотрудникаНаСервере(Сотрудник)
Если Не УдалитьДанныеСотрудникаНаСервере(Сотрудник) Тогда
РассчитатьСотрудникаНаСервере(Сотрудник);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция УдалитьДанныеСотрудникаНаСервере(СотрудникФизическоеЛицо)
УдаляемыеСотрудники = Новый Соответствие;
ДополнительныеСотрудники = Новый Соответствие;
Если ТипЗнч(СотрудникФизическоеЛицо) = Тип("СправочникСсылка.Сотрудники") Тогда
ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СотрудникФизическоеЛицо, "ФизическоеЛицо");
УдаляемыеСотрудники.Вставить(СотрудникФизическоеЛицо, Истина);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Сотрудник", СотрудникФизическоеЛицо);
Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо);
Запрос.Текст = "ВЫБРАТЬ
| Сотрудники.Ссылка
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка <> &Сотрудник
| И Сотрудники.ФизическоеЛицо = &ФизическоеЛицо";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДополнительныеСотрудники.Вставить(Выборка.Ссылка, Истина);
КонецЦикла;
Иначе
ФизическоеЛицо = СотрудникФизическоеЛицо;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо);
Запрос.Текст = "ВЫБРАТЬ
| Сотрудники.Ссылка
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.ФизическоеЛицо = &ФизическоеЛицо";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
УдаляемыеСотрудники.Вставить(Выборка.Ссылка, Истина);
КонецЦикла;
КонецЕсли;
ОчиститьУдержания = Истина;
ИменаТаблиц = Новый Массив;
ИменаТаблиц.Добавить("Начисления");
Для Каждого ИмяТаблицы Из ИменаТаблиц Цикл
СтрокиСотрудника = Новый Массив;
Для Каждого СтрокаСотрудника Из Объект[ИмяТаблицы] Цикл
Если УдаляемыеСотрудники[СтрокаСотрудника.Сотрудник] <> Неопределено Тогда
СтрокиСотрудника.Добавить(СтрокаСотрудника);
ИначеЕсли ДополнительныеСотрудники[СтрокаСотрудника.Сотрудник] <> Неопределено Тогда
ОчиститьУдержания = Ложь;
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаСотрудника Из СтрокиСотрудника Цикл
Объект[ИмяТаблицы].Удалить(СтрокаСотрудника);
КонецЦикла;
КонецЦикла;
Если Не ОчиститьУдержания Тогда
Возврат Ложь;
КонецЕсли;
ИменаТаблиц = Новый Массив;
ИменаТаблиц.Добавить("НДФЛ");
ИмяТаблицывычеты = "ПримененныеВычетыНаДетейИИмущественные";
Для Каждого ИмяТаблицы Из ИменаТаблиц Цикл
СтрокиФизическогоЛица = Объект[ИмяТаблицы].НайтиСтроки(Новый Структура("ФизическоеЛицо", ФизическоеЛицо));
Для Каждого СтрокаФизическогоЛица Из СтрокиФизическогоЛица Цикл
СтруктураИндентификаторНДФЛ = Новый Структура("ИдентификаторСтрокиНДФЛ", СтрокаФизическогоЛица.ИдентификаторСтрокиНДФЛ);
СтрокиВычетов = Объект[ИмяТаблицывычеты].НайтиСтроки(СтруктураИндентификаторНДФЛ);
Объект[ИмяТаблицы].Удалить(СтрокаФизическогоЛица);
Для Каждого СтрокаВычет ИЗ СтрокиВычетов Цикл
Объект[ИмяТаблицывычеты].Удалить(СтрокаВычет);
КонецЦикла;
КонецЦикла;
КонецЦикла;
ИменаТаблиц = Новый Массив;
ИменаТаблиц.Добавить("Удержания");
ИменаТаблиц.Добавить("КорректировкиВыплаты");
Для Каждого ИмяТаблицы Из ИменаТаблиц Цикл
СтрокиФизическогоЛица = Объект[ИмяТаблицы].НайтиСтроки(Новый Структура("ФизическоеЛицо", ФизическоеЛицо));
Для Каждого СтрокаФизическогоЛица Из СтрокиФизическогоЛица Цикл
Объект[ИмяТаблицы].Удалить(СтрокаФизическогоЛица);
КонецЦикла;
КонецЦикла;
РассчитатьИтогиПоДокументу();
Возврат Истина;
КонецФункции
&НаСервере
Процедура УдержанияПослеУдаленияНаСервере()
РассчитатьИтогУдержано(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьНастройки()
РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтаФорма, ОписаниеТаблицыНачислений());
РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтаФорма, ОписаниеТаблицыУдержаний());
КонецПроцедуры
&НаСервере
Процедура ОбновитьБухучетРезультатовРасчетаНаСервере(ИсходныеДанные)
УстановитьПривилегированныйРежим(Истина);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.МесяцНачисления, Объект.Организация);
Отбор = СотрудникиФизическиеЛицаОтбор(ИсходныеДанные.Сотрудник);
СотрудникиКРасчету = Отбор.СотрудникиКРасчету;
ПозицииВставки = Новый Структура;
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета, Отбор, ПозицииВставки);
ЗаполнитьНастройкиМенеджераРасчета(Отбор.ФизическиеЛица, МенеджерРасчета);
МенеджерРасчета.НастройкиБухучета.ПроверятьНеобходимостьПересчетаНДФЛ = МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ;
МенеджерРасчета.ЗаполнитьНастройкиОбновленияБухучета(ИсходныеДанные);
МенеджерРасчета.ОбновитьБухучетРезультатовРасчета();
ДанныеДляЗаполненияВДанныеФормы(МенеджерРасчета.Зарплата, ПозицииВставки);
УчетНДФЛФормы.ЗаполнитьВторичныеДанныеТабличныхЧастей(ЭтаФорма, , СотрудникиКРасчету);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы();
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы, СотрудникиКРасчету);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы, СотрудникиКРасчету);
ЗарплатаКадрыРасширенныйКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы, СотрудникиКРасчету);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда(), СотрудникиКРасчету);
РасчетЗарплатыРасширенныйФормы.УстановитьТекущуюСтрокуТаблицыФормы(ЭтаФорма, ИсходныеДанные.ИмяИсходнойТаблицы, ИсходныеДанные.НомерСтрокиИсходнойТаблицы);
КонецПроцедуры
&НаСервере
Функция АдресСпискаПодобранныхСотрудников()
Возврат ПоместитьВоВременноеХранилище(Объект.Начисления.Выгрузить(,"Сотрудник").ВыгрузитьКолонку("Сотрудник"), УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ОбработкаПодбораНаКлиенте(Сотрудники)
МассивСотрудников = ПодобранныеСотрудники(Сотрудники);
Если МассивСотрудников.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Результат = ПерезаполнитьДанныеФормыНаСервере(МассивСотрудников, Ложь);
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.ЗаданиеВыполнено Тогда
РасчетЗарплатыРасширенныйКлиент.ОчиститьСписокСотрудниковКРасчету(ЭтаФорма, Сотрудники);
ОповеститьОбИзменении(Объект.Ссылка);
УстановитьЗначенияКонтролируемыхПолей();
Иначе
ИдентификаторЗадания = Результат.ИдентификаторЗадания;
АдресХранилища = Результат.АдресХранилища;
ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина);
ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтаФорма, ИдентификаторЗадания);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПодобранныеСотрудники(Сотрудники)
МассивСотрудников = Новый Массив;
СтруктураПоиска = Новый Структура("Сотрудник");
Для Каждого Сотрудник Из Сотрудники Цикл
СтруктураПоиска.Сотрудник = Сотрудник;
НайденныеСтроки = Объект.Начисления.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() = 0 Тогда
МассивСотрудников.Добавить(Сотрудник);
КонецЕсли;
КонецЦикла;
Возврат МассивСотрудников;
КонецФункции
&НаСервере
Процедура ИсчислятьНалогПриОкончательномРасчетеПриИзмененииНаСервере()
ПересчитатьНДФЛ();
УстановитьСвойстваЭлементовНДФЛ();
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойстваЭлементовНДФЛ()
РассчитыватьНДФЛ = РассчитыватьНДФЛ();
Расчет2022 = Не УчетНДФЛ.ДоходыУчитываютсяТолькоПоДатеВыплаты(Объект.МесяцНачисления);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "УдержатьНалогПриВыплатеАванса", "Видимость", Расчет2022 И РассчитыватьНДФЛ);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ИсчислятьНалогПриОкончательномРасчете", "Видимость", Расчет2022);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаНДФЛ", "Доступность", РассчитыватьНДФЛ);
УстановитьВидимостьКолонокПрогрессивногоНалога(Объект.ПланируемаяДатаВыплаты);
КонецПроцедуры
&НаСервере
Функция РассчитыватьНДФЛ()
Возврат УчетНДФЛ.ДоходыУчитываютсяТолькоПоДатеВыплаты(Объект.МесяцНачисления) Или Не ОтложитьРасчетНалогаВАвансеДоРасчетаЗарплаты И Не Объект.ИсчислятьНалогПриОкончательномРасчете Или Объект.ПланируемаяДатаВыплаты >= НачалоДня(КонецМесяца(Объект.МесяцНачисления));
КонецФункции
&НаСервереБезКонтекста
Функция РезультатРаспределенияИзВременногоХранилища(ИдентификаторСтроки, АдресТаблицыРаспределения, ОписаниеТаблицы)
ДанныеРаспределения = ПолучитьИзВременногоХранилища(АдресТаблицыРаспределения);
Если ДанныеРаспределения = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ИменаКолонокТаблицы = ЗарплатаКадрыРасширенныйКлиентСервер.ИменаКолонокТаблицыРаспределенияРезультатовРасчета(ОписаниеТаблицы);
ОтборСтрок = Новый Структура("ИдентификаторСтроки", ИдентификаторСтроки);
ТаблицаРаспределенияПредварительно = ДанныеРаспределения.Скопировать(ОтборСтрок);
ОтражениеЗарплатыВБухучетеРасширенный.ДополнитьТаблицуРаспределенияКодомСтатьиФинансирования(ТаблицаРаспределенияПредварительно);
ТаблицаРаспределения = ТаблицаРаспределенияПредварительно.Скопировать(, ИменаКолонокТаблицы);
СтруктураРаспределения = ЗарплатаКадрыРасширенный.ТаблицаЗначенийВСтруктуру(ТаблицаРаспределения);
Возврат СтруктураРаспределения;
КонецФункции
&НаСервере
Процедура ИнициализироватьИсточникиДанныхФормыПриПолученииДанных(ТекущийОбъект, МенеджерВременныхТаблиц)
СоздатьВТПоказатели(МенеджерВременныхТаблиц, ТекущийОбъект.Показатели);
АдресТаблицыРаспределенияПоТерриториямУсловиямТруда = "";
СоздатьВТРаспределениеПоТерриториямУсловиямТруда(МенеджерВременныхТаблиц, ТекущийОбъект.РаспределениеПоТерриториямУсловиямТруда);
ТаблицаРаспределенияНачислений = ТекущийОбъект.РаспределениеРезультатовНачислений.Выгрузить();
СоздатьВТРаспределениеРезультатовНачислений(МенеджерВременныхТаблиц, ТаблицаРаспределенияНачислений);
ТаблицаРаспределенияНачислений.Индексы.Добавить("ИдентификаторСтроки");
АдресТаблицыРаспределенияНачислений = ПоместитьВоВременноеХранилище(ТаблицаРаспределенияНачислений, УникальныйИдентификатор);
ТаблицаРаспределенияУдержаний = ТекущийОбъект.РаспределениеРезультатовУдержаний.Выгрузить();
СоздатьВТРаспределениеРезультатовУдержаний(МенеджерВременныхТаблиц, ТаблицаРаспределенияУдержаний);
ТаблицаРаспределенияУдержаний.Индексы.Добавить("ИдентификаторСтроки");
АдресТаблицыРаспределенияУдержаний = ПоместитьВоВременноеХранилище(ТаблицаРаспределенияУдержаний, УникальныйИдентификатор);
СоздатьВТПредставлениеРаспределенияРезультатовРасчета(МенеджерВременныхТаблиц, ТекущийОбъект.ПредставлениеРаспределенияРезультатовРасчета);
ЗарплатаКадрыРасширенный.СоздатьВТПредставлениеРаспределенияНачисленийУдержаний(
МенеджерВременныхТаблиц,
ТекущийОбъект.Ссылка,
"ВТРаспределениеРезультатовНачислений",
"ВТПредставлениеРаспределенияНачислений");
ЗарплатаКадрыРасширенный.СоздатьВТПредставлениеРаспределенияНачисленийУдержаний(
МенеджерВременныхТаблиц,
ТекущийОбъект.Ссылка,
"ВТРаспределениеРезультатовУдержаний",
"ВТПредставлениеРаспределенияУдержаний");
КонецПроцедуры
&НаСервере
Процедура СоздатьВТПоказатели(МенеджерВременныхТаблиц, ТаблицаПоказателей)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаПоказателей", ТаблицаПоказателей);
Запрос.Текст = "ВЫБРАТЬ
| Таблица.НомерСтроки,
| Таблица.Показатель КАК Показатель,
| Таблица.Значение,
| Таблица.ИдентификаторСтрокиВидаРасчета КАК ИдентификаторСтрокиВидаРасчета
|ПОМЕСТИТЬ ВТПоказатели
|ИЗ
| &ТаблицаПоказателей КАК Таблица";
Запрос.Выполнить();
КонецПроцедуры
&НаСервере
Процедура СоздатьВТРаспределениеПоТерриториямУсловиямТруда(МенеджерВременныхТаблиц, РаспределениеПоТерриториямУсловиямТруда)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("РаспределениеПоТерриториямУсловиямТруда", РаспределениеПоТерриториямУсловиямТруда);
Запрос.Текст = "ВЫБРАТЬ
| Таблица.НомерСтроки,
| Таблица.ИдентификаторСтроки,
| Таблица.Территория,
| Таблица.УсловияТруда,
| Таблица.ДоляРаспределения,
| Таблица.Результат,
| Таблица.СуммаВычета,
| Таблица.ИдентификаторСтрокиПоказателей
|ПОМЕСТИТЬ ВТРаспределениеПоТерриториямУсловиямТруда
|ИЗ
| &РаспределениеПоТерриториямУсловиямТруда КАК Таблица";
Запрос.Выполнить();
КонецПроцедуры
&НаСервере
Процедура СоздатьВТРаспределениеРезультатовНачислений(МенеджерВременныхТаблиц, ТаблицаРаспределенияНачислений)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаРаспределенияНачислений", ТаблицаРаспределенияНачислений);
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.НомерСтроки КАК НомерСтроки,
| Таблица.ИдентификаторСтроки КАК ИдентификаторСтроки,
| Таблица.Территория КАК Территория,
| Таблица.СтатьяФинансирования КАК СтатьяФинансирования,
| Таблица.СтатьяРасходов КАК СтатьяРасходов,
| Таблица.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| Таблица.ОблагаетсяЕНВД КАК ОблагаетсяЕНВД,
| Таблица.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат,
| Таблица.Результат КАК Результат
|ПОМЕСТИТЬ ВТРаспределениеРезультатовНачислений
|ИЗ
| &ТаблицаРаспределенияНачислений КАК Таблица
|;
|
|
|ВЫБРАТЬ
| РаспределениеНачислений.НомерСтроки КАК НомерСтроки,
| РаспределениеНачислений.ИдентификаторСтроки КАК ИдентификаторСтроки,
| РаспределениеНачислений.Территория КАК Территория,
| РаспределениеНачислений.СтатьяФинансирования КАК СтатьяФинансирования,
| РаспределениеНачислений.СтатьяРасходов КАК СтатьяРасходов,
| РаспределениеНачислений.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
| РаспределениеНачислений.ОблагаетсяЕНВД КАК ОблагаетсяЕНВД,
| РаспределениеНачислений.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат,
| РаспределениеНачислений.Результат КАК Результат,
| ЕСТЬNULL(СтатьиФинансированияЗарплата.Код, """") КАК КодСтатьиФинансирования
|ИЗ
| ВТРаспределениеРезультатовНачислений КАК РаспределениеНачислений
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СтатьиФинансированияЗарплата КАК СтатьиФинансированияЗарплата
| ПО РаспределениеНачислений.СтатьяФинансирования = СтатьиФинансированияЗарплата.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки,
| ИдентификаторСтроки,
| Территория,
| СтатьяФинансирования,
| СтатьяРасходов,
| СпособОтраженияЗарплатыВБухучете,
| ОблагаетсяЕНВД
|АВТОУПОРЯДОЧИВАНИЕ";
ТаблицаРаспределенияНачислений = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
&НаСервере
Процедура СоздатьВТРаспределениеРезультатовУдержаний(МенеджерВременныхТаблиц, ТаблицаРаспределенияУдержаний)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТаблицаРаспределенияУдержаний", ТаблицаРаспределенияУдержаний);
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.НомерСтроки КАК НомерСтроки,
| Таблица.ИдентификаторСтроки КАК ИдентификаторСтроки,
| Таблица.ВидУдержания КАК ВидУдержания,
| Таблица.Сотрудник КАК Сотрудник,
| Таблица.Подразделение КАК Подразделение,
| Таблица.СтатьяФинансирования КАК СтатьяФинансирования,
| Таблица.СтатьяРасходов КАК СтатьяРасходов,
| Таблица.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат,
| Таблица.ВидДоходаИсполнительногоПроизводства КАК ВидДоходаИсполнительногоПроизводства,
| Таблица.Результат КАК Результат
|ПОМЕСТИТЬ ВТРаспределениеРезультатовУдержаний
|ИЗ
| &ТаблицаРаспределенияУдержаний КАК Таблица
|;
|
|
|ВЫБРАТЬ
| РаспределениеРезультатов.НомерСтроки КАК НомерСтроки,
| РаспределениеРезультатов.ИдентификаторСтроки КАК ИдентификаторСтроки,
| РаспределениеРезультатов.ВидУдержания КАК ВидУдержания,
| РаспределениеРезультатов.Сотрудник КАК Сотрудник,
| РаспределениеРезультатов.Подразделение КАК Подразделение,
| РаспределениеРезультатов.СтатьяФинансирования КАК СтатьяФинансирования,
| РаспределениеРезультатов.СтатьяРасходов КАК СтатьяРасходов,
| РаспределениеРезультатов.ПодразделениеУчетаЗатрат КАК ПодразделениеУчетаЗатрат,
| РаспределениеРезультатов.ВидДоходаИсполнительногоПроизводства КАК ВидДоходаИсполнительногоПроизводства,
| РаспределениеРезультатов.Результат КАК Результат,
| ЕСТЬNULL(СтатьиФинансированияЗарплата.Код, """") КАК КодСтатьиФинансирования
|ИЗ
| ВТРаспределениеРезультатовУдержаний КАК РаспределениеРезультатов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СтатьиФинансированияЗарплата КАК СтатьиФинансированияЗарплата
| ПО РаспределениеРезультатов.СтатьяФинансирования = СтатьиФинансированияЗарплата.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки,
| ИдентификаторСтроки,
| ВидУдержания,
| Сотрудник,
| Подразделение,
| СтатьяФинансирования,
| СтатьяРасходов
|АВТОУПОРЯДОЧИВАНИЕ";
ТаблицаРаспределенияУдержаний = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
&НаСервере
Процедура СоздатьВТПредставлениеРаспределенияРезультатовРасчета(МенеджерВременныхТаблиц, ПредставлениеРаспределенияРезультатовРасчета)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ПредставлениеРаспределенияРезультатовРасчета", ПредставлениеРаспределенияРезультатовРасчета);
Запрос.Текст = "ВЫБРАТЬ
| Таблица.НомерСтроки,
| Таблица.ИдентификаторСтроки,
| Таблица.НомерСтрокиРаспределения,
| Таблица.НомерЭлементаПредставления,
| Таблица.КоличествоЭлементовПредставления,
| Таблица.ПредставлениеРезультата,
| Таблица.ЕстьОшибкиЗаполнения,
| Таблица.РаспределениеНачислений
|ПОМЕСТИТЬ ВТПредставлениеРаспределенияРезультатовРасчета
|ИЗ
| &ПредставлениеРаспределенияРезультатовРасчета КАК Таблица";
Запрос.Выполнить();
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьКомандыЗаполнитьССохранениемИсправлений(ЕстьИсправленныеСтроки = Неопределено)
Если ЕстьИсправленныеСтроки = Неопределено Тогда
ЕстьИсправленныеСтроки = ЕстьИсправленныеСтрокиНаСервере();
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ЗаполнитьССохранениемИсправлений", "Доступность", ЕстьИсправленныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура НачислениеЗарплатыВоеннослужащимПриИзменении(Элемент)
ЗарплатаКадрыКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
КонецПроцедуры
#Область РаспределениеПоТерриториямУсловиямТруда
&НаКлиенте
Процедура ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПараметрыДляВыбора = РасчетЗарплатыРасширенныйКлиент.ПараметрыДляВыбораПолеРаспределениеПоТерриториямУсловиямТруда();
ПараметрыДляВыбора.Форма = ЭтаФорма;
ПараметрыДляВыбора.ОписаниеДокумента = ОписаниеДокумента();
ПараметрыДляВыбора.ОписаниеТаблицы = ОписаниеТаблицы;
РасчетЗарплатыРасширенныйКлиент.ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, ПараметрыДляВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ЭтаФорма, ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Функция ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда()
Описания = Новый Массив;
Описания.Добавить(ОписаниеТаблицыНачислений());
Возврат Описания;
КонецФункции
#КонецОбласти
#Область КлючевыеРеквизитыЗаполненияФормы
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыТаблицыОчищаемыеПриИзменении() Экспорт
Массив = Новый Массив;
Массив.Добавить("Объект.Начисления");
Массив.Добавить("Объект.НДФЛ");
Массив.Добавить("Объект.ФизическиеЛица");
Массив.Добавить("Объект.Показатели");
Массив.Добавить("Объект.ПримененныеВычетыНаДетейИИмущественные");
Возврат Массив
КонецФункции
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыОписаниеКлючевыхРеквизитов() Экспорт
Массив = Новый Массив;
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Организация", НСтр("ru = 'организации'")));
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "ПодразделениеОрганизации", НСтр("ru = 'подразделения'")));
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "МесяцНачисленияСтрокой", НСтр("ru = 'месяца начисления'")));
Если ИспользоватьВоеннуюСлужбу Тогда
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "НачислениеЗарплатыВоеннослужащим", НСтр("ru = 'варианта начисления'")));
КонецЕсли;
Возврат Массив
КонецФункции
#КонецОбласти
&НаСервере
Процедура УстановитьВидимостьКолонокПрогрессивногоНалога(ДатаПолученияДохода)
ВидимостьКолонок = ДатаПолученияДохода >= УчетНДФЛ.ДатаЗакона176ФЗ();
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаКолонокНалогПоПрогрессивнымСтавкам",
"Видимость", ВидимостьКолонок);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НДФЛНалогСПревышения",
"Видимость", НЕ ВидимостьКолонок);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаКолонокЗачтеноАвансовВСчетСуммПоПрогрессивнымСтавкам",
"Видимость", ВидимостьКолонок);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НДФЛЗачтеноАвансовыхПлатежейСПревышения",
"Видимость", НЕ ВидимостьКолонок);
КонецПроцедуры
#КонецОбласти
#Область Инициализация
СтарыеЗначенияКонтролируемыхПолей = Новый Соответствие;
СотрудникиКРасчету = Новый Соответствие;
ЗакрытьПослеЗаписи = Ложь;
#КонецОбласти