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