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