При автоматизации кадрового учета и расчета заработной платы в конфигурации 1С:Зарплата и Управление Персоналом 2.5 нередко возникает задача узнать актуальный процент северной надбавки конкретного сотрудника на определенную дату. Особенность северной надбавки заключается в том, что ее размер не хранится в виде фиксированного значения в регистре плановых начислений. В отличие от оклада или фиксированных доплат, процент надбавки рассчитывается динамически в зависимости от накопленного стажа работы в районах Крайнего Севера (или приравненных к ним местностях), группы надбавки и возраста сотрудника.
Разберем, почему данные нельзя прочитать простым запросом к плановым начислениям, и подробно рассмотрим программные способы расчета, а также пользовательские средства конфигурации.
Проанализируем структуру хранения информации в 1С:ЗУП 2.5. Если мы попытаемся прочитать процент надбавки из периодического регистра сведений ПлановыеНачисленияРаботниковОрганизаций, то обнаружим, что колонка с показателем пуста или равна нулю. Плановое начисление лишь фиксирует сам факт назначения вида расчета конкретному сотруднику.
Исходные сведения, определяющие шкалу и динамику роста процента, хранятся отдельно:
СведенияОСтажеРаботыНаСевере. Ведущим измерением здесь является ФизЛицо, а не Сотрудник. В ресурсах и реквизитах регистра содержатся дата отсчета, порядок начисления (перечисление ПорядокНачисленияСеверныхНадбавок), начальный процент, а также количество месяцев и дней северного стажа, зафиксированных на эту дату.Рассмотрим наиболее удобный вариант расчета процента на конкретную дату (например, для вывода в печатные формы приказов или трудовых договоров). Для этого используется метод ФормированиеПечатныхФормЗК.ПолучитьПроцентСевернойНадбавкиНаДату().
Сначала мы получаем актуальную запись о стаже физического лица с помощью среза последних, после чего передаем прочитанные параметры в функцию расчета:
// Определяем физическое лицо сотрудника
ФизЛицо = СотрудникСсылка.ФизЛицо;
ДатаРасчета = ТекущаяДата(); // Либо ВложеннаяВыборка.ДатаПриема, период отчета и т.д.
Отбор = Новый Структура("ФизЛицо", ФизЛицо);
СрезСеверныйСтаж = РегистрыСведений.СведенияОСтажеРаботыНаСевере.СрезПоследних(ДатаРасчета, Отбор);
СС_Период = '00010101';
СС_НачальныйПроцентСевернойНадбавки = 0;
СС_ПорядокНачисленияСеверныхНадбавок = Справочники.ПорядокНачисленияСеверныхНадбавок.ПустаяСсылка();
СС_СеверныйСтажДней = 0;
СС_СеверныйСтажМесяцев = 0;
Если СрезСеверныйСтаж.Количество() > 0 Тогда
СтрокаСтажа = СрезСеверныйСтаж[0];
СС_Период = СтрокаСтажа.Период;
СС_НачальныйПроцентСевернойНадбавки = СтрокаСтажа.НачальныйПроцентСевернойНадбавки;
СС_ПорядокНачисленияСеверныхНадбавок = СтрокаСтажа.ПорядокНачисленияСеверныхНадбавок;
СС_СеверныйСтажДней = СтрокаСтажа.СеверныйСтажДней;
СС_СеверныйСтажМесяцев = СтрокаСтажа.СеверныйСтажМесяцев;
КонецЕсли;
НадбавкаСевПроц = 0;
Если ЗначениеЗаполнено(СС_ПорядокНачисленияСеверныхНадбавок) Тогда
НадбавкаСевПроц = ФормированиеПечатныхФормЗК.ПолучитьПроцентСевернойНадбавкиНаДату(
СС_Период,
СС_ПорядокНачисленияСеверныхНадбавок,
СС_НачальныйПроцентСевернойНадбавки,
СС_СеверныйСтажМесяцев,
СС_СеверныйСтажДней,
ДатаРасчета
);
КонецЕсли;
Данная функция анализирует шкалу порядка начисления, прибавляет к начальному стажу время, прошедшее от СС_Период до ДатаРасчета, и возвращает итоговое числовое значение процента.
Если нам необходимо получить шкалу изменения процента за интервал времени или выполнить расчет в контексте начисления заработной платы, обратимся к общему модулю ПроведениеРасчетов. Метод ПолучитьПроцентыСевернойНадбавкиЗаПериод() применяется при расчете самого документа «Начисление зарплаты сотрудникам организаций».
Особенности применения этого метода:
ДатаНачала и ДатаОкончания).Если задача стоит перед пользователем или аналитиком без необходимости писать код, процент надбавки можно увидеть с помощью типового отчета:
При разработке алгоритмов получения процента северной надбавки следует помнить о следующих моментах:
ФизическиеЛица. Если сотрудник работает по внутреннему или внешнему совместительству, северный стаж и вычисленный процент будут одинаковыми для всех его позиций, но вид расчета должен быть назначен по каждому трудовому договору отдельно.