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