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