Как в 1С:ЗУП 3.0 рассчитать северную надбавку на фиксированную премию без пропорционального деления при изменении процента внутри месяца

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

В практике расчета заработной платы в районах Крайнего Севера и приравненных к ним местностях часто возникает специфическая ситуация: у сотрудника в середине месяца изменяется процент северной надбавки (например, в связи с увеличением стажа), и в этом же месяце ему начисляется разовая премия фиксированной суммой. Типовой механизм конфигурации 1С:Зарплата и управление персоналом 3.0/3.1 настроен таким образом, что любое начисление, входящее в расчетную базу северной надбавки (СН), распределяется пропорционально времени. В результате фиксированная премия «разрезается» на части, и надбавка начисляется только на ту долю, которая пришлась на период действия нового процента. Рассмотрим подробнее, как работает этот механизм и какими способами можно добиться корректного, с точки зрения бухгалтера, расчета.

Анализ типовой логики распределения расчетной базы

Прежде всего, разберем ситуацию на примере. Допустим, оклад сотрудника составляет 10 000 рублей, а фиксированная премия — 9 000 рублей. С 1 по 12 число месяца процент СН равен 0, а с 13 числа — 10%. Программа видит, что в месяце 20 рабочих дней, из которых 12 дней (с 13 по 30 число) действовала надбавка. Логика 1С такова: она суммирует весь доход, входящий в базу СН (10 000 + 9 000 = 19 000), делит его на 20 дней и умножает на 12 дней действия надбавки. Формула выглядит так: (10000 + 9000) / 20 * 12 * 10%.

Однако с точки зрения многих экспертов и аудиторов, фиксированная премия за конкретное достижение не должна зависеть от отработанного времени. Если она выплачена в период, когда у сотрудника уже есть право на 10% надбавки, то СН должна начисляться на всю сумму премии целиком. Выясним причину такого поведения программы: 1С рассматривает начисление как «длящееся», если в документе указан период — месяц. Система считает, что доход заработан равномерно в течение всего интервала.

Способ 1. Использование документа «Разовое начисление» и управление периодом

Рассмотрим методический способ решения без изменения программного кода. Попробуем изменить вид документа, которым регистрируется премия. Вместо документа Премия воспользуемся документом Разовое начисление. Посмотрим на алгоритм действий:

  1. Перейдем в настройки начисления (премии) и на вкладке Основное установим переключатель «Начисление выполняется» в положение «По отдельному документу», выбрав «Разовое начисление».
  2. В самом документе Разовое начисление крайне важно обратить внимание на даты начала и окончания периода.
  3. Установим дату начала и дату окончания таким образом, чтобы они полностью попадали в период действия новой ставки северной надбавки (например, с 30 по 30 число месяца).

Проанализируем результат: если период начисления в документе сужен до одного дня, в котором уже действует 10% СН, программа при сборе расчетной базы должна отнести всю сумму премии именно к этому периоду. Однако, как показывает практика (и сообщения участников обсуждения), в старых релизах ЗУП 3.0 этот механизм не всегда отрабатывал корректно, и программа все равно могла пытаться «растянуть» базу по всему месяцу, если в виде начисления указан учет времени как «Явка».

Способ 2. Модификация формулы северной надбавки через дополнительный показатель

Если типовое распределение базы категорически не подходит, мы можем исключить премию из стандартной расчетной базы СН и добавить её в формулу через специальный показатель. Разберем этот путь по шагам:

  1. Создадим новый показатель (Настройки — Показатели расчета зарплаты), назовем его ПремияДляСевернойНадбавки. Назначение показателя — «Для сотрудника», тип — «Денежный», используется «Только в месяце, в котором вводится значение (разовое использование)».
  2. Создадим шаблон ввода исходных данных для этого показателя, чтобы пользователи могли вводить сумму документом Данные для расчета зарплаты.
  3. В настройках начисления Северная надбавка изменим формулу. Вместо стандартной Результат = РасчетнаяБаза * ПроцентСевернойНадбавки / 100 используем:
    (РасчетнаяБаза + ПремияДляСевернойНадбавки) * ПроцентСевернойНадбавки / 100.
  4. Исключим саму премию из списка базовых начислений на вкладке Расчет базы в настройках СН.

Важный нюанс: этот метод заставляет программу всегда начислять процент на этот показатель в текущем периоде. Однако, как отметили участники форума, если у сотрудника в середине месяца меняется не только процент, но и, например, ставка или подразделение, может возникнуть ситуация «двойного счета», когда показатель приплюсуется к каждому разрезу расчета. Кроме того, это неудобно для пользователей, так как им приходится вводить данные в два разных места.

Способ 3. Программная доработка (для продвинутых пользователей и программистов)

Рассмотрим вариант автоматизации, предложенный в обсуждении. Чтобы не заставлять пользователей вводить данные дважды, можно использовать механизм подписок на события. Идея заключается в том, чтобы при проведении документа Премия автоматически записывать сумму в регистр сведений Значения разовых показателей расчетной базы (или аналогичный в зависимости от версии), который будет подтягиваться в формулу СН.

Пример логики кода для реализации подписки на событие ОбработкаПроведения документа Премия:


Процедура ПриПроведенииПремии(Источник, Отказ, РежимПроведения)
    // Проверяем, что это наша фиксированная премия
    Для Каждого СтрокаНачисления Из Источник.Начисления Цикл
        Если СтрокаНачисления.Начисление = ПороговоеНачисление Тогда
            // Формируем движение по регистру показателей
            Запись = РегистрыСведений.ЗначенияРазовыхПоказателейСотрудников.СоздатьМенеджерЗаписи();
            Запись.Сотрудник = СтрокаНачисления.Сотрудник;
            Запись.Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("ПремияФикс");
            Запись.Значение = СтрокаНачисления.Результат;
            Запись.ПериодДействия = Источник.Дата;
            Запись.Записать();
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Проанализируем риски этого решения. Основная проблема — разделение периодов. Если в месяце есть кадровые переводы или изменения процента надбавки, 1С создает несколько записей в регистре расчета (виртуальных таблицах базы). Если мы просто добавим показатель в формулу, система применит его к каждому отрезку времени, где расчетная база была ненулевой. Это приведет к завышению результата.

Резюме и рекомендации

Выяснив причины и проанализировав способы, мы можем сделать следующие выводы:

  1. Штатное поведение программы: 1С:ЗУП 3.0/3.1 всегда делит фиксированную сумму по дням, если период действия начисления охватывает весь месяц. Это заложено в ядро механизма РасчетнаяБаза.
  2. Оптимальное решение без кода: Использовать Разовое начисление и устанавливать период действия (даты начала и конца) в один день — последний день месяца. В этом случае система отнесет сумму к последнему действующему проценту СН.
  3. Сложности с автоматизацией: При использовании формул с дополнительными показателями нужно внимательно следить за тем, чтобы показатель не «удваивался» при наличии нескольких записей о начислении СН в одном месяце (например, при смене процента 15-го числа).

Посмотрим на ситуацию со стороны законодательства: если вы решите не делить премию, обязательно закрепите этот порядок в локальном нормативном акте организации. Это поможет избежать претензий при проверках, так как в программе будет реализован алгоритм, отличный от «усредненного» типового решения.

В современных релизах (ЗУП 3.1.23 и выше) разработчики добавили больше гибкости в настройки приоритетов и расчетных баз, однако описанная проблема остается актуальной для всех случаев, когда используется РасчетнаяБаза. Рекомендуем всегда проверять результат на тестовом примере перед массовым расчетом, особенно если в организации много сотрудников с часто меняющимся «северным» стажем.

← На главную