Как исправить ошибку «Деление на 0» при расчете зарплаты в 1С:ЗУП 3.1?

Бухгалтер 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Бухгалтерский учет
← На главную

Ошибка «Деление на 0» при начислении зарплаты в программе 1С:Зарплата и Управление Персоналом 3.1 — одна из самых досадных проблем, с которой сталкиваются бухгалтеры и расчетчики, особенно после переноса данных из других конфигураций (например, из 1С:Бухгалтерия 3.0) или после обновления системы. Ситуация осложняется тем, что программа часто ссылается на периоды прошлых лет, которые, казалось бы, уже давно закрыты и не должны влиять на текущий расчет. Разберем подробно, почему это происходит и как устранить проблему по шагам.

Анализируем текст ошибки и формулу расчета

Прежде всего, проанализируем саму формулу, которую выводит система. Обычно она выглядит так: Оклад * ДоляНеполногоРабочегоВремени * ВремяВДнях / НормаДней. Математически деление на ноль происходит тогда, когда показатель НормаДней (или НормаЧасов) равен нулю. Это означает, что для конкретного сотрудника в конкретном месяце программа не смогла определить, сколько рабочих дней он должен был отработать по плану. Ситуация, когда при расчете за август 2018 года программа выдает ошибку за декабрь 2017 года, свидетельствует о том, что система пытается выполнить перерасчет за прошлый период. Это происходит из-за того, что в информационной базе зафиксирована «задолженность» по расчету или изменению данных, влияющих на прошлые месяцы.

Решение 1: Заполнение графиков работы за прошлые периоды

Самая частая причина — пустой график работы за прошлые годы. Даже если вы ведете учет только в текущем году, при переносе данных или корректировках программа может обращаться к календарной сетке прошлых лет. Рассмотрим, как это исправить:

  1. Перейдем в раздел Настройка — Графики работы сотрудников.
  2. Найдем основной график, который назначен проблемному сотруднику (например, «Пятидневка»).
  3. Откроем график и проверим его заполнение. Обратите внимание: нужно нажать кнопку «Заполнить» не только для текущего года, но и убедиться, что график был заполнен за год, указанный в ошибке (в нашем примере — 2017-й).
  4. Если график на прошлый год пуст, выберите соответствующий год в верхней части формы и нажмите Заполнить.
  5. Обязательно проверьте настройки графика (ссылка «Изменить свойства графика»). Если установлен флаг «Считать норму по другому графику», то необходимо проверить и заполнить также и тот «родительский» график, который указан в качестве эталона нормы.

Решение 2: Проверка производственного календаря

Графики работы строятся на основании производственного календаря. Если календарь не заполнен или заполнен некорректно (например, все дни отмечены как выходные), норма времени будет равна нулю. Рассмотрим порядок действий:

  1. Перейдем в раздел Настройка — Производственные календари.
  2. Проверим календарь «Российская Федерация» (или региональный, если он используется).
  3. Убедимся, что на год, фигурирующий в ошибке, проставлены рабочие и праздничные дни. Нажмем Заполнить по умолчанию и Записать.
  4. После обновления производственного календаря обязательно вернемся в графики работы и перезаполним их, так как изменения в календаре не применяются к графикам автоматически.

Решение 3: Очистка регистра перерасчетов

Выясним причину, по которой программа вообще «лезет» в прошлый год. За это отвечает специальный механизм — Регистрация перерасчетов. После переноса данных или случайного изменения кадрового документа задним числом там могут появиться записи. Проанализируем ситуацию:

  1. Перейдем в раздел Зарплата — Сервис — Пересчеты зарплаты.
  2. Посмотрим, есть ли в списке записи по проблемному сотруднику за прошлые периоды (например, за декабрь 2017 года).
  3. Если вы не планируете реально пересчитывать зарплату за тот период (так как данные уже перенесены и зафиксированы), выделите эти записи и нажмите Удалить (или кнопку «Оформить позже», если такая возможность предусмотрена версией).
  4. После очистки регистра программа перестанет обращаться к прошлым периодам при расчете текущей зарплаты, и ошибка исчезнет.

Решение 4: Проверка настроек начисления и «техническое» перепроведение

Иногда система «зависает» на старой структуре формулы или кэшированных данных начисления. Попробуем обновить настройки вида расчета:

  1. Зайдем в меню Настройка — Начисления.
  2. Найдем вид расчета, указанный в ошибке (например, Оплата по окладу).
  3. Откроем его, ничего не меняя, и просто нажмем Записать и закрыть. В некоторых случаях это инициирует обновление алгоритмов расчета в базе.
  4. Если это не помогло, попробуем временно изменить формулу. Вместо НормаДней можно попробовать использовать функцию безопасности, чтобы избежать деления на ноль физически, хотя это является «лечением симптомов», а не причины.

Пример модифицированной формулы для продвинутых пользователей: Оклад * ДоляНеполногоРабочегоВремени * ВремяВДнях / Макс(НормаДней, 1) Использование функции Макс(НормаДней, 1) гарантирует, что знаменатель никогда не будет равен нулю (в крайнем случае он будет равен 1), и расчет документа будет завершен без прерывания ошибкой. Однако помните: это может привести к неверным суммам, если норма действительно должна быть заполнена!

Решение 5: Документы переноса данных и «Данные на начало эксплуатации»

Если ошибка возникла сразу после переноса из 1С:Бухгалтерия 3.0, проанализируем технические документы:

  1. Перейдем в раздел Администрирование — Перенос данных.
  2. Найдем документы с кодами ЗП-ВТ или ТЗЛ (зависят от варианта переноса).
  3. Проверим записи в этих документах. Бывает так, что сумма дохода перенеслась, а данные о норме времени (дни/часы) остались нулевыми. В этом случае при любом обращении программы к среднему заработку или перерасчету будет возникать деление на ноль.
  4. Исправим нулевые значения на корректные показатели нормы согласно производственному календарю того времени.

Специфические случаи: Период пандемии (апрель 2020)

Если ваша ошибка ссылается на апрель или май 2020 года, это связано с введением «нерабочих дней с сохранением оплаты». В производственном календаре и графиках эти дни должны быть настроены особым образом. Если вы используете старую версию программы или не заполнили календарь за 2020 год должным образом, НормаДней за апрель 2020 года может определиться как 0. Проверьте, чтобы в графике работы стоял флаг «При заполнении учитывать оплачиваемые нерабочие дни».

Резюме

Для исправления ошибки «Деление на 0» мы рекомендуем придерживаться следующего алгоритма:

  1. Заполнить производственный календарь за все годы (с начала ведения учета до текущего).
  2. Перезаполнить все графики работы сотрудников за те же периоды.
  3. Очистить список в разделе «Пересчеты зарплаты».
  4. Если ошибка сохраняется — проверить документы переноса данных на наличие пустых значений в колонках нормы времени.

Выполнение этих шагов в 99% случаев позволяет успешно рассчитать зарплату без технических сбоев.

← На главную