Ошибка «Деление на 0» при расчете оклада по дням: почему возникает и как исправить?

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

При заполнении документа «Начисление зарплаты и взносов» в программе 1С:ЗУП пользователи иногда сталкиваются с неприятной ошибкой: «Деление на 0». Чаще всего она возникает при расчете начислений, зависящих от нормы времени, например, «Оклад по дням». Давайте вместе разберемся, почему система выдает такое сообщение и какие шаги предпринять для решения этой проблемы.

Анализируем сообщение об ошибке

Для начала проанализируем саму ошибку. Система сообщает, что проблема возникла при расчете начисления «Оклад по дням» и указывает формулу:

Оклад * ДоляНеполногоРабочегоВремени * ВремяВДнях / НормаДней

Ошибка «Деление на 0» однозначно указывает на то, что знаменатель дроби, то есть показатель НормаДней, в какой-то момент расчета оказался равен нулю. Наша главная задача — выяснить, почему программа не смогла определить норму рабочих дней для сотрудника за расчетный период.

Показатель НормаДней напрямую зависит от двух ключевых настроек в программе:

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

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

Причина №1: Незаполненные графики работы или производственный календарь

Это самая распространенная причина. Ошибка часто проявляется в начале нового года, когда еще не заполнили производственный календарь, или при расчете зарплаты за прошлые периоды, по которым в базе нет данных о графиках.

Что происходит: Программа пытается рассчитать зарплату за определенный месяц (в нашем примере — Декабрь 2020), обращается к графику работы сотрудника, назначенному на этот месяц, и видит, что он пуст. В результате норма дней не определяется (равна 0), и расчет прерывается с ошибкой.

Причина №2: Некорректные перерасчеты за прошлые периоды

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

Рассмотрим на примере:

В текущем году вы изменили настройки графика работы сотрудника. Этот же график использовался и в 2020 году. Система обнаруживает это изменение и создает в служебном регистре ПерерасчетыЗарплаты запись о том, что нужно пересчитать зарплату сотрудника за Декабрь 2020.

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

Пошаговая инструкция по устранению ошибки

Теперь, когда мы понимаем причины, давайте по шагам разберем, как диагностировать и исправить проблему.

  1. Выявляем "проблемного" сотрудника

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

  2. Проверяем графики и календарь

    После того как сотрудник найден, в первую очередь проверим базовые вещи. Убедитесь, что на период, указанный в ошибке (в нашем примере — Декабрь 2020), в программе корректно заполнены данные.

    • Производственный календарь: Перейдите в раздел Настройка – Производственные календари. Откройте календарь для нужного года (2020) и убедитесь, что он заполнен. Если нет, заполните его по умолчанию.
    • График работы: Узнайте, какой график назначен сотруднику на этот период (можно посмотреть в кадровых документах). Затем перейдите в Настройка – Графики работы сотрудников, найдите нужный график, выберите соответствующий год и нажмите «Заполнить».

    После заполнения этих данных попробуйте снова рассчитать зарплату. Если ошибка была связана с отсутствием данных, она исчезнет.

  3. Работаем с регистром перерасчетов (ключевое решение)

    Если проверка графиков не помогла, значит, дело, скорее всего, в "зависшей" записи о перерасчете, который по каким-то причинам не должен выполняться. В этом случае можно вручную удалить эту "задачу" для системы.

    Важно! Этот шаг следует выполнять с осторожностью. Удаляя запись о перерасчете, вы отменяете его. Убедитесь, что этот перерасчет действительно не нужен (например, он был вызван техническим изменением данных, не влияющим на зарплату).

    Как это сделать:

    1. Откройте меню «Все функции» (Главное меню – Сервис – Все функции). Если этого пункта нет, его нужно включить в настройках (Главное меню – Сервис – Параметры – Отображать команду «Все функции»).
    2. В списке объектов найдите и откройте Регистры сведений.
    3. Найдите в списке регистр Перерасчеты зарплаты и откройте его.
    4. В открывшемся списке записей нажмите кнопку «Еще» и выберите «Настроить список...».
    5. На вкладке «Отбор» добавьте новый элемент:
      • Поле: Сотрудник
      • Вид сравнения: Равно
      • Значение: выберите сотрудника, который вызывает ошибку.
    6. После применения отбора вы увидите все "задачи" на перерасчет для этого сотрудника. Найдите запись, относящуюся к проблемному периоду (Декабрь 2020), выделите ее и удалите (клавишей Delete или через контекстное меню).

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

Профилактика: как избежать ошибки в будущем

Чтобы подобные "сюрпризы" с автоматическими перерасчетами не заставали вас врасплох, в программе есть специальная настройка, которая позволяет взять этот процесс под контроль.

Рекомендуем включить опцию «Выполнять доначисления и перерасчеты зарплаты отдельным документом».

Для этого перейдите в раздел Настройка – Расчет зарплаты. В открывшейся форме установите соответствующий флажок.

Что это дает?

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

← На главную