#Область ОписаниеПеременных
&НаКлиенте
Перем СтарыеЗначенияКонтролируемыхПолей;
&НаКлиенте
Перем АктивизированныйСотрудник;
&НаКлиенте
Перем СотрудникиПередУдалением;
&НаКлиенте
Перем СотрудникиКРасчету Экспорт;
&НаКлиенте
Перем ЗакрытьПослеЗаписи;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Ключ.Пустая() Тогда
ИспользуетсяРасчетЗарплаты = ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная");
ОграниченияНаУровнеЗаписей = Новый ФиксированнаяСтруктура("ЧтениеБезОграничений, ИзменениеБезОграничений, ИзменениеКадровыхДанных", Ложь, Ложь, Ложь);
КонецЕсли;
ПодписиДокументов.ПриСозданииНаСервере(ЭтаФорма);
УстановитьПривилегированныйРежим(Истина);
РасчетЗарплатыРасширенныйФормы.ДокументыПриСозданииНаСервере(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
РасчетЗарплатыРасширенныйФормы.ИнициализироватьМеханизмПересчетаДокументаПриРедактировании(ЭтаФорма);
УстановитьПривилегированныйРежим(Ложь);
УчетРабочегоВремениРасширенныйФормы.ДокументыОтклоненийПриСозданииНаСервере(ЭтаФорма, ОписаниеДокументаОтклоненийУчетаВремени(), ЗначенияДляЗаполнения());
Если Параметры.Ключ.Пустая() Тогда
ЗначенияДляЗаполнения = Новый Структура("МесяцРасчета, Организация, Ответственный",
"Объект.ПериодРегистрации",
"Объект.Организация",
"Объект.Ответственный");
Если ПолучитьФункциональнуюОпцию("ВыполнятьРасчетЗарплатыПоПодразделениям") Тогда
ЗначенияДляЗаполнения.Вставить("Подразделение", "Объект.Подразделение");
КонецЕсли;
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтаФорма, ЗначенияДляЗаполнения);
ЗаполнитьДанныеФормыПоОрганизации();
ЗарплатаКадрыРасширенный.УстановитьНаименованиеПервичногоДокумента(Объект);
ПриПолученииДанныхНаСервере();
ОбновитьПланируемуюДатуВыплаты();
Если ТипЗнч(Параметры.Основание) = Тип("Структура") И Параметры.Основание.Действие = "Исправить" Тогда
ПерезаполнятьСреднийЗаработок = Истина;
КонецЕсли;
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Ложь);
КонецЕсли;
ЗагрузитьНастройки();
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
Если ИспользуетсяРасчетЗарплаты И Не ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений И Объект.ПерерасчетВыполнен Тогда
ТолькоПросмотр = Истина;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "МесяцНачисленияСтрокой", "ТолькоПросмотр", Истина);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.УстановитьДоступныеХарактерыВыплаты(Элементы);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ЗарплатаКадрыРасширенный.УстановитьВидимостьКомандПечатиМногофункциональногоДокумента(ЭтаФорма);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужбаФормы");
Модуль.УстановитьПараметрыВыбораСотрудников(ЭтаФорма, "НачисленияСотрудник,НачисленияПерерасчетСотрудник");
КонецЕсли;
ОкончательныйРасчетНДФЛ = Ложь;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов");
МодульУчетОригиналовПервичныхДокументов.ПриСозданииНаСервере_ФормаДокумента(ЭтотОбъект, Элементы.Шапка);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка);
ЭДОБЗК.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка, Объект);
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивом = ОбщегоНазначения.ОбщийМодуль("ОбменСАрхивом");
МодульОбменСАрхивом.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
ИспользуетсяРасчетЗарплаты = ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная");
УчетРабочегоВремениРасширенныйФормы.ДокументыОтклоненийПриЧтенииНаСервере(ЭтаФорма, ОписаниеДокументаОтклоненийУчетаВремени());
ПриПолученииДанныхНаСервере();
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонтрольВеденияУчетаБЗК.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если Не ТолькоПросмотр И Не ТекущийОбъект.Проведен Тогда
РасчетНеобходимоВыполнить = Истина;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект);
ЭДОБЗК.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ЗакрытьПослеЗаписи = Истина;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗакрытием(ЭтотОбъект, Объект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если РегистрацияНачисленийДоступна
И ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты) Тогда
РасчетЗарплатыРасширенныйКлиент.ПередЗаписьюДокументаСоСпискомСотрудников(ЭтаФорма, "ПередЗаписьюОкончание", Отказ, ПараметрыЗаписи);
ИначеЕсли СотрудникиКРасчету.Количество() > 0 Тогда
ПересчитатьДокументНаКлиенте();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
РеквизитВДанные(ТекущийОбъект);
Если ЗаполнениеВыполнено <> Неопределено Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить("УдалитьПерерасчетыЗарплаты", Истина);
ТекущийОбъект.ДополнительныеСвойства.Вставить("СотрудникиПерерасчетаЗаработка",
ОбщегоНазначения.ВыгрузитьКолонку(ЗаполнениеВыполнено, "Ключ"));
КонецЕсли;
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Отказ);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(
ЭтотОбъект,
ТекущийОбъект,
ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ПодписиДокументов.ПослеЗаписиНаСервере(ЭтаФорма);
КонтрольВеденияУчетаБЗК.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ДанныеВРеквизиты();
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.НачисленияПерерасчет, "ПериодДействия", "ПериодДействияСтрокой");
ПерерасчетЗарплаты.РегистрацияПерерасчетовПоПредварительнымДаннымВФоне(ТекущийОбъект.Ссылка);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ЭДОБЗК.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
Оповестить("Запись_ПростойСотрудников", ПараметрыЗаписи, Объект.Ссылка);
Если ЗакрытьПослеЗаписи Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИспользуетсяРасчетЗарплаты Тогда
Если ИмяСобытия = "ИзмененыРезультатыРасчетаНДФЛ" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеНДФЛНаСервере(Параметр);
ИначеЕсли ИмяСобытия = "ИзмененыРезультатыРасчетаУдержаний" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеУдержанийНаСервере(Параметр);
ИначеЕсли ИмяСобытия = "ИзмененыКорректировкиВыплаты" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеКорректировокВыплатыНаСервере(Параметр);
ИначеЕсли ИмяСобытия = "Запись_Начисление" И Источник = Объект.Начисление Тогда
ВидРасчетаПриИзмененииНаСервере();
КонецЕсли;
ИсправлениеДокументовЗарплатаКадрыКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
КонецЕсли;
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент");
МодульУчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаДокумента(ИмяСобытия, ЭтотОбъект, Источник);
КонецЕсли;
ЭДОБЗККлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
РеквизитВДанные(ТекущийОбъект);
ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверкаПересеченияПериодовВыполнена", Истина);
Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда
Отказ = Истина;
КонецЕсли;
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
ОрганизацияПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
УстановитьОтветственныхЛиц();
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НомерПриИзменении(Элемент)
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
ЗарплатаКадрыКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
КонецПроцедуры
&НаКлиенте
Процедура ПричинаПриостановкиРаботыПриИзменении(Элемент)
Объект.ВидПростоя =
УчетРабочегоВремениРасширенныйКлиентСервер.СостояниеСотрудникаСелектора(ЭтаФорма, ПозицияСелектораОбстоятельств);
УчетРабочегоВремениРасширенныйКлиент.ОбновитьУточнениеВидаВремени(ЭтаФорма);
ПричинаПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ВидРасчетаПриИзменении(Элемент)
ВидРасчетаПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДоначислитьЗарплатуПриНеобходимостиПриИзменении(Элемент)
ДоначислитьЗарплатуПриНеобходимостиПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура УчитыватьМРОТПриОплатеПоСреднемуЗаработкуПриИзменении(Элемент)
УчитыватьМРОТПриОплатеПоСреднемуЗаработкуПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаПриИзменении(Элемент)
Если ЗначениеЗаполнено(Объект.ДатаНачала)
И ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда
Если НачалоМесяца(Объект.ДатаНачала) <> НачалоМесяца(Объект.ДатаОкончания) Тогда
Если День(Объект.ДатаОкончания) > День(Объект.ДатаНачала) Тогда
Объект.ДатаОкончания = ДобавитьМесяц(Объект.ДатаОкончания, Месяц(Объект.ДатаНачала) - Месяц(Объект.ДатаОкончания));
Иначе
Объект.ДатаОкончания = Объект.ДатаНачала;
КонецЕсли;
ИначеЕсли Объект.ДатаНачала > Объект.ДатаОкончания Тогда
Объект.ДатаОкончания = Объект.ДатаНачала;
КонецЕсли;
КонецЕсли;
ДатаНачалаПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаОкончанияПриИзменении(Элемент)
Если ЗначениеЗаполнено(Объект.ДатаНачала)
И ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда
Если НачалоМесяца(Объект.ДатаНачала) <> НачалоМесяца(Объект.ДатаОкончания) Тогда
Если День(Объект.ДатаОкончания) > День(Объект.ДатаНачала) Тогда
Объект.ДатаНачала = ДобавитьМесяц(Объект.ДатаНачала, Месяц(Объект.ДатаОкончания) - Месяц(Объект.ДатаНачала));
Иначе
Объект.ДатаНачала = Объект.ДатаОкончания;
КонецЕсли;
ИначеЕсли Объект.ДатаНачала > Объект.ДатаОкончания Тогда
Объект.ДатаНачала = Объект.ДатаОкончания;
КонецЕсли;
КонецЕсли;
ДатаОкончанияПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПростояПриИзменении(Элемент)
ДатаПростояПриИзмененииНаСервере()
КонецПроцедуры
&НаКлиенте
Процедура ЧасыПростояПриИзменении(Элемент)
ЧасыПростояПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ВнутрисменныйПростойПриИзменении(Элемент)
ВнутрисменныйПростойПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ВидВремениЗамещаемыйПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДанныеФормыПоОписанию = УчетРабочегоВремениРасширенныйКлиентСервер.ДокументыОтклоненийДанныеФормыПоОписанию(ЭтаФорма, ОписаниеДокументаОтклоненийУчетаВремени(), Истина);
ДанныеВыбора = СписокВыбораЗамещаемыхВидовВремен(ДанныеФормыПоОписанию);
КонецПроцедуры
&НаКлиенте
Процедура ВидВремениЗамещаемыйПредставлениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
УчетРабочегоВремениРасширенныйКлиент.ДокументыОтклоненийВидВремениЗамещаемыйОбработкаВыбора(ЭтотОбъект, ОписаниеДокументаОтклоненийУчетаВремени(), ВыбранноеЗначение, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", Модифицированность);
ПриИзмененииМесяцаНачисления();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("МесяцНачисленияСтрокойНачалоВыбораЗавершение", ЭтотОбъект);
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
ПриИзмененииМесяцаНачисления();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", Направление, Модифицированность);
ПодключитьОбработчикОжидания("ОбработчикОжиданияМесяцНачисленияПриИзменении", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПорядокВыплатыПриИзменении(Элемент)
ПорядокВыплатыПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПланируемаяДатаВыплатыПриИзменении(Элемент)
ПланируемаяДатаВыплатыПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПланируемаяДатаВыплатыПриИзмененииНаСервере()
ОбязательныйРасчетНДФЛ = ТребуетсяРасчетНалога(Объект.Начисление, Объект.ПланируемаяДатаВыплаты);
УстановитьВидимостьСвойстваИсчислятьНалог();
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
Если ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты) Или ОбязательныйРасчетНДФЛ Тогда
РассчитатьСотрудниковНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Новый Структура("ИмяТаблицы", "НДФЛ"), , Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПорядокВыплатыПриИзмененииНаСервере()
УстановитьЗначениеПеречислитьНалогПриИзмененииПорядкаВыплаты();
ОбновитьПланируемуюДатуВыплаты();
Если ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты) Или ОбязательныйРасчетНДФЛ Тогда
РассчитатьСотрудниковНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Новый Структура("ИмяТаблицы", "Удержания"), , Ложь);
Иначе
Объект.Удержания.Очистить();
Объект.НДФЛ.Очистить();
Объект.КорректировкиВыплаты.Очистить();
Объект.ПримененныеВычетыНаДетейИИмущественные.Очистить();
ОбновитьНачисленоУдержаноИтог(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"));
КонецЕсли;
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерерасчетВыполненПриИзменении(Элемент)
ПерерасчетВыполненПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПерерасчетВыполненПриИзмененииНаСервере()
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
КонецПроцедуры
&НаКлиенте
Процедура ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяцаПриИзменении(Элемент)
ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяцаПриИзмененииНаСервере()
КонецПроцедуры
#Область РеквизитыПервичногоДокумента
&НаКлиенте
Процедура НаименованиеПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ОткрытьФормуСпискаЗначенийСтроковогоРеквизита(Элемент,
СтандартнаяОбработка, "ПервичныйДокумент", НСтр("ru = 'Первичные документы'"), НСтр("ru = 'Первичный документ'"));
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда
Объект.НаименованиеПервичногоДокумента = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ПодборЗначенияСтроковогоРеквизита(Текст, ДанныеВыбора, СтандартнаяОбработка, "ПервичныйДокумент");
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения("ДатаПервичногоДокументаНачалоВыбораЗавершение", ЭтотОбъект);
ПоказатьВводДаты(Оповещение, ?(ЗначениеЗаполнено(Объект.ДатаПервичногоДокумента), Объект.ДатаПервичногоДокумента, Объект.Дата), НСтр("ru='Дата первичного документа'"), ЧастиДаты.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбораЗавершение(Дата, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(Дата) Тогда
Объект.ДатаПервичногоДокумента = Дата;
ДатаПервичногоДокументаПредставление = Формат(Дата,"ДФ=dd.MM.yyyy");
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаОчистка(Элемент, СтандартнаяОбработка)
Объект.ДатаПервичногоДокумента = Дата(1,1,1);
Модифицированность = Истина;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементПриИзменении(Элемент)
ПодписиДокументовКлиент.ПриИзмененииПодписывающегоЛица(ЭтаФорма, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементНажатие(Элемент)
ПодписиДокументовКлиент.РасширеннаяПодсказкаНажатие(ЭтаФорма, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент");
МодульУчетОригиналовПервичныхДокументовКлиент.ОткрытьМенюВыбораСостояния(ЭтотОбъект,Элементы["ДекорацияСостояниеОригинала"]);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисления
&НаКлиенте
Процедура НачисленияПриАктивизацииСтроки(Элемент)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "Начисления", Ложь);
КонецЕсли;
Если Элементы.Начисления.ТекущиеДанные <> Неопределено Тогда
АктивизированныйСотрудник = Элементы.Начисления.ТекущиеДанные.Сотрудник;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если НоваяСтрока Тогда
Элементы.Начисления.ТекущиеДанные.ДатаНачала = Объект.ДатаНачала;
Элементы.Начисления.ТекущиеДанные.ДатаОкончания = Объект.ДатаОкончания;
Элементы.Начисления.ТекущиеДанные.ПериодДействия = НачалоМесяца(Объект.ДатаНачала);
КонецЕсли;
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "Начисления", Элементы.Начисления.ТекущиеДанные, НоваяСтрока, Копирование);
КонецЕсли;
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийВШапкеПриНачалеРедактирования(ЭтаФорма, "Начисления", НоваяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
Объект.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецЕсли;
НачисленияПриОкончанииРедактированияНаСервере();
ОбновитьИтогиПодвала(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ОбработкаПодбораНаСервере(ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередУдалением(Элемент, Отказ)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
СотрудникиПередУдалением = РасчетЗарплатыРасширенныйКлиент.ВыделенныеСотрудникиКоллекции(Объект.Начисления, Элементы.Начисления.ВыделенныеСтроки);
Для Каждого Сотрудник Из СотрудникиПередУдалением Цикл
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
Сотрудник,
Объект.Начисление);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПослеУдаления(Элемент)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
НачисленияПослеУдаленияНаСервере(СотрудникиПередУдалением);
ОбновитьИтогиПодвала(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияСотрудникПриИзменении(Элемент)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ОбработатьИзменениеСотрудника(Элементы.Начисления.ТекущаяСтрока, АктивизированныйСотрудник);
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "Начисления", Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияКорректировкаВыплатыПриИзменении(Элемент)
ТекущиеДанные = Элементы.Начисления.ТекущиеДанные;
Если Не ЗначениеЗаполнено(ТекущиеДанные.Сотрудник) Тогда
Возврат;
КонецЕсли;
ДанныеСтроки = Новый Структура("Сотрудник, КорректировкаВыплаты");
ЗаполнитьЗначенияСвойств(ДанныеСтроки, ТекущиеДанные);
НачисленияКорректировкаВыплатыПриИзмененииНаСервере(ДанныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияОтменитьИсправление(Команда)
ПерезаполнятьСреднийЗаработок = Истина;
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияОтменитьВсеИсправления(Команда)
ПерезаполнятьСреднийЗаработок = Истина;
РасчетЗарплатыКлиент.ОтменитьВсеИсправления(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПересчитатьСотрудника(Команда)
РасчетЗарплатыРасширенныйКлиент.ПересчитатьСотрудника(ЭтаФорма, "Начисления", "Сотрудник", Тип("СправочникСсылка.Сотрудники"));
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
ОткрытьСреднийЗаработок(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
ПодробнееОРасчетеНДФЛ(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
РедактированиеКорректировокВыплаты(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если СтрНайти(Поле.Имя, "НачисленияРезультатНачисленийДолейРКСН") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисленияПерерасчет
&НаКлиенте
Процедура НачисленияПерерасчетВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияПерерасчетВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
РасчетЗарплатыРасширенныйКлиент.ПередНачаломДобавленияСтрокиПерерасчета(Элемент, Отказ, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередУдалением(Элемент, Отказ)
РасчетЗарплатыРасширенныйКлиент.ПередУдалениемСтрокиПерерасчета(ЭтотОбъект, "НачисленияПерерасчет", Элемент, Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
ДобавитьИзмененныеДанныеПерерасчета(Элемент.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПослеУдаления(Элемент)
ПослеУдаленияПерерасчета();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "НачисленияПерерасчет", Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "НачисленияПерерасчет", Элементы.НачисленияПерерасчет.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ДобавитьИзмененныеДанныеПерерасчета(Элемент.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
НачисленияПерерасчетПриОкончанииРедактированияНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетНачислениеПриИзменении(Элемент)
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтаФорма, ОписаниеТаблицыВидовРасчета, 2);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПерерасчетОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПерерасчетОтменитьВсеИсправления(Команда)
РасчетЗарплатыКлиент.ОтменитьВсеИсправления(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПерерасчетПересчитатьСотрудника(Команда)
РасчетЗарплатыРасширенныйКлиент.ПересчитатьСотрудника(ЭтаФорма, "НачисленияПерерасчет", "Сотрудник", Тип("СправочникСсылка.Сотрудники"));
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисленияДолейРКСН
&НаКлиенте
Процедура НачисленияДолейРКСНВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыНачисленийДолейРКСН(), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияДолейРКСНВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтаФорма, ОписаниеТаблицыНачисленийДолейРКСН(), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДолейРКСНВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыНачисленийДолейРКСН(), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДолейРКСНПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "НачисленияДолейРКСН", Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДолейРКСНПередУдалением(Элемент, Отказ)
Если Не Отказ И Элементы.НачисленияДолейРКСН.ТекущиеДанные <> Неопределено Тогда
СотрудникиПередУдалением = РасчетЗарплатыРасширенныйКлиент.ВыделенныеСотрудникиКоллекции(Объект.НачисленияДолейРКСН, Элементы.НачисленияДолейРКСН.ВыделенныеСтроки);
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДолейРКСНПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ДокументыРазовыхНачисленийКлиент.СтрокаЗависимыхНачисленийПриНачалеРедактирования(ЭтаФорма, "НачисленияДолейРКСН", Элементы.НачисленияДолейРКСН.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДолейРКСНПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДолейРКСНПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыНачисленийДолейРКСН());
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДолейРКСНПослеУдаления(Элемент)
НачисленияПослеУдаленияНаСервере(СотрудникиПередУдалением);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДолейРКСННачислениеПриИзменении(Элемент)
ОписаниеТаблицы = ОписаниеТаблицыНачисленийДолейРКСН();
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтаФорма, ОписаниеТаблицы, 2);
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицы, Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияДолейРКСНОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыНачисленийДолейРКСН());
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграцииС1САрхивом(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивомКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСАрхивомКлиент");
МодульОбменСАрхивомКлиент.ВыполнитьПодключаемуюКоманду(Команда, ЭтотОбъект, Объект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуИнтеграцииС1САрхивомНаСервере(Знач Параметры) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивом = ОбщегоНазначения.ОбщийМодуль("ОбменСАрхивом");
МодульОбменСАрхивом.ВыполнитьПодключаемуюКоманду(ЭтотОбъект, Параметры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ИнтеграцияС1САрхивом_Нажатие(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивомКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСАрхивомКлиент");
МодульОбменСАрхивомКлиент.Нажатие(Элемент, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
#Область ОбработчикиСобытийПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Команда, Объект)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Контекст, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийСледующемуНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ОбновитьПодключаемыеКоманды(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Исправить(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.Исправить(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Сторнировать(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.Сторнировать(ЭтотОбъект, "Начисление");
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправлению(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправлению(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправленному(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправленному(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКСторно(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКСторно(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПерерасчетРазрешеноРедактироватьСторно(Команда)
РасчетЗарплатыРасширенныйКлиент.НастроитьРедактированиеСторно(ЭтотОбъект, Команда.Имя);
КонецПроцедуры
&НаКлиенте
Процедура ПодборСотрудников(Команда)
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
ТекстСообщения = НСтр("ru = 'Подбор возможен только при указанной организации'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , "Объект.Организация");
Возврат;
КонецЕсли;
ПараметрыОткрытия = Неопределено;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("ГосударственнаяСлужбаКлиент");
Модуль.УточнитьПараметрыОткрытияФормыВыбораСотрудников(ПараметрыОткрытия);
КонецЕсли;
КадровыйУчетРасширенныйКлиент.ДобавитьПараметрыОтбораПоФункциональнойОпцииВыполнятьРасчетЗарплатыПоПодразделениям(
ЭтаФорма, ПараметрыОткрытия);
КадровыйУчетКлиент.ВыбратьСотрудниковРаботающихВПериодеПоПараметрамОткрытияФормыСписка(
Элементы.Начисления,
Объект.Организация,
Объект.Подразделение,
Объект.ПериодРегистрации,
КонецМесяца(Объект.ПериодРегистрации),
,
АдресСпискаПодобранныхСотрудников(),
ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура ПерерасчетПодробно(Команда)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйВызовСервера.СохранитьНастройкуРежимаОтображенияПодробно(Объект.Ссылка, Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПодробно(Команда)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйВызовСервера.СохранитьНастройкуРежимаОтображенияПодробно(Объект.Ссылка, Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура ПодробнееОРасчетеНДФЛ(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя <> "НачисленияНДФЛ" Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Сотрудник = Элементы.Начисления.ТекущиеДанные.Сотрудник;
УчетНДФЛКлиент.ОткрытьФормуПодробнееОРасчетеНДФЛ(Объект.Организация, ЭтаФорма, Объект.ПериодРегистрации, Сотрудник,
Объект.ПланируемаяДатаВыплаты);
КонецПроцедуры
&НаСервере
Функция НДФЛПодробнееНаСервере(ФизическиеЛица) Экспорт
Если ТипЗнч(ФизическиеЛица) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическиеЛица);
Иначе
СписокФизическихЛиц = ФизическиеЛица;
КонецЕсли;
ДокументОбъект = РеквизитФормыВЗначение("Объект");
РеквизитВДанные(ДокументОбъект);
Возврат УчетНДФЛФормы.РегистрНалоговогоУчетаПоНДФЛ(ДокументОбъект, Модифицированность, СписокФизическихЛиц, Объект.ПериодРегистрации);
КонецФункции
&НаКлиенте
Процедура ПодробнееОРасчетеУдержаний(Команда)
РасчетЗарплатыРасширенныйКлиент.ОткрытьФормуПодробнееОРасчетеУдержаний(Объект, "ПростойСотрудников", ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьДокумент(Команда)
ПересчитатьДокументНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
ЗакрытьПослеЗаписи = Истина;
ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);
ЗаписатьНаКлиенте(Истина, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура КомандаПровести(Команда)
ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);
ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура КомандаЗаписать(Команда)
ПараметрыЗаписи = Новый Структура("РежимЗаписи", ?(Объект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(
Команда,
ЭтотОбъект,
Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_РазблокироватьФормуОбъекта(Команда)
БлокировкаИзмененияОбъектовКлиент.РазблокироватьФормуОбъекта(ЭтотОбъект, Объект.Ссылка);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОткрытьОтчетПоПроблемам(ЭлементИлиКоманда, НавигационнаяСсылка, СтандартнаяОбработка)
КонтрольВеденияУчетаКлиентБЗК.ОткрытьОтчетПоПроблемамОбъекта(ЭтотОбъект, Объект.Ссылка, СтандартнаяОбработка);
КонецПроцедуры
#Область ИсправлениеДокументов
&НаКлиенте
Процедура УстановитьПоляИсправленияНаКлиенте() Экспорт
УстановитьПоляИсправления(ЭтаФорма);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПоляИсправления(Форма)
ИсправлениеДокументовЗарплатаКадрыКлиентСервер.УстановитьПоляИсправления(Форма);
КонецПроцедуры
#КонецОбласти
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьИтогиПодвала(Форма)
Форма.ИтогНДФЛ = Форма.Объект.Начисления.Итог("НДФЛ");
Форма.ИтогУдержания = Форма.Объект.Начисления.Итог("Удержания");
Форма.ИтогКВыплате = Форма.Объект.Начисления.Итог("КВыплате");
Для Н =1 По Форма.КоличествоКолонокИтоговНачисленийДолейРКСН Цикл
Форма["ИтогРезультатНачисленийДолейРКСН" + Формат(Н, "ЧГ=")] = Форма.Объект.Начисления.Итог("РезультатНачисленийДолейРКСН" + Формат(Н, "ЧГ="));
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура РаспределитьЗависимыеРезультаты(ПараметрыДляРаспределения) Экспорт
Если ПараметрыДляРаспределения.РаспределятьЗависимыеТаблицы Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере(ПараметрыДляРаспределения);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СтруктураОписанияТаблицДляРаспределенияРезультата(Форма)
ОписанияТаблиц = Новый Структура;
ОписанияТаблиц.Вставить("Начисления", ОписаниеТаблицыНачислений(Форма.РегистрацияНачисленийДоступна));
ОписанияТаблиц.Вставить("НачисленияПерерасчет", ОписаниеТаблицыПерерасчетов(Форма.РегистрацияНачисленийДоступна));
ОписанияТаблиц.Вставить("Удержания", ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Вставить("НДФЛ", ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Вставить("КорректировкиВыплаты", ОписаниеТаблицыКорректировкиВыплаты());
ОписанияТаблиц.Вставить("НачисленияДолейРКСН", ОписаниеТаблицыНачисленийДолейРКСН());
Возврат ОписанияТаблиц;
КонецФункции
&НаСервереБезКонтекста
Функция ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений)
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "Сотрудник";
ОписаниеТаблицы.ИмяРеквизитаВидРасчета = "Начисление";
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "НачисленияРезультат";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.УправлятьОтображениемПолейОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ИмяРеквизитаДатаНачала = Неопределено;
ОписаниеТаблицы.ИмяРеквизитаДатаОкончания = Неопределено;
ОписаниеТаблицы.СодержитПолеКодВычета = Истина;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НачисленияПерерасчет,Удержания,НДФЛ,КорректировкиВыплаты";
Возврат ОписаниеТаблицы;
КонецФункции
&НаСервереБезКонтекста
Функция ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений)
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияПерерасчет";
ОписаниеТаблицы.ПутьКДанным = "Объект.НачисленияПерерасчет";
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "НачисленияПерерасчетРезультат";
ОписаниеТаблицы.НомерТаблицы = 1;
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "Сотрудник";
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ОтображатьПоляНормыВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ЭтоПерерасчеты = Истина;
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
ОписаниеТаблицы.ИмяРеквизитаФиксСторно = "ФиксСторно";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияПерерасчетРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НачисленияПерерасчет,Удержания,НДФЛ,КорректировкиВыплаты";
ОписаниеТаблицы.СодержитПолеМестоПолученияДохода = Истина;
ОписаниеТаблицы.СодержитРегистраторРазовогоНачисления = Истина;
ОписаниеТаблицы.СодержитПолеИсходныйДокумент = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыПерерасчетовНулевыеСторно()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияПерерасчетНулевыеСторно";
ОписаниеТаблицы.ПутьКДанным = "Объект.НачисленияПерерасчетНулевыеСторно";
ОписаниеТаблицы.НомерТаблицы = 1.1;
ОписаниеТаблицы.ЭтоПерерасчеты = Истина;
ОписаниеТаблицы.ИмяРеквизитаФиксСторно = "ФиксСторно";
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НачисленияПерерасчет";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыУдержаний()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ИмяРеквизитаВидРасчета = "Удержание";
ОписаниеТаблицы.ИмяТаблицы = "Удержания";
ОписаниеТаблицы.НомерТаблицы = 3;
ОписаниеТаблицы.СодержитПолеВидРасчета = Истина;
ОписаниеТаблицы.СодержитПолеСотрудник = Ложь;
ОписаниеТаблицы.ПутьКДанным = "Объект.Удержания";
ОписаниеТаблицы.ПутьКДаннымПоказателей = "Объект.Показатели";
ОписаниеТаблицы.ИмяРеквизитаДатаНачала = "ДатаНачала";
ОписаниеТаблицы.ИмяРеквизитаДатаОкончания = "ДатаОкончания";
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНДФЛ()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НДФЛ";
ОписаниеТаблицы.ПутьКДанным = "Объект.НДФЛ";
ОписаниеТаблицы.ИмяПоляРезультат = "Налог";
ОписаниеТаблицы.НомерТаблицы = 2;
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтрокиНДФЛ";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыКорректировкиВыплаты()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыКорректировкиВыплаты();
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписанияТаблицДляРаспределенияРезультата(ПравоНаЧтениеДокументаБезОграничений)
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Добавить(ОписаниеТаблицыКорректировкиВыплаты());
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачисленийДолейРКСН());
Возврат ОписанияТаблиц;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНачисленийДолейРКСН()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияДолейРКСН";
ОписаниеТаблицы.ПутьКДанным = "Объект.НачисленияДолейРКСН";
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "НачисленияДолейРКСНРезультат";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "Сотрудник";
ОписаниеТаблицы.НомерТаблицы = 4;
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = Истина;
ОписаниеТаблицы.ОтображатьПоляНормыВремени = Истина;
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияДолейРКСНРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НачисленияПерерасчет,Удержания,НДФЛ,КорректировкиВыплаты";
ОписаниеТаблицы.СодержитПолеМестоПолученияДохода = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиенте
Процедура ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле)
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") = 0 Тогда
Возврат;
КонецЕсли;
ЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуРедактированияРезультатовРаспределенияПоИсточникамФинансирования(ЭтаФорма, ОписаниеТаблицы, ВыбраннаяСтрока, Объект.ПериодРегистрации);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция МассивОписанийТаблицФормы(ПравоНаЧтениеДокументаБезОграничений)
МассивОписанийТаблицФормы = Новый Структура;
МассивОписанийТаблицФормы.Вставить("НачисленияПерерасчет", ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений));
Возврат МассивОписанийТаблицФормы
КонецФункции
&НаСервере
Процедура УстановитьВидимостьПерерасчетов()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ПерерасчетыДоступны = ИсправлениеДокументовРасчетЗарплатыКлиентСервер.ПерерасчетыДоступны(ЭтаФорма,,, ВидРасчетаЯвляетсяВытесняющим);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияПерерасчетСтраница", "Видимость", ПерерасчетыДоступны);
ИсправлениеДокументовРасчетЗарплатыКлиентСервер.УстановитьДоначислениеПриИсправлении(ЭтаФорма, ПерерасчетыДоступны);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьНачисленийДолейРКСН(Форма)
Форма.ЕстьНачисленияДолейРКСН = Форма.Объект.НачисленияДолейРКСН.Количество() > 0;
Форма.Элементы.НачисленияДолейРКСНСтраница.Видимость = Форма.ЕстьНачисленияДолейРКСН;
УстановитьСвойстваКолонокИтоговыхНачислений(Форма);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьРеквизитовМежрасчетнойВыплаты()
Если НЕ ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ВыплатаВМежрасчетныйПериод = ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты);
ВидимостьРеквизитовВыплаты = ВыплатаВМежрасчетныйПериод И ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений;
ВидимостьЗависимыхРеквизитовНДФЛ = (ВыплатаВМежрасчетныйПериод Или ОбязательныйРасчетНДФЛ) И ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений;
Элементы.НачисленияНДФЛ.Видимость = ВидимостьЗависимыхРеквизитовНДФЛ;
Элементы.НачисленияУдержания.Видимость = ВидимостьРеквизитовВыплаты;
Элементы.НачисленияКВыплате.Видимость = ВидимостьРеквизитовВыплаты;
Элементы.НачисленияКорректировкаВыплаты.Видимость = ВидимостьЗависимыхРеквизитовНДФЛ;
Элементы.ПодробнееОРасчетеУдержаний.Видимость = ВидимостьРеквизитовВыплаты;
КонецПроцедуры
&НаСервере
Процедура ОбновитьПланируемуюДатуВыплаты()
РасчетЗарплатыРасширенный.УстановитьПланируемуюДатуВыплаты(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект));
ОбязательныйРасчетНДФЛ = ТребуетсяРасчетНалога(Объект.Начисление, Объект.ПланируемаяДатаВыплаты);
УстановитьВидимостьСвойстваИсчислятьНалог();
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЭтоМежрасчетнаяВыплата(ПорядокВыплаты)
Возврат РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(ПорядокВыплаты);
КонецФункции
&НаСервереБезКонтекста
Функция ТребуетсяРасчетНалога(ВидРасчета, ПланируемаяДатаВыплаты)
Возврат УчетНДФЛ.ДоходыУчитываютсяТолькоПоДатеВыплаты(ПланируемаяДатаВыплаты) Или УчетНДФЛРасширенный.ДоходыВУчетеНДФЛРегистрируютсяПоДатеВыплаты(ВидРасчета);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеДокумента(Форма)
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеРасчетногоДокумента();
Описание.МесяцНачисленияИмя = "ПериодРегистрации";
Описание.ИменаПолейНачисления = "Начисление";
Описание.ВидНачисленияВШапке = Истина;
Описание.ВидНачисленияИмя = "Начисление";
Описание.НачисленияИмя = "Начисления";
Описание.НачисленияКоманднаяПанельИмя = "КомандыНачисления";
Описание.НачисленияПерерасчетИмя= "НачисленияПерерасчет";
Описание.НачисленияПерерасчетНулевыеСторноИмя = "НачисленияПерерасчетНулевыеСторно";
Описание.УдержанияИмя = "Удержания";
Описание.НДФЛИмя = "НДФЛ";
Описание.КорректировкиВыплатыИмя = "КорректировкиВыплаты";
Описание.ПримененныеВычетыИмя = "ПримененныеВычетыНаДетейИИмущественные";
Описание.НачисленияДолейРКСНИмя = "НачисленияДолейРКСН";
Описание.ЗависимыеНачисленияИмя = "НачисленияДолейРКСН";
Описание.ПериодДействияВШапке = Истина;
Если Форма.Объект.ВнутрисменныйПростой Тогда
Описание.ДатаНачалаИмя = "ДатаПростоя";
Описание.ДатаОкончанияИмя = "ДатаПростоя";
Иначе
Описание.ДатаНачалаИмя = "ДатаНачала";
Описание.ДатаОкончанияИмя = "ДатаОкончания";
КонецЕсли;
Описание.РегистрацияНачисленийДоступна = Форма.ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Месяц", "МесяцНачисленияСтрокой"));
Если Форма.Объект.ВнутрисменныйПростой Тогда
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Дата простоя", "Объект.ДатаПростоя"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Количество часов простоя", "Объект.ЧасыПростоя"));
Иначе
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Дата начала простоя", "Объект.ДатаНачала"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Дата окончания простоя", "Объект.ДатаОкончания"));
КонецЕсли;
Описание.ОписанияТаблицДляРаспределенияРезультата = СтруктураОписанияТаблицДляРаспределенияРезультата(Форма);
Возврат Описание;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеДокументаОтклоненийУчетаВремени()
ОписаниеДокумента = УчетРабочегоВремениРасширенныйКлиентСервер.ОписаниеДокументаОтклонения();
ОписаниеДокумента.СотрудникПутьКДанным = "Объект.Начисления.Сотрудник";
ОписаниеДокумента.ЗамещаемыйВидВремениПутьКДанным = "Объект.ВидВремениЗамещаемый";
ОписаниеДокумента.ПредставлениеВидаВремениПутьКДанным = "ВидВремениЗамещаемыйПредставление";
ОписаниеДокумента.ПериодРегистрацииПутьКДанным = "Объект.ПериодРегистрации";
ОписаниеДокумента.ДатаНачалаСобытияПутьКДанным = "Объект.ДатаНачала";
ОписаниеДокумента.ДатаНачалаПериодаОтклоненияПутьКДанным = "Объект.ДатаНачала";
ОписаниеДокумента.ДатаОкончанияПериодаОтклоненияПутьКДанным = "Объект.ДатаОкончания";
ОписаниеДокумента.ВидРасчетаПутьКДанным = "Объект.Начисление";
ОписаниеДокумента.ДатаВнутрисменногоОтклоненияПутьКДанным = "Объект.ДатаПростоя";
ОписаниеДокумента.ПризнакЧасовоеОтклонениеПутьКДанным = "Объект.ВнутрисменныйПростой";
ОписаниеДокумента.ИмяЭлементаЗамещаемыйВидВремени = "ВидВремениЗамещаемыйПредставление";
ОписаниеДокумента.ИмяЭлементаВидРасчета = "Начисление";
ОписаниеДокумента.СотрудникВШапкеДокумента = Ложь;
ОписаниеДокумента.ЗаполнитьПериодДокументаПоУмолчанию = Ложь;
ОписаниеДокумента.СменаПутьКДанным = "Объект.Смена";
ОписаниеДокумента.ПереходящаяЧастьПредыдущейСменыПутьКДанным = "Объект.ПереходящаяЧастьПредыдущейСмены";
ОписаниеДокумента.ПереходящаяЧастьТекущейСменыПутьКДанным = "Объект.ПереходящаяЧастьТекущейСмены";
Возврат ОписаниеДокумента;
КонецФункции
&НаСервере
Процедура ДополнитьФорму()
РасчетЗарплатыРасширенныйФормы.ДокументыНачисленийДополнитьФорму(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийВШапкеДополнитьФорму(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), "КомандыНачисления", РегистрацияНачисленийДоступна);
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), "Начисления", , РегистрацияНачисленийДоступна);
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыПерерасчетовНулевыеСторно(), "Начисления", , РегистрацияНачисленийДоступна, , Ложь);
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыНачисленийДолейРКСН(), "Начисления");
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыУдержаний(), "Удержания", , Ложь);
РасчетЗарплатыРасширенныйФормы.ПорядокВыплатыЗарплатыДополнитьФорму(ЭтаФорма);
НастроитьОтображениеРеквизитовОтработанногоВремени();
ЗарплатаКадрыРасширенный.МногофункциональныеДокументыДобавитьЭлементыФормы(ЭтаФорма, НСтр("ru='Расчет утвердил'"), , "ПерерасчетВыполнен", "Рассчитал");
ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыЗаполнитьПредупреждения(ЭтаФорма);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
РасчетЗарплатыРасширенныйФормы.ДокументыНачисленийДополнитьФормуРезультатыРаспределения(ЭтаФорма, ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДополнитьФорму(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда(), РегистрацияНачисленийДоступна);
ИсправлениеДокументовЗарплатаКадры.ГруппаИсправлениеДополнитьФорму(ЭтаФорма);
УдержатьНалогПриВыплатеЗарплатыДанныеВРеквизиты();
КонецПроцедуры
&НаСервере
Процедура ДанныеВРеквизиты()
Если ИспользуетсяРасчетЗарплаты Тогда
УстановитьПривилегированныйРежим(Истина);
ЗарплатаКадрыРасширенный.ВводНачисленийВШапкеДанныеВРеквизит(Объект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), 2);
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачисленийДолейРКСН());
ЗарплатаКадрыРасширенный.ВводНачисленийДанныеВРеквизит(ЭтаФорма, ОписанияТаблиц, 2);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗаполнитьНалогиУдержания();
ОписанияТаблицДляРаспределения = ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна);
ОписанияТаблицДляРаспределения.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаДанныеВРеквизит(ЭтаФорма, ОписанияТаблицДляРаспределения);
ОтражениеЗарплатыВБухучетеРасширенный.ОбъектПриЧтенииНаСервереПредставлениеРаспределения(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
ОписанияТаблицДляРаспределения = ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда();
ОписанияТаблицДляРаспределения.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДанныеВРеквизит(ЭтаФорма, Объект.Организация, ОписанияТаблицДляРаспределения);
КонецЕсли;
ИсправлениеДокументовЗарплатаКадры.ПрочитатьРеквизитыИсправления(ЭтаФорма);
УстановитьПоляИсправления(ЭтаФорма);
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура РеквизитВДанные(ТекущийОбъект)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ТекущийОбъект.Показатели.Очистить();
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачисленийДолейРКСН());
ЗарплатаКадрыРасширенный.ВводНачисленийРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблиц, 2);
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
УдержатьНалогПриВыплатеЗарплатыРеквизитыВДанные(ТекущийОбъект);
ТекущийОбъект.ПозицияСелектора = ПозицияСелектораОбстоятельств;
КонецПроцедуры
&НаСервере
Процедура НастроитьОтображениеРеквизитовОтработанногоВремени()
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная") Тогда
Возврат;
КонецЕсли;
ОтображатьПоляУчетаВремени = Ложь;
Если РегистрацияНачисленийДоступна И ЗначениеЗаполнено(Объект.Начисление) Тогда
МассивПоказателейУчетаВремени = ЗарплатаКадрыРасширенный.МассивПоказателейВремени();
ДанныеОВидеРасчета = ЗарплатаКадрыРасширенныйПовтИсп.ПолучитьИнформациюОВидеРасчета(Объект.Начисление);
Для Каждого ДанныеПоказателя Из ДанныеОВидеРасчета.Показатели Цикл
ОтображатьПоляУчетаВремени = (МассивПоказателейУчетаВремени.Найти(ДанныеПоказателя.Показатель) <> Неопределено);
Если ОтображатьПоляУчетаВремени Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, ОтображатьПоляУчетаВремени, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьКонтролируемыеПоля()Экспорт
НачисленияФиксРасчет = Новый Массив;
НачисленияФиксРасчет.Добавить("Результат");
НачисленияПерерасчетФиксРасчет = Новый Массив;
НачисленияПерерасчетФиксРасчет.Добавить("Результат");
НачисленияПерерасчетФиксРасчет.Добавить("ОтработаноДней");
НачисленияПерерасчетФиксРасчет.Добавить("ОтработаноЧасов");
НачисленияПерерасчетФиксРасчет.Добавить("НормаДней");
НачисленияПерерасчетФиксРасчет.Добавить("НормаЧасов");
НачисленияФиксРасчетВремени = Новый Массив;
НачисленияФиксРасчетВремени.Добавить("ОплаченоДней");
НачисленияФиксРасчетВремени.Добавить("ОплаченоЧасов");
НачисленияФиксРасчетВремени.Добавить("НормаДней");
НачисленияФиксРасчетВремени.Добавить("НормаЧасов");
НачисленияФиксСтрока = Новый Массив;
НачисленияПерерасчетФиксСтрока = Новый Массив;
НачисленияПерерасчетФиксСтрока.Добавить("Сотрудник");
НачисленияПерерасчетФиксСтрока.Добавить("Подразделение");
НачисленияПерерасчетФиксСтрока.Добавить("Начисление");
НачисленияПерерасчетФиксСтрока.Добавить("ДатаНачала");
НачисленияПерерасчетФиксСтрока.Добавить("ДатаОкончания");
НачисленияФиксЗаполнение = Новый Массив;
НачисленияФиксЗаполнение.Добавить("МестоПолученияДохода");
НачисленияПоля = Новый Структура;
НачисленияПоля.Вставить("ФиксРасчет", НачисленияФиксРасчет);
НачисленияПоля.Вставить("ФиксЗаполнение", НачисленияФиксЗаполнение);
НачисленияПоля.Вставить("ФиксСтрока", НачисленияФиксСтрока);
НачисленияПоля.Вставить("ФиксРасчетВремени", НачисленияФиксРасчетВремени);
НачисленияПерерасчетПоля = Новый Структура;
НачисленияПерерасчетПоля.Вставить("ФиксРасчет", НачисленияПерерасчетФиксРасчет);
НачисленияПерерасчетПоля.Вставить("ФиксЗаполнение", НачисленияФиксЗаполнение);
НачисленияПерерасчетПоля.Вставить("ФиксСтрока", НачисленияПерерасчетФиксСтрока);
НачисленияПерерасчетПоля.Вставить("ФиксРасчетВремени", НачисленияФиксРасчетВремени);
НачисленияДолейРКСНФиксСтрока = Новый Массив;
НачисленияДолейРКСНФиксСтрока.Добавить("Сотрудник");
НачисленияДолейРКСНФиксРасчет = Новый Массив;
НачисленияДолейРКСНФиксРасчет.Добавить("Результат");
НачисленияДолейРКСНФиксЗаполнение = Новый Массив;
НачисленияДолейРКСНФиксЗаполнение.Добавить("МестоПолученияДохода");
НачисленияДолейРКСНПоля = Новый Структура;
НачисленияДолейРКСНПоля.Вставить("ФиксРасчет", НачисленияДолейРКСНФиксРасчет);
НачисленияДолейРКСНПоля.Вставить("ФиксСтрока", НачисленияДолейРКСНФиксСтрока);
НачисленияДолейРКСНПоля.Вставить("ФиксЗаполнение", НачисленияДолейРКСНФиксЗаполнение);
Возврат Новый Структура("Начисления, НачисленияПерерасчет, НДФЛ, НачисленияДолейРКСН",
НачисленияПоля,
НачисленияПерерасчетПоля,
УчетНДФЛРасширенный.КонтролируемыеПоляДляФиксацииРезультатов(),
НачисленияДолейРКСНПоля);
КонецФункции
&НаКлиенте
Функция ПолучитьСтарыеЗначенияКонтролируемыхПолей()Экспорт
Возврат СтарыеЗначенияКонтролируемыхПолей;
КонецФункции
&НаСервере
Процедура ПриПолученииДанныхНаСервере()
ЗаполнениеВыполнено = Неопределено;
РаботаВБюджетномУчреждении = ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении");
ИспользоватьСтатьиФинансирования = ПолучитьФункциональнуюОпцию("ИспользоватьСтатьиФинансированияЗарплатаРасширенный");
ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты = УчетНДФЛРасширенный.ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты(Объект.Организация, Объект.ПериодРегистрации);
УстановитьДоступностьРегистрацииНачислений();
УстановитьПривилегированныйРежим(Истина);
ОбязательныйРасчетНДФЛ = ТребуетсяРасчетНалога(Объект.Начисление, Объект.ПланируемаяДатаВыплаты);
ДополнитьФорму();
Если ИспользуетсяРасчетЗарплаты Тогда
ВидРасчетаЯвляетсяВытесняющим = ИсправлениеДокументовРасчетЗарплаты.ВидРасчетаЯвляетсяВытесняющим(Объект.Начисление);
КонецЕсли;
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.НачисленияПерерасчет, "ПериодДействия", "ПериодДействияСтрокой");
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.НачисленияДолейРКСН, "ПериодДействия", "ПериодДействияСтрокой");
УчетРабочегоВремениРасширенныйФормы.ДобавитьУточнениеВидаВремени(ЭтаФорма, ВариантыСелектора(),
Объект.ВидПростоя,
Объект.Начисление);
ЗаполнитьВидРасчета(Истина);
УстановитьПоказательСреднийЗаработок();
УстановитьИнфоНадписьВидПростоя();
УстановитьНастройкиОтображенияЭлементовФормы();
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
УстановитьВидимостьРезультата();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты();
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьСвойстваИсчислятьНалог();
УстановитьВидимостьНачисленийДолейРКСН(ЭтаФорма);
ДанныеВРеквизиты();
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьРасчетныхПолей();
УстановитьДоступностьКорректировкиВыплаты();
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ(Ложь);
УстановитьИспользованиеСреднечасовогоЗаработка();
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеНДФЛНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
ОтборСтрокФизическихЛиц = Новый Структура("ФизическоеЛицо", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Параметр.ФизическоеЛицо));
РасчетЗарплатыРасширенный.ЗаменитьСтрокиНДФЛ(Объект.НДФЛ, Параметр.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, Параметр.ПримененныеВычетыНаДетейИИмущественные, ПолучитьКонтролируемыеПоля(), ОписаниеДокумента(ЭтаФорма), ОтборСтрокФизическихЛиц, Ложь);
ИзмененныеДанные.Загрузить(Параметр.ИзмененныеДанные);
Если ИзмененныеДанные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ОписаниеТаблицы = ОписаниеТаблицыНДФЛ();
РассчитатьВсеНаСервере(ОписаниеТаблицы);
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеУдержанийНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
Объект.Удержания.Загрузить(Параметр.Удержания.Выгрузить());
ИзмененныеДанные.Загрузить(Параметр.ИзмененныеДанные.Выгрузить());
Если ИзмененныеДанные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ОписаниеТаблицы = ОписаниеТаблицыУдержаний();
РассчитатьВсеНаСервере(ОписаниеТаблицы);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНалогиУдержания()
ФизическиеЛицаСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(
ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник", Истина), "ФизическоеЛицо");
СотрудникиФизическогоЛица = СотрудникиФизическихЛиц(ОбщегоНазначения.ВыгрузитьКолонку(ФизическиеЛицаСотрудников, "Значение"));
Для Каждого ДанныеСтроки Из Объект.Начисления Цикл
ЗаполнитьНалогиУдержанияСотрудника(ДанныеСтроки, ФизическиеЛицаСотрудников[ДанныеСтроки.Сотрудник], СотрудникиФизическогоЛица);
КонецЦикла;
ОбновитьИтогиПодвала(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНалогиУдержанияСотрудника(ДанныеСтроки, ФизическоеЛицо = Неопределено, СотрудникиФизическогоЛица = Неопределено)
УстановитьПривилегированныйРежим(Истина);
Если ФизическоеЛицо = Неопределено Тогда
ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеСтроки.Сотрудник, "ФизическоеЛицо");
КонецЕсли;
ОтборСтрок = Новый Структура("ФизическоеЛицо", ФизическоеЛицо);
ДанныеСтроки.НДФЛ = 0;
ДанныеСтроки.ЗачтеноАвансовыхПлатежей = 0;
СтрокиНДФЛ = Объект.НДФЛ.НайтиСтроки(ОтборСтрок);
Для Каждого СтрокаНДФЛ Из СтрокиНДФЛ Цикл
ДанныеСтроки.НДФЛ = ДанныеСтроки.НДФЛ + УчетНДФЛ.ИтоговаяСуммаНДФЛпоСтроке(СтрокаНДФЛ, "Налог");
ДанныеСтроки.ЗачтеноАвансовыхПлатежей = ДанныеСтроки.ЗачтеноАвансовыхПлатежей + УчетНДФЛ.ИтоговаяСуммаНДФЛпоСтроке(СтрокаНДФЛ, "ЗачтеноАвансовыхПлатежей");
КонецЦикла;
ДанныеСтроки.Удержания = 0;
СтрокиУдержаний = Объект.Удержания.НайтиСтроки(ОтборСтрок);
Для Каждого СтрокаУдержания Из СтрокиУдержаний Цикл
ДанныеСтроки.Удержания = ДанныеСтроки.Удержания + СтрокаУдержания.Результат;
КонецЦикла;
ДанныеСтроки.КорректировкаВыплаты = 0;
СтрокиКорректировокВыплаты = Объект.КорректировкиВыплаты.НайтиСтроки(ОтборСтрок);
Для Каждого СтрокаКорректировкиВыплаты Из СтрокиКорректировокВыплаты Цикл
ДанныеСтроки.КорректировкаВыплаты = ДанныеСтроки.КорректировкаВыплаты + СтрокаКорректировкиВыплаты.КорректировкаВыплаты;
КонецЦикла;
КоэффициентРаспределения = 1;
НачисленийВсего = 0;
Если СотрудникиФизическогоЛица = Неопределено Тогда
СотрудникиФизическогоЛица = СотрудникиФизическихЛиц(ФизическоеЛицо);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИтогиНачисленийДолейРКСН(ЭтотОбъект, ДанныеСтроки.Сотрудник);
СтрокиСотрудниковФизическогоЛица = СотрудникиФизическогоЛица.НайтиСтроки(Новый Структура("ФизическоеЛицо", ФизическоеЛицо));
Для каждого СтрокаССотрудником Из СтрокиСотрудниковФизическогоЛица Цикл
СтрокиНачислений = Объект.Начисления.НайтиСтроки(Новый Структура("Сотрудник", СтрокаССотрудником.Сотрудник));
Для Каждого СтрокаНачисления Из СтрокиНачислений Цикл
НачисленийВсего = НачисленийВсего + СтрокаНачисления.Результат;
КонецЦикла;
КонецЦикла;
Если НачисленийВсего <> 0 И ДанныеСтроки.Результат <> 0 Тогда
КоэффициентРаспределения = ДанныеСтроки.Результат / НачисленийВсего;
КонецЕсли;
ДанныеСтроки.НДФЛ = ДанныеСтроки.НДФЛ * КоэффициентРаспределения;
ДанныеСтроки.Удержания = ДанныеСтроки.Удержания * КоэффициентРаспределения;
ДанныеСтроки.КорректировкаВыплаты = ДанныеСтроки.КорректировкаВыплаты * КоэффициентРаспределения;
ДанныеСтроки.ЗачтеноАвансовыхПлатежей = ДанныеСтроки.ЗачтеноАвансовыхПлатежей * КоэффициентРаспределения;
ДанныеСтроки.КВыплате = Макс(0, ДанныеСтроки.Результат - Макс(ДанныеСтроки.НДФЛ, 0) + Макс(ДанныеСтроки.ЗачтеноАвансовыхПлатежей, 0) - Макс(ДанныеСтроки.Удержания, 0));
КонецПроцедуры
&НаСервере
Процедура ОбработкаПодбораНаСервере(Сотрудники)
ОписаниеТаблицы = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
УчетРабочегоВремениРасширенныйФормы.ДокументыОтклоненийСотрудникПриИзменении(ЭтаФорма, ОписаниеДокументаОтклоненийУчетаВремени());
Для Каждого Сотрудник Из Сотрудники Цикл
СтрокиНачислений = Объект.Начисления.НайтиСтроки(Новый Структура("Сотрудник", Сотрудник));
Если СтрокиНачислений.Количество() = 0 Тогда
ПустаяСтрока = Объект.Начисления.Добавить();
ПустаяСтрока.Сотрудник = Сотрудник;
ПустаяСтрока.ДатаНачала = НачалоДня(Объект.ДатаНачала);
ПустаяСтрока.ДатаОкончания = КонецДня(Объект.ДатаОкончания);
ПустаяСтрока.ПериодДействия = НачалоМесяца(Объект.ДатаНачала);
КонецЕсли;
КонецЦикла;
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
ПерезаполнитьДанныеФормыНаСервере(Сотрудники, Ложь);
ЭтаФорма.Модифицированность = Истина;
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьНачисленияСотрудника(Сотрудники, СохранятьИсправления = Истина) Экспорт
ПерезаполнитьДанныеФормыНаСервере(Сотрудники, СохранятьИсправления);
КонецПроцедуры
&НаСервере
Процедура ПерезаполнитьДанныеФормыНаСервере(Знач Сотрудники, СохранятьИсправления = Истина, ЗаполнятьПоказатели = Истина, ВыводитьСообщения = Ложь) Экспорт
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Документ = РеквизитФормыВЗначение("Объект");
Если Не Документ.ДокументГотовКРасчету(ВыводитьСообщения) Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Сотрудники) <> Тип("Массив") Тогда
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудники);
КонецЕсли;
ОписаниеТаблицы = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
УстановитьПривилегированныйРежим(Истина);
ОтменятьТранзакцию = Ложь;
Если Объект.ВнутрисменныйПростой Тогда
НачатьТранзакцию();
ОтменятьТранзакцию = Истина;
ЗарегистрироватьДанныеОВремени(Сотрудники);
КонецЕсли;
Отбор = Новый Структура("Сотрудник");
ИдентификаторыСтрок = Новый Массив;
Для каждого Сотрудник Из Сотрудники Цикл
Если Сотрудник.Пустая() Тогда
Продолжить;
КонецЕсли;
Отбор.Вставить("Сотрудник", Сотрудник);
СтрокиПоСотруднику = Объект.Начисления.НайтиСтроки(Отбор);
Для каждого СтрокаПоСотруднику Из СтрокиПоСотруднику Цикл
ИдентификаторыСтрок.Добавить(СтрокаПоСотруднику.ПолучитьИдентификатор());
КонецЦикла;
КонецЦикла;
ДополнитьСтрокиНаСервере(ИдентификаторыСтрок, ОписаниеТаблицы, Истина, ЗаполнятьПоказатели);
ЗаполнитьПериодРасчетаСреднегоЗаработка(ИдентификаторыСтрок);
РассчитатьСотрудниковНаСервере(Сотрудники, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), СохранятьИсправления, , Ложь);
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьНачисленийДолейРКСН(ЭтотОбъект);
Если ОтменятьТранзакцию = Истина Тогда
ОтменитьТранзакцию();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПересчитатьСотрудника(ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля) Экспорт
ПересчитатьСотрудникаНаСервере(ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля);
КонецПроцедуры
&НаСервере
Процедура РассчитатьВсеНаСервере(ОписаниеТаблицы = Неопределено)
Если ОписаниеТаблицы = Неопределено Тогда
ОписаниеТаблицы = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
КонецЕсли;
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник");
ФизическиеЛицаСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Сотрудники, "ФизическоеЛицо");
ФизическиеЛица = ОбщегоНазначения.ВыгрузитьКолонку(ФизическиеЛицаСотрудников, "Значение");
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛица, МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИсточникиИзмененийМенеджераРасчета(МенеджерРасчета, ИзмененныеДанные);
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
МенеджерРасчета.РассчитатьЗарплату();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
ЗаполнитьНалогиУдержания();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты();
УстановитьВидимостьНачисленийДолейРКСН(ЭтотОбъект);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.НачисленияПерерасчет, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаСервере
Процедура ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяцаПриИзмененииНаСервере()
УстановитьВидимостьСвойстваПеречислитьНалог();
ПересчитатьНДФЛ();
КонецПроцедуры
&НаСервере
Процедура ПересчитатьНДФЛ()
УстановитьПривилегированныйРежим(Истина);
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник");
ФизическиеЛицаСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Сотрудники, "ФизическоеЛицо");
ФизическиеЛица = ОбщегоНазначения.ВыгрузитьКолонку(ФизическиеЛицаСотрудников, "Значение");
ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛица, МенеджерРасчета);
МенеджерРасчета.НастройкиРасчета.ФизическиеЛица = ФизическиеЛица;
Если ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца Тогда
Объект.НДФЛ.Очистить();
Объект.КорректировкиВыплаты.Очистить();
Объект.ПримененныеВычетыНаДетейИИмущественные.Очистить();
КонецЕсли;
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
МенеджерРасчета.ПересчитатьНДФЛ();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
ЗаполнитьНалогиУдержания();
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Процедура РасчетЗарплатыВДанныеФормы(ДанныеМенеджераРасчета, ПозицииВставки = Неопределено)
ТаблицыНачислений = РасчетЗарплатыРасширенныйФормы.ТаблицыНачисленийФормы();
ТаблицыНачислений.Начисления = Объект.Начисления;
ТаблицыНачислений.НачисленияПерерасчет = Объект.НачисленияПерерасчет;
ТаблицыНачислений.НачисленияПерерасчетНулевыеСторно = Объект.НачисленияПерерасчетНулевыеСторно;
ТаблицыНачислений.НачисленияДолейРКСН = Объект.НачисленияДолейРКСН;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНачисленияВДанныеФормы(ТаблицыНачислений, ДанныеМенеджераРасчета.Начисления, Объект.Организация, , ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.СортироватьПерерасчеты(Объект.НачисленияПерерасчет);
ТаблицыУдержаний = РасчетЗарплатыРасширенныйФормы.ТаблицыУдержанийФормы();
ТаблицыУдержаний.Удержания = Объект.Удержания;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыУдержанияВДанныеФормы(ТаблицыУдержаний, ДанныеМенеджераРасчета.Удержания, , ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНДФЛВДанныеФормы(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, ДанныеМенеджераРасчета.НДФЛ, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыКорректировкиВыплатыВДанныеФормы(Объект.КорректировкиВыплаты, ДанныеМенеджераРасчета.КорректировкиВыплаты, ПозицииВставки);
КонецПроцедуры
&НаСервере
Процедура ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета, Отбор = Неопределено, ПозицииВставки = Неопределено, ПерезаполнитьНачисления = Ложь)
РасчетЗарплатыРасширенныйФормы.НачисленияВДанныеМенеджераРасчетаВидНачисленияВШапке(Объект.Начисления, МенеджерРасчета, Объект.Организация, Объект.Начисление, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.НачисленияПерерасчетСНулевымиСторноВДанныеМенеджераРасчета(Объект.НачисленияПерерасчет, Объект.НачисленияПерерасчетНулевыеСторно, МенеджерРасчета, Объект.Организация, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.НачисленияДолейРКСНВДанныеМенеджераРасчета(Объект.НачисленияДолейРКСН, МенеджерРасчета, Объект.Организация, Отбор, ПозицииВставки, "НачисленияДолейРКСН");
РасчетЗарплатыРасширенныйФормы.УдержанияВДанныеМенеджераРасчета(Объект.Удержания, МенеджерРасчета, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.КорректировкиВыплатыВДанныеМенеджераРасчета(Объект.КорректировкиВыплаты, МенеджерРасчета, Отбор, ПозицииВставки);
РасчетЗарплатыРасширенныйФормы.НДФЛВДанныеМенеджераРасчета(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, МенеджерРасчета, Отбор, ПозицииВставки);
МенеджерРасчета.НастройкиБухучета.КоэффициентыСреднегоЗаработкаДокумента = КоэффициентыРаспределенияСреднегоЗаработкаДокумента();
ЗначениеПоказателяУчитыватьМРОТ = ?(Объект.УчитыватьМРОТПриОплатеПоСреднемуЗаработку, 1, 0);
ПоказательУчитыватьМРОТ = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.УчитыватьМРОТ");
СреднийЗаработок = Новый Соответствие;
ЧастичнаяИндексация = Новый Соответствие;
Для Каждого СтрокаСотрудника Из Объект.Начисления Цикл
СреднийЗаработок.Вставить(СтрокаСотрудника.Сотрудник, ЗначенияПоказателейСреднегоЗаработка(СтрокаСотрудника));
КонецЦикла;
Если ПерезаполнитьНачисления Тогда
ДополнительныеВидыРасчета = РасчетЗарплатыРасширенный.ДополнительныеНачисленияОсновныхВидовРасчета(Объект.Начисление);
ВыделятьРКСН = ДополнительныеВидыРасчета.Получить(Объект.Начисление) <> Неопределено И Объект.ПланируемаяДатаВыплаты >= УчетНДФЛРасширенный.ДатаЗаконаПроРКиЕАЭС();
Для Каждого Строка Из МенеджерРасчета.Зарплата.Начисления Цикл
Если Объект.ВнутрисменныйПростой Тогда
Показатель = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.ВремяВДняхЧасах");
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(Строка, Показатель, Объект.ЧасыПростоя);
КонецЕсли;
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(Строка, ПоказательУчитыватьМРОТ, ЗначениеПоказателяУчитыватьМРОТ);
Если ВыделятьРКСН Тогда
РасчетЗарплатыРасширенный.ЗаполнитьПоказателиРКСН(Строка, МенеджерРасчета, СреднийЗаработок[Строка.Сотрудник]);
Иначе
Если ЗначениеЗаполнено(ПоказательСреднийЗаработок) Тогда
МенеджерРасчета.ДобавитьИзвестноеЗначениеПоказателя(Строка, ПоказательСреднийЗаработок, СреднийЗаработок[Строка.Сотрудник].СреднийЗаработокОбщий);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИндексироватьСреднийЗаработокЧастично") Тогда
ДанныеДокумента = СреднийЗаработок[Строка.Сотрудник];
Если ДанныеДокумента <> Неопределено Тогда
УчетСреднегоЗаработка.ДобавитьЗначенияПоказателейЧастичнойИндексации(ДанныеДокумента, МенеджерРасчета, Строка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЗначенияПоказателейСреднегоЗаработка(СтрокаСотрудника)
ЗначенияПоказателей = Новый Структура(
"СреднийЗаработокОбщий,
|СреднийЗаработокИндексируемый,
|СреднийЗаработокНеиндексируемый,
|СреднийЗаработокРК,
|СреднийЗаработокИндексируемыйРК,
|СреднийЗаработокНеиндексируемыйРК,
|СреднийЗаработокСН,
|СреднийЗаработокИндексируемыйСН,
|СреднийЗаработокНеиндексируемыйСН");
ЗаполнитьЗначенияСвойств(ЗначенияПоказателей, СтрокаСотрудника);
ЗначенияПоказателей.СреднийЗаработокОбщий = СтрокаСотрудника.СреднийЗаработок;
Возврат ЗначенияПоказателей;
КонецФункции
&НаСервере
Процедура ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛица, МенеджерРасчета)
МенеджерРасчета.ИсключаемыйРегистратор = Объект.Ссылка;
МенеджерРасчета.ИсправленныйДокумент = Объект.ИсправленныйДокумент;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьУдержания = ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты);
МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ = УчетНДФЛРасширенный.МежрасчетныйДокументИсчисляетНДФЛ(Объект.Организация, ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца, Объект.ПорядокВыплаты, ОбязательныйРасчетНДФЛ, Объект.ПланируемаяДатаВыплаты);
МенеджерРасчета.НастройкиРасчета.РассчитыватьКорректировкиВыплаты = Истина;
МенеджерРасчета.НастройкиУдержаний.РассчитыватьТолькоПоТекущемуДокументу = Истина;
МенеджерРасчета.НастройкиНДФЛ.Сотрудники = ФизическиеЛица;
МенеджерРасчета.НастройкиНДФЛ.ДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
МенеджерРасчета.НастройкиНДФЛ.ОкончательныйРасчет = ОкончательныйРасчетНДФЛ;
КонецПроцедуры
&НаСервере
Процедура ПересчитатьСотрудникаНаСервере(ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля)
РасчетЗарплатыРасширенный.ПересчитатьСотрудникаНаСервере(ЭтаФорма, ИмяТаблицы, ВыбранныеСтроки, ВедущееПоле, ТипВедущегоПоля);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСотрудника(Сотрудник, ОписаниеТаблицы) Экспорт
Если НЕ РасчетЗарплатыРасширенныйКлиент.ДобавитьСотрудникаКРасчету(ЭтаФорма, Сотрудник, ОписаниеТаблицы) Тогда
РассчитатьСотрудниковНаСервере(Сотрудник, ОписаниеТаблицы);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РассчитатьСотрудниковНаСервере(Знач Сотрудники, ОписаниеТаблицы, СохранятьИсправления = Истина, ПерезаполнитьНачисления = Истина, РегистрироватьДанныеОВремени = Истина)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если ТипЗнч(Сотрудники) <> Тип("Массив") Тогда
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудники);
КонецЕсли;
Если Не ЗначениеЗаполнено(Сотрудники) Тогда
Возврат;
КонецЕсли;
ОтменятьТранзакцию = Ложь;
Если Не ТранзакцияАктивна() Тогда
НачатьТранзакцию();
ОтменятьТранзакцию = Истина;
КонецЕсли;
Отбор = СотрудникиФизическиеЛицаОтбор(Сотрудники);
Если Не СохранятьИсправления Тогда
ОписаниеТаблицРазовыхНачислений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ДокументыРазовыхНачисленийФормы.ОбновитьНачисленияДолейРКСН(Объект, Сотрудники, ОписаниеДокумента(ЭтотОбъект), ОписаниеТаблицРазовыхНачислений);
КонецЕсли;
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(Отбор.ФизическиеЛица, МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИсточникиИзмененийМенеджераРасчета(МенеджерРасчета, ИзмененныеДанные);
Если ПерезаполнитьНачисления Тогда
Если РегистрироватьДанныеОВремени Тогда
ЗарегистрироватьДанныеОВремени();
КонецЕсли;
Если ОписаниеТаблицы.ИмяТаблицы = "Начисления" Тогда
Если ЗначениеЗаполнено(Объект.ИсправленныйДокумент) Тогда
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачисленийДолейРКСН());
ТаблицыНачислений = Новый Структура;
ТаблицыНачислений.Вставить("Начисления", Объект.Начисления);
ТаблицыНачислений.Вставить("НачисленияДолейРКСН", Объект.НачисленияДолейРКСН);
ИсправлениеДокументовРасчетЗарплаты.СформироватьДанныеПерерасчетаДляИсправления(Объект.Организация, Объект.ПериодРегистрации, Объект.ИсправленныйДокумент, ТаблицыНачислений, Объект.НачисленияПерерасчет, Объект.Ссылка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), ПолучитьКонтролируемыеПоля(), ОписаниеДокумента(ЭтотОбъект),, Объект.ДоначислитьЗарплатуПриНеобходимости);
Иначе
ОтборПоСотрудникам = Новый Структура("Сотрудник", Отбор.СотрудникиКРасчету);
ИсправлениеДокументовРасчетЗарплаты.СформироватьДанныеПерерасчета(Объект.Организация, Объект.ПериодРегистрации, Объект.Начисления, Объект.НачисленияПерерасчет, Объект.Ссылка, ПолучитьКонтролируемыеПоля(), ОписаниеДокумента(ЭтотОбъект), ОтборПоСотрудникам, Объект);
КонецЕсли;
КонецЕсли;
СтрокиКУдалению = Новый Массив;
Для Каждого СтрокаПерерасчета Из Объект.НачисленияПерерасчетНулевыеСторно Цикл
Если Отбор.СотрудникиКРасчету.Найти(СтрокаПерерасчета.Сотрудник) = Неопределено Тогда
Продолжить;
КонецЕсли;
СтрокиКУдалению.Добавить(СтрокаПерерасчета);
КонецЦикла;
Для Каждого УдаляемаяСтрока Из СтрокиКУдалению Цикл
Объект.НачисленияПерерасчетНулевыеСторно.Удалить(УдаляемаяСтрока);
КонецЦикла;
СтрокиКУдалению = Новый Массив;
Для Каждого СтрокаПерерасчета Из Объект.НачисленияПерерасчет Цикл
Если Отбор.СотрудникиКРасчету.Найти(СтрокаПерерасчета.Сотрудник) = Неопределено Тогда
Продолжить;
КонецЕсли;
Если СтрокаПерерасчета.ФиксСторно И СтрокаПерерасчета.Сторно И СтрокаПерерасчета.Результат = 0 Тогда
СтрокиКУдалению.Добавить(СтрокаПерерасчета);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаПерерасчета Из СтрокиКУдалению Цикл
ЗаполнитьЗначенияСвойств(Объект.НачисленияПерерасчетНулевыеСторно.Добавить(), СтрокаПерерасчета);
Объект.НачисленияПерерасчет.Удалить(СтрокаПерерасчета);
КонецЦикла;
КонецЕсли;
ПозицииВставки = Новый Структура;
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета, Отбор, ПозицииВставки, ПерезаполнитьНачисления);
ЗаполнитьСтрокиУдержаний(Отбор.СотрудникиКРасчету, МенеджерРасчета, СохранятьИсправления);
МенеджерРасчета.РассчитатьЗарплату();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата, ПозицииВставки);
Если ОтменятьТранзакцию Тогда
ОтменитьТранзакцию();
КонецЕсли;
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.НачисленияПерерасчет, "ПериодДействия", "ПериодДействияСтрокой");
УстановитьВидимостьНачисленийДолейРКСН(ЭтотОбъект);
ОбновитьНачисленоУдержаноИтог(Отбор.СотрудникиКРасчету);
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты();
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
УстановитьПривилегированныйРежим(Ложь);
Если ЗаполнениеВыполнено = Неопределено Тогда
ЗаполненныеСотрудники = Новый Соответствие;
Иначе
ЗаполненныеСотрудники = Новый Соответствие(ЗаполнениеВыполнено);
КонецЕсли;
Для каждого ЗаполненныйСотрудник Из Сотрудники Цикл
ЗаполненныеСотрудники.Вставить(ЗаполненныйСотрудник, Истина);
КонецЦикла;
ЗаполнениеВыполнено = Новый ФиксированноеСоответствие(ЗаполненныеСотрудники);
ОбновитьИтогиПодвала(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтрокиУдержаний(Сотрудники, МенеджерРасчета, СохранятьИсправления)
Если Не ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты) Тогда
Возврат;
КонецЕсли;
МенеджерРасчета.НастройкиРасчета.СохранятьИсправления = СохранятьИсправления;
МенеджерРасчета.ЗаполнитьУдержанияСотрудниковЗаПериод(Сотрудники, Объект.ПериодРегистрации, КонецМесяца(Объект.ПериодРегистрации));
КонецПроцедуры
&НаСервере
Функция СотрудникиФизическиеЛицаОтбор(Сотрудники)
СотрудникиДокумента = Новый Массив;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СотрудникиДокумента, ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"));
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Сотрудники", Сотрудники);
Запрос.УстановитьПараметр("СотрудникиДокумента", СотрудникиДокумента);
Если ТипЗнч(Сотрудники) = Тип("СправочникСсылка.ФизическиеЛица")
Или ТипЗнч(Сотрудники) = Тип("Массив") И Сотрудники.Количество() > 0 И ТипЗнч(Сотрудники[0]) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
Если ТипЗнч(Сотрудники) <> Тип("Массив") Тогда
ФизическиеЛица = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудники);
Иначе
ФизическиеЛица = Сотрудники;
КонецЕсли;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Ссылка КАК Сотрудник,
| Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&СотрудникиДокумента)
| И Сотрудники.ФизическоеЛицо В(&Сотрудники)";
СотрудникиФизическиеЛица = Запрос.Выполнить().Выбрать();
Иначе
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Сотрудники.ФизическоеЛицо
|ПОМЕСТИТЬ ВТФизическиеЛица
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&Сотрудники)
|;
|
|
|ВЫБРАТЬ
| Сотрудники.Ссылка КАК Сотрудник,
| ФизическиеЛица.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТФизическиеЛица КАК ФизическиеЛица
| ПО Сотрудники.ФизическоеЛицо = ФизическиеЛица.ФизическоеЛицо
| И (Сотрудники.Ссылка В (&СотрудникиДокумента))
|;
|
|
|ВЫБРАТЬ
| ВТФизическиеЛица.ФизическоеЛицо
|ИЗ
| ВТФизическиеЛица КАК ВТФизическиеЛица";
Результат = Запрос.ВыполнитьПакет();
ФизическиеЛица = Результат[2].Выгрузить().ВыгрузитьКолонку("ФизическоеЛицо");
СотрудникиФизическиеЛица = Результат[1].Выбрать();
КонецЕсли;
Отбор = Новый Структура("СотрудникиКРасчету, ФизическиеЛицаСотрудников, ФизическиеЛицаОтбор, ФизическиеЛица");
Отбор.ФизическиеЛица = ФизическиеЛица;
Отбор.ФизическиеЛицаСотрудников = Новый Соответствие;
Отбор.ФизическиеЛицаОтбор = Новый Соответствие;
Отбор.СотрудникиКРасчету = Новый Массив;
Пока СотрудникиФизическиеЛица.Следующий() Цикл
Отбор.ФизическиеЛицаСотрудников.Вставить(СотрудникиФизическиеЛица.Сотрудник, СотрудникиФизическиеЛица.ФизическоеЛицо);
Отбор.СотрудникиКРасчету.Добавить(СотрудникиФизическиеЛица.Сотрудник);
КонецЦикла;
Для каждого ФизическоеЛицо Из ФизическиеЛица Цикл
Отбор.ФизическиеЛицаОтбор.Вставить(ФизическоеЛицо, Истина)
КонецЦикла;
Возврат Отбор;
КонецФункции
&НаСервере
Процедура УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ПроверяемыеТаблицы = Новый Массив;
ПроверяемыеТаблицы.Добавить("НачисленияПерерасчет");
ПроверяемыеНачисления = Новый Массив;
ПроверяемыеНачисления.Добавить(Объект.Начисление);
Для каждого ПроверяемаяТаблица Из ПроверяемыеТаблицы Цикл
НачисленияДокумента = Новый Массив;
Для каждого Начисление Из Объект[ПроверяемаяТаблица] Цикл
НачисленияДокумента.Добавить(Начисление.Начисление);
КонецЦикла;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПроверяемыеНачисления, НачисленияДокумента, Истина);
КонецЦикла;
АвтоОтметкаНезаполненного = ДатаВыплатыОбязательнаКЗаполнению(Объект.ПорядокВыплаты, ПроверяемыеНачисления, Объект.ПериодРегистрации);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПланируемаяДатаВыплаты", "АвтоОтметкаНезаполненного", АвтоОтметкаНезаполненного);
Если Не АвтоОтметкаНезаполненного Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПланируемаяДатаВыплаты", "ОтметкаНезаполненного", Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДатаВыплатыОбязательнаКЗаполнению(Знач ПорядокВыплаты, Знач ПроверяемыеНачисления, Знач ПериодРегистрации)
УстановитьПривилегированныйРежим(Истина);
Возврат УчетНДФЛРасширенный.ДатаВыплатыОбязательнаКЗаполнению(ПорядокВыплаты, ПроверяемыеНачисления, ПериодРегистрации);
КонецФункции
&НаСервере
Процедура ОбновитьНачисленоУдержаноИтог(Сотрудники)
Отбор = Новый Структура("Сотрудник");
Для каждого Сотрудник Из Сотрудники Цикл
Отбор.Вставить("Сотрудник", Сотрудник);
СтрокиПоСотруднику = Объект.Начисления.НайтиСтроки(Отбор);
Для каждого СтрокаПоСотруднику Из СтрокиПоСотруднику Цикл
ЗаполнитьНалогиУдержанияСотрудника(СтрокаПоСотруднику);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура НачисленияПриОкончанииРедактированияНаСервере()
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура НачисленияПослеУдаленияНаСервере(Сотрудники)
РасчетЗарплатыРасширенный.ОчиститьДанныеФормыПоСотруднику(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Сотрудники, Объект.Организация);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
ОчиститьДанныеСреднегоЗаработкаСотрудников(Сотрудники);
КонецПроцедуры
&НаСервере
Процедура НачисленияПерерасчетПриОкончанииРедактированияНаСервере()
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура НачисленияПерерасчетПослеУдаленияНаСервере()
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеСотрудника(ИдентификаторСтроки, ПрежнийСотрудник)
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
УстановитьПривилегированныйРежим(Истина);
ОчиститьДанныеСреднегоЗаработкаСотрудников(ПрежнийСотрудник);
ДанныеСотрудника = Объект.Начисления.НайтиПоИдентификатору(ИдентификаторСтроки);
ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаНачало = '00010101';
ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаОкончание = '00010101';
ДанныеСотрудника.ФиксПериодРасчетаСреднегоЗаработка = Ложь;
ДанныеСотрудника.СреднийЗаработок = 0;
Сотрудник = ДанныеСотрудника.Сотрудник;
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник);
ОписаниеТаблицы = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
ОписаниеТаблицНачислений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ОписаниеТаблицы);
ДокументыРазовыхНачисленийФормы.ОбновитьНачисленияДолейРКСН(Объект, Сотрудники, ОписаниеДокумента(ЭтотОбъект), ОписаниеТаблицНачислений);
РасчетЗарплатыРасширенный.ОбработатьИзменениеСотрудникаВедущейТаблицыФормы(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Сотрудник, ПрежнийСотрудник);
ОбновляемыеСотрудники = Новый Массив;
ОбновляемыеСотрудники.Добавить(Сотрудник);
ПерезаполнитьДанныеФормыНаСервере(ОбновляемыеСотрудники, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьСтроку(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей) Экспорт
ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаСервере
Процедура ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей)
УстановитьПривилегированныйРежим(Истина);
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаСервере
Процедура ДополнитьСтрокиНаСервере(ИдентификаторыСтрок, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей)
УстановитьПривилегированныйРежим(Истина);
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокиРасчета(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), ОписаниеТаблицы, ИдентификаторыСтрок, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
Если ЗаполнятьЗначенияПоказателей И Объект.ПланируемаяДатаВыплаты < УчетНДФЛРасширенный.ДатаЗаконаПроРКиЕАЭС() Тогда
ОбнулитьЗначенияПоказателейДолейРКСН();
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Процедура ОрганизацияПриИзмененииНаСервере()
ЗаполнитьДанныеФормыПоОрганизации();
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
РасчетЗарплатыРасширенныйФормы.ОбновитьПлановыеДатыВыплатыПоОрганизации(ЭтаФорма);
ОбновитьПланируемуюДатуВыплаты();
РасчетЗарплатыРасширенныйФормы.ДополнитьДанныеФормыРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда(), РегистрацияНачисленийДоступна);
КонецПроцедуры
&НаСервере
Процедура ДатаНачалаПриИзмененииНаСервере()
Для Каждого СтрокаНачислений Из Объект.Начисления Цикл
СтрокаНачислений.ПериодДействия = НачалоМесяца(Объект.ДатаНачала);
КонецЦикла;
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Ложь);
КонецПроцедуры
&НаСервере
Процедура ДатаОкончанияПриИзмененииНаСервере()
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Ложь, Истина);
КонецПроцедуры
&НаСервере
Процедура ЧасыПростояПриИзмененииНаСервере()
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Ложь);
КонецПроцедуры
&НаСервере
Процедура ДатаПростояПриИзмененииНаСервере()
УстановитьПривилегированныйРежим(Истина);
УчетРабочегоВремениРасширенныйФормы.ДокументыОтклоненийДатаВнутрисменногоОтклоненияПриИзменении(ЭтаФорма, ОписаниеДокументаОтклоненийУчетаВремени());
УстановитьПривилегированныйРежим(Ложь);
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Ложь);
КонецПроцедуры
&НаСервере
Процедура ДоначислитьЗарплатуПриНеобходимостиПриИзмененииНаСервере()
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"));
КонецПроцедуры
&НаСервере
Процедура УчитыватьМРОТПриОплатеПоСреднемуЗаработкуПриИзмененииНаСервере()
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"));
КонецПроцедуры
&НаСервере
Функция ЗначенияДляЗаполнения()
Возврат Новый Структура("Организация, Ответственный, Месяц",
"Объект.Организация",
"Объект.Ответственный",
"Объект.ПериодРегистрации");
КонецФункции
&НаСервере
Процедура УстановитьОтветственныхЛиц()
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ПодписиДокументов.ЗаполнитьПодписиПоОрганизации(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеФормыПоОрганизации()
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ЗапрашиваемыеЗначения = Новый Структура("МесяцРасчета, Организация", "Объект.ПериодРегистрации", "Объект.Организация");
ЗарплатаКадры.ЗаполнитьОтветственныхРаботниковОрганизацииВФорме(ЭтотОбъект, ЗапрашиваемыеЗначения, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("Организация"));
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты = УчетНДФЛРасширенный.ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты(Объект.Организация, Объект.ПериодРегистрации);
УстановитьОтветственныхЛиц();
КонецПроцедуры
&НаСервере
Процедура УстановитьНастройкиОтображенияЭлементовФормы()
Если Объект.ВнутрисменныйПростой Тогда
ТекущаяСтраница = Элементы.ВнутрисменныйПериод;
ВидимостьВидВремениЗамещаемыйПредставление = Истина;
Иначе
ТекущаяСтраница = Элементы.ЦелодневныйПериод;
ВидимостьВидВремениЗамещаемыйПредставление = Ложь;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ПериодПриостановкиРаботы", "ТекущаяСтраница", ТекущаяСтраница);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"ВидВремениЗамещаемыйПредставление", "Видимость", ВидимостьВидВремениЗамещаемыйПредставление);
НастроитьФормуВЗависимостиОтПричины();
КонецПроцедуры
&НаСервере
Процедура УстановитьИнфоНадписьВидПростоя()
Если ПозицияСелектораОбстоятельств = 0 Тогда
Текст = НСтр("ru = 'Время простоя не будет оплачено'");
НомерСтраницыВариантов = 0;
ИначеЕсли ПозицияСелектораОбстоятельств = 1 Тогда
Текст = НСтр("ru = 'Время простоя будет оплачено по среднему заработку'");
НомерСтраницыВариантов = 0;
ИначеЕсли ПозицияСелектораОбстоятельств = 2 Тогда
Текст = НСтр("ru = 'Время простоя будет оплачено по текущему тарифу сотрудника'");
НомерСтраницыВариантов = 0;
ИначеЕсли ПозицияСелектораОбстоятельств = 3 Тогда
Текст = НСтр("ru = 'Время отстранения не будет оплачено'");
НомерСтраницыВариантов = 1;
ИначеЕсли ПозицияСелектораОбстоятельств = 4 Тогда
Текст = НСтр("ru = 'Время отстранения будет оплачено по текущему тарифу сотрудника'");
НомерСтраницыВариантов = 1;
ИначеЕсли ПозицияСелектораОбстоятельств = 5 Тогда
Текст = НСтр("ru = 'Время приостановки работы будет оплачено по текущему тарифу сотрудника'");
НомерСтраницыВариантов = 2;
КонецЕсли;
Если НомерСтраницыВариантов = 0 Тогда
Элементы.СелекторОбстоятельств.ТекущаяСтраница = Элементы.СтраницаПростой;
ИначеЕсли НомерСтраницыВариантов = 1 Тогда
Элементы.СелекторОбстоятельств.ТекущаяСтраница = Элементы.СтраницаОтстранение;
ИначеЕсли НомерСтраницыВариантов = 2 Тогда
Элементы.СелекторОбстоятельств.ТекущаяСтраница = Элементы.СтраницаДругиеВарианты;
КонецЕсли;
Элементы.Информация.РасширеннаяПодсказка.Заголовок = Текст;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВидРасчета(ПервичнаяИнициализацияФормы = Ложь)
УстановитьПривилегированныйРежим(Истина);
ДопПараметры = Документы.ПростойСотрудников.ДополнительныеПараметрыВыбораНачислений(Объект, "Начисление");
УчетРабочегоВремениРасширенныйФормы.ДобавитьУточнениеВремениВОтборНачислений(ДопПараметры, ЭтаФорма);
ВидРасчетаИзменен = ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(ЭтотОбъект, "Начисление", ДопПараметры, ПервичнаяИнициализацияФормы);
УчетРабочегоВремениРасширенныйФормы.УдалитьУточнениеВремениИзПараметровВыбора(ЭтаФорма, "Начисление");
Если ВидРасчетаИзменен Тогда
ВидРасчетаПриИзмененииНаСервере();
Иначе
УчетРабочегоВремениРасширенныйФормы.НастроитьУточнениеВидаВремени(ЭтаФорма, Объект.Начисление);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВидРасчетаПриИзмененииНаСервере()
ПриИзмененииВидаРасчета();
Если Не ЗначениеЗаполнено(Объект.Начисление) Тогда
Возврат;
КонецЕсли;
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Ложь);
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииВидаРасчета()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ОбязательныйРасчетНДФЛ = ТребуетсяРасчетНалога(Объект.Начисление, Объект.ПланируемаяДатаВыплаты);
УчетРабочегоВремениРасширенныйФормы.ДокументыОтклоненийВидРасчетаПриИзменении(ЭтаФорма, ОписаниеДокументаОтклоненийУчетаВремени());
ОписаниеТаблицы = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
ПометкаНачисленияПодробно = Элементы.НачисленияПодробно.Пометка;
ЗарплатаКадрыРасширенный.ВводНачисленийВШапкеВидРасчетаПриИзменении(ЭтаФорма, ОписаниеТаблицы, 2, РегистрацияНачисленийДоступна);
НастроитьОтображениеРеквизитовОтработанногоВремени();
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, ПометкаНачисленияПодробно, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ВидРасчетаЯвляетсяВытесняющим = ИсправлениеДокументовРасчетЗарплаты.ВидРасчетаЯвляетсяВытесняющим(Объект.Начисление);
УчетРабочегоВремениРасширенныйФормы.НастроитьУточнениеВидаВремени(ЭтаФорма, Объект.Начисление);
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
УстановитьВидимостьСвойстваПеречислитьНалог();
УстановитьВидимостьСвойстваИсчислятьНалог();
УстановитьПоказательСреднийЗаработок();
УстановитьИспользованиеСреднечасовогоЗаработка();
Если Не ЗначениеЗаполнено(ПоказательСреднийЗаработок) Тогда
ОчиститьДанныеСреднегоЗаработка();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПричинаПриИзмененииНаСервере()
НастроитьФормуВЗависимостиОтПричины();
ЗаполнитьВидРасчета();
УстановитьВидимостьРезультата();
ПриИзмененииВидаРасчета();
УстановитьИнфоНадписьВидПростоя();
Если Не ЗначениеЗаполнено(Объект.Начисление) Тогда
Возврат;
КонецЕсли;
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"));
КонецПроцедуры
&НаСервере
Функция НастроитьФормуВЗависимостиОтПричины()
Позиция = ПозицияСелектораОбстоятельств;
НаходитьсяНаРабочихМестахДоступность = ?(Позиция = 3 Или Позиция = 4, Ложь, Истина);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НаходитьсяНаРабочихМестах", "Доступность", НаходитьсяНаРабочихМестахДоступность);
КонецФункции
&НаСервере
Процедура ВнутрисменныйПростойПриИзмененииНаСервере()
УстановитьНастройкиОтображенияЭлементовФормы();
ЗаполнитьВидРасчета();
УстановитьПривилегированныйРежим(Истина);
ОчиститьДанныеСреднегоЗаработка();
УчетРабочегоВремениРасширенныйФормы.ДокументыОтклоненийПризнакВнутрисменноеПриИзменении(ЭтаФорма, ОписаниеДокументаОтклоненийУчетаВремени());
ПриИзмененииВидаРасчета();
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Ложь);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервереБезКонтекста
Функция СписокВыбораЗамещаемыхВидовВремен(ДанныеФормы)
УстановитьПривилегированныйРежим(Истина);
СписокВыбора = УчетРабочегоВремениРасширенныйФормы.ДокументыОтклоненийСписокВыбораЗамещаемогоВремени(ДанныеФормы);
УстановитьПривилегированныйРежим(Ложь);
Возврат СписокВыбора;
КонецФункции
&НаСервере
Процедура ЗарегистрироватьДанныеОВремени(Знач Сотрудники = Неопределено)
ТекущийОбъект = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.ПростойСотрудников"));
Если Сотрудники = Неопределено Тогда
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(ТекущийОбъект.Начисления, "Сотрудник", Истина);
КонецЕсли;
ДанныеОВремени = Документы.ПростойСотрудников.ДанныеОВремени(ТекущийОбъект, Сотрудники);
Если ТекущийОбъект.Ссылка.Пустая() Тогда
Движения = ЗарплатаКадры.НаборыЗаписейРегистратора(ТекущийОбъект.Метаданные());
Иначе
Движения = ТекущийОбъект.Движения;
КонецЕсли;
Документы.ПростойСотрудников.ЗарегистрироватьСторноЗаписиУчетаВремени(Движения, Сотрудники, Объект.ПериодРегистрации, Объект.ИсправленныйДокумент, Истина);
УчетРабочегоВремениРасширенный.ЗарегистрироватьВнутрисменныеОтклонения(Движения, ДанныеОВремени, Объект.ПериодРегистрации, Истина);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьРезультата()
ВводРезультатаДоступен = НЕ Объект.ВидПростоя = Перечисления.СостоянияСотрудника.ПростойПоВинеРаботника;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияРезультат", "Видимость", ВводРезультатаДоступен);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияРезультат", "ТолькоПросмотр", Не ВводРезультатаДоступен);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьРасчетныхПолей()
Если Не РегистрацияНачисленийДоступна Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияПодробно", "Видимость", Ложь);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияПодробно", "Видимость", ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
ОтображатьПодробно = Ложь;
ЭлементНачисленияПодробно = Элементы.Найти("НачисленияПодробно");
Если ЭлементНачисленияПодробно <> Неопределено Тогда
ОтображатьПодробно = Элементы.НачисленияПодробно.Пометка;
КонецЕсли;
Для Каждого Элемент Из Элементы.Начисления.ПодчиненныеЭлементы Цикл
Если Элемент.Имя <> "НачисленияНомерСтроки" И Элемент.Имя <> "НачисленияСотрудник" Тогда
Если Элемент.Имя = "НачисленияГруппаОтработаноОплачено" Или Элемент.Имя = "НачисленияПоказатели" Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, Элемент.Имя, "Видимость", ОтображатьПодробно И ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, Элемент.Имя, "ТолькоПросмотр", ОтображатьПодробно И Не ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, Элемент.Имя, "Видимость", ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, Элемент.Имя, "ТолькоПросмотр", Не ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ИменаЭлементов = Новый Массив;
ИменаЭлементов.Добавить("НачисленияПоказатели");
ИменаЭлементов.Добавить("Начисление");
ИменаЭлементов.Добавить("НачисленияКоманднаяПанельПересчитатьСотрудникаГруппа");
ИменаЭлементов.Добавить("НачисленияОтменитьИсправлениеГруппа");
ИменаЭлементов.Добавить("УчитыватьМРОТПриОплатеПоСреднемуЗаработку");
ИменаЭлементов.Добавить("Сторнировать");
ЗарплатаКадрыРасширенный.УстановитьОтображениеПолейМногофункциональныхДокументов(ЭтаФорма, ИменаЭлементов);
Если ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений Тогда
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьНачисленийДолейРКСН(ЭтаФорма);
УстановитьВидимостьРеквизитовМежрасчетнойВыплаты();
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
УстановитьПоляИсправления(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьРегистрацииНачислений()
ПраваНаДокумент = ЗарплатаКадрыРасширенный.ПраваНаМногофункциональныйДокумент(Объект);
РегистрацияНачисленийДоступна = ПраваНаДокумент.ПолныеПраваПоРолям;
ОграниченияНаУровнеЗаписей = Новый ФиксированнаяСтруктура(ПраваНаДокумент.ОграниченияНаУровнеЗаписей);
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей()
БылиОграничения = ОграниченияНаУровнеЗаписей;
УстановитьДоступностьРегистрацииНачислений();
Если БылиОграничения.ЧтениеБезОграничений <> ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений
Или БылиОграничения.ИзменениеБезОграничений <> ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений
Или БылиОграничения.ИзменениеКадровыхДанных <> ОграниченияНаУровнеЗаписей.ИзменениеКадровыхДанных Тогда
Объект.ПерерасчетВыполнен = ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
Объект.Рассчитал = Неопределено;
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
УстановитьВидимостьРасчетныхПолей();
Если БылиОграничения.ЧтениеБезОграничений <> ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений Тогда
ЗарплатаКадрыРасширенный.УстановитьВидимостьКомандПечатиМногофункциональногоДокумента(ЭтаФорма);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ТекстСообщенияНеЗаполненВидРасчета() Экспорт
Возврат Документы.ПростойСотрудников.ТекстСообщенияНеЗаполненВидРасчета(Объект.ВидПростоя, Объект.ВнутрисменныйПростой);
КонецФункции
&НаКлиенте
Процедура ПриИзмененииМесяцаНачисления()
ОбработатьИзменениеМесяцНачисленияНаСервере();
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеМесяцНачисленияНаСервере()
Если УчетНДФЛ.ДоходыУчитываютсяТолькоПоДатеВыплаты(Объект.ПериодРегистрации) Тогда
ПеречислитьНалог = 0;
ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты = Ложь;
ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца = Ложь;
КонецЕсли;
ОбновитьПланируемуюДатуВыплаты();
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьНачисленийДолейРКСН(ЭтотОбъект);
ПерезаполнитьДанныеФормыНаСервере(ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник"), Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОжиданияМесяцНачисленияПриИзменении()
ОбработатьИзменениеМесяцНачисленияНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОбнулитьЗначенияПоказателейДолейРКСН()
ВидРасчетаИнфо = ЗарплатаКадрыРасширенныйПовтИсп.ПолучитьИнформациюОВидеРасчета(Объект.Начисление);
КоличествоПоказателейНачисления = ВидРасчетаИнфо.Показатели.Количество();
НулевыеЗначенияПоказателейРКСН = Справочники.ПоказателиРасчетаЗарплаты.НулевыеЗначенияПоказателейРКСН();
Для Каждого СтрокаНачисления Из Объект.Начисления Цикл
Для Каждого ОписаниеПоказателя Из ВидРасчетаИнфо.Показатели Цикл
Если НулевыеЗначенияПоказателейРКСН.Свойство(ОписаниеПоказателя.Идентификатор) Тогда
Для НомерПоказателя = 1 По КоличествоПоказателейНачисления Цикл
Если СтрокаНачисления["Показатель" + НомерПоказателя].Идентификатор = ОписаниеПоказателя.Идентификатор Тогда
СтрокаНачисления["Значение" + НомерПоказателя] = 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦИкла;
КонецПроцедуры
#Область РаспределениеПоТерриториямУсловиямТруда
&НаКлиенте
Процедура ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПараметрыДляВыбора = РасчетЗарплатыРасширенныйКлиент.ПараметрыДляВыбораПолеРаспределениеПоТерриториямУсловиямТруда();
ПараметрыДляВыбора.Форма = ЭтаФорма;
ПараметрыДляВыбора.ОписаниеДокумента = ОписаниеДокумента(ЭтаФорма);
ПараметрыДляВыбора.ОписаниеТаблицы = ОписаниеТаблицы;
РасчетЗарплатыРасширенныйКлиент.ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, ПараметрыДляВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ЭтаФорма, ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Функция ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда()
Описания = Новый Массив;
Описания.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
Описания.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
Описания.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
Описания.Добавить(ОписаниеТаблицыНачисленийДолейРКСН());
Возврат Описания;
КонецФункции
&НаКлиенте
Процедура ПроверитьПересечениеПериодовОтсутствияНаКлиенте(Отказ, ПараметрыЗаписи, ЗакрытьПослеЗаписи)
Если ПараметрыЗаписи.РежимЗаписи <> РежимЗаписиДокумента.Проведение Тогда
Возврат;
КонецЕсли;
РезультатПроверки = ПроверитьПересечениеПериодовОтсутствияНаСервере();
Если РезультатПроверки.ДанныеСотрудников.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Если РезультатПроверки.Отказ Тогда
Для Каждого ДанныеСотрудника Из РезультатПроверки.ДанныеСотрудников Цикл
ТекстСообщения = НСтр("ru = 'На период %1 сотруднику %2 уже зарегистрирован простой документом %3.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДанныеСотрудника.Значение.ПредставлениеПериода, ДанныеСотрудника.Ключ, ДанныеСотрудника.Значение.Регистратор);
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , , , Отказ);
КонецЦикла;
Возврат;
КонецЕсли;
Отказ = Истина;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
ДополнительныеПараметры.Вставить("ЗакрытьПослеЗаписи", ЗакрытьПослеЗаписи);
Оповещение = Новый ОписаниеОповещения("ПроверитьПересечениеПериодовОтсутствияНаКлиентеЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПараметрыФормы = Новый Структура("РезультатПроверки", РезультатПроверки);
ОткрытьФорму("ОбщаяФорма.ПроверкаПересеченияПериодовОтсутствияСотрудников", ПараметрыФормы, ЭтотОбъект, , , , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьПересечениеПериодовОтсутствияНаКлиентеЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> Истина Тогда
Возврат;
КонецЕсли;
ПараметрыЗаписи = ДополнительныеПараметры.ПараметрыЗаписи;
ПараметрыЗаписи.Вставить("ПроверкаПередЗаписьюВыполнена", Истина);
Записать(ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Функция ПроверитьПересечениеПериодовОтсутствияНаСервере()
ДокументОбъект = РеквизитФормыВЗначение("Объект");
РезультатПроверки = ДокументОбъект.РезультатПроверкиПересеченийПериодовОтсутствия();
Больничные = Новый Массив;
Для Каждого РезультатПоСотруднику Из РезультатПроверки.ДанныеСотрудников Цикл
Если ТипЗнч(РезультатПоСотруднику.Значение.Регистратор) = Тип("ДокументСсылка.БольничныйЛист") Тогда
Больничные.Добавить(РезультатПоСотруднику.Значение.Регистратор);
КонецЕсли;
КонецЦикла;
Если Больничные.Количество() > 0 Тогда
ДанныеПростоя = Объект.Начисления.Выгрузить(, "Сотрудник,ДатаНачала,ДатаОкончания,ВремяВЧасах,ОплаченоДней,ОплаченоЧасов,Результат");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеПростоя.Сотрудник КАК Сотрудник,
| ДанныеПростоя.ДатаНачала КАК ДатаНачала,
| ДанныеПростоя.ДатаОкончания КАК ДатаОкончания,
| ВЫБОР
| КОГДА ДанныеПростоя.ВремяВЧасах = ЛОЖЬ
| И ДанныеПростоя.ОплаченоДней > 0
| ТОГДА ОКР(ДанныеПростоя.Результат / ДанныеПростоя.ОплаченоДней, 2)
| КОГДА ДанныеПростоя.ВремяВЧасах = ИСТИНА
| И ДанныеПростоя.ОплаченоЧасов > 0
| ТОГДА ОКР(ДанныеПростоя.Результат / ДанныеПростоя.ОплаченоЧасов, 2)
| ИНАЧЕ 0
| КОНЕЦ КАК СреднийЗаработок
|ПОМЕСТИТЬ ДанныеПростоя
|ИЗ
| &ДанныеПростоя КАК ДанныеПростоя
|;
|
|
|ВЫБРАТЬ
| БольничныйЛистПериодыПростоя.ДатаНачала КАК ДатаНачала,
| БольничныйЛистПериодыПростоя.ДатаОкончания КАК ДатаОкончания,
| БольничныйЛистПериодыПростоя.СреднийЗаработок КАК СреднийЗаработок,
| БольничныйЛист.Сотрудник КАК Сотрудник,
| БольничныйЛист.Ссылка КАК Ссылка,
| БольничныйЛист.ДатаОкончания КАК ДатаОкончанияБольничного
|ПОМЕСТИТЬ ПростойБольничных
|ИЗ
| Документ.БольничныйЛист КАК БольничныйЛист
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.БольничныйЛист.ПериодыПростоя КАК БольничныйЛистПериодыПростоя
| ПО БольничныйЛист.Ссылка = БольничныйЛистПериодыПростоя.Ссылка
|ГДЕ
| БольничныйЛист.Ссылка В(&Больничные)
|;
|
|
|ВЫБРАТЬ
| ПростойБольничных.Сотрудник КАК Сотрудник,
| ПростойБольничных.СреднийЗаработок КАК СреднийЗаработок,
| ДанныеПростоя.СреднийЗаработок КАК СреднийЗаработокПростой
|ИЗ
| ПростойБольничных КАК ПростойБольничных
| ЛЕВОЕ СОЕДИНЕНИЕ ДанныеПростоя КАК ДанныеПростоя
| ПО ПростойБольничных.Сотрудник = ДанныеПростоя.Сотрудник
| И ПростойБольничных.ДатаНачала = ДанныеПростоя.ДатаНачала
| И (ЦЕЛ(ПростойБольничных.СреднийЗаработок) = ЦЕЛ(ДанныеПростоя.СреднийЗаработок))
| И (ВЫБОР
| КОГДА ДанныеПростоя.ДатаОкончания > ПростойБольничных.ДатаОкончанияБольничного
| ТОГДА ПростойБольничных.ДатаОкончанияБольничного = ПростойБольничных.ДатаОкончания
| ИНАЧЕ ПростойБольничных.ДатаОкончания = ДанныеПростоя.ДатаОкончания
| КОНЕЦ)
|ГДЕ
| ДанныеПростоя.Сотрудник ЕСТЬ НЕ NULL ";
Запрос.УстановитьПараметр("Больничные", Больничные);
Запрос.УстановитьПараметр("ДанныеПростоя", ДанныеПростоя);
УстановитьПривилегированныйРежим(Истина);
Результат = Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Погрешность = Выборка.СреднийЗаработок - Выборка.СреднийЗаработокПростой;
Погрешность = ?(Погрешность < 0, - Погрешность, Погрешность);
Если Погрешность <= 0.01 Тогда
РезультатПроверки.ДанныеСотрудников.Удалить(Выборка.Сотрудник);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат РезультатПроверки;
КонецФункции
&НаКлиенте
Процедура ЗаписатьНаКлиенте(ЗакрытьПослеЗаписи, ПараметрыЗаписи)
Отказ = Ложь;
ПроверитьПересечениеПериодовОтсутствияНаКлиенте(Отказ, ПараметрыЗаписи, ЗакрытьПослеЗаписи);
Если Отказ Тогда
Возврат;
КонецЕсли;
ПараметрыЗаписи.Вставить("ПроверкаПередЗаписьюВыполнена", Истина);
Записать(ПараметрыЗаписи);
КонецПроцедуры
#КонецОбласти
#Область КлючевыеРеквизитыЗаполненияФормы
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыТаблицыОчищаемыеПриИзменении() Экспорт
Массив = Новый Массив;
Если ИспользуетсяРасчетЗарплаты Тогда
Массив.Добавить("Объект.Начисления");
Если РегистрацияНачисленийДоступна Тогда
Массив.Добавить("Объект.НачисленияПерерасчет");
Массив.Добавить("Объект.НДФЛ");
Массив.Добавить("Объект.Показатели");
Массив.Добавить("Объект.ПримененныеВычетыНаДетейИИмущественные");
Массив.Добавить("Объект.Удержания");
Массив.Добавить("Объект.ФизическиеЛица");
Массив.Добавить("Объект.НачисленияДолейРКСН");
КонецЕсли;
КонецЕсли;
Возврат Массив
КонецФункции
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыОписаниеКлючевыхРеквизитов() Экспорт
Массив = Новый Массив;
Если ИспользуетсяРасчетЗарплаты Тогда
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Организация", НСтр("ru = 'организации'")));
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Подразделение", НСтр("ru = 'подразделения'")));
КонецЕсли;
Возврат Массив
КонецФункции
#КонецОбласти
&НаСервере
Функция АдресСпискаПодобранныхСотрудников()
Возврат ПоместитьВоВременноеХранилище(Объект.Начисления.Выгрузить(,"Сотрудник").ВыгрузитьКолонку("Сотрудник"), УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура ПересчитатьДокументНаКлиенте()
ПересчитатьДокументНаСервере(СотрудникиКРасчету);
СотрудникиКРасчету.Очистить();
РасчетЗарплатыКлиент.УстановитьОтображениеКнопкиПересчитать(ЭтаФорма, Ложь);
КонецПроцедуры
&НаСервере
Процедура ПересчитатьДокументНаСервере(СотрудникиКРасчету)
Для каждого ТаблицаССотрудниками Из СотрудникиКРасчету Цикл
Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(ТаблицаССотрудниками.Значение.СписокСотрудников, "Ключ");
РассчитатьСотрудниковНаСервере(Сотрудники, ТаблицаССотрудниками.Значение.ОписаниеТаблицы);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписьюОкончание(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ПересчитатьДокументНаКлиенте();
Записать(Параметры);
Иначе
ЗакрытьПослеЗаписи = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СведенияОбНДФЛ(ФизическоеЛицо = Неопределено) Экспорт
Если ФизическоеЛицо = Неопределено Тогда
ТекущиеДанные = Объект.Начисления.НайтиПоИдентификатору(Элементы.Начисления.ТекущаяСтрока);
ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущиеДанные.Сотрудник, "ФизическоеЛицо");
КонецЕсли;
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("Начисление", Объект.Начисление);
ДополнительныеСведения = УчетНДФЛФормыРасширенный.ДополнительныеДанныеДляПолученияСведенийОДоходахНДФЛДокумента();
ДополнительныеСведения.МесяцНачисления = Объект.ПериодРегистрации;
ДополнительныеСведения.ПорядокВыплаты = Объект.ПорядокВыплаты;
ДополнительныеСведения.ПланируемаяДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
СведенияОДоходахНДФЛ = УчетНДФЛФормыРасширенный.СведенияОДоходахНДФЛДокумента(Объект, "Начисления,НачисленияПерерасчет", ДополнительныеСведения, ФизическоеЛицо, ПараметрыЗапроса);
Если Объект.НачисленияДолейРКСН.Количество() > 0 Тогда
СведенияОДоходахНДФЛНачисленийДолейРКСН = УчетНДФЛФормыРасширенный.СведенияОДоходахНДФЛДокумента(Объект, "НачисленияДолейРКСН", ДополнительныеСведения, ФизическоеЛицо);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СведенияОДоходахНДФЛНачисленийДолейРКСН.ВычетыКДоходам ,СведенияОДоходахНДФЛ.ВычетыКДоходам);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(СведенияОДоходахНДФЛНачисленийДолейРКСН.СведенияОДоходах ,СведенияОДоходахНДФЛ.СведенияОДоходах);
КонецЕсли;
АдресСведенийОбНДФЛ = УчетНДФЛФормыРасширенный.СведенияОбНДФЛ(ЭтотОбъект, ФизическоеЛицо);
ДанныеОбНДФЛ = ПолучитьИзВременногоХранилища(АдресСведенийОбНДФЛ);
ДанныеОбНДФЛ.Вставить("СведенияОДоходах", СведенияОДоходахНДФЛ.СведенияОДоходах);
ДанныеОбНДФЛ.Вставить("ВычетыКДоходам", СведенияОДоходахНДФЛ.ВычетыКДоходам);
МаксимальныйИдентификаторСтрокиНДФЛ = УчетНДФЛФормы.МаксимальныйИдентификаторСтрокиНДФЛ(Объект.НДФЛ);
ДанныеОбНДФЛ.Вставить("МаксимальныйИдентификаторСтрокиНДФЛ", МаксимальныйИдентификаторСтрокиНДФЛ);
Возврат ПоместитьВоВременноеХранилище(ДанныеОбНДФЛ, ЭтаФорма.УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция СведенияОбУдержаниях() Экспорт
Возврат РасчетЗарплатыРасширенный.СведенияОбУдержаниях(ЭтаФорма);
КонецФункции
&НаКлиенте
Процедура РедактированиеКорректировокВыплаты(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя <> "НачисленияКорректировкаВыплаты" Тогда
Возврат;
КонецЕсли;
Если Не ИспользоватьСтатьиФинансирования Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Сотрудник = Элементы.Начисления.ТекущиеДанные.Сотрудник;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр);
ПараметрыФормы.Вставить("МесяцНачисления", Объект.ПериодРегистрации);
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("ДанныеКорректировокВыплаты", ДанныеКорректировокВыплаты(Сотрудник));
ПараметрыФормы.Вставить("СотрудникФизическоеЛицо", Сотрудник);
ОткрытьФорму("ОбщаяФорма.РедактированиеКорректировокВыплаты", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаСервере
Функция ДанныеКорректировокВыплаты(Сотрудник)
ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Сотрудник, "ФизическоеЛицо");
Возврат РасчетЗарплатыРасширенныйФормы.ДанныеКорректировокВыплаты(ЭтаФорма, ФизическоеЛицо);
КонецФункции
&НаСервере
Процедура УстановитьДоступностьКорректировкиВыплаты()
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияКорректировкаВыплаты", "ТолькоПросмотр",
ИспользоватьСтатьиФинансирования Или ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений = Ложь);
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеКорректировокВыплатыНаСервере(АдресВременногоХранилища)
РасчетЗарплатыРасширенныйФормы.ОбновитьДанныеКорректировокВыплатыВТаблице(ЭтаФорма, АдресВременногоХранилища);
КонецПроцедуры
&НаСервере
Процедура НачисленияКорректировкаВыплатыПриИзмененииНаСервере(ДанныеСтроки)
РасчетЗарплатыРасширенныйФормы.КорректировкаВыплатыПриИзмененииВТаблице(Объект, ДанныеСтроки);
КонецПроцедуры
&НаСервере
Функция СотрудникиФизическихЛиц(Знач ФизическиеЛица)
Если ЗначениеЗаполнено(Объект.ДатаНачала) Тогда
НачалоПериодаПримененияОтбора = Объект.ДатаНачала;
ОкончаниеПериодаПримененияОтбора = Объект.ДатаОкончания;
Иначе
НачалоПериодаПримененияОтбора = Объект.ПериодРегистрации;
ОкончаниеПериодаПримененияОтбора = КонецМесяца(Объект.ПериодРегистрации);
КонецЕсли;
ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудников.Организация = Объект.Организация;
ПараметрыПолученияСотрудников.Подразделение = Объект.Подразделение;
ПараметрыПолученияСотрудников.НачалоПериода = НачалоПериодаПримененияОтбора;
ПараметрыПолученияСотрудников.ОкончаниеПериода = ОкончаниеПериодаПримененияОтбора;
Если ТипЗнч(ФизическиеЛица) = Тип("Массив") Тогда
ПараметрыПолученияСотрудников.СписокФизическихЛиц = ФизическиеЛица;
Иначе
ПараметрыПолученияСотрудников.СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическиеЛица);
КонецЕсли;
Возврат КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников);
КонецФункции
&НаКлиенте
Процедура НачисленияПерерасчетДатаНачалаПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетДатаОкончанияПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Ложь, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьНастройки()
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьБухучетРезультатовРасчетаНаСервере(ИсходныеДанные)
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
Сотрудники = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ИсходныеДанные.Сотрудник);
Отбор = СотрудникиФизическиеЛицаОтбор(Сотрудники);
ПозицииВставки = Новый Структура;
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета, Отбор, ПозицииВставки);
ЗаполнитьНастройкиМенеджераРасчета(Отбор.ФизическиеЛица, МенеджерРасчета);
МенеджерРасчета.НастройкиБухучета.ПроверятьНеобходимостьПересчетаНДФЛ = МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ;
МенеджерРасчета.ЗаполнитьНастройкиОбновленияБухучета(ИсходныеДанные);
МенеджерРасчета.ОбновитьБухучетРезультатовРасчета();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата, ПозицииВставки);
ЗаполнитьНалогиУдержания();
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.НачисленияПерерасчет, "ПериодДействия", "ПериодДействияСтрокой");
РасчетЗарплатыРасширенныйФормы.УстановитьТекущуюСтрокуТаблицыФормы(ЭтаФорма, ИсходныеДанные.ИмяИсходнойТаблицы, ИсходныеДанные.НомерСтрокиИсходнойТаблицы);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ(УстановитьЗначение = Истина)
УчетСреднегоЗаработка.УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ(
ЭтаФорма,
Неопределено,
Объект.ДатаНачала,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект.Начисление),
УстановитьЗначение);
КонецПроцедуры
&НаСервере
Процедура УдержатьНалогПриВыплатеЗарплатыДанныеВРеквизиты()
ПеречислитьНалог = ?(Объект.УдержатьНалогПриВыплатеЗарплаты, 1, 0);
ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца = Объект.ИсчислятьНалогПриОкончательномРасчете;
КонецПроцедуры
&НаСервере
Процедура УдержатьНалогПриВыплатеЗарплатыРеквизитыВДанные(ТекущийОбъект)
ТекущийОбъект.УдержатьНалогПриВыплатеЗарплаты = ?(Не ОбязательныйРасчетНДФЛ
И ПеречислитьНалог = 1
И ТекущийОбъект.ПорядокВыплаты <> Перечисления.ХарактерВыплатыЗарплаты.Зарплата
И Не (ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца Или ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты), Истина, Ложь);
ТекущийОбъект.ИсчислятьНалогПриОкончательномРасчете = Не ОбязательныйРасчетНДФЛ
И ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца
И ТекущийОбъект.ПорядокВыплаты <> Перечисления.ХарактерВыплатыЗарплаты.Зарплата;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗначениеПеречислитьНалогПриИзмененииПорядкаВыплаты()
Если Объект.ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Зарплата Тогда
ПеречислитьНалог = 0;
ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьСвойстваИсчислятьНалог()
ВидимостьЭлемента = Не ОбязательныйРасчетНДФЛ И Объект.ПорядокВыплаты <> Перечисления.ХарактерВыплатыЗарплаты.Зарплата;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца", "Видимость", ВидимостьЭлемента);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьСвойстваПеречислитьНалог()
ВидимостьЭлемента = Не ОбязательныйРасчетНДФЛ И Объект.ПорядокВыплаты <> Перечисления.ХарактерВыплатыЗарплаты.Зарплата И Не (ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца Или ОтложитьРасчетНалогаВМежрасчетахДоРасчетаЗарплаты);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПеречислитьНалог", "Видимость", ВидимостьЭлемента);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура УстановитьСвойстваКолонокИтоговыхНачислений(Форма)
РасчетЗарплатыРасширенныйФормы.УстановитьСвойстваКолонокИтоговыхНачисленийДолейРКСН(Форма);
КонецПроцедуры
#Область УточнениеВидаВремени
&НаСервере
Процедура ДобавитьВариант(Варианты, Состояние, ВидВремениПереопределенный = Неопределено)
УчетРабочегоВремениРасширенныйФормы.ДобавитьВариантСелектора(Варианты, Состояние, ВидВремениПереопределенный);
КонецПроцедуры
&НаСервере
Функция ВариантыСелектора()
Результат = УчетРабочегоВремениРасширенныйФормы.ТаблицаВариантовОбстоятельств();
ДобавитьВариант(Результат, "ПростойПоВинеРаботника");
ДобавитьВариант(Результат, "ПростойПоВинеРаботодателя");
ДобавитьВариант(Результат, "ПростойНеЗависящийОтРаботодателяИРаботника");
ДобавитьВариант(Результат, "ПростойПоВинеРаботника", "ОтстранениеОтРаботыБезОплаты");
ДобавитьВариант(Результат, "ПростойНеЗависящийОтРаботодателяИРаботника", "ОтстранениеОтРаботыСОплатой");
ДобавитьВариант(Результат, "ПростойПоВинеРаботодателя", "ЗадержкаВыплатыЗаработнойПлаты");
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура Подключаемый_УточняющийВидВремениПриИзменении(Элемент)
Если ЗначениеЗаполнено(Объект.ВидВремени) Тогда
УчетРабочегоВремениРасширенныйКлиент.УточнитьВидВремени(ЭтаФорма, Объект.ВидВремени);
Объект.ВидПростоя = УчетРабочегоВремениРасширенныйКлиент.ПодобратьСостояниеПоВидуВремени(ЭтаФорма);
Иначе
УчетРабочегоВремениРасширенныйКлиент.ОтменитьУточнениеВидаВремени(ЭтаФорма);
Объект.Начисление = Неопределено;
КонецЕсли;
ПричинаПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_УточняющийВидВремениОткрытие(Элемент, СтандартнаяОбработка)
УчетРабочегоВремениРасширенныйКлиент.ПоказатьУточняющийВидВремени(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПереключательВариантовПриИзменении(Элемент)
Если НомерСтраницыВариантов = 0 Тогда
Элементы.СелекторОбстоятельств.ТекущаяСтраница = Элементы.СтраницаПростой;
ИначеЕсли НомерСтраницыВариантов = 1 Тогда
Элементы.СелекторОбстоятельств.ТекущаяСтраница = Элементы.СтраницаОтстранение;
Объект.НаходитьсяНаРабочихМестах = Ложь;
ИначеЕсли НомерСтраницыВариантов = 2 Тогда
Элементы.СелекторОбстоятельств.ТекущаяСтраница = Элементы.СтраницаДругиеВарианты;
КонецЕсли;
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтаФорма);
КонецПроцедуры
#КонецОбласти
#Область СреднийЗаработок
&НаСервере
Процедура ЗаполнитьПериодРасчетаСреднегоЗаработка(ИдентификаторыСтрок)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПоказательСреднийЗаработок) Тогда
Возврат;
КонецЕсли;
Для Каждого ИдентификаторСтроки Из ИдентификаторыСтрок Цикл
ДанныеСотрудника = Объект.Начисления.НайтиПоИдентификатору(ИдентификаторСтроки);
ЗаполнитьПериодРасчетаСреднегоЗаработкаСотрудника(ДанныеСотрудника)
КонецЦикла;
ПерезаполнятьСреднийЗаработок = Ложь;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПериодРасчетаСреднегоЗаработкаСотрудника(ДанныеСотрудника)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если Не ПерезаполнятьСреднийЗаработок И ДанныеСотрудника.ФиксПериодРасчетаСреднегоЗаработка Тогда
Возврат;
КонецЕсли;
ДатаНачалаСобытия = ДатаНачалаОплатыПоСреднемуЗаработку();
Если Не ЗначениеЗаполнено(ДатаНачалаСобытия)
Или Не ЗначениеЗаполнено(ДанныеСотрудника.Сотрудник) Тогда
Возврат;
КонецЕсли;
ПериодРасчетаСреднего = УчетСреднегоЗаработка.ПериодРасчетаОбщегоСреднегоЗаработкаСотрудника(ДатаНачалаСобытия, ДанныеСотрудника.Сотрудник, Объект.Начисление);
Если ПерезаполнятьСреднийЗаработок
Или НачалоМесяца(ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаНачало) <> НачалоМесяца(ПериодРасчетаСреднего.ДатаНачала)
Или НачалоМесяца(ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаОкончание) <> НачалоМесяца(ПериодРасчетаСреднего.ДатаОкончания) Тогда
ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаНачало = ПериодРасчетаСреднего.ДатаНачала;
ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаОкончание = ПериодРасчетаСреднего.ДатаОкончания;
ОбновитьДанныеДляРасчетаСреднего(ДанныеСотрудника);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеДляРасчетаСреднего(ДанныеСотрудника)
УстановитьПривилегированныйРежим(Истина);
Отбор = Новый Структура("Сотрудник", ДанныеСотрудника.Сотрудник);
СреднийЗаработокОбщий = Объект.СреднийЗаработокОбщий.Выгрузить(Отбор);
ОтработанноеВремяДляСреднегоОбщий = Объект.ОтработанноеВремяДляСреднегоОбщий.Выгрузить(Отбор);
ДанныеОбИндексации = Объект.ДанныеОбИндексации.Выгрузить(Отбор);
Если ПерезаполнятьСреднийЗаработок Тогда
СреднийЗаработокОбщий.Очистить();
ОтработанноеВремяДляСреднегоОбщий.Очистить();
ДанныеОбИндексации.Очистить();
КонецЕсли;
УчетСреднегоЗаработка.ОбновитьДанныеОбщегоСреднегоЗаработка(
Новый Структура("ДанныеОНачислениях, ДанныеОВремени, ДанныеОбИндексации",
СреднийЗаработокОбщий, ОтработанноеВремяДляСреднегоОбщий, ДанныеОбИндексации),
ДатаНачалаОплатыПоСреднемуЗаработку(),
ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаНачало,
ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаОкончание,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДанныеСотрудника.Сотрудник), ,
Объект.Ссылка,
Истина);
ОчиститьДанныеСреднегоЗаработкаСотрудников(ДанныеСотрудника.Сотрудник);
Для Каждого СтрокаСотрудника Из СреднийЗаработокОбщий Цикл
ЗаполнитьЗначенияСвойств(Объект.СреднийЗаработокОбщий.Добавить(), СтрокаСотрудника);
КонецЦикла;
Для Каждого СтрокаСотрудника Из ОтработанноеВремяДляСреднегоОбщий Цикл
ЗаполнитьЗначенияСвойств(Объект.ОтработанноеВремяДляСреднегоОбщий.Добавить(), СтрокаСотрудника);
КонецЦикла;
Для Каждого СтрокаСотрудника Из ДанныеОбИндексации Цикл
ЗаполнитьЗначенияСвойств(Объект.ДанныеОбИндексации.Добавить(), СтрокаСотрудника);
КонецЦикла;
РассчитатьСреднийЗаработок(ДанныеСотрудника);
КонецПроцедуры
&НаСервере
Процедура РассчитатьСреднийЗаработок(ДанныеСотрудника)
Отбор = Новый Структура("Сотрудник", ДанныеСотрудника.Сотрудник);
СреднийЗаработокОбщий = Объект.СреднийЗаработокОбщий.Выгрузить(Отбор);
ОтработанноеВремяДляСреднегоОбщий = Объект.ОтработанноеВремяДляСреднегоОбщий.Выгрузить(Отбор);
ДанныеОбИндексации = Объект.ДанныеОбИндексации.Выгрузить(Отбор);
ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
ДополнительныеПараметры.Индексации = ДанныеОбИндексации;
ДополнительныеПараметры.ДатаНачалаСобытия = ДатаНачалаОплатыПоСреднемуЗаработку();
ДополнительныеПараметры.НачалоПериода = ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаНачало;
ДополнительныеПараметры.ОкончаниеПериода = ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаОкончание;
ДополнительныеПараметры.ПоЧасам = ИспользоватьСреднечасовойЗаработок(ДанныеСотрудника);
ЗначенияПоказателей = УчетСреднегоЗаработкаКлиентСервер.ЗначенияПоказателейСреднегоЗаработкаОбщего(СреднийЗаработокОбщий, ОтработанноеВремяДляСреднегоОбщий, ДополнительныеПараметры);
ДанныеСотрудника.СреднийЗаработок = ЗначенияПоказателей.СреднийЗаработокОбщий;
Если ПолучитьФункциональнуюОпцию("ИндексироватьСреднийЗаработокЧастично") Тогда
ДанныеСотрудника.СреднийЗаработокИндексируемый = ЗначенияПоказателей.СреднийЗаработокИндексируемый;
ДанныеСотрудника.СреднийЗаработокНеиндексируемый = ЗначенияПоказателей.СреднийЗаработокНеиндексируемый;
КонецЕсли;
Если Объект.ПланируемаяДатаВыплаты < УчетНДФЛРасширенный.ДатаЗаконаПроРКиЕАЭС() Тогда
НулевыеЗначенияПоказателейРКСН = Справочники.ПоказателиРасчетаЗарплаты.НулевыеЗначенияПоказателейРКСН();
ЗаполнитьЗначенияСвойств(ДанныеСотрудника, НулевыеЗначенияПоказателейРКСН);
Иначе
ЗаполнитьЗначенияСвойств(ДанныеСотрудника, ЗначенияПоказателей);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьИспользованиеСреднечасовогоЗаработка()
ИспользуетсяСреднечасовойЗаработок = Ложь;
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ПоказательСреднийЗаработок) Тогда
Возврат;
КонецЕсли;
Если Объект.ВнутрисменныйПростой Тогда
ИспользуетсяСреднечасовойЗаработок = Истина;
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если УчетСреднегоЗаработка.НачислениеИспользуетСреднечасовойЗаработок(Объект.Начисление) Тогда
ИспользуетсяСреднечасовойЗаработок = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОчиститьДанныеСреднегоЗаработкаСотрудников(Сотрудники)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Сотрудники) <> Тип("Массив") Тогда
МассивСотрудников = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудники);
Иначе
МассивСотрудников = Сотрудники;
КонецЕсли;
Для Каждого Сотрудник Из МассивСотрудников Цикл
Отбор = Новый Структура("Сотрудник", Сотрудник);
НайденныеСтроки = Объект.СреднийЗаработокОбщий.НайтиСтроки(Отбор);
Для Каждого СтрокаСотрудника Из НайденныеСтроки Цикл
Объект.СреднийЗаработокОбщий.Удалить(СтрокаСотрудника);
КонецЦикла;
НайденныеСтроки = Объект.ОтработанноеВремяДляСреднегоОбщий.НайтиСтроки(Отбор);
Для Каждого СтрокаСотрудника Из НайденныеСтроки Цикл
Объект.ОтработанноеВремяДляСреднегоОбщий.Удалить(СтрокаСотрудника);
КонецЦикла;
НайденныеСтроки = Объект.ДанныеОбИндексации.НайтиСтроки(Отбор);
Для Каждого СтрокаСотрудника Из НайденныеСтроки Цикл
Объект.ДанныеОбИндексации.Удалить(СтрокаСотрудника);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОчиститьДанныеСреднегоЗаработка()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Объект.СреднийЗаработокОбщий.Очистить();
Объект.ОтработанноеВремяДляСреднегоОбщий.Очистить();
Объект.ДанныеОбИндексации.Очистить();
Для Каждого СтрокаСотрудника Из Объект.Начисления Цикл
СтрокаСотрудника.ПериодРасчетаСреднегоЗаработкаНачало = '00010101';
СтрокаСотрудника.ПериодРасчетаСреднегоЗаработкаОкончание = '00010101';
СтрокаСотрудника.ФиксПериодРасчетаСреднегоЗаработка = Ложь;
СтрокаСотрудника.СреднийЗаработок = 0;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСреднийЗаработок(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если СтрНайти(Поле.Имя, "КомандаРасшифровки") = 0 Тогда
Возврат;
КонецЕсли;
ДанныеСтроки = Элемент.ТекущиеДанные;
ИмяПоляШаблон = СтрЗаменить(Сред(Поле.Имя, СтрНайти(Поле.Имя, "КомандаРасшифровки")), "КомандаРасшифровки", "%1");
Показатель = ДанныеСтроки[СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяПоляШаблон, "Показатель")];
ПоказателиСреднийЗаработокОбщий = УчетСреднегоЗаработкаКлиентСервер.ПоказателиОбщегоСреднегоЗаработка();
Если ПоказателиСреднийЗаработокОбщий.Найти(Показатель) = Неопределено Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ДополнительныеПараметры = Новый Структура("ИмяПоляШаблон, Показатель", ИмяПоляШаблон, Показатель);
Оповещение = Новый ОписаниеОповещения("ОткрытьСреднийЗаработокЗавершение", ЭтотОбъект, ДополнительныеПараметры);
УчетСреднегоЗаработкаКлиент.ОткрытьФормуВводаСреднегоЗаработкаОбщий(ПараметрыРедактированияСреднегоЗаработка(ДанныеСтроки.ПолучитьИдентификатор()), ЭтаФорма, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСреднийЗаработокЗавершение(РезультатРедактирования, ДополнительныеПараметры) Экспорт
Если РезультатРедактирования = Неопределено Тогда
Возврат;
КонецЕсли;
ПеренестиДанныеУчетаСреднегоЗаработкаВДокумент(РезультатРедактирования, ДополнительныеПараметры);
ТекущиеДанные = Элементы.Начисления.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
Объект.Начисление);
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецЕсли;
НачисленияПриОкончанииРедактированияНаСервере();
КонецПроцедуры
&НаСервере
Функция ПараметрыРедактированияСреднегоЗаработка(ИдентификаторСтроки)
ДанныеСотрудника = Объект.Начисления.НайтиПоИдентификатору(ИдентификаторСтроки);
ПараметрыРедактирования = УчетСреднегоЗаработкаКлиентСервер.ПараметрыРедактированияОбщегоСреднегоЗаработкаПоДокументу();
ПараметрыРедактирования.ДокументСсылка = Объект.Ссылка;
ПараметрыРедактирования.Сотрудник = ДанныеСотрудника.Сотрудник;
ПараметрыРедактирования.Организация = Объект.Организация;
ПараметрыРедактирования.ДатаНачалаСобытия = ДатаНачалаОплатыПоСреднемуЗаработку();
ПараметрыРедактирования.Начисление = Объект.Начисление;
ПараметрыРедактирования.НачалоПериодаРасчета = ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаНачало;
ПараметрыРедактирования.ОкончаниеПериодаРасчета = ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаОкончание;
ПараметрыРедактирования.ЭтоСреднечасовойЗаработок = ИспользоватьСреднечасовойЗаработок(ДанныеСотрудника);
ПараметрыРедактирования.ФиксПериодРасчета = ДанныеСотрудника.ФиксПериодРасчетаСреднегоЗаработка;
Отбор = Новый Структура("Сотрудник", ДанныеСотрудника.Сотрудник);
НайденныеСтроки = Объект.СреднийЗаработокОбщий.НайтиСтроки(Отбор);
ДанныеНачислений = УчетСреднегоЗаработка.ПустаяТаблицаНачисленийСреднийЗаработокОбщий();
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(НайденныеСтроки, ДанныеНачислений);
ПараметрыРедактирования.ДанныеОНачислениях = ПоместитьВоВременноеХранилище(ДанныеНачислений);
НайденныеСтроки = Объект.ОтработанноеВремяДляСреднегоОбщий.НайтиСтроки(Отбор);
ОтработанноеВремя = УчетСреднегоЗаработка.ПустаяТаблицаОтработанноеВремяСреднийЗаработокОбщий();
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(НайденныеСтроки, ОтработанноеВремя);
ПараметрыРедактирования.ДанныеОВремени = ПоместитьВоВременноеХранилище(ОтработанноеВремя);
НайденныеСтроки = Объект.ДанныеОбИндексации.НайтиСтроки(Отбор);
ДанныеИндексации = УчетСреднегоЗаработка.ПустаяТаблицаДанныеИндексации();
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(НайденныеСтроки, ДанныеИндексации);
ПараметрыРедактирования.ДанныеОбИндексации = ПоместитьВоВременноеХранилище(ДанныеИндексации);
Возврат ПараметрыРедактирования;
КонецФункции
&НаСервере
Процедура ПеренестиДанныеУчетаСреднегоЗаработкаВДокумент(РезультатРедактирования, ДополнительныеПараметры)
ОчиститьДанныеСреднегоЗаработкаСотрудников(РезультатРедактирования.Сотрудник);
УчетСреднегоЗаработка.ЗаполнитьДанныеУчетаОбщегоСреднегоЗаработка(
Объект.СреднийЗаработокОбщий,
Объект.ОтработанноеВремяДляСреднегоОбщий,
Объект.ДанныеОбИндексации,
РезультатРедактирования,
Модифицированность);
ИдентификаторСтроки = Элементы.Начисления.ТекущаяСтрока;
ДанныеСотрудника = Объект.Начисления.НайтиПоИдентификатору(ИдентификаторСтроки);
ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаНачало = РезультатРедактирования.НачалоПериодаРасчета;
ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаОкончание = РезультатРедактирования.ОкончаниеПериодаРасчета;
ДанныеСотрудника.ФиксПериодРасчетаСреднегоЗаработка = РезультатРедактирования.ФиксПериодРасчета;
ДанныеСотрудника.СреднийЗаработок = РезультатРедактирования.СреднийЗаработок;
ДанныеСотрудника.СреднийЗаработокРК = РезультатРедактирования.СреднийЗаработокРК;
ДанныеСотрудника.СреднийЗаработокСН = РезультатРедактирования.СреднийЗаработокСН;
Если РезультатРедактирования.Свойство("ЧастичнаяИндексация") Тогда
ДанныеСотрудника.СреднийЗаработокИндексируемый = РезультатРедактирования.ЧастичнаяИндексация.ИндексируемыйЗаработок;
ДанныеСотрудника.СреднийЗаработокИндексируемыйРК = РезультатРедактирования.ЧастичнаяИндексация.ИндексируемыйЗаработокРК;
ДанныеСотрудника.СреднийЗаработокИндексируемыйСН = РезультатРедактирования.ЧастичнаяИндексация.ИндексируемыйЗаработокСН;
ДанныеСотрудника.СреднийЗаработокНеиндексируемый = РезультатРедактирования.ЧастичнаяИндексация.НеиндексируемыйЗаработок;
ДанныеСотрудника.СреднийЗаработокНеиндексируемыйРК = РезультатРедактирования.ЧастичнаяИндексация.НеиндексируемыйЗаработокРК;
ДанныеСотрудника.СреднийЗаработокНеиндексируемыйСН = РезультатРедактирования.ЧастичнаяИндексация.НеиндексируемыйЗаработокСН;
КонецЕсли;
ИмяПоля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ДополнительныеПараметры.ИмяПоляШаблон, "Значение");
Если ДополнительныеПараметры.Показатель = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ПоказателиРасчетаЗарплаты.СреднийЗаработокОбщий") Тогда
ЗначениеПоказателяСреднего = ДанныеСотрудника.СреднийЗаработок;
Иначе
ИдентфикаторПоказателяСреднегоЗаработка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДополнительныеПараметры.Показатель, "ИдентификаторСлужебный");
ЗначениеПоказателяСреднего = ДанныеСотрудника[ИдентфикаторПоказателяСреднегоЗаработка];
КонецЕсли;
ДанныеСотрудника[ИмяПоля] = ЗначениеПоказателяСреднего;
КонецПроцедуры
&НаСервере
Функция ДатаНачалаОплатыПоСреднемуЗаработку()
Возврат ?(Объект.ВнутрисменныйПростой, Объект.ДатаПростоя, Объект.ДатаНачала)
КонецФункции
&НаСервере
Функция ИспользоватьСреднечасовойЗаработок(ДанныеСотрудника)
Если ДанныеСотрудника.Свойство("ВремяВЧасах") Тогда
Возврат ДанныеСотрудника["ВремяВЧасах"];
КонецЕсли;
Возврат ИспользуетсяСреднечасовойЗаработок;
КонецФункции
&НаСервере
Процедура УстановитьПоказательСреднийЗаработок()
ПоказательСреднийЗаработок = Неопределено;
ПоказателиСреднийЗаработокОбщий = УчетСреднегоЗаработкаКлиентСервер.ПоказателиОбщегоСреднегоЗаработка();
ВидРасчетаИнфо = ЗарплатаКадрыРасширенныйПовтИсп.ПолучитьИнформациюОВидеРасчета(Объект.Начисление);
Для Каждого ДанныеПоказателя Из ВидРасчетаИнфо.Показатели Цикл
Если ПоказателиСреднийЗаработокОбщий.Найти(ДанныеПоказателя.Показатель) <> Неопределено Тогда
ПоказательСреднийЗаработок = ДанныеПоказателя.Показатель;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция КоэффициентыРаспределенияСреднегоЗаработкаДокумента()
КоэффициентыРаспределенияСотрудников = Новый Соответствие;
Для Каждого ДанныеСотрудника Из Объект.Начисления Цикл
Отбор = Новый Структура("Сотрудник", ДанныеСотрудника.Сотрудник);
СреднийЗаработокОбщий = Объект.СреднийЗаработокОбщий.Выгрузить(Отбор);
ОтработанноеВремяДляСреднегоОбщий = Объект.ОтработанноеВремяДляСреднегоОбщий.Выгрузить(Отбор);
ДанныеОбИндексации = Объект.ДанныеОбИндексации.Выгрузить(Отбор);
ДополнительныеПараметры = УчетСреднегоЗаработкаКлиентСервер.ДополнительныеПараметрыРасчетаСреднегоЗаработка();
ДополнительныеПараметры.Индексации = ДанныеОбИндексации;
ДополнительныеПараметры.ДатаНачалаСобытия = ДатаНачалаОплатыПоСреднемуЗаработку();
ДополнительныеПараметры.НачалоПериода = ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаНачало;
ДополнительныеПараметры.ОкончаниеПериода = ДанныеСотрудника.ПериодРасчетаСреднегоЗаработкаОкончание;
ДополнительныеПараметры.ПоЧасам = ИспользоватьСреднечасовойЗаработок(ДанныеСотрудника);
ДополнительныеПараметры.ПоСтатьямФинансирования = Истина;
ДанныеДляРасчета = УчетСреднегоЗаработкаКлиентСервер.ДанныеДляРасчетаСреднегоЗаработка(
СреднийЗаработокОбщий,
ОтработанноеВремяДляСреднегоОбщий,
ДополнительныеПараметры);
ТаблицаКоэффициентов = ОтражениеЗарплатыВБухучетеРасширенный.НоваяТаблицаКоэффициентыРаспределенияСреднегоЗаработка();
Для Каждого СтрокаНачислений Из ДанныеДляРасчета["Заработок"] Цикл
НоваяСтрока = ТаблицаКоэффициентов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаНачислений);
НоваяСтрока.Коэффициент = СтрокаНачислений["Учтено"];
КонецЦикла;
ОтражениеЗарплатыВБухучетеРасширенный.СвернутьТаблицуКоэффициентовРаспределенияСреднегоЗаработка(ТаблицаКоэффициентов);
КоэффициентыРаспределения = Новый Соответствие;
КоэффициентыРаспределения.Вставить(Перечисления.СпособыРасчетаНачислений.ПустаяСсылка(), ТаблицаКоэффициентов);
КоэффициентыРаспределенияСотрудников.Вставить(ДанныеСотрудника.Сотрудник, КоэффициентыРаспределения);
КонецЦикла;
Возврат КоэффициентыРаспределенияСотрудников;
КонецФункции
#КонецОбласти
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПодключаемыеКоманды(УправляемаяФорма)
Источник = Новый Структура;
Источник.Вставить("Ссылка", УправляемаяФорма.Объект.Ссылка);
Источник.Вставить("ПериодРегистрации", УправляемаяФорма.Объект.ПериодРегистрации);
Источник.Вставить("НомерСтраницыВариантов", УправляемаяФорма.НомерСтраницыВариантов);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(УправляемаяФорма, Источник);
ЭДОБЗККлиентСервер.ОбновитьКоманды(УправляемаяФорма, УправляемаяФорма.Объект, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьИзмененныеДанныеПерерасчета(ТекущиеДанные) Экспорт
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура ПослеУдаленияПерерасчета() Экспорт
НачисленияПерерасчетПослеУдаленияНаСервере();
КонецПроцедуры
#КонецОбласти
#Область Инициализация
СтарыеЗначенияКонтролируемыхПолей = Новый Соответствие;
СотрудникиКРасчету = Новый Соответствие;
ЗакрытьПослеЗаписи = Ложь;
#КонецОбласти