Настройка надбавки за выслугу лет нередко вызывает сложности у расчетчиков зарплаты. Типовой механизм предполагает расчет процентом от фактически начисленной расчетной базы. Однако на практике возникают нестандартные требования: необходимость начислять надбавку за время командировок, рассчитывать ее от оклада для сотрудников со сдельной оплатой труда или жестко ограничивать итоговую сумму размером оклада. Разберем подробно, как решить эти задачи в программе 1С:Зарплата и управление персоналом 3.1 с помощью типовых инструментов и редактора формул.
Проанализируем распространенную проблему: если сотруднику назначена надбавка за выслугу лет, которая зависит от отработанного времени или оклада, при оформлении командировки надбавка за эти дни перестает рассчитываться либо уменьшается ее база. Выясним причину такого поведения системы.
В программе начисление Командировка по умолчанию имеет более высокий приоритет по отношению к повременным начислениям и надбавкам. Когда регистрируется документ отсутствия, период командировки исключается из периода действия зависимого начисления.
Чтобы надбавка начислялась в том числе и за дни командировок, выполним следующие действия:
Командировка.После исключения командировки из вытесняющих начислений программа перестанет обрезать период действия надбавки на время служебных поездок.
Рассмотрим ситуацию, когда сотруднику установлен условный оклад или тарифный разряд, но работает он по сдельным расценкам или по договорам подряда, то есть сам вид расчета Оплата по окладу ему не начисляется. При этом надбавка за стаж должна рассчитываться строго от размера этого базового тарифа.
Если использовать стандартную переменную РасчетнаяБаза, то при отсутствии начислений база будет равна нулю, и надбавка не рассчитается. Решим эту задачу отказом от расчетной базы и прямым использованием показателей оклада:
ПроцентНадбавкиЗаВыслугуЛет / 100 * ТарифнаяСтавкаМесячная * (ВремяВДнях / НормаДней)
Если у сотрудника оклад зафиксирован при приеме на работу как плановое значение, но не входит в состав действующих начислений, показатель ТарифнаяСтавкаМесячная (или персональный показатель сотрудника) все равно будет хранить установленную сумму и корректно передавать ее в расчет.
Разберем случай, когда у сотрудников при сменном графике или переработках сумма надбавки от расчетной базы превышает размер планового оклада, а локальными нормативными актами предприятия установлено жесткое ограничение: надбавка не может быть больше оклада.
Для реализации этого условия в формуле начисления используют логическую конструкцию ? (условный оператор Если – Тогда – Иначе):
?( (ПроцентНадбавкиЗаВыслугуЛет / 100 * РасчетнаяБаза) > (ПроцентНадбавкиЗаВыслугуЛет / 100 * Оклад), ПроцентНадбавкиЗаВыслугуЛет / 100 * Оклад, ПроцентНадбавкиЗаВыслугуЛет / 100 * РасчетнаяБаза )
Однако более лаконичным и безопасным способом решения в современных версиях программы является использование встроенной математической функции Мин. Упростим конструкцию, избегая дублирования условий:
Мин(ПроцентНадбавкиЗаВыслугуЛет / 100 * РасчетнаяБаза, Оклад * ДоляНеполногоРабочегоВремени)
Функция Мин автоматически сравнивает два вычисленных значения и возвращает наименьшее из них. Это исключает ошибки при закрытии скобок и делает формулу понятной для чтения.
Проанализируем проблему, с которой сталкиваются пользователи, когда надбавка задана фиксированной суммой с контролем отработанного времени (например, выплата фиксированной суммы, но не более нормы). При кадровом переводе в середине месяца система делит начисление на два периода действия.
В каждом отдельном периоде программа сравнивает дни локально. Например, если в первой половине месяца отработано 5 дней из нормы 17, а во второй 13 дней, то суммарный расчет по двум строкам может превысить месячный максимум, так как механизм расчета формул изолированно обрабатывает каждый интервал.
Чтобы избежать искажения расчета, используем следующие рекомендации:
НормаДней используем показатель НормаДнейПоГрафикуПолногоРабочегоВремени. Это предотвратит завышение результатов при дроблении нормы.