При настройке ежемесячных доплат и надбавок (например, надбавки за выслугу лет фиксированной суммой) часто требуется выполнить расчет пропорционально отработанному времени, но так, чтобы общая сумма за месяц ни при каких обстоятельствах не превысила установленный предел. Рассмотрим типовую ситуацию, выясним, почему стандартные формулы с ограничением дают сбой при кадровых перемещениях внутри месяца, и разберем практические способы решения этой задачи.
Проанализируем конкретный пример. Сотруднику назначена надбавка за выслугу лет в размере 700 рублей в месяц. При норме 17 рабочих дней сотрудник отработал 18 дней (17 по графику плюс 1 день в выходной или праздник). В середине месяца (16 числа) произошел кадровый перевод, в результате чего месяц разбился на два периода действия:
Для ограничения суммы часто пытаются применить формулу с условием:
?(НормаДней >= ОтработаноДней, РазмерНадбавкиЗаВыслугуЛет / НормаДней * ОтработаноДней, РазмерНадбавкиЗаВыслугуЛет)
или аналогичную конструкцию с функцией МИН:
МИН(РазмерНадбавкиЗаВыслугуЛет / НормаДней * ОтработаноДней, РазмерНадбавкиЗаВыслугуЛет)
Посмотрим на результат расчета, который выдает программа:
В сумме за месяц получается 741,18 рубля вместо положенного максимума в 700 рублей. Ограничение не сработало.
Разберем внутренний механизм расчета зарплаты в «1С:Зарплата и управление персоналом 3.1». При оформлении кадрового перевода создаются две отдельные записи в регистре расчета. Механизм расчета вычисляет каждую строку изолированно:
ОтработаноДней, ВремяВДнях) определяются строго в границах текущего периода действия конкретной строки (в первой строке — 6 дней, во второй — 12 дней).НормаДней определяется за весь месяц (17 дней).МИН контролирует непревышение порога 700 рублей внутри каждого отрезка отдельно, а не по итогам месяца в целом.Рассмотрим возможные варианты настройки начисления для получения корректного результата.
Для того чтобы программа не дробила начисление на отдельные периоды при кадровых изменениях, можно задействовать методику объединения расчета («схлопывания»). Этот метод часто применяется разработчиками конфигурации для расчетов, которые должны подводить итог за весь месяц (например, доплата до МРОТ).
Разберем настройку по шагам:
ФиктивныйНакопитель). Назначим ему назначение «Для сотрудника», тип «Числовой», порядок ввода: «Накапливается по отдельным значениям документами ввода данных для расчета зарплаты». Значение этого показателя вводить не потребуется — он останется равным нулю.
МИН(РазмерНадбавкиЗаВыслугуЛет / НормаДней * ВремяВДнях, РазмерНадбавкиЗаВыслугуЛет) + (ФиктивныйНакопитель * 0)
Благодаря наличию накапливаемого показателя с такой настройкой программа объединит начисление в одну строку за месяц в целом, даже если внутри месяца был кадровый перевод без изменения самого размера надбавки. Ограничение через МИН отработает один раз на общую сумму отработанного времени за месяц.
В объекте плана видов расчета Начисления существует внутренний признак НачисляетсяВЦеломЗаМесяц. Если кадровый перевод изменяет только подразделение или должность, но не меняет размер самой плановой надбавки, начисление можно принудительно рассчитывать одной строкой.
НачисляетсяВЦеломЗаМесяц в значение Истина и выполним изменение.Важно: При последующем ручном редактировании и сохранении карточки начисления через пользовательский интерфейс типовая конфигурация может автоматически пересчитать данный реквизит в зависимости от состава формулы. Если карточка будет изменена, операцию через групповое изменение реквизитов потребуется повторить.
Если специфика оплаты труда жестко требует контроля суммарных ограничений по итогам месяца с учетом переработок, праздничных и неявок, надежным штатным вариантом является отказ от расчета в документе Начисление зарплаты и взносов в пользу разового расчета:
Разовое начисление).Разовое начисление можно подключить внешнюю обработку заполнения табличной части, которая автоматически соберет стаж, норму, факт времени и рассчитает итоговую сумму с учетом установленного максимума.Если требуется сохранить автоматический расчет внутри документа Начисление зарплаты и взносов и при этом не снимать конфигурацию с поддержки, создадим расширение:
Если СуммаЗаМесяц > МаксимальныйРазмер Тогда
Излишек = СуммаЗаМесяц - МаксимальныйРазмер;
СтрокаНачисленияПоследняя.Результат = СтрокаНачисленияПоследняя.Результат - Излишек;
КонецЕсли;
Такой подход позволяет полностью автоматизировать расчет, сохранить корректное распределение сумм по подразделениям и периодам затрат и избежать снятия конфигурации с типовой поддержки.