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