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

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

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

Выясняем причину: почему норма времени равна нулю?

Математически ошибка означает, что знаменатель нашей формулы расчета — показатель НормаДней или НормаЧасов — принимает нулевое значение. В системе «1С:ЗУП» норма времени для каждого конкретного сотрудника определяется динамически на основании его индивидуальных настроек, графиков работы и кадровой истории за рассчитываемый месяц. Если программа по какой-то причине не может обнаружить плановое количество рабочих дней или часов по назначенному сотруднику графику за указанный период, показатель нормы приравнивается к 0, что и приводит к аварийному завершению расчета.

Рассмотрим подробнее основные ситуации, из-за которых это происходит, и разберем по шагам методы их исправления.

Решение 1. Проверяем и заполняем графики работы сотрудников (эффект «Нового года»)

Чаще всего эта проблема заявляет о себе в начале календарного года — в январе. Проанализируем типичную ситуацию: бухгалтер уверен, что производственный календарь на новый год заполнен. Однако производственный календарь — это лишь общегосударственный шаблон. На его основе в программе функционируют конкретные графики работы (например, «Пятидневка», «Сменный 2/2» и т. д.). Если эти графики не были перезаполнены на новый календарный год, норма времени для сотрудников, привязанных к ним, окажется нулевой.

Выполним следующие действия для проверки и заполнения графиков:

  1. Перейдем в раздел Настройка, далее выберем пункт Предприятие и откроем справочник Графики работы сотрудников.
  2. Найдем в списке график, который назначен проблемному сотруднику. Узнать, какой именно график назначен сотруднику, мы можем непосредственно из его карточки или кадровых документов (приема на работу, кадрового перевода).
  3. Откроем карточку графика. В верхней части формы обратим внимание на поле выбора года. Убедимся, что там установлен текущий расчетный год (например, 2024).
  4. Если сетка дней в календаре графика пуста или окрашена серым цветом, это означает, что график не заполнен. Нажмем кнопку Заполнить.
  5. Программа автоматически распределит рабочие и выходные дни на основании настроек свойств графика и заполненного производственного календаря.
  6. Нажмем кнопку Записать и закрыть.

После этого обязательно вернемся в документ «Начисление зарплаты и взносов», выделим сотрудника и нажмем кнопку Пересчитать сотрудника. Ошибка должна исчезнуть.

Решение 2. Проверяем настройки зависимости от другого графика

В некоторых организациях используются сложные сменные или неполные графики работы. Для корректного учета времени в таких графиках может быть настроен расчет нормы «по другому графику» (например, норма для неполного рабочего дня берется по стандартной пятидневке). Если этот «базовый» график по какой-то причине не заполнен на расчетный период, то норма времени также обратится в ноль.

Проанализируем ситуацию и выполним проверку свойств графика:

  1. Откроем график работы сотрудника и нажмем на ссылку Изменить свойства графика.
  2. Посмотрим, установлена ли галочка Считать норму по другому графику.
  3. Если галочка активна, обратим внимание, какой именно график выбран в качестве базового шаблона.
  4. Перейдем в справочник графиков, откроем этот базовый график и проверим, заполнен ли он на нужный нам год. Если нет — заполним его по шагам, описанным в первом решении.

Решение 3. Анализируем индивидуальные графики сотрудников

Иногда на предприятии практикуется ввод индивидуальных графиков работы с помощью специального документа Индивидуальный график (раздел «Зарплата»). Если по сотруднику введен такой документ за расчетный месяц, программа будет брать норму времени исключительно из него, полностью игнорируя настройки основного графика работы.

Если в документе «Индивидуальный график» на весь месяц по ошибке не заполнено ни одного рабочего дня (например, все дни отмечены как выходные «В» или просто оставлены пустыми), плановая норма дней составит 0.

Для исправления этой ситуации проделаем следующие шаги:

  1. Перейдем в меню Зарплата и откроем журнал документов Индивидуальные графики.
  2. Найдем документ за проблемный месяц и проверим, присутствует ли в нем наш сотрудник.
  3. Если документ найден, откроем его и проверим заполнение рабочих часов по дням. Если они отсутствуют или указаны некорректно, перезаполним документ правильными данными, проведем его и заново рассчитаем зарплату.

Решение 4. Устраняем программные ошибки релизов 1С и последствия кадровых изменений

Программа «1С:ЗУП 3» регулярно обновляется, и иногда в коде конфигурации возникают зарегистрированные ошибки, приводящие к делению на ноль.

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

В качестве временного обхода этой проблемы разработчики рекомендуют:

Другой зарегистрированный баг — ошибка под кодом 10172569. Она возникает при заполнении документа «Начисление зарплаты», если в формуле используется показатель Календарные дни месяца. Эта ошибка исправлена в последующих версиях, поэтому при ее возникновении рекомендуется обновить конфигурацию до актуальной версии.

Также деление на ноль может происходить из-за «декретниц» (сотрудниц в отпуске по уходу за ребенком). При проведении обновлений программа может пересчитывать или анализировать прошлые периоды. Если за те старые годы графики работы этих сотрудников не заполнялись за ненадобностью, может возникнуть сбой. Решением будет временное заполнение графиков за прошлые «пропущенные» периоды.

Решение 5. Применяем «безопасную» формулу начисления (математический обход)

Если на вашем предприятии используются сложные нестандартные графики или вы столкнулись со специфическим сбоем программы, который не удается быстро локализовать, можно применить обходной маневр непосредственно в формуле начисления. Мы можем изменить формулу так, чтобы знаменатель физически не мог принять нулевое значение.

Для этого выполним настройку формулы расчета:

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

Посмотрим на пример измененной формулы с тернарным оператором:

Оклад * ВремяВДнях / ?(НормаДней = 0, 1, НормаДней)

Или с использованием функции выбора максимального значения:

Оклад * ВремяВДнях / Макс(НормаДней, 1)

Важное предупреждение: этот способ является экстренной мерой. Он предотвратит аварийное завершение программы, но если норма дней действительно должна была быть заполнена (например, равна 21 дню), а программа подставит 1, то итоговый расчет зарплаты сотрудника окажется некорректным. Используйте этот метод только для временной локализации проблемы или в случаях, когда это экономически и методологически обосновано.

Решение 6. Устраняем рассинхронизацию документов (Кадровые переводы и Табели)

Иногда ошибка «Деление на 0» вызвана нарушением последовательности проведения документов. Например, по сотруднику был проведен документ Табель учета рабочего времени, после чего бухгалтер решил внести изменения в график работы или провести документ Кадровый перевод (изменяющий систему оплаты труда или график). Из-за этого ранее проведенный табель начинает ссылаться на устаревшие плановые данные нормы времени, которые затираются или обнуляются в регистрах.

Чтобы исправить это, проделаем следующие шаги:

  1. Распроведем или временно удалим документ Табель по данному сотруднику за проблемный месяц.
  2. Перезаполним и заново проведем кадровые документы (например, «Кадровый перевод» или «Прием на работу»), убедившись, что в них верно указан оклад и график работы.
  3. Снова создадим и заполним документ Табель. Программа автоматически подтянет обновленные нормы времени.
  4. Вернемся в документ расчета зарплаты и перезаполним начисления по сотруднику.

Помните, что в системе «1С:ЗУП 3» для расчета оклада по дням наличие проведенного документа «Табель» не является строго обязательным — программа умеет рассчитывать время напрямую по графику работы. Поэтому в целях диагностики можно попробовать временно распроводить табели и проверять расчет зарплаты без них.

Глубокая диагностика через регистры сведений

Как профессиональные аналитики и программисты 1С, мы можем заглянуть «под капот» программы. Вся информация о нормах времени хранится в специализированных регистрах сведений. Давайте проанализируем регистр сведений Данные графиков работы сотрудников.

Для этого выполним следующие действия:

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

Регулярное проведение таких комплексных проверок позволит вам оперативно находить и устранять любые учетные расхождения в программе «1С:Зарплата и управление персоналом», гарантируя корректное и своевременное начисление заработной платы сотрудникам вашего предприятия.

← На главную