В практике кадрового учета часто возникает задача: начислить сотруднику премию за дисциплину только в том случае, если он отработал определенное количество смен и не имел нарушений (опозданий, прогулов, нарушений режима). На первый взгляд задача кажется простой, но при попытке реализовать её через стандартные формулы в 1С:Зарплата и управление персоналом 3.1 пользователи сталкиваются с техническими нюансами. Давайте разберем, как правильно настроить такую логику, избежав типичных ошибок.
Типичная ошибка при написании формулы заключается в попытке проверить значение тарифа (ставки) штрафа. Рассмотрим ситуацию: у сотрудника настроено удержание ШтрафЗаОпоздание, для которого задан показатель ШтрафТарифОпоздание. Если мы напишем формулу вида:
ПремияЗаДисциплину * ?(ОтработаноДней > 25, 1, 0) * ?(ШтрафТарифОпоздание > 0, 0, 1)
Программа всегда будет возвращать 0. Почему так происходит? Дело в том, что ШтрафТарифОпоздание — это постоянный показатель (расценка), который закреплен за сотрудником или организацией. Он существует в системе всегда, независимо от того, совершил сотрудник проступок в конкретном месяце или нет. Программа видит, что тариф равен, например, 500 рублям, условие 500 > 0 выполняется, и премия обнуляется. Нам же нужно проверять не наличие тарифа, а факт нарушения в конкретном периоде.
Проанализируем ситуацию: чтобы формула "понимала", было нарушение или нет, нам нужен показатель, который принимает значение больше нуля только в месяце совершения проступка. Для этого перейдем в раздел Настройка — Показатели расчета зарплаты и создадим новые показатели (например, КоличествоОпозданий, КоличествоСлучаевСна).
При настройке показателя крайне важно указать следующие параметры:
Вместо того чтобы каждый раз создавать документ Удержание по прочим операциям, мы воспользуемся более гибким механизмом. Нам нужно создать единую форму, куда бухгалтер будет вносить сведения о нарушениях. Перейдем в Настройка — Шаблоны ввода данных.
Создадим новый шаблон, назовем его "Дисциплинарные нарушения". На вкладке Показатели зарплаты выберем созданные нами количественные показатели (КоличествоОпозданий, КоличествоСлучаевСна и т.д.). Теперь расчетчик сможет раз в месяц через документ Данные для расчета зарплаты просто проставить "1" против фамилии сотрудника, который совершил проступок.
Теперь выясним, как связать штраф и отмену премии. Рассмотрим логику настройки Вида удержания. Чтобы программа автоматически рассчитывала сумму штрафа на основании введенных данных, в формуле удержания используем созданный количественный показатель:
КоличествоОпозданий * ШтрафТарифОпоздание
В этом случае, если в документ Данные для расчета зарплаты введено "1", удержание сработает. Если данных нет — сумма будет нулевой.
Теперь мы можем составить корректную формулу для начисления премии. Нам нужно проверить два условия: отработанное время и отсутствие всех видов нарушений. Проанализируем итоговый вид формулы в настройках начисления:
ПремияЗаДисциплину
* ?(ОтработаноДней > 25, 1, 0)
* ?(КоличествоОпозданий + КоличествоСлучаевСна + КоличествоУходовРаньше > 0, 0, 1)
Разберем, как это работает:
?(ОтработаноДней > 25, 1, 0) — если сотрудник отработал более 25 дней, этот множитель равен 1, иначе премия обнуляется.?(КоличествоОпозданий + КоличествоСлучаевСна + КоличествоУходовРаньше > 0, 0, 1) — мы суммируем все факты нарушений. Если сумма больше нуля (был хотя бы один проступок), множитель становится равным 0, и вся премия обнуляется. Если нарушений не было (0 > 0 — ложь), множитель равен 1.Посмотрим на ситуацию с точки зрения механизмов платформы 1С:Предприятие. В ЗУП 3.1 начисления всегда рассчитываются раньше, чем удержания. Именно поэтому в формуле начисления (премии) мы не можем ссылаться на результат расчета удержания (сумму в рублях) — в момент расчета премии сумма удержания еще просто не определена.
Использование общего количественного показателя — единственный надежный способ связать эти два события. Последовательность действий для расчетчика будет выглядеть так:
Рассмотрим подробнее использование стандартного показателя ОтработаноДней. Если в вашей организации используется сменный график (например, "сутки через трое" или "2/2"), физически отработать 25 смен в месяц невозможно. В таких случаях убедитесь, что порог в 25 дней установлен корректно именно для вашей специфики.
Если премия должна зависеть от полной отработки нормы (неважно, сколько это дней по графику), эффективнее использовать сравнение с нормой:
?(ОтработаноДней >= НормаДней, 1, 0)
Или использовать показатель ДоляОтработанногоВремени, который учитывает отношение фактически отработанного времени к норме по графику сотрудника. Это сделает вашу формулу более универсальной для разных категорий персонала.