#Область ОписаниеПеременных
&НаКлиенте
Перем СтарыеЗначенияКонтролируемыхПолей;
&НаКлиенте
Перем АктивизированныйСотрудник;
&НаКлиенте
Перем СотрудникиПередУдалением;
&НаКлиенте
Перем СотрудникиКРасчету Экспорт;
&НаКлиенте
Перем ЗакрытьПослеЗаписи;
&НаКлиенте
Перем ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки;
&НаКлиенте
Перем ВыделенныеСотрудники;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Ключ.Пустая() Тогда
ИспользуетсяРасчетЗарплаты = ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная");
ОграниченияНаУровнеЗаписей = Новый ФиксированнаяСтруктура("ЧтениеБезОграничений, ИзменениеБезОграничений, ИзменениеКадровыхДанных", Ложь, Ложь, Ложь);
КонецЕсли;
ПодписиДокументов.ПриСозданииНаСервере(ЭтаФорма);
УстановитьПривилегированныйРежим(Истина);
РасчетЗарплатыРасширенныйФормы.ДокументыПриСозданииНаСервере(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
РасчетЗарплатыРасширенныйФормы.ИнициализироватьМеханизмПересчетаДокументаПриРедактировании(ЭтаФорма);
УстановитьПривилегированныйРежим(Ложь);
Если Параметры.Ключ.Пустая() Тогда
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(ЭтотОбъект, "ВидПремии", , , , , Ложь);
Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда
Объект.ПериодРегистрации = '00010101';
КонецЕсли;
ЗначенияДляЗаполнения = Новый Структура("МесяцРасчета, Организация, Ответственный",
"Объект.ПериодРегистрации",
"Объект.Организация",
"Объект.Ответственный");
Если ПолучитьФункциональнуюОпцию("ВыполнятьРасчетЗарплатыПоПодразделениям") Тогда
ЗначенияДляЗаполнения.Вставить("Подразделение", "Объект.Подразделение");
КонецЕсли;
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтаФорма, ЗначенияДляЗаполнения);
ЗаполнитьДанныеФормыПоОрганизации();
УстановитьСвойствоРассчитыватьУдержания(ЭтотОбъект);
ЗарплатаКадрыРасширенный.УстановитьНаименованиеПервичногоДокумента(Объект);
ПриПолученииДанныхНаСервере();
Если ИсправлениеДокументовЗарплатаКадрыКлиентСервер.ЭтоИсправление(ЭтотОбъект) Тогда
Объект.ФиксБазовыйПериод = Истина;
ФиксБазовыйПериодЧислом = Число(Объект.ФиксБазовыйПериод);
УстановитьДоступностьБазовогоПериода(ЭтаФорма);
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник", Истина);
ПозицииВставки = Неопределено;
Для каждого Сотрудник Из Сотрудники Цикл
Отбор = Новый Структура("Сотрудник");
Отбор.Сотрудник = Сотрудник;
СтрокиПоСотруднику = Объект.Начисления.НайтиСтроки(Отбор);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПозицииВставки(СтрокиПоСотруднику, ПозицииВставки);
КонецЦикла;
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокиРасчета(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна),,,, ПозицииВставки);
РассчитатьСотрудниковНаСервере(Сотрудники, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
Иначе
ЗаполнитьБазовыйПериод();
ЗаполнитьДатыНачислений();
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокиРасчета(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецЕсли;
ОбновитьПланируемуюДатуВыплаты();
ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыЗаполнитьПредупреждения(ЭтаФорма);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
РассчитатьВсеНаСервере();
КонецЕсли;
ЗагрузитьНастройки();
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
Если ИспользуетсяРасчетЗарплаты И Не ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений И Объект.ДокументРассчитан Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.УстановитьДоступныеХарактерыВыплаты(Элементы);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ЗарплатаКадрыРасширенный.УстановитьВидимостьКомандПечатиМногофункциональногоДокумента(ЭтаФорма);
ОкончательныйРасчетНДФЛ = Ложь;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка);
ЭДОБЗК.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка, Объект);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
ИспользуетсяРасчетЗарплаты = ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная");
ПриПолученииДанныхНаСервере();
УстановитьПривилегированныйРежим(Истина);
ЗаполнитьНалогиУдержания();
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонтрольВеденияУчетаБЗК.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект,
ПравоДоступа("Изменение", Метаданные.Документы.Премия));
ЭДОБЗК.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ЗакрытьПослеЗаписи = Истина;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗакрытием(ЭтотОбъект, Объект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки = ОценкаПроизводительностиКлиент.ЗамерВремени();
КонецЕсли;
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйКлиент.ПроверитьПовторениеКонтролируемыхНачислений(ЭтаФорма, Отказ, ПараметрыЗаписи, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
Если Отказ Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыРасширенныйКлиент.ПередЗаписьюДокументаСоСпискомСотрудников(ЭтаФорма, "ПередЗаписьюОкончание", Отказ, ПараметрыЗаписи);
ИначеЕсли СотрудникиКРасчету.Количество() > 0 Тогда
ПересчитатьДокументНаКлиенте();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
РеквизитыВДанные(ТекущийОбъект);
Если ЗаполнениеВыполнено <> Неопределено Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить("УдалитьПерерасчетыЗарплаты", Истина);
ТекущийОбъект.ДополнительныеСвойства.Вставить("СотрудникиПерерасчетаЗаработка",
ОбщегоНазначения.ВыгрузитьКолонку(ЗаполнениеВыполнено, "Ключ"));
КонецЕсли;
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Отказ);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(
ЭтотОбъект,
ТекущийОбъект,
ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ПодписиДокументов.ПослеЗаписиНаСервере(ЭтаФорма);
КонтрольВеденияУчетаБЗК.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ДанныеВРеквизиты();
ЗаполнитьНалогиУдержания();
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
ЗаполнитьПредставлениеРаспределенияБухучета();
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ЭДОБЗК.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Если Объект.ДокументРассчитан Тогда
ИмяОперации = "ПроведениеДокументаПремия";
Иначе
ИмяОперации = "ПроведениеДокументаПремияКадры";
КонецЕсли;
ОценкаПроизводительностиКлиент.УстановитьКлючевуюОперациюЗамера(ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки, ИмяОперации);
КонецЕсли;
ИсправлениеДокументовЗарплатаКадрыКлиент.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
Оповестить("Запись_Премия", ПараметрыЗаписи, Объект.Ссылка);
Если ЗакрытьПослеЗаписи Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ИзмененыРезультатыРасчетаНДФЛ" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеНДФЛНаСервере(Параметр);
ИначеЕсли ИмяСобытия = "ИзмененыРезультатыРасчетаУдержаний" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеУдержанийНаСервере(Параметр);
ИначеЕсли ИмяСобытия = "ИзмененыПоказателиДокумента" И Источник.ВладелецФормы = ЭтаФорма Тогда
Если Параметр.Показатели.Количество() > 0 Тогда
ОбработатьИзменениеПоказателейНаСервере(Параметр.Показатели, ВыделенныеСотрудники);
СотрудникиКРасчету.Очистить();
РасчетЗарплатыКлиент.УстановитьОтображениеКнопкиПересчитать(ЭтаФорма, Ложь);
ДанныеСтроки = Элементы.Начисления.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.УстановитьЗначенияКонтролируемыхПолей(
"Начисления",
ДанныеСтроки,
ЭтаФорма["КонтролируемыеПоляНачисления"],
СтарыеЗначенияКонтролируемыхПолей);
КонецЕсли;
ИначеЕсли ИмяСобытия = "ИзмененыКорректировкиВыплаты" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеКорректировокВыплатыНаСервере(Параметр);
КонецЕсли;
ИсправлениеДокументовЗарплатаКадрыКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
ЭДОБЗККлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(ТекущийОбъект);
Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда
Отказ = Истина;
КонецЕсли;
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
ОрганизацияПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
УстановитьОтветственныхЛиц();
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НомерПриИзменении(Элемент)
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОрганизацияПриИзмененииНаСервере()
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
ЗаполнитьДанныеФормыПоОрганизации();
УстановитьФункциональныеОпцииФормы();
РасчетЗарплатыРасширенныйФормы.ОбновитьПлановыеДатыВыплатыПоОрганизации(ЭтаФорма);
ОбновитьПланируемуюДатуВыплаты();
РасчетЗарплатыРасширенныйФормы.ДополнитьДанныеФормыРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
КонецПроцедуры
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
ЗарплатаКадрыКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ВидПремииПриИзменении(Элемент)
ВидПремииПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ВидПремииПриИзмененииНаСервере()
УстановитьПривилегированныйРежим(Истина);
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьВидимостьПолейОтображенияВремени(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОбязательныйРасчетНДФЛ = ТребуетсяРасчетНалога(Объект.ВидПремии, Объект.ПланируемаяДатаВыплаты);
ЗарплатаКадрыРасширенный.ВводНачисленийВШапкеВидРасчетаПриИзменении(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), 2, РегистрацияНачисленийДоступна);
РасчетЗарплатыРасширенныйФормы.ДополнитьДанныеФормыРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда(), РегистрацияНачисленийДоступна);
ЗаполнитьБазовыйПериод();
ЗаполнитьДатыНачислений();
Если Не Объект.РассчитыватьУдержания Тогда
Объект.Удержания.Очистить();
КонецЕсли;
Если Не УчетНДФЛРасширенный.МежрасчетныйДокументИсчисляетНДФЛ(Объект.Организация, ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца, Объект.ПорядокВыплаты, ОбязательныйРасчетНДФЛ, Объект.ПланируемаяДатаВыплаты) Тогда
Объект.НДФЛ.Очистить();
Объект.КорректировкиВыплаты.Очистить();
Объект.ПримененныеВычетыНаДетейИИмущественные.Очистить();
КонецЕсли;
УстановитьВидимостьНачисленияПериод();
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьСвойстваИсчислятьНалог();
УдалитьСтрокиНачисленийПередЗаполнением(Ложь);
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокиРасчета(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
УстановитьПривилегированныйРежим(Ложь);
РассчитатьВсеНаСервере();
ОтражениеЗарплатыВБухучетеРасширенный.УстановитьПодсказкуВводаСтатьиРасходовПоНачислению(ЭтаФорма, "Объект.ВидПремии");
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьЗависимыхНачислений();
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
Объект.ПоказательПремирования = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ВидПремии, "ПоказательПремирования");
КонецПроцедуры
&НаКлиенте
Процедура ФиксБазовыйПериодЧисломПриИзменении(Элемент)
Объект.ФиксБазовыйПериод = ФиксБазовыйПериодЧислом = 1;
УстановитьДоступностьБазовогоПериода(ЭтаФорма);
ФиксБазовыйПериодЧисломПриИзмененииНаСервере();
Если РегистрацияНачисленийДоступна Тогда
ДанныеСтроки = Элементы.Начисления.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.УстановитьЗначенияКонтролируемыхПолей("Начисления", ДанныеСтроки, ЭтаФорма["КонтролируемыеПоляНачисления"], СтарыеЗначенияКонтролируемыхПолей);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ФиксБазовыйПериодЧисломПриИзмененииНаСервере()
Если Не Объект.ФиксБазовыйПериод Тогда
ЗаполнитьБазовыйПериод();
КонецЕсли;
РассчитатьВсеНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПорядокВыплатыПриИзменении(Элемент)
УстановитьСвойствоРассчитыватьУдержания(ЭтотОбъект);
УстановитьДоступностьПоляРассчитыватьУдержания(ЭтотОбъект);
ПорядокВыплатыПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПланируемаяДатаВыплатыПриИзменении(Элемент)
ПланируемаяДатаВыплатыПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_РассчитыватьУдержанияПриИзменении(Элемент)
ПорядокВыплатыПриИзмененииНаСервере(Ложь);
КонецПроцедуры
&НаСервере
Процедура ПланируемаяДатаВыплатыПриИзмененииНаСервере()
ОбязательныйРасчетНДФЛ = ТребуетсяРасчетНалога(Объект.ВидПремии, Объект.ПланируемаяДатаВыплаты);
УстановитьВидимостьСвойстваИсчислятьНалог();
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
Если Объект.РассчитыватьУдержания Или УчетНДФЛРасширенный.МежрасчетныйДокументИсчисляетНДФЛ(Объект.Организация, ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца, Объект.ПорядокВыплаты, ОбязательныйРасчетНДФЛ, Объект.ПланируемаяДатаВыплаты) Тогда
РассчитатьСотрудниковНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Истина);
ЗаполнитьНалогиУдержания();
КонецЕсли;
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаСервере
Процедура ПорядокВыплатыПриИзмененииНаСервере(УстановитьПланируемуюДатуВыплаты = Истина)
Если УстановитьПланируемуюДатуВыплаты Тогда
РасчетЗарплатыРасширенный.УстановитьПланируемуюДатуВыплаты(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект));
ОбязательныйРасчетНДФЛ = ТребуетсяРасчетНалога(Объект.ВидПремии, Объект.ПланируемаяДатаВыплаты);
КонецЕсли;
УстановитьЗначениеПеречислитьНалогПриИзмененииПорядкаВыплаты();
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьСвойстваИсчислятьНалог();
Если Не Объект.РассчитыватьУдержания Тогда
Объект.Удержания.Очистить();
КонецЕсли;
Если Не УчетНДФЛРасширенный.МежрасчетныйДокументИсчисляетНДФЛ(Объект.Организация, ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца, Объект.ПорядокВыплаты, ОбязательныйРасчетНДФЛ, Объект.ПланируемаяДатаВыплаты) Тогда
Объект.НДФЛ.Очистить();
Объект.КорректировкиВыплаты.Очистить();
Объект.ПримененныеВычетыНаДетейИИмущественные.Очистить();
КонецЕсли;
РассчитатьСотрудниковНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Истина);
УстановитьСвойствоДокументРассчитан();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДокументРассчитанПриИзменении(Элемент)
ДокументРассчитанПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ДокументРассчитанПриИзмененииНаСервере()
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьБухучетРезультатовРасчета()
Если ИспользоватьСтатьиФинансирования И Объект.Начисления.Количество() > 0 Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтатьяФинансированияПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура СтатьяРасходовПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура СпособОтраженияЗарплатыВБухучетеПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура ОтношениеКЕНВДПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаБазовогоПериодаПриИзменении(Элемент)
ДатаНачалаБазовогоПериодаПриИзмененииНаСервере();
Если РегистрацияНачисленийДоступна Тогда
ДанныеСтроки = Элементы.Начисления.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.УстановитьЗначенияКонтролируемыхПолей("Начисления", ДанныеСтроки, ЭтаФорма["КонтролируемыеПоляНачисления"], СтарыеЗначенияКонтролируемыхПолей);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДатаНачалаБазовогоПериодаПриИзмененииНаСервере()
РассчитатьВсеНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаОкончанияБазовогоПериодаПриИзменении(Элемент)
ДатаОкончанияБазовогоПериодаПриИзмененииНаСервере();
Если РегистрацияНачисленийДоступна Тогда
ДанныеСтроки = Элементы.Начисления.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.УстановитьЗначенияКонтролируемыхПолей("Начисления", ДанныеСтроки, ЭтаФорма["КонтролируемыеПоляНачисления"], СтарыеЗначенияКонтролируемыхПолей);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДатаОкончанияБазовогоПериодаПриИзмененииНаСервере()
РассчитатьВсеНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", Модифицированность);
ПериодРегистрацииПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("МесяцНачисленияСтрокойНачалоВыбораЗавершение", ЭтотОбъект);
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
ПериодРегистрацииПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", Направление, Модифицированность);
ПодключитьОбработчикОжидания("ОбработчикОжиданияМесяцНачисленияПриИзменении", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОжиданияМесяцНачисленияПриИзменении()
ПериодРегистрацииПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПериодРегистрацииПриИзмененииНаСервере()
СохранятьИсправления = Истина;
ЗаполнитьБазовыйПериод();
Если Не ИсправлениеДокументовЗарплатаКадрыКлиентСервер.ЭтоИсправление(ЭтотОбъект) Тогда
ЗаполнитьДатыНачислений();
СохранятьИсправления = Ложь;
КонецЕсли;
УстановитьФункциональныеОпцииФормы();
Если УчетНДФЛ.ДоходыУчитываютсяТолькоПоДатеВыплаты(Объект.ПериодРегистрации) Тогда
ПеречислитьНалог = 0;
ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты = Ложь;
ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца = Ложь;
КонецЕсли;
ОбновитьПланируемуюДатуВыплаты();
Объект.НачисленияПерерасчет.Очистить();
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), СохранятьИсправления);
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьЗависимыхНачислений();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементПриИзменении(Элемент)
ПодписиДокументовКлиент.ПриИзмененииПодписывающегоЛица(ЭтаФорма, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементНажатие(Элемент)
ПодписиДокументовКлиент.РасширеннаяПодсказкаНажатие(ЭтаФорма, Элемент.Имя);
КонецПроцедуры
#Область РеквизитыПервичногоДокумента
&НаКлиенте
Процедура НаименованиеПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ОткрытьФормуСпискаЗначенийСтроковогоРеквизита(Элемент,
СтандартнаяОбработка, "ПервичныйДокумент", НСтр("ru = 'Первичные документы'"), НСтр("ru = 'Первичный документ'"));
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда
Объект.НаименованиеПервичногоДокумента = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ПодборЗначенияСтроковогоРеквизита(Текст, ДанныеВыбора, СтандартнаяОбработка, "ПервичныйДокумент");
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения("ДатаПервичногоДокументаНачалоВыбораЗавершение", ЭтотОбъект);
ПоказатьВводДаты(Оповещение, ?(ЗначениеЗаполнено(Объект.ДатаПервичногоДокумента), Объект.ДатаПервичногоДокумента, Объект.Дата), НСтр("ru='Дата первичного документа'"), ЧастиДаты.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбораЗавершение(Дата, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(Дата) Тогда
Объект.ДатаПервичногоДокумента = Дата;
ДатаПервичногоДокументаПредставление = Формат(Дата,"ДФ=dd.MM.yyyy");
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаОчистка(Элемент, СтандартнаяОбработка)
Объект.ДатаПервичногоДокумента = Дата(1,1,1);
Модифицированность = Истина;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ВариантУказанияБухучетаПриИзменении(Элемент)
Объект.БухучетУказываетсяРаспределением = ?(ВариантУказанияБухучета = 1, Истина, Ложь);
УстановитьВидимостьНастроекБухучета(ЭтаФорма);
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеРаспределенияБухучетаНажатие(Элемент)
ЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуРедактированияРаспределенияБухучетаДокумента(ЭтаФорма);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисления
&НаКлиенте
Процедура НачисленияПриИзменении(Элемент)
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДатаНачалаПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Ложь, Истина);
ТекущиеДанные = Элементы.Начисления.ТекущиеДанные;
ТекущиеДанные.ПериодДействия = НачалоМесяца(ТекущиеДанные.ДатаНачала);
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДатаОкончанияПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Ложь, Истина);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияОтменитьВсеИсправления(Команда)
РасчетЗарплатыКлиент.ОтменитьВсеИсправления(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПересчитатьСотрудника(Команда)
РасчетЗарплатыРасширенныйКлиент.ПересчитатьСотрудника(ЭтаФорма, "Начисления", "Сотрудник", Тип("СправочникСсылка.Сотрудники"));
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
ПодробнееОРасчетеНДФЛ(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
РедактированиеКорректировокВыплаты(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если СтрНайти(Поле.Имя, "НачисленияРезультатЗависимыхНачислений") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриАктивизацииСтроки(Элемент)
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "Начисления", Ложь);
КонецЕсли;
Если Элементы.Начисления.ТекущиеДанные <> Неопределено Тогда
АктивизированныйСотрудник = Элементы.Начисления.ТекущиеДанные.Сотрудник;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Элементы.Начисления.ТекущиеДанные.ПериодДействия = НачалоМесяца(Объект.ПериодРегистрации);
Элементы.Начисления.ТекущиеДанные.ДатаНачала = НачалоМесяца(Объект.ПериодРегистрации);
Элементы.Начисления.ТекущиеДанные.ДатаОкончания = КонецМесяца(Объект.ПериодРегистрации);
КонецЕсли;
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "Начисления", Элементы.Начисления.ТекущиеДанные, НоваяСтрока, Копирование);
КонецЕсли;
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийВШапкеПриНачалеРедактирования(ЭтаФорма, "Начисления", НоваяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
Объект.ВидПремии);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Истина, , ОписаниеДокумента(ЭтаФорма));
КонецЕсли;
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередУдалением(Элемент, Отказ)
СотрудникиПередУдалением = РасчетЗарплатыРасширенныйКлиент.ВыделенныеСотрудникиКоллекции(Объект.Начисления, Элементы.Начисления.ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПослеУдаления(Элемент)
НачисленияПослеУдаленияНаСервере(СотрудникиПередУдалением);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияСотрудникПриИзменении(Элемент) Экспорт
ТекущиеДанные = Элементы.Начисления.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено И Не ЗначениеЗаполнено(ТекущиеДанные.ПериодДействия) Тогда
ТекущиеДанные.ПериодДействия = Объект.ПериодРегистрации;
ТекущиеДанные.ДатаНачала = НачалоМесяца(Объект.ПериодРегистрации);
ТекущиеДанные.ДатаОкончания = КонецМесяца(Объект.ПериодРегистрации);
КонецЕсли;
ОбработатьИзменениеСотрудника(Элементы.Начисления.ТекущаяСтрока, АктивизированныйСотрудник);
Если РегистрацияНачисленийДоступна Тогда
ДанныеСтроки = Элементы.Начисления.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.УстановитьЗначенияКонтролируемыхПолей("Начисления", ДанныеСтроки, ЭтаФорма["КонтролируемыеПоляНачисления"], СтарыеЗначенияКонтролируемыхПолей);
ДанныеСтроки.ФиксЗаполнение = Ложь;
ДанныеСтроки.ФиксРасчет = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияКорректировкаВыплатыПриИзменении(Элемент)
ТекущиеДанные = Элементы.Начисления.ТекущиеДанные;
Если Не ЗначениеЗаполнено(ТекущиеДанные.Сотрудник) Тогда
Возврат;
КонецЕсли;
ДанныеСтроки = Новый Структура("Сотрудник, КорректировкаВыплаты");
ЗаполнитьЗначенияСвойств(ДанныеСтроки, ТекущиеДанные);
НачисленияКорректировкаВыплатыПриИзмененииНаСервере(ДанныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ОбработкаПодбораНаСервере(ВыбранноеЗначение);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПодбораНаСервере(Знач Сотрудники)
ИдентификаторыСтрок = Новый Массив;
Если ТипЗнч(Сотрудники) <> Тип("Массив") Тогда
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудники);
КонецЕсли;
НачислениеВыбрано = ЗначениеЗаполнено(Объект.ВидПремии);
Если Не НачислениеВыбрано Тогда
ПодразделенияСотрудников = ПодразделенияСотрудников(Сотрудники);
КонецЕсли;
Для Каждого Сотрудник Из Сотрудники Цикл
СтрокиНачислений = Объект.Начисления.НайтиСтроки(Новый Структура("Сотрудник", Сотрудник));
Если СтрокиНачислений.Количество() = 0 Тогда
СтрокаНачисления = Объект.Начисления.Добавить();
СтрокаНачисления.Сотрудник = Сотрудник;
СтрокаНачисления.ПериодДействия = Объект.ПериодРегистрации;
СтрокаНачисления.ДатаНачала = НачалоМесяца(Объект.ПериодРегистрации);
СтрокаНачисления.ДатаОкончания = КонецМесяца(Объект.ПериодРегистрации);
Если Не НачислениеВыбрано Тогда
СтрокаНачисления.Подразделение = ПодразделенияСотрудников[Сотрудник];
КонецЕсли;
Иначе
СтрокаНачисления = СтрокиНачислений[0];
КонецЕсли;
ИдентификаторыСтрок.Добавить(СтрокаНачисления.ПолучитьИдентификатор());
КонецЦикла;
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
ОбработатьДобавлениеСотрудников(ИдентификаторыСтрок, Сотрудники);
РассчитатьСотрудниковНаСервере(Сотрудники, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Ложь);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаСервере
Функция ПодразделенияСотрудников(Сотрудники)
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотрудники, "ДатаПриема,ДатаЗавершенияРаботы");
КадровыеДанныеСотрудников.Индексы.Добавить("Сотрудник");
ДатаНачала = НачалоМесяца(Объект.ПериодРегистрации);
СотрудникиДаты = Новый ТаблицаЗначений;
СотрудникиДаты.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
СотрудникиДаты.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
Для Каждого Сотрудник Из Сотрудники Цикл
НоваяСтрока = СотрудникиДаты.Добавить();
НоваяСтрока.Сотрудник = Сотрудник;
НоваяСтрока.Дата = ДатаНачала;
КадровыеДанныеСотрудника = КадровыеДанныеСотрудников.Найти(Сотрудник, "Сотрудник");
Если ДатаНачала < КадровыеДанныеСотрудника.ДатаПриема
И ДатаНачала = НачалоМесяца(КадровыеДанныеСотрудника.ДатаПриема) Тогда
НоваяСтрока.Дата = КадровыеДанныеСотрудника.ДатаПриема;
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("СотрудникиДаты", СотрудникиДаты);
Запрос.Текст = "ВЫБРАТЬ
| СотрудникиДаты.Дата КАК Период,
| СотрудникиДаты.Сотрудник
|ПОМЕСТИТЬ ВТСотрудникиПериоды
|ИЗ
| &СотрудникиДаты КАК СотрудникиДаты";
Запрос.Выполнить();
ОписательВременныхТаблиц = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиПериоды");
КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВременныхТаблиц, Истина, "Подразделение");
Запрос.Текст = "ВЫБРАТЬ
| КадровыеДанные.Сотрудник,
| КадровыеДанные.Подразделение
|ИЗ
| ВТКадровыеДанныеСотрудников КАК КадровыеДанные";
ПодразделенияСотрудников = Новый Соответствие;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПодразделенияСотрудников.Вставить(Выборка.Сотрудник, Выборка.Подразделение);
КонецЦикла;
Возврат ПодразделенияСотрудников;
КонецФункции
&НаКлиенте
Процедура ДоначислитьЗарплатуПриНеобходимостиПриИзменении(Элемент)
ПересчитатьДокументНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяцаПриИзменении(Элемент)
ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяцаПриИзмененииНаСервере();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисленияПерерасчет
&НаКлиенте
Процедура НачисленияПерерасчетПриИзменении(Элемент)
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияПерерасчетВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриАктивизацииСтроки(Элемент)
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "НачисленияПерерасчет", Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
РасчетЗарплатыРасширенныйКлиент.ПередНачаломДобавленияСтрокиПерерасчета(Элемент, Отказ, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередУдалением(Элемент, Отказ)
РасчетЗарплатыРасширенныйКлиент.ПередУдалениемСтрокиПерерасчета(ЭтотОбъект, "НачисленияПерерасчет", Элемент, Отказ);
Если Элементы.НачисленияПерерасчет.ТекущиеДанные <> Неопределено Тогда
СотрудникиПередУдалением = РасчетЗарплатыРасширенныйКлиент.ВыделенныеСотрудникиКоллекции(
Объект.НачисленияПерерасчет, Элементы.НачисленияПерерасчет.ВыделенныеСтроки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "НачисленияПерерасчет", Элементы.НачисленияПерерасчет.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ДобавитьИзмененныеДанныеПерерасчета(Элемент.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПослеУдаления(Элемент)
ПослеУдаленияПерерасчета();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетНачислениеПриИзменении(Элемент)
ОписаниеТаблицыПерерасчетов = ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтаФорма, ОписаниеТаблицыПерерасчетов, 2);
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыПерерасчетов, Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетДатаНачалаПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетДатаОкончанияПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Ложь, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыЗависимыеНачисления
&НаКлиенте
Процедура ЗависимыеНачисленияПриИзменении(Элемент)
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("ЗависимыеНачисленияВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтаФорма, ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПриАктивизацииСтроки(Элемент)
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "ЗависимыеНачисления", Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПередУдалением(Элемент, Отказ)
Если Не Отказ И Элементы.ЗависимыеНачисления.ТекущиеДанные <> Неопределено Тогда
СотрудникиПередУдалением = РасчетЗарплатыРасширенныйКлиент.ВыделенныеСотрудникиКоллекции(Объект.ЗависимыеНачисления, Элементы.ЗависимыеНачисления.ВыделенныеСтроки);
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ДокументыРазовыхНачисленийКлиент.СтрокаЗависимыхНачисленийПриНачалеРедактирования(ЭтаФорма, "ЗависимыеНачисления", Элементы.ЗависимыеНачисления.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПослеУдаления(Элемент)
НачисленияПослеУдаленияНаСервере(СотрудникиПередУдалением);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияНачислениеПриИзменении(Элемент)
ОписаниеТаблицы = ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтаФорма, ОписаниеТаблицы, 2);
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицы, Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияДатаНачалаПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна), Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияДатаОкончанияПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна), Ложь, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.ЗависимыеНачисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, Элементы.ЗависимыеНачисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.ЗависимыеНачисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ЗависимыеНачисленияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
#Область ОбработчикиСобытийПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Команда, Объект)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Контекст, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийСледующемуНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ОбновитьПодключаемыеКоманды(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Исправить(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.Исправить(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Сторнировать(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.Сторнировать(ЭтотОбъект, "ВидПремии");
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправлению(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправлению(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправленному(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправленному(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКСторно(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКСторно(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПерерасчетРазрешеноРедактироватьСторно(Команда)
РасчетЗарплатыРасширенныйКлиент.НастроитьРедактированиеСторно(ЭтотОбъект, Команда.Имя);
КонецПроцедуры
&НаКлиенте
Процедура ПодборСотрудников(Команда)
ОценкаПроизводительностиКлиент.ЗамерВремени("ПодборСотрудникаВФормеДокументаПремия");
Если ЗначениеЗаполнено(Объект.ДатаНачалаБазовогоПериода) Тогда
НачалоПериодаПримененияОтбора = Объект.ДатаНачалаБазовогоПериода;
ОкончаниеПериодаПримененияОтбора = Объект.ДатаОкончанияБазовогоПериода;
Иначе
НачалоПериодаПримененияОтбора = Объект.ПериодРегистрации;
ОкончаниеПериодаПримененияОтбора = КонецМесяца(Объект.ПериодРегистрации);
КонецЕсли;
ПараметрыОткрытия = Новый Структура;
Отборы = Новый Структура("ПоказыватьДоговорниковГПХ", Истина);
ПараметрыОткрытия.Вставить("Отбор", Отборы);
КадровыйУчетРасширенныйКлиент.ДобавитьПараметрыОтбораПоФункциональнойОпцииВыполнятьРасчетЗарплатыПоПодразделениям(
ЭтаФорма, ПараметрыОткрытия);
КадровыйУчетКлиент.ВыбратьСотрудниковРаботающихВПериодеПоПараметрамОткрытияФормыСписка(
Элементы.Начисления,
Объект.Организация,
Объект.Подразделение,
НачалоПериодаПримененияОтбора,
ОкончаниеПериодаПримененияОтбора,
,
АдресСпискаПодобранныхСотрудников(),
ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура ПерерасчетПодробно(Команда)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйВызовСервера.СохранитьНастройкуРежимаОтображенияПодробно(Объект.Ссылка, Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура ПодробнееОРасчетеУдержаний(Команда)
РасчетЗарплатыРасширенныйКлиент.ОткрытьФормуПодробнееОРасчетеУдержаний(Объект, "Премия", ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьДокумент(Команда) Экспорт
ПересчитатьДокументНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоказатели(Команда)
ВыделенныеСотрудники.Очистить();
РасчетЗарплатыРасширенныйКлиент.ЗаполнитьПоказатели(ЭтотОбъект, "ВидПремии");
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоказателиПоСотруднику(Команда)
ВыделенныеСотрудники.Очистить();
Для Каждого Стр Из Элементы.Начисления.ВыделенныеСтроки Цикл
ВыделенныеСотрудники.Вставить(Объект.Начисления.НайтиПоИдентификатору(Стр).Сотрудник);
КонецЦикла;
РасчетЗарплатыРасширенныйКлиент.ЗаполнитьПоказатели(ЭтотОбъект, "ВидПремии");
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть(Команда) Экспорт
ЗакрытьПослеЗаписи = Истина;
Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЗависимыеНачисленияОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(
Команда,
ЭтотОбъект,
Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_РазблокироватьФормуОбъекта(Команда)
БлокировкаИзмененияОбъектовКлиент.РазблокироватьФормуОбъекта(ЭтотОбъект, Объект.Ссылка);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОткрытьОтчетПоПроблемам(ЭлементИлиКоманда, НавигационнаяСсылка, СтандартнаяОбработка)
КонтрольВеденияУчетаКлиентБЗК.ОткрытьОтчетПоПроблемамОбъекта(ЭтотОбъект, Объект.Ссылка, СтандартнаяОбработка);
КонецПроцедуры
#Область ИсправлениеДокументов
&НаКлиенте
Процедура УстановитьПоляИсправленияНаКлиенте() Экспорт
УстановитьПоляИсправления(ЭтаФорма);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПоляИсправления(Форма)
ИсправлениеДокументовЗарплатаКадрыКлиентСервер.УстановитьПоляИсправления(Форма);
КонецПроцедуры
#КонецОбласти
#Область КлючевыеРеквизитыЗаполненияФормы
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыТаблицыОчищаемыеПриИзменении() Экспорт
Массив = Новый Массив;
Если ИспользуетсяРасчетЗарплаты Тогда
Массив.Добавить("Объект.Начисления");
Массив.Добавить("Объект.ЗависимыеНачисления");
Массив.Добавить("Объект.Удержания");
Массив.Добавить("Объект.Показатели");
Массив.Добавить("Объект.НДФЛ");
Массив.Добавить("Объект.ПримененныеВычетыНаДетейИИмущественные");
КонецЕсли;
Массив.Добавить("Объект.ФизическиеЛица");
Возврат Массив;
КонецФункции
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыОписаниеКлючевыхРеквизитов() Экспорт
Массив = Новый Массив;
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Организация", НСтр("ru = 'организации'")));
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Подразделение", НСтр("ru = 'подразделения'")));
Массив.Добавить(Новый Структура("ЭлементФормы, Представление, ПредупреждениеПриРедактировании", "ВидПремии", НСтр("ru = 'месяца начисления'"), НСтр("ru = 'Редактирование вида премии приведет к перезаполнению табличных частей документа'")));
Возврат Массив;
КонецФункции
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
ПриИзмененииПериодДействияНачисления(Элементы.Начисления.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
ПриИзмененииПериодДействияНачисления(Элементы.Начисления.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаСервере
Процедура ОбновитьБухучетРезультатовРасчетаНаСервере(ИсходныеДанные = Неопределено)
УстановитьПривилегированныйРежим(Истина);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
Если ИсходныеДанные = Неопределено Тогда
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник");
ФизическиеЛица = ФизическиеЛицаСотрудниковДокумента(Сотрудники);
ФизическиеЛицаСотрудников = Неопределено;
СотрудникиФизическихЛиц = Неопределено;
Иначе
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИсходныеДанные.Сотрудник);
ФизическиеЛицаСотрудников = ФизическиеЛицаСотрудниковДокумента(Сотрудники);
СотрудникиФизическихЛиц = СотрудникиФизическихЛиц(ОбщегоНазначения.ВыгрузитьКолонку(ФизическиеЛицаСотрудников, "Значение"));
Отбор = Новый Структура("ФизическиеЛицаСотрудников, ФизическиеЛицаОтбор, ФизическиеЛица");
Отбор.ФизическиеЛицаСотрудников = ФизическиеЛицаСотрудников;
Отбор.ФизическиеЛица = ОбщегоНазначения.ВыгрузитьКолонку(ФизическиеЛицаСотрудников, "Значение");
Отбор.ФизическиеЛицаОтбор = Новый Соответствие;
Для Каждого ФизическоеЛицо Из Отбор.ФизическиеЛица Цикл
Отбор.ФизическиеЛицаОтбор.Вставить(ФизическоеЛицо, Истина);
КонецЦикла;
ПозицииВставки = Новый Структура;
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета, Отбор, ПозицииВставки);
ФизическиеЛица = Отбор.ФизическиеЛица;
КонецЕсли;
ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛица, МенеджерРасчета);
МенеджерРасчета.НастройкиБухучета.ПроверятьНеобходимостьПересчетаНДФЛ = МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ;
МенеджерРасчета.ИсключаемыйРегистратор = Объект.Ссылка;
МенеджерРасчета.НастройкиНДФЛ.ОкончательныйРасчет = ОкончательныйРасчетНДФЛ;
МенеджерРасчета.НастройкиНДФЛ.ДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
МенеджерРасчета.НастройкиУдержаний.РассчитыватьТолькоПоТекущемуДокументу = Истина;
МенеджерРасчета.НастройкиБухучета.НастройкиБухучетаДокумента = Документы.Премия.ДанныеДляБухучетаЗарплатыПервичныхДокументов(Объект)["ТаблицаБухучетЗарплаты"];
МенеджерРасчета.ЗаполнитьНастройкиОбновленияБухучета(ИсходныеДанные);
МенеджерРасчета.ОбновитьБухучетРезультатовРасчета();
Если ИсходныеДанные = Неопределено Тогда
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
Иначе
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата, ПозицииВставки);
КонецЕсли;
ЗаполнитьНалогиУдержания();
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
Если ИсходныеДанные <> Неопределено Тогда
РасчетЗарплатыРасширенныйФормы.УстановитьТекущуюСтрокуТаблицыФормы(ЭтаФорма, ИсходныеДанные.ИмяИсходнойТаблицы, ИсходныеДанные.НомерСтрокиИсходнойТаблицы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииПериодДействияНачисления(ДанныеСтроки)
ДанныеСтроки.ДатаНачала = НачалоМесяца(ДанныеСтроки.ПериодДействия);
ДанныеСтроки.ДатаОкончания = КонецМесяца(ДанныеСтроки.ПериодДействия);
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура РаспределитьЗависимыеРезультаты(ПараметрыДляРаспределения) Экспорт
Если ПараметрыДляРаспределения.РаспределятьЗависимыеТаблицы Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере(ПараметрыДляРаспределения);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СтруктураОписанияТаблицДляРаспределенияРезультата(Форма)
ОписанияТаблиц = Новый Структура;
ОписанияТаблиц.Вставить("Начисления", ОписаниеТаблицыНачислений(Форма.РегистрацияНачисленийДоступна));
ОписанияТаблиц.Вставить("НачисленияПерерасчет", ОписаниеТаблицыПерерасчетов(Форма.РегистрацияНачисленийДоступна));
ОписанияТаблиц.Вставить("ЗависимыеНачисления", ОписаниеТаблицыЗависимыеНачисления(Форма.РегистрацияНачисленийДоступна));
ОписанияТаблиц.Вставить("Удержания", ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Вставить("НДФЛ", ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Вставить("КорректировкиВыплаты", ОписаниеТаблицыКорректировкиВыплаты());
Возврат ОписанияТаблиц;
КонецФункции
&НаСервере
Процедура НачисленияПослеУдаленияНаСервере(Сотрудники)
РасчетЗарплатыРасширенный.ОчиститьДанныеФормыПоСотруднику(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Сотрудники, Объект.Организация);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
ОбновитьИтогиПодвала();
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеСотрудника(ИдентификаторСтроки, ПрежнийСотрудник)
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
УстановитьПривилегированныйРежим(Истина);
СтрокаСотрудника = Объект.Начисления.НайтиПоИдентификатору(ИдентификаторСтроки);
Сотрудник = СтрокаСотрудника.Сотрудник;
НачислениеВыбрано = ЗначениеЗаполнено(Объект.ВидПремии);
Если Не НачислениеВыбрано Тогда
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник), "Подразделение", Объект.ПериодРегистрации);
СтрокаСотрудника.Подразделение = КадровыеДанные[0].Подразделение;
КонецЕсли;
ОписаниеТаблицы = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, Истина, Истина);
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник);
ОписаниеТаблицРазовыхНачислений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ДокументыРазовыхНачисленийФормы.ОбновитьЗависимыеНачислениями(Объект, Сотрудники, ОписаниеДокумента(ЭтотОбъект), ОписаниеТаблицРазовыхНачислений);
РасчетЗарплатыРасширенный.ОбработатьИзменениеСотрудникаВедущейТаблицыФормы(
ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Сотрудник, ПрежнийСотрудник);
УстановитьВидимостьЗависимыхНачислений();
СтрокаНачислений = Объект.Начисления.НайтиПоИдентификатору(ИдентификаторСтроки);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИтогиЗависимыхНачислений(ЭтотОбъект, Сотрудник);
ЗаполнитьНалогиУдержания(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник));
КонецПроцедуры
&НаСервере
Процедура ОбработатьДобавлениеСотрудников(ИдентификаторыСтрок, Сотрудники)
УстановитьПривилегированныйРежим(Истина);
ОписаниеТаблицы = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
ОписаниеДокумента = ОписаниеДокумента(ЭтаФорма);
ПозицииВставки = Неопределено;
Отбор = Новый Структура("Сотрудник");
Для Каждого Сотрудник Из Сотрудники Цикл
Отбор.Сотрудник = Сотрудник;
СтрокиПоСотруднику = Объект.Начисления.НайтиСтроки(Отбор);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПозицииВставки(СтрокиПоСотруднику, ПозицииВставки);
КонецЦикла;
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокиРасчета(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), ОписаниеТаблицы, ИдентификаторыСтрок,,, ПозицииВставки);
ЗаполнитьНалогиУдержания(Сотрудники);
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьСтроку(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей) Экспорт
ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаСервере
Процедура ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей)
УстановитьПривилегированныйРежим(Истина);
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаКлиенте
Процедура ПодробнееОРасчетеНДФЛ(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя <> "НачисленияНДФЛ" Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Сотрудник = Элементы.Начисления.ТекущиеДанные.Сотрудник;
УчетНДФЛКлиент.ОткрытьФормуПодробнееОРасчетеНДФЛ(Объект.Организация, ЭтаФорма, Объект.ПериодРегистрации, Сотрудник,
Объект.ПланируемаяДатаВыплаты);
КонецПроцедуры
&НаСервере
Функция НДФЛПодробнееНаСервере(ФизическиеЛица) Экспорт
Если ТипЗнч(ФизическиеЛица) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическиеЛица);
Иначе
СписокФизическихЛиц = ФизическиеЛица;
КонецЕсли;
ДокументОбъект = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(ДокументОбъект);
Возврат УчетНДФЛФормы.РегистрНалоговогоУчетаПоНДФЛ(ДокументОбъект, Модифицированность, СписокФизическихЛиц, Объект.ПериодРегистрации);
КонецФункции
&НаСервере
Процедура ОбновитьИтогиПодвала()
ИтогНДФЛ = Объект.Начисления.Итог("НДФЛ");
ИтогКВыплате = Объект.Начисления.Итог("КВыплате");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНалогиУдержания(Сотрудники = Неопределено)
Если Сотрудники = Неопределено Тогда
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник", Истина);
ФизическиеЛицаСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Сотрудники, "ФизическоеЛицо");
Иначе
ФизическиеЛицаСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Сотрудники, "ФизическоеЛицо");
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИтогиЗависимыхНачислений(ЭтотОбъект, Сотрудники);
ФизическиеЛицаНачисления = Новый Соответствие;
Для Каждого СтрокаНачисления Из Объект.Начисления Цикл
ФизическоеЛицо = ФизическиеЛицаСотрудников[СтрокаНачисления.Сотрудник];
Если ФизическоеЛицо = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ФизическиеЛицаНачисления[ФизическоеЛицо] = Неопределено Тогда
ФизическиеЛицаНачисления[ФизическоеЛицо] = Новый Массив;
КонецЕсли;
ФизическиеЛицаНачисления[ФизическоеЛицо].Добавить(СтрокаНачисления);
КонецЦикла;
Для Каждого КлючИЗначение Из ФизическиеЛицаНачисления Цикл
СтрокиНачислений = КлючИЗначение.Значение;
НДФЛ = 0;
ЗачтеноАвансовыхПлатежей = 0;
Отбор = Новый Структура("ФизическоеЛицо", КлючИЗначение.Ключ);
СтрокиНДФЛ = Объект.НДФЛ.НайтиСтроки(Отбор);
Для Каждого СтрокаНДФЛ Из СтрокиНДФЛ Цикл
НДФЛ = НДФЛ + УчетНДФЛ.ИтоговаяСуммаНДФЛпоСтроке(СтрокаНДФЛ, "Налог");
ЗачтеноАвансовыхПлатежей = ЗачтеноАвансовыхПлатежей + УчетНДФЛ.ИтоговаяСуммаНДФЛпоСтроке(СтрокаНДФЛ, "ЗачтеноАвансовыхПлатежей");
КонецЦикла;
Удержания = 0;
СтрокиУдержаний = Объект.Удержания.НайтиСтроки(Отбор);
Для Каждого СтрокаУдержания Из СтрокиУдержаний Цикл
Удержания = Удержания + СтрокаУдержания.Результат;
КонецЦикла;
КорректировкаВыплаты = 0;
СтрокиКорректировокВыплаты = Объект.КорректировкиВыплаты.НайтиСтроки(Отбор);
Для Каждого СтрокаКорректировкиВыплаты Из СтрокиКорректировокВыплаты Цикл
КорректировкаВыплаты = КорректировкаВыплаты + СтрокаКорректировкиВыплаты.КорректировкаВыплаты;
КонецЦикла;
Если КоличествоКолонокИтоговЗависимыхНачислений = 0 Тогда
КоэффициентыРаспределения = ОбщегоНазначения.ВыгрузитьКолонку(СтрокиНачислений, "Результат");
Иначе
КоэффициентыРаспределения = Новый Массив;
Для Каждого СтрокаНачисления Из СтрокиНачислений Цикл
НачисленийВсего = СтрокаНачисления.Результат;
Для Н =1 По КоличествоКолонокИтоговЗависимыхНачислений Цикл
НачисленийВсего = НачисленийВсего + СтрокаНачисления["РезультатЗависимыхНачислений" + Формат(Н, "ЧГ=")];
КонецЦикла;
КоэффициентыРаспределения.Добавить(НачисленийВсего);
КонецЦикла;
КонецЕсли;
РаспределенныеСуммыНДФЛ = ЗарплатаКадрыКлиентСервер.РаспределитьПропорциональноКоэффициентам(НДФЛ, КоэффициентыРаспределения, 0);
РаспределенныеСуммыУдержаний = ЗарплатаКадрыКлиентСервер.РаспределитьПропорциональноКоэффициентам(Удержания, КоэффициентыРаспределения);
РаспределенныеСуммыКорректировокВыплаты = ЗарплатаКадрыКлиентСервер.РаспределитьПропорциональноКоэффициентам(КорректировкаВыплаты, КоэффициентыРаспределения);
РаспределенныеСуммыЗачтеноАвансовыхПлатежей = ЗарплатаКадрыКлиентСервер.РаспределитьПропорциональноКоэффициентам(ЗачтеноАвансовыхПлатежей, КоэффициентыРаспределения);
Индекс = 0;
Пока Индекс < СтрокиНачислений.Количество() Цикл
ДанныеСтроки = СтрокиНачислений[Индекс];
Если РаспределенныеСуммыНДФЛ <> Неопределено Тогда
ДанныеСтроки.НДФЛ = РаспределенныеСуммыНДФЛ[Индекс];
Иначе
ДанныеСтроки.НДФЛ = 0;
КонецЕсли;
Если РаспределенныеСуммыЗачтеноАвансовыхПлатежей <> Неопределено Тогда
ДанныеСтроки.ЗачтеноАвансовыхПлатежей = РаспределенныеСуммыЗачтеноАвансовыхПлатежей[Индекс];
КонецЕсли;
Если РаспределенныеСуммыУдержаний <> Неопределено Тогда
ДанныеСтроки.Удержания = РаспределенныеСуммыУдержаний[Индекс];
Иначе
ДанныеСтроки.Удержания = Удержания;
КонецЕсли;
Если РаспределенныеСуммыКорректировокВыплаты <> Неопределено Тогда
ДанныеСтроки.КорректировкаВыплаты = РаспределенныеСуммыКорректировокВыплаты[Индекс];
КонецЕсли;
НачисленоСотруднику = ДанныеСтроки.Результат;
Для Н =1 По КоличествоКолонокИтоговЗависимыхНачислений Цикл
НачисленоСотруднику = НачисленоСотруднику + ДанныеСтроки["РезультатЗависимыхНачислений" + Формат(Н, "ЧГ=")];
КонецЦикла;
ДанныеСтроки.КВыплате = Макс(0, НачисленоСотруднику - Макс(ДанныеСтроки.НДФЛ, 0) + Макс(ДанныеСтроки.ЗачтеноАвансовыхПлатежей, 0) - Макс(ДанныеСтроки.Удержания, 0));
Индекс = Индекс + 1;
КонецЦикла;
КонецЦикла;
ОбновитьИтогиПодвала();
КонецПроцедуры
&НаСервере
Процедура ПриПолученииДанныхНаСервере()
ЗаполнениеВыполнено = Неопределено;
РаботаВБюджетномУчреждении = ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении");
ИспользоватьСтатьиФинансирования = ПолучитьФункциональнуюОпцию("ИспользоватьСтатьиФинансированияЗарплата");
ОбязательныйРасчетНДФЛ = ТребуетсяРасчетНалога(Объект.ВидПремии, Объект.ПланируемаяДатаВыплаты);
ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты = УчетНДФЛРасширенный.ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты(Объект.Организация, Объект.ПериодРегистрации);
УстановитьФункциональныеОпцииФормы();
УстановитьДоступностьРегистрацииНачислений();
УстановитьНастройкиРасчета();
УстановитьПривилегированныйРежим(Истина);
ДополнитьФорму();
ДанныеВРеквизиты();
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьЗависимыхНачислений();
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.НачисленияПерерасчет, "ПериодДействия", "ПериодДействияСтрокой");
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.ЗависимыеНачисления, "ПериодДействия", "ПериодДействияСтрокой");
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
УстановитьВидимостьРасчетныхПолей();
ФиксБазовыйПериодЧислом = Число(Объект.ФиксБазовыйПериод);
УстановитьДоступностьБазовогоПериода(ЭтаФорма);
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
УстановитьВидимостьНачисленияПериод();
УстановитьДоступностьПоляРассчитыватьУдержания(ЭтотОбъект);
ОтражениеЗарплатыВБухучетеРасширенный.УстановитьПодсказкуВводаСтатьиРасходовПоНачислению(ЭтаФорма, "Объект.ВидПремии");
УстановитьДоступностьКорректировкиВыплаты();
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьСвойстваИсчислятьНалог();
ВариантУказанияБухучета = ?(Объект.БухучетУказываетсяРаспределением, 1, 0);
УстановитьВидимостьНастроекБухучета(ЭтаФорма);
ЗаполнитьПредставлениеРаспределенияБухучета();
ОтражениеЗарплатыВБухучетеРасширенный.УстановитьСписокВыборкаВариантУказанияБухучета(Элементы.ВариантУказанияБухучета.СписокВыбора);
ОтражениеЗарплатыВБухучетеРасширенный.УстановитьВидимостьВариантУказанияБухучета(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСотрудника(Сотрудник, ОписаниеТаблицы) Экспорт
Если НЕ РасчетЗарплатыРасширенныйКлиент.ДобавитьСотрудникаКРасчету(ЭтаФорма, Сотрудник, ОписаниеТаблицы) Тогда
РассчитатьСотрудниковНаСервере(Сотрудник, ОписаниеТаблицы, Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПерезаполнитьДанныеФормыНаСервере(Знач Сотрудники, СохранятьИсправления = Ложь) Экспорт
Если ТипЗнч(Сотрудники) <> Тип("Массив") Тогда
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудники);
КонецЕсли;
Сотрудники = ОбщегоНазначенияКлиентСервер.СвернутьМассив(Сотрудники);
ОписаниеТаблицы = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
ИдентификаторыСтрок = Новый Массив;
ПозицииВставки = Неопределено;
Отбор = Новый Структура("Сотрудник");
Для Каждого Сотрудник Из Сотрудники Цикл
Отбор.Сотрудник = Сотрудник;
СтрокиПоСотруднику = Объект.Начисления.НайтиСтроки(Отбор);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПозицииВставки(СтрокиПоСотруднику, ПозицииВставки);
Если СтрокиПоСотруднику.Количество() > 0 И Не СохранятьИсправления Тогда
Если Не РассчитыватьРазовыеНачисленияВЦеломЗаПериод Тогда
РасчетЗарплатыРасширенныйФормы.ПодготовитьМассивСтрокНачисленийПередЗаполнением(СтрокиПоСотруднику);
КонецЕсли;
СтрокаПоСотруднику = СтрокиПоСотруднику[0];
СтрокаПоСотруднику.ДатаНачала = НачалоМесяца(Объект.ПериодРегистрации);
СтрокаПоСотруднику.ДатаОкончания = КонецМесяца(Объект.ПериодРегистрации);
СтрокаПоСотруднику.ПериодДействия = НачалоМесяца(Объект.ПериодРегистрации);
РасчетЗарплатыРасширенныйФормы.СброситьФиксПризнакиСтроки(ЭтотОбъект.КонтролируемыеПоляНачисления, СтрокаПоСотруднику);
КонецЕсли;
Для Каждого СтрокаПоСотруднику Из СтрокиПоСотруднику Цикл
ИдентификаторыСтрок.Добавить(СтрокаПоСотруднику.ПолучитьИдентификатор());
КонецЦикла;
КонецЦикла;
ДополнитьСтрокиНаСервере(ИдентификаторыСтрок, ОписаниеТаблицы, ПозицииВставки);
РассчитатьСотрудниковНаСервере(Сотрудники, ОписаниеТаблицы, СохранятьИсправления);
КонецПроцедуры
&НаСервере
Процедура РассчитатьСотрудниковНаСервере(Знач Сотрудники, ОписаниеТаблицы, СохранятьИсправления = Ложь)
Если НЕ ЗначениеЗаполнено(Объект.ВидПремии) Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Сотрудники) <> Тип("Массив") Тогда
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудники);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сотрудники) Тогда
Возврат;
КонецЕсли;
Документ = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(Документ);
ПараметрыРасчета = Документ.ПараметрыРасчета();
ПараметрыРасчета.СохранятьИсправления = СохранятьИсправления;
ПараметрыРасчета.Сотрудники = Сотрудники;
ПараметрыРасчета.РегистрацияНачисленийДоступна = РегистрацияНачисленийДоступна;
ПараметрыРасчета.ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца = ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца;
ПараметрыРасчета.ОбязательныйРасчетНДФЛ = ОбязательныйРасчетНДФЛ;
Документ.Рассчитать(ПараметрыРасчета);
ЗначениеВРеквизитФормы(Документ, "Объект");
ДанныеВРеквизиты();
ЗаполнитьНалогиУдержания();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьЗависимыхНачислений();
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, ПериодНачисленияМассивОписанийТаблицФормы(РегистрацияНачисленийДоступна));
Если ЗаполнениеВыполнено = Неопределено Тогда
ЗаполненныеСотрудники = Новый Соответствие;
Иначе
ЗаполненныеСотрудники = Новый Соответствие(ЗаполнениеВыполнено);
КонецЕсли;
Если ТипЗнч(Сотрудники) = Тип("СправочникСсылка.Сотрудники") Тогда
ЗаполненныеСотрудники.Вставить(Сотрудники, Истина);
Иначе
Для каждого ЗаполненныйСотрудник Из Сотрудники Цикл
ЗаполненныеСотрудники.Вставить(ЗаполненныйСотрудник, Истина);
КонецЦикла;
КонецЕсли;
ЗаполнениеВыполнено = Новый ФиксированноеСоответствие(ЗаполненныеСотрудники);
КонецПроцедуры
&НаСервере
Процедура РасчетЗарплатыВДанныеФормы(ДанныеМенеджераРасчета, ПозицииВставки = Неопределено)
ТаблицыНачислений = РасчетЗарплатыРасширенныйФормы.ТаблицыНачисленийФормы();
ТаблицыНачислений.Начисления = Объект.Начисления;
ТаблицыНачислений.НачисленияПерерасчет = Объект.НачисленияПерерасчет;
ТаблицыНачислений.ЗависимыеНачисления = Объект.ЗависимыеНачисления;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНачисленияВДанныеФормы(ТаблицыНачислений, ДанныеМенеджераРасчета.Начисления, Объект.Организация, , ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.СортироватьПерерасчеты(Объект.НачисленияПерерасчет);
ТаблицыУдержаний = РасчетЗарплатыРасширенныйФормы.ТаблицыУдержанийФормы();
ТаблицыУдержаний.Удержания = Объект.Удержания;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыУдержанияВДанныеФормы(ТаблицыУдержаний, ДанныеМенеджераРасчета.Удержания, , ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНДФЛВДанныеФормы(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, ДанныеМенеджераРасчета.НДФЛ, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыКорректировкиВыплатыВДанныеФормы(Объект.КорректировкиВыплаты, ДанныеМенеджераРасчета.КорректировкиВыплаты, ПозицииВставки);
КонецПроцедуры
&НаСервере
Процедура ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета, Отбор = Неопределено, ПозицииВставки = Неопределено)
ДокументыРазовыхНачисленийФормы.ПередПомещениемДанныхФормыВМенеджерРасчета(Объект);
БазовыйПериод = Неопределено;
Если ЗначениеЗаполнено(Объект.ДатаНачалаБазовогоПериода)
И ЗначениеЗаполнено(Объект.ДатаОкончанияБазовогоПериода) Тогда
БазовыйПериод = Новый СтандартныйПериод;
БазовыйПериод.ДатаНачала = Объект.ДатаНачалаБазовогоПериода;
БазовыйПериод.ДатаОкончания = Объект.ДатаОкончанияБазовогоПериода;
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.НачисленияВДанныеМенеджераРасчетаВидНачисленияВШапке(Объект.Начисления, МенеджерРасчета, Объект.Организация, Объект.ВидПремии, Отбор, ПозицииВставки, БазовыйПериод);
РасчетЗарплатыРасширенныйФормы.НачисленияПерерасчетВДанныеМенеджераРасчета(Объект.НачисленияПерерасчет, МенеджерРасчета, Объект.Организация, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.ЗависимыеНачисленияВДанныеМенеджераРасчета(Объект.ЗависимыеНачисления, МенеджерРасчета, Объект.Организация, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.УдержанияВДанныеМенеджераРасчета(Объект.Удержания, МенеджерРасчета, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.КорректировкиВыплатыВДанныеМенеджераРасчета(Объект.КорректировкиВыплаты, МенеджерРасчета, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.НДФЛВДанныеМенеджераРасчета(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, МенеджерРасчета, Отбор, ПозицииВставки);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛица, МенеджерРасчета, СохранятьИсправления = Ложь)
Документ = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(Документ);
ПараметрыРасчета = Документ.ПараметрыРасчета();
Документ.ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛица, МенеджерРасчета, ПараметрыРасчета);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПерерасчеты(МенеджерРасчета, Сотрудники, СотрудникиОтбора)
ПараметрыИсправленного = Неопределено;
ЭтоИсправление = ИсправлениеДокументовЗарплатаКадрыКлиентСервер.ЭтоИсправление(ЭтотОбъект, ПараметрыИсправленного);
Если ЭтоИсправление И Не ИсправлениеДокументовРасчетЗарплаты.ДоначисленияРазрешены(МенеджерРасчета) Тогда
Объект.НачисленияПерерасчет.Очистить();
Возврат;
КонецЕсли;
Если ЭтоИсправление Тогда
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна));
ТаблицыНачислений = Новый Структура;
ТаблицыНачислений.Вставить("Начисления", Объект.Начисления);
ТаблицыНачислений.Вставить("ЗависимыеНачисления", Объект.ЗависимыеНачисления);
ИсправлениеДокументовРасчетЗарплаты.СформироватьДанныеПерерасчетаДляИсправления(Объект.Организация, Объект.ПериодРегистрации, ПараметрыИсправленного.Ссылка, ТаблицыНачислений, Объект.НачисленияПерерасчет, Объект.Ссылка, ОписанияТаблиц, ПолучитьКонтролируемыеПоля(), ОписаниеДокумента(ЭтотОбъект), Сотрудники, Объект.ДоначислитьЗарплатуПриНеобходимости);
Иначе
ОтборПоСотрудникам = Новый Структура("Сотрудник", СотрудникиОтбора);
ИсправлениеДокументовРасчетЗарплаты.СформироватьДанныеПерерасчета(Объект.Организация, Объект.ПериодРегистрации, Объект.Начисления, Объект.НачисленияПерерасчет, Объект.Ссылка, ПолучитьКонтролируемыеПоля(), ОписаниеДокумента(ЭтотОбъект), ОтборПоСотрудникам, Объект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ФизическиеЛицаСотрудниковДокумента(СотрудникиФизическиеЛица)
ФизическиеЛицаСотрудников = Новый Соответствие;
Если СотрудникиФизическиеЛица.Количество() = 0 Тогда
Возврат ФизическиеЛицаСотрудников;
КонецЕсли;
Если ТипЗнч(СотрудникиФизическиеЛица[0]) = Тип("СправочникСсылка.Сотрудники") Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&Сотрудники)";
Запрос.УстановитьПараметр("Сотрудники", СотрудникиФизическиеЛица);
ФизическиеЛица = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ФизическоеЛицо");
Иначе
ФизическиеЛица = СотрудникиФизическиеЛица;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Сотрудники", ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"));
Запрос.УстановитьПараметр("ФизическиеЛица", ФизическиеЛица);
Запрос.Текст = "ВЫБРАТЬ
| Сотрудники.Ссылка КАК Сотрудник,
| Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&Сотрудники)
| И Сотрудники.ФизическоеЛицо В(&ФизическиеЛица)";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ФизическиеЛицаСотрудников.Вставить(Выборка.Сотрудник, Выборка.ФизическоеЛицо);
КонецЦикла;
Возврат ФизическиеЛицаСотрудников;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(Форма)
Если Не Форма.ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ПроверяемыеТаблицы = Новый Массив;
ПроверяемыеТаблицы.Добавить("НачисленияПерерасчет");
ПроверяемыеНачисления = Новый Массив;
ПроверяемыеНачисления.Добавить(Форма.Объект.ВидПремии);
Для каждого ПроверяемаяТаблица Из ПроверяемыеТаблицы Цикл
НачисленияДокумента = Новый Массив;
Для каждого Начисление Из Форма.Объект[ПроверяемаяТаблица] Цикл
НачисленияДокумента.Добавить(Начисление.Начисление);
КонецЦикла;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПроверяемыеНачисления, НачисленияДокумента, Истина);
КонецЦикла;
АвтоОтметкаНезаполненного = ДатаВыплатыОбязательнаКЗаполнению(Форма.Объект.ПорядокВыплаты, ПроверяемыеНачисления, Форма.Объект.ПериодРегистрации);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Форма.Элементы, "ПланируемаяДатаВыплаты", "АвтоОтметкаНезаполненного", АвтоОтметкаНезаполненного);
Если Не АвтоОтметкаНезаполненного Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Форма.Элементы, "ПланируемаяДатаВыплаты", "ОтметкаНезаполненного", Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДатаВыплатыОбязательнаКЗаполнению(Знач ПорядокВыплаты, Знач ПроверяемыеНачисления, Знач ПериодРегистрации)
УстановитьПривилегированныйРежим(Истина);
Возврат УчетНДФЛРасширенный.ДатаВыплатыОбязательнаКЗаполнению(ПорядокВыплаты, ПроверяемыеНачисления, ПериодРегистрации);
КонецФункции
&НаСервере
Процедура УстановитьВидимостьПерерасчетов()
ЕстьПерерасчеты = ИсправлениеДокументовРасчетЗарплатыКлиентСервер.ПерерасчетыДоступны(ЭтаФорма,,"", Ложь);
Элементы.НачисленияПерерасчетСтраница.Видимость = ЕстьПерерасчеты;
ИсправлениеДокументовРасчетЗарплатыКлиентСервер.УстановитьДоначислениеПриИсправлении(ЭтаФорма, ЕстьПерерасчеты);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЗависимыхНачислений()
ЕстьЗависимыеНачисления = Объект.ЗависимыеНачисления.Количество() > 0;
Элементы.ЗависимыеНачисленияСтраница.Видимость = ЕстьЗависимыеНачисления;
УстановитьСвойстваКолонокИтоговыхНачислений(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьРеквизитовМежрасчетнойВыплаты()
ВидимостьРеквизитовУдержаний = Объект.РассчитыватьУдержания И ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений;
Элементы.НачисленияУдержания.Видимость = ВидимостьРеквизитовУдержаний;
Элементы.ПодробнееОРасчетеУдержаний.Видимость = ВидимостьРеквизитовУдержаний;
УстановитьВидимостьРеквизитовНДФЛ();
УстановитьВидимостьКВыплате();
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьРеквизитовНДФЛ()
ВидимостьРеквизитовНДФЛ = УчетНДФЛРасширенный.МежрасчетныйДокументИсчисляетНДФЛ(Объект.Организация, ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца, Объект.ПорядокВыплаты, ОбязательныйРасчетНДФЛ, Объект.ПланируемаяДатаВыплаты);
Элементы.НачисленияНДФЛ.Видимость = ВидимостьРеквизитовНДФЛ;
Элементы.НачисленияКорректировкаВыплаты.Видимость = ВидимостьРеквизитовНДФЛ;
УстановитьВидимостьКВыплате();
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьКВыплате()
Элементы.НачисленияКВыплате.Видимость = (Объект.РассчитыватьУдержания И ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений)
Или УчетНДФЛРасширенный.МежрасчетныйДокументИсчисляетНДФЛ(Объект.Организация, ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца, Объект.ПорядокВыплаты, ОбязательныйРасчетНДФЛ, Объект.ПланируемаяДатаВыплаты);
КонецПроцедуры
&НаСервере
Процедура ОбновитьПланируемуюДатуВыплаты()
РасчетЗарплатыРасширенный.УстановитьПланируемуюДатуВыплаты(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект));
ОбязательныйРасчетНДФЛ = ТребуетсяРасчетНалога(Объект.ВидПремии, Объект.ПланируемаяДатаВыплаты);
УстановитьВидимостьСвойстваИсчислятьНалог();
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ТребуетсяРасчетНалога(ВидРасчета, ПланируемаяДатаВыплаты)
Возврат УчетНДФЛ.ДоходыУчитываютсяТолькоПоДатеВыплаты(ПланируемаяДатаВыплаты) Или УчетНДФЛРасширенный.ДоходыВУчетеНДФЛРегистрируютсяПоДатеВыплаты(ВидРасчета);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеДокумента(Форма)
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеРасчетногоДокумента();
Описание.МесяцНачисленияИмя = "ПериодРегистрации";
Описание.НачалоБазовогоПериодаИмя = "ДатаНачалаБазовогоПериода";
Описание.ОкончаниеБазовогоПериодаИмя = "ДатаОкончанияБазовогоПериода";
Описание.ИменаПолейНачисления = "ВидПремии";
Описание.ВидНачисленияВШапке = Истина;
Описание.ВидНачисленияИмя = "ВидПремии";
Описание.ПериодДействияВШапке = Истина;
Описание.РазбиватьСтрокиНачислений = Не Форма.РассчитыватьРазовыеНачисленияВЦеломЗаПериод;
Описание.РассчитыватьУдержанияИмя = "РассчитыватьУдержания";
Описание.НачисленияИмя = "Начисления";
Описание.НачисленияПерерасчетИмя= "НачисленияПерерасчет";
Описание.ЗависимыеНачисленияИмя= "ЗависимыеНачисления";
Описание.УдержанияИмя = "Удержания";
Описание.НДФЛИмя = "НДФЛ";
Описание.КорректировкиВыплатыИмя = "КорректировкиВыплаты";
Описание.ПримененныеВычетыИмя = "ПримененныеВычетыНаДетейИИмущественные";
Описание.БухучетПервичногоДокументаИмяМетода = "Документы.Премия.ДанныеДляБухучетаЗарплатыПервичныхДокументов";
Описание.ДатаНачалаСобытияИмя = "ПериодРегистрации";
Описание.РегистрацияНачисленийДоступна = Форма.ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
Если Форма.ТребуетсяРасчетБазы Тогда
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("ДатаНачалаБазовогоПериода", "Объект.ДатаНачалаБазовогоПериода"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("ДатаОкончанияБазовогоПериода", "Объект.ДатаОкончанияБазовогоПериода"));
КонецЕсли;
Описание.ОписанияТаблицДляРаспределенияРезультата = СтруктураОписанияТаблицДляРаспределенияРезультата(Форма);
Возврат Описание;
КонецФункции
&НаСервере
Процедура ДополнитьФорму()
РасчетЗарплатыРасширенныйФормы.ДокументыНачисленийДополнитьФорму(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийВШапкеДополнитьФорму(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), "Начисления");
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна), "Начисления");
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыУдержаний(), "Удержания", , Ложь);
ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыЗаполнитьПредупреждения(ЭтаФорма);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
РасчетЗарплатыРасширенныйФормы.ПорядокВыплатыЗарплатыДополнитьФорму(ЭтаФорма);
РасчетЗарплатыРасширенныйФормы.РассчитатьУдержанияДополнитьФорму(ЭтотОбъект);
ЗарплатаКадрыРасширенный.МногофункциональныеДокументыДобавитьЭлементыФормы(ЭтаФорма, НСтр("ru='Расчет утвердил'"), , , "Рассчитал");
РасчетЗарплатыРасширенныйФормы.ДокументыНачисленийДополнитьФормуРезультатыРаспределения(ЭтаФорма, ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДополнитьФорму(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ИсправлениеДокументовЗарплатаКадры.ГруппаИсправлениеДополнитьФорму(ЭтаФорма);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПериодНачисленияМассивОписанийТаблицФормы(ПравоНаЧтениеДокументаБезОграничений)
МассивОписанийТаблицФормы = Новый Структура;
МассивОписанийТаблицФормы.Вставить("НачисленияПерерасчет", ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений));
Возврат МассивОписанийТаблицФормы
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция МассивОписанийТаблицФормы(ПравоНаЧтениеДокументаБезОграничений)
МассивОписанийТаблицФормы = Новый Структура;
МассивОписанийТаблицФормы.Вставить("Начисления", ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений));
МассивОписанийТаблицФормы.Вставить("НачисленияПерерасчет", ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений));
Возврат МассивОписанийТаблицФормы
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений)
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "Сотрудник";
ОписаниеТаблицы.ИмяРеквизитаВидРасчета = "ВидПремии";
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "НачисленияРезультат";
ОписаниеТаблицы.ИмяРеквизитаДатаНачала = "ДатаНачала";
ОписаниеТаблицы.ИмяРеквизитаДатаОкончания = "ДатаОкончания";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ОтображатьПоляНормыВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.УправлятьОтображениемПолейОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НачисленияПерерасчет,Удержания,НДФЛ,КорректировкиВыплаты";
ОписаниеТаблицы.СодержитПолеМестоПолученияДохода = Истина;
ОписаниеТаблицы.СодержитПолеИсходныйДокумент = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений)
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияПерерасчет";
ОписаниеТаблицы.ПутьКДанным = "Объект.НачисленияПерерасчет";
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "ДатыНачисленияПерерасчет";
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "Сотрудник";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.НомерТаблицы = 1;
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ОтображатьПоляНормыВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.УправлятьОтображениемПолейОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ЭтоПерерасчеты = Истина;
ОписаниеТаблицы.ИмяРеквизитаФиксСторно = "ФиксСторно";
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияПерерасчетРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НачисленияПерерасчет,Удержания,НДФЛ,КорректировкиВыплаты";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
ОписаниеТаблицы.СодержитПолеМестоПолученияДохода = Истина;
ОписаниеТаблицы.СодержитРегистраторРазовогоНачисления = Истина;
ОписаниеТаблицы.СодержитПолеИсходныйДокумент = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыЗависимыеНачисления(ПравоНаЧтениеДокументаБезОграничений)
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "ЗависимыеНачисления";
ОписаниеТаблицы.ПутьКДанным = "Объект.ЗависимыеНачисления";
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "ЗависимыеНачисленияРассчитыватьПоРазовымНачислениямДокумента";
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "Сотрудник";
ОписаниеТаблицы.НомерТаблицы = 4;
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ОтображатьПоляНормыВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.УправлятьОтображениемПолейОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "ЗависимыеНачисленияРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НачисленияПерерасчет,Удержания,НДФЛ,КорректировкиВыплаты";
ОписаниеТаблицы.СодержитПолеМестоПолученияДохода = Истина;
ОписаниеТаблицы.СодержитПолеИсходныйДокумент = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыУдержаний()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ИмяРеквизитаВидРасчета = "Удержание";
ОписаниеТаблицы.ИмяТаблицы = "Удержания";
ОписаниеТаблицы.НомерТаблицы = 3;
ОписаниеТаблицы.СодержитПолеВидРасчета = Истина;
ОписаниеТаблицы.СодержитПолеСотрудник = Ложь;
ОписаниеТаблицы.ПутьКДанным = "Объект.Удержания";
ОписаниеТаблицы.ПутьКДаннымПоказателей = "Объект.Показатели";
ОписаниеТаблицы.ИмяРеквизитаДатаНачала = "ДатаНачала";
ОписаниеТаблицы.ИмяРеквизитаДатаОкончания = "ДатаОкончания";
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНДФЛ()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НДФЛ";
ОписаниеТаблицы.ПутьКДанным = "Объект.НДФЛ";
ОписаниеТаблицы.ИмяПоляРезультат = "Налог";
ОписаниеТаблицы.НомерТаблицы = 2;
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтрокиНДФЛ";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыКорректировкиВыплаты()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыКорректировкиВыплаты();
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписанияТаблицДляРаспределенияРезультата(ПравоНаЧтениеДокументаБезОграничений)
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений));
ОписанияТаблиц.Добавить(ОписаниеТаблицыЗависимыеНачисления(ПравоНаЧтениеДокументаБезОграничений));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Добавить(ОписаниеТаблицыКорректировкиВыплаты());
Возврат ОписанияТаблиц;
КонецФункции
&НаКлиенте
Процедура ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле)
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") = 0 Тогда
Возврат;
КонецЕсли;
ЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуРедактированияРезультатовРаспределенияПоИсточникамФинансирования(ЭтаФорма, ОписаниеТаблицы, ВыбраннаяСтрока, Объект.ПериодРегистрации);
КонецПроцедуры
&НаСервере
Функция ПолучитьКонтролируемыеПоля() Экспорт
КонтролируемыеПоля = Новый Структура;
НачисленияФиксРасчет = Новый Массив;
НачисленияФиксРасчет.Добавить("Результат");
НачисленияФиксРасчетВремени = Новый Массив;
НачисленияФиксРасчетВремени.Добавить("ОплаченоДней");
НачисленияФиксРасчетВремени.Добавить("ОплаченоЧасов");
НачисленияФиксРасчетВремени.Добавить("НормаДней");
НачисленияФиксРасчетВремени.Добавить("НормаЧасов");
НачисленияФиксСтрока = Новый Массив;
НачисленияФиксСтрока.Добавить("Сотрудник");
НачисленияФиксСтрока.Добавить("ДатаНачала");
НачисленияФиксСтрока.Добавить("ДатаОкончания");
НачисленияФиксЗаполнение = Новый Массив;
НачисленияФиксЗаполнение.Добавить("МестоПолученияДохода");
НачисленияПоля = Новый Структура;
НачисленияПоля.Вставить("ФиксРасчет", НачисленияФиксРасчет);
НачисленияПоля.Вставить("ФиксЗаполнение", НачисленияФиксЗаполнение);
НачисленияПоля.Вставить("ФиксРасчетВремени", НачисленияФиксРасчетВремени);
НачисленияПерерасчетПоля = Новый Структура;
НачисленияПерерасчетПоля.Вставить("ФиксРасчет", НачисленияФиксРасчет);
НачисленияПерерасчетПоля.Вставить("ФиксЗаполнение", НачисленияФиксЗаполнение);
НачисленияПерерасчетПоля.Вставить("ФиксСтрока", НачисленияФиксСтрока);
НачисленияПерерасчетПоля.Вставить("ФиксРасчетВремени", НачисленияФиксРасчетВремени);
ЗависимыеНачисленияПоля = Новый Структура;
ЗависимыеНачисленияПоля.Вставить("ФиксСтрока", НачисленияФиксСтрока);
ЗависимыеНачисленияПоля.Вставить("ФиксРасчет", НачисленияФиксРасчет);
ЗависимыеНачисленияПоля.Вставить("ФиксЗаполнение", НачисленияФиксЗаполнение);
КонтролируемыеПоля.Вставить("Начисления", НачисленияПоля);
КонтролируемыеПоля.Вставить("НачисленияПерерасчет", НачисленияПерерасчетПоля);
КонтролируемыеПоля.Вставить("НДФЛ", УчетНДФЛРасширенный.КонтролируемыеПоляДляФиксацииРезультатов());
КонтролируемыеПоля.Вставить("ЗависимыеНачисления", ЗависимыеНачисленияПоля);
Возврат КонтролируемыеПоля;
КонецФункции
&НаКлиенте
Функция ПолучитьСтарыеЗначенияКонтролируемыхПолей() Экспорт
Возврат СтарыеЗначенияКонтролируемыхПолей;
КонецФункции
&НаКлиенте
Процедура ПерезаполнитьНачисленияСотрудника(Сотрудники, СохранятьИсправления = Истина) Экспорт
ПерезаполнитьДанныеФормыНаСервере(Сотрудники, СохранятьИсправления);
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьСотрудника(ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля) Экспорт
ПересчитатьСотрудникаНаСервере(ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля);
КонецПроцедуры
&НаСервере
Процедура ПересчитатьСотрудникаНаСервере(ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля)
РасчетЗарплатыРасширенный.ПересчитатьСотрудникаНаСервере(ЭтаФорма, ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля);
КонецПроцедуры
&НаСервере
Процедура ДанныеВРеквизиты()
УстановитьПривилегированныйРежим(Истина);
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ЗарплатаКадрыРасширенный.ВводНачисленийДанныеВРеквизит(ЭтаФорма, ОписанияТаблиц, 2);
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, ПериодНачисленияМассивОписанийТаблицФормы(РегистрацияНачисленийДоступна));
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна));
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаДанныеВРеквизит(ЭтаФорма, ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна));
ОтражениеЗарплатыВБухучетеРасширенный.ОбъектПриЧтенииНаСервереПредставлениеРаспределения(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДанныеВРеквизит(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ИсправлениеДокументовЗарплатаКадры.ПрочитатьРеквизитыИсправления(ЭтаФорма);
УстановитьПоляИсправления(ЭтаФорма);
УдержатьНалогПриВыплатеЗарплатыДанныеВРеквизиты();
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура РеквизитыВДанные(ТекущийОбъект)
УстановитьПривилегированныйРежим(Истина);
ТекущийОбъект.Показатели.Очистить();
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ЗарплатаКадрыРасширенный.ВводНачисленийРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблиц, 2);
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
УдержатьНалогПриВыплатеЗарплатыРеквизитыВДанные(ТекущийОбъект);
КонецПроцедуры
&НаСервере
Процедура РассчитатьВсеНаСервере(ОписаниеТаблицы = Неопределено)
Если Не ЗначениеЗаполнено(Объект.ВидПремии) Тогда
Возврат;
КонецЕсли;
Если ОписаниеТаблицы = Неопределено Тогда
ОписаниеТаблицы = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
КонецЕсли;
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник");
ФизическиеЛицаСотрудников = ФизическиеЛицаСотрудниковДокумента(Сотрудники);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛицаСотрудников, МенеджерРасчета);
УстановитьПривилегированныйРежим(Истина);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИсточникиИзмененийМенеджераРасчета(МенеджерРасчета, ИзмененныеДанные);
ЗаполнитьПерерасчеты(МенеджерРасчета, Сотрудники, ОбщегоНазначения.ВыгрузитьКолонку(ФизическиеЛицаСотрудников, "Ключ"));
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
МенеджерРасчета.РассчитатьЗарплату();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
УстановитьПривилегированныйРежим(Ложь);
ЗаполнитьНалогиУдержания();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьЗависимыхНачислений();
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, ПериодНачисленияМассивОписанийТаблицФормы(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеНДФЛНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
ОтборСтрокФизическихЛиц = Новый Структура("ФизическоеЛицо", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметр.ФизическоеЛицо));
РасчетЗарплатыРасширенный.ЗаменитьСтрокиНДФЛ(Объект.НДФЛ, Параметр.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, Параметр.ПримененныеВычетыНаДетейИИмущественные, ПолучитьКонтролируемыеПоля(), ОписаниеДокумента(ЭтаФорма), ОтборСтрокФизическихЛиц, Ложь);
ИзмененныеДанные.Загрузить(Параметр.ИзмененныеДанные);
Если ИзмененныеДанные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ОписаниеТаблицы = ОписаниеТаблицыНДФЛ();
РассчитатьВсеНаСервере(ОписаниеТаблицы);
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеУдержанийНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
Объект.Удержания.Загрузить(Параметр.Удержания.Выгрузить());
ИзмененныеДанные.Загрузить(Параметр.ИзмененныеДанные.Выгрузить());
Если ИзмененныеДанные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ОписаниеТаблицы = ОписаниеТаблицыУдержаний();
РассчитатьВсеНаСервере(ОписаниеТаблицы);
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеПоказателейНаСервере(ЗначенияПоказателей, ОбрабатываемыеСотрудники)
ВидРасчетаИнфо = ЗарплатаКадрыРасширенныйПовтИсп.ПолучитьИнформациюОВидеРасчета(Объект.ВидПремии);
ФиксированнаяСумма = ЗначенияПоказателей[Справочники.ПоказателиРасчетаЗарплаты.ПустаяСсылка()];
Сотрудники = Новый Массив;
УникальныеСотрудники = Новый Соответствие;
Если ОбрабатываемыеСотрудники.Количество() > 0 Тогда
ТаблицаНачислений = Новый Массив;
Для Каждого КлючИЗначение Из ОбрабатываемыеСотрудники Цикл
Отбор = Новый Структура("Сотрудник", КлючИЗначение.Ключ);
СтрокиПоСотруднику = Объект.Начисления.НайтиСтроки(Отбор);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ТаблицаНачислений, СтрокиПоСотруднику);
КонецЦикла;
Иначе
ТаблицаНачислений = Объект.Начисления;
КонецЕсли;
Для Каждого СтрокаСотрудника Из ТаблицаНачислений Цикл
Если ФиксированнаяСумма = Неопределено Тогда
МаксимальноеЧислоПоказателей = ВидРасчетаИнфо.КоличествоОтображаемыхПоказателей;
Для Сч = 1 По МаксимальноеЧислоПоказателей Цикл
Показатель = СтрокаСотрудника["Показатель" + Сч];
Если Не ЗначениеЗаполнено(Показатель) Тогда
Прервать;
КонецЕсли;
ЗначениеПоказателя = ЗначенияПоказателей[Показатель];
Если ЗначениеПоказателя <> Неопределено Тогда
СтрокаСотрудника["Значение" + Сч] = ЗначениеПоказателя;
КонецЕсли;
КонецЦикла;
Иначе
СтрокаСотрудника.Результат = ФиксированнаяСумма;
КонецЕсли;
Если УникальныеСотрудники[СтрокаСотрудника.Сотрудник] = Неопределено Тогда
Сотрудники.Добавить(СтрокаСотрудника.Сотрудник);
УникальныеСотрудники.Вставить(СтрокаСотрудника.Сотрудник, Истина);
КонецЕсли;
КонецЦикла;
РассчитатьСотрудниковНаСервере(Сотрудники, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Ложь);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойствоДокументРассчитан()
Если ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений Тогда
Объект.ДокументРассчитан = Истина;
КонецЕсли;
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьРасчетныхПолей()
ИменаЭлементов = Новый Массив;
ИменаЭлементов.Добавить("НачисленияПерерасчетСтраница");
ИменаЭлементов.Добавить("ЗависимыеНачисленияСтраница");
ЗарплатаКадрыРасширенный.УстановитьОтображениеПолейМногофункциональныхДокументов(ЭтаФорма, ИменаЭлементов);
Если ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений Тогда
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьЗависимыхНачислений();
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьВидимостьПолейОтображенияВремени(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьНачисленияПериод()
Если ЗначениеЗаполнено(Объект.ВидПремии) Тогда
ВидРасчетаИнфо = ЗарплатаКадрыРасширенныйПовтИсп.ПолучитьИнформациюОВидеРасчета(Объект.ВидПремии);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"НачисленияПериод",
"Видимость",
ВидРасчетаИнфо.ИспользованиеПериода <> Перечисления.ВариантыИспользованияПериодаНачисления.БазовыйПериод);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьРегистрацииНачислений()
ПраваНаДокумент = ЗарплатаКадрыРасширенный.ПраваНаМногофункциональныйДокумент(Объект);
РегистрацияНачисленийДоступна = ПраваНаДокумент.ПолныеПраваПоРолям;
ОграниченияНаУровнеЗаписей = Новый ФиксированнаяСтруктура(ПраваНаДокумент.ОграниченияНаУровнеЗаписей);
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей()
БылиОграничения = ОграниченияНаУровнеЗаписей;
УстановитьДоступностьРегистрацииНачислений();
Если БылиОграничения.ЧтениеБезОграничений <> ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений
Или БылиОграничения.ИзменениеБезОграничений <> ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений
Или БылиОграничения.ИзменениеКадровыхДанных <> ОграниченияНаУровнеЗаписей.ИзменениеКадровыхДанных Тогда
Объект.ДокументРассчитан = ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
Объект.Рассчитал = Неопределено;
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
УстановитьВидимостьРасчетныхПолей();
Если БылиОграничения.ЧтениеБезОграничений <> ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений Тогда
ЗарплатаКадрыРасширенный.УстановитьВидимостьКомандПечатиМногофункциональногоДокумента(ЭтаФорма);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьБазовыйПериод()
Документы.Премия.ЗаполнитьБазовыйПериод(Объект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДатыНачислений()
Для Каждого СтрокаНачисления Из Объект.Начисления Цикл
СтрокаНачисления.ПериодДействия = Объект.ПериодРегистрации;
СтрокаНачисления.ДатаНачала = НачалоМесяца(Объект.ПериодРегистрации);
СтрокаНачисления.ДатаОкончания = КонецМесяца(Объект.ПериодРегистрации);
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьБазовогоПериода(Форма)
Форма.Элементы.ДатаНачалаБазовогоПериода.Доступность = Форма.Объект.ФиксБазовыйПериод;
Форма.Элементы.ДатаОкончанияБазовогоПериода.Доступность = Форма.Объект.ФиксБазовыйПериод;
КонецПроцедуры
&НаСервере
Функция АдресСпискаПодобранныхСотрудников()
Возврат ПоместитьВоВременноеХранилище(Объект.Начисления.Выгрузить(,"Сотрудник").ВыгрузитьКолонку("Сотрудник"), УникальныйИдентификатор);
КонецФункции
&НаСервере
Процедура УстановитьФункциональныеОпцииФормы()
ПараметрыФО = Новый Структура("Организация, Период", Объект.Организация, НачалоДня(Объект.ПериодРегистрации));
УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
КонецПроцедуры
&НаСервере
Функция СотрудникиФизическихЛиц(Знач ФизическиеЛица)
Если ЗначениеЗаполнено(Объект.ДатаНачалаБазовогоПериода) Тогда
НачалоПериодаПримененияОтбора = Объект.ДатаНачалаБазовогоПериода;
ОкончаниеПериодаПримененияОтбора = Объект.ДатаОкончанияБазовогоПериода;
Иначе
НачалоПериодаПримененияОтбора = Объект.ПериодРегистрации;
ОкончаниеПериодаПримененияОтбора = КонецМесяца(Объект.ПериодРегистрации);
КонецЕсли;
ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудников.Организация = Объект.Организация;
ПараметрыПолученияСотрудников.Подразделение = Объект.Подразделение;
ПараметрыПолученияСотрудников.НачалоПериода = НачалоПериодаПримененияОтбора;
ПараметрыПолученияСотрудников.ОкончаниеПериода = ОкончаниеПериодаПримененияОтбора;
Если ТипЗнч(ФизическиеЛица) = Тип("Массив") Тогда
ПараметрыПолученияСотрудников.СписокФизическихЛиц = ФизическиеЛица;
Иначе
ПараметрыПолученияСотрудников.СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическиеЛица);
КонецЕсли;
Возврат КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников);
КонецФункции
&НаКлиенте
Процедура ПересчитатьДокументНаКлиенте()
ПересчитатьДокументНаСервере(СотрудникиКРасчету);
СотрудникиКРасчету.Очистить();
РасчетЗарплатыКлиент.УстановитьОтображениеКнопкиПересчитать(ЭтаФорма, Ложь);
ДанныеСтроки = Элементы.Начисления.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.УстановитьЗначенияКонтролируемыхПолей(
"Начисления",
ДанныеСтроки,
ЭтаФорма["КонтролируемыеПоляНачисления"],
СтарыеЗначенияКонтролируемыхПолей);
КонецПроцедуры
&НаСервере
Процедура ПересчитатьДокументНаСервере(СотрудникиКРасчету)
Для Каждого ТаблицаССотрудниками Из СотрудникиКРасчету Цикл
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(ТаблицаССотрудниками.Значение.СписокСотрудников, "Ключ");
РассчитатьСотрудниковНаСервере(Сотрудники, ТаблицаССотрудниками.Значение.ОписаниеТаблицы);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписьюОкончание(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ПересчитатьДокументНаКлиенте();
Записать(Параметры);
Иначе
ЗакрытьПослеЗаписи = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтветственныхЛиц()
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ПодписиДокументов.ЗаполнитьПодписиПоОрганизации(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеФормыПоОрганизации()
Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ЗапрашиваемыеЗначения = Новый Структура("МесяцРасчета, Организация", "Объект.ПериодРегистрации", "Объект.Организация");
ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтаФорма, ЗапрашиваемыеЗначения, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Организация"));
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты = УчетНДФЛРасширенный.ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты(Объект.Организация, Объект.ПериодРегистрации);
УстановитьОтветственныхЛиц();
КонецПроцедуры
&НаСервере
Функция СведенияОбНДФЛ(ФизическоеЛицо = Неопределено) Экспорт
Если ФизическоеЛицо = Неопределено Тогда
ТекущиеДанные = Объект.Начисления.НайтиПоИдентификатору(Элементы.Начисления.ТекущаяСтрока);
ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущиеДанные.Сотрудник, "ФизическоеЛицо");
КонецЕсли;
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("Начисление", Объект.ВидПремии);
ДополнительныеСведения = УчетНДФЛФормыРасширенный.ДополнительныеДанныеДляПолученияСведенийОДоходахНДФЛДокумента();
ДополнительныеСведения.МесяцНачисления = Объект.ПериодРегистрации;
ДополнительныеСведения.ПорядокВыплаты = Объект.ПорядокВыплаты;
ДополнительныеСведения.ПланируемаяДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
СведенияОДоходахНДФЛ = УчетНДФЛФормыРасширенный.СведенияОДоходахНДФЛДокумента(Объект, "Начисления,НачисленияПерерасчет", ДополнительныеСведения, ФизическоеЛицо, ПараметрыЗапроса);
Если Объект.ЗависимыеНачисления.Количество() > 0 Тогда
СведенияОДоходахНДФЛЗависимыхНачислений = УчетНДФЛФормыРасширенный.СведенияОДоходахНДФЛДокумента(Объект, "ЗависимыеНачисления", ДополнительныеСведения, ФизическоеЛицо);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СведенияОДоходахНДФЛЗависимыхНачислений.ВычетыКДоходам ,СведенияОДоходахНДФЛ.ВычетыКДоходам);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СведенияОДоходахНДФЛЗависимыхНачислений.СведенияОДоходах ,СведенияОДоходахНДФЛ.СведенияОДоходах);
КонецЕсли;
АдресСведенийОбНДФЛ = УчетНДФЛФормыРасширенный.СведенияОбНДФЛ(ЭтотОбъект, ФизическоеЛицо);
ДанныеОбНДФЛ = ПолучитьИзВременногоХранилища(АдресСведенийОбНДФЛ);
ДанныеОбНДФЛ.Вставить("СведенияОДоходах", СведенияОДоходахНДФЛ.СведенияОДоходах);
ДанныеОбНДФЛ.Вставить("ВычетыКДоходам", СведенияОДоходахНДФЛ.ВычетыКДоходам);
МаксимальныйИдентификаторСтрокиНДФЛ = УчетНДФЛФормы.МаксимальныйИдентификаторСтрокиНДФЛ(Объект.НДФЛ);
ДанныеОбНДФЛ.Вставить("МаксимальныйИдентификаторСтрокиНДФЛ", МаксимальныйИдентификаторСтрокиНДФЛ);
Возврат ПоместитьВоВременноеХранилище(ДанныеОбНДФЛ, ЭтаФорма.УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция СведенияОбУдержаниях() Экспорт
Возврат РасчетЗарплатыРасширенный.СведенияОбУдержаниях(ЭтаФорма);
КонецФункции
&НаКлиенте
Процедура РедактированиеКорректировокВыплаты(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя <> "НачисленияКорректировкаВыплаты" Тогда
Возврат;
КонецЕсли;
Если Не ИспользоватьСтатьиФинансирования Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Сотрудник = Элементы.Начисления.ТекущиеДанные.Сотрудник;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр);
ПараметрыФормы.Вставить("МесяцНачисления", Объект.ПериодРегистрации);
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("ДанныеКорректировокВыплаты", ДанныеКорректировокВыплаты(Сотрудник));
ПараметрыФормы.Вставить("СотрудникФизическоеЛицо", Сотрудник);
ОткрытьФорму("ОбщаяФорма.РедактированиеКорректировокВыплаты", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаСервере
Функция ДанныеКорректировокВыплаты(Сотрудник)
ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Сотрудник, "ФизическоеЛицо");
Возврат РасчетЗарплатыРасширенныйФормы.ДанныеКорректировокВыплаты(ЭтаФорма, ФизическоеЛицо);
КонецФункции
&НаСервере
Процедура УстановитьДоступностьКорректировкиВыплаты()
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияКорректировкаВыплаты", "ТолькоПросмотр",
ИспользоватьСтатьиФинансирования Или ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений = Ложь);
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеКорректировокВыплатыНаСервере(АдресВременногоХранилища)
РасчетЗарплатыРасширенныйФормы.ОбновитьДанныеКорректировокВыплатыВТаблице(ЭтаФорма, АдресВременногоХранилища);
КонецПроцедуры
&НаСервере
Процедура НачисленияКорректировкаВыплатыПриИзмененииНаСервере(ДанныеСтроки)
РасчетЗарплатыРасширенныйФормы.КорректировкаВыплатыПриИзмененииВТаблице(Объект, ДанныеСтроки);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьСвойствоРассчитыватьУдержания(Форма)
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьСвойствоРассчитыватьУдержания(Форма);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьПоляРассчитыватьУдержания(Форма)
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьДоступностьПоляРассчитыватьУдержания(Форма);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьНастройки()
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдержатьНалогПриВыплатеЗарплатыДанныеВРеквизиты()
ПеречислитьНалог = ?(Объект.УдержатьНалогПриВыплатеЗарплаты, 1, 0);
ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца = Объект.ИсчислятьНалогПриОкончательномРасчете;
КонецПроцедуры
&НаСервере
Процедура УдержатьНалогПриВыплатеЗарплатыРеквизитыВДанные(ТекущийОбъект)
ТекущийОбъект.УдержатьНалогПриВыплатеЗарплаты = ?(Не ОбязательныйРасчетНДФЛ
И ПеречислитьНалог = 1
И ТекущийОбъект.ПорядокВыплаты <> Перечисления.ХарактерВыплатыЗарплаты.Зарплата
И Не (ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца Или ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты), Истина, Ложь);
ТекущийОбъект.ИсчислятьНалогПриОкончательномРасчете = Не ОбязательныйРасчетНДФЛ
И ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца
И ТекущийОбъект.ПорядокВыплаты <> Перечисления.ХарактерВыплатыЗарплаты.Зарплата;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗначениеПеречислитьНалогПриИзмененииПорядкаВыплаты()
Если Объект.ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Зарплата Тогда
ПеречислитьНалог = 0;
ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьСвойстваИсчислятьНалог()
ВидимостьЭлемента = Не ОбязательныйРасчетНДФЛ И Объект.ПорядокВыплаты <> Перечисления.ХарактерВыплатыЗарплаты.Зарплата;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца", "Видимость", ВидимостьЭлемента);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьСвойстваПеречислитьНалог()
ВидимостьЭлемента = Не ОбязательныйРасчетНДФЛ И Объект.ПорядокВыплаты <> Перечисления.ХарактерВыплатыЗарплаты.Зарплата И Не (ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца Или ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПеречислитьНалог", "Видимость", ВидимостьЭлемента);
КонецПроцедуры
&НаСервере
Процедура ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяцаПриИзмененииНаСервере()
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьРеквизитовНДФЛ();
ПересчитатьНДФЛ();
ЗаполнитьНалогиУдержания();
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаСервере
Процедура ПересчитатьНДФЛ()
УстановитьПривилегированныйРежим(Истина);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник");
ФизическиеЛицаСотрудников = ФизическиеЛицаСотрудниковДокумента(Сотрудники);
ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛицаСотрудников, МенеджерРасчета);
МенеджерРасчета.НастройкиРасчета.Сотрудники = Сотрудники;
Если ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца Тогда
Объект.НДФЛ.Очистить();
Объект.КорректировкиВыплаты.Очистить();
Объект.ПримененныеВычетыНаДетейИИмущественные.Очистить();
КонецЕсли;
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
МенеджерРасчета.ПересчитатьНДФЛ();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура УстановитьСвойстваКолонокИтоговыхНачислений(Форма)
РасчетЗарплатыРасширенныйФормы.УстановитьСвойстваКолонокИтоговыхНачислений(Форма);
КонецПроцедуры
#Область РаспределениеПоТерриториямУсловиямТруда
&НаКлиенте
Процедура ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПараметрыДляВыбора = РасчетЗарплатыРасширенныйКлиент.ПараметрыДляВыбораПолеРаспределениеПоТерриториямУсловиямТруда();
ПараметрыДляВыбора.Форма = ЭтаФорма;
ПараметрыДляВыбора.ОписаниеДокумента = ОписаниеДокумента(ЭтаФорма);
ПараметрыДляВыбора.ОписаниеТаблицы = ОписаниеТаблицы;
РасчетЗарплатыРасширенныйКлиент.ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, ПараметрыДляВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ЭтаФорма, ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Функция ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда()
Описания = Новый Массив;
Описания.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
Описания.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
Описания.Добавить(ОписаниеТаблицыЗависимыеНачисления(РегистрацияНачисленийДоступна));
Возврат Описания;
КонецФункции
#КонецОбласти
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПодключаемыеКоманды(УправляемаяФорма)
ЭДОБЗККлиентСервер.ОбновитьКоманды(УправляемаяФорма, УправляемаяФорма.Объект, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьИзмененныеДанныеПерерасчета(ТекущиеДанные) Экспорт
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура ПослеУдаленияПерерасчета() Экспорт
НачисленияПослеУдаленияНаСервере(СотрудникиПередУдалением);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьНастроекБухучета(Форма)
Если Форма.Объект.БухучетУказываетсяРаспределением Тогда
Форма.Элементы.СтраницыБухучет.ТекущаяСтраница = Форма.Элементы.СтраницаБухучетРаспределение;
Иначе
Форма.Элементы.СтраницыБухучет.ТекущаяСтраница = Форма.Элементы.СтраницаБухучет;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьБухучетРаспределениеЗавершение(Результат, Параметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ИзменитьБухучетРаспределениеЗавершениеНаСервере(Результат);
КонецПроцедуры
&НаСервере
Процедура ИзменитьБухучетРаспределениеЗавершениеНаСервере(Результат)
ПрежнееРаспределение = Объект.НастройкиБухучета.Выгрузить();
Объект.НастройкиБухучета.Очистить();
Для каждого СтрокаРаспределения Из Результат.НастройкиБухучета Цикл
ЗаполнитьЗначенияСвойств(Объект.НастройкиБухучета.Добавить(), СтрокаРаспределения);
КонецЦикла;
НастройкаИзменилась = Не ОбщегоНазначения.КоллекцииИдентичны(ПрежнееРаспределение, Объект.НастройкиБухучета.Выгрузить(),"СтатьяФинансирования,СтатьяРасходов,СпособОтраженияЗарплатыВБухучете,ДоляРаспределения");
Если НастройкаИзменилась Тогда
Модифицированность = Истина;
КонецЕсли;
ЗаполнитьПредставлениеРаспределенияБухучета();
Если ИспользоватьСтатьиФинансирования И Объект.Начисления.Количество() > 0 И НастройкаИзменилась Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПредставлениеРаспределенияБухучета()
Элементы.ПредставлениеРаспределенияБухучета.Заголовок = ОтражениеЗарплатыВБухучетеРасширенный.ПредставлениеРаспределенияБухучетаДокумента(Объект.НастройкиБухучета);
КонецПроцедуры
&НаСервере
Процедура УстановитьНастройкиРасчета()
НастройкиРасчетаЗарплаты = РасчетЗарплатыРасширенный.НастройкиРасчетаЗарплаты();
РассчитыватьРазовыеНачисленияВЦеломЗаПериод = НастройкиРасчетаЗарплаты.РассчитыватьРазовыеНачисленияВЦеломЗаПериод;
КонецПроцедуры
&НаСервере
Процедура ДополнитьСтрокиНаСервере(ИдентификаторыСтрок, ОписаниеТаблицы, ПозицииВставки = Неопределено)
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокиРасчета(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), ОписаниеТаблицы, ИдентификаторыСтрок,,, ПозицииВставки)
КонецПроцедуры
&НаСервере
Процедура УдалитьСтрокиНачисленийПередЗаполнением(СохранятьИсправления = Истина)
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник");;
Отбор = Новый Структура("Сотрудник");
Для каждого Сотрудник Из Сотрудники Цикл
Отбор.Сотрудник = Сотрудник;
СтрокиПоСотруднику = Объект.Начисления.НайтиСтроки(Отбор);
Если Не СохранятьИсправления Тогда
Индекс = СтрокиПоСотруднику.ВГраница();
Пока Индекс > 0 Цикл
Объект.Начисления.Удалить(СтрокиПоСотруднику[Индекс]);
СтрокиПоСотруднику.Удалить(Индекс);
Индекс = Индекс - 1;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Инициализация
СтарыеЗначенияКонтролируемыхПолей = Новый Соответствие;
СотрудникиКРасчету = Новый Соответствие;
ЗакрытьПослеЗаписи = Ложь;
ВыделенныеСотрудники = Новый Соответствие;
#КонецОбласти