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