При расчете начислений в программе «1С:Зарплата и управление персоналом» редакции 3.0 и 3.1 пользователи периодически сталкиваются с крайне неприятной ошибкой: «Деление на 0». Программа прерывает автоматический расчет и выводит диагностическое сообщение, в котором фигурирует формула вида Оклад * ВремяВДнях / НормаДней (или аналогичная ей с использованием показателей времени, например, НормаЧасов). Давайте вместе детально разберем причины возникновения этой проблемы и подробно изучим все способы ее решения — от простых пользовательских настроек до глубокого анализа регистров и программных обходов.
Математически ошибка означает, что знаменатель нашей формулы расчета — показатель НормаДней или НормаЧасов — принимает нулевое значение. В системе «1С:ЗУП» норма времени для каждого конкретного сотрудника определяется динамически на основании его индивидуальных настроек, графиков работы и кадровой истории за рассчитываемый месяц. Если программа по какой-то причине не может обнаружить плановое количество рабочих дней или часов по назначенному сотруднику графику за указанный период, показатель нормы приравнивается к 0, что и приводит к аварийному завершению расчета.
Рассмотрим подробнее основные ситуации, из-за которых это происходит, и разберем по шагам методы их исправления.
Чаще всего эта проблема заявляет о себе в начале календарного года — в январе. Проанализируем типичную ситуацию: бухгалтер уверен, что производственный календарь на новый год заполнен. Однако производственный календарь — это лишь общегосударственный шаблон. На его основе в программе функционируют конкретные графики работы (например, «Пятидневка», «Сменный 2/2» и т. д.). Если эти графики не были перезаполнены на новый календарный год, норма времени для сотрудников, привязанных к ним, окажется нулевой.
Выполним следующие действия для проверки и заполнения графиков:
После этого обязательно вернемся в документ «Начисление зарплаты и взносов», выделим сотрудника и нажмем кнопку Пересчитать сотрудника. Ошибка должна исчезнуть.
В некоторых организациях используются сложные сменные или неполные графики работы. Для корректного учета времени в таких графиках может быть настроен расчет нормы «по другому графику» (например, норма для неполного рабочего дня берется по стандартной пятидневке). Если этот «базовый» график по какой-то причине не заполнен на расчетный период, то норма времени также обратится в ноль.
Проанализируем ситуацию и выполним проверку свойств графика:
Иногда на предприятии практикуется ввод индивидуальных графиков работы с помощью специального документа Индивидуальный график (раздел «Зарплата»). Если по сотруднику введен такой документ за расчетный месяц, программа будет брать норму времени исключительно из него, полностью игнорируя настройки основного графика работы.
Если в документе «Индивидуальный график» на весь месяц по ошибке не заполнено ни одного рабочего дня (например, все дни отмечены как выходные «В» или просто оставлены пустыми), плановая норма дней составит 0.
Для исправления этой ситуации проделаем следующие шаги:
Программа «1С:ЗУП 3» регулярно обновляется, и иногда в коде конфигурации возникают зарегистрированные ошибки, приводящие к делению на ноль.
Рассмотрим известную зарегистрированную ошибку под кодом 50006782. Она проявляется в ситуациях, когда разовое или плановое начисление зависит от времени (например, оклад рассчитывается по формуле Оклад * ВремяВДнях / НормаДней), и при этом документ расчета заполняется на весь месяц для сотрудников, которые были приняты на работу или уволены строго внутри этого месяца. Алгоритм программы в некоторых старых релизах некорректно определял норму за весь месяц целиком, переводя показатель в 0.
В качестве временного обхода этой проблемы разработчики рекомендуют:
Другой зарегистрированный баг — ошибка под кодом 10172569. Она возникает при заполнении документа «Начисление зарплаты», если в формуле используется показатель Календарные дни месяца. Эта ошибка исправлена в последующих версиях, поэтому при ее возникновении рекомендуется обновить конфигурацию до актуальной версии.
Также деление на ноль может происходить из-за «декретниц» (сотрудниц в отпуске по уходу за ребенком). При проведении обновлений программа может пересчитывать или анализировать прошлые периоды. Если за те старые годы графики работы этих сотрудников не заполнялись за ненадобностью, может возникнуть сбой. Решением будет временное заполнение графиков за прошлые «пропущенные» периоды.
Если на вашем предприятии используются сложные нестандартные графики или вы столкнулись со специфическим сбоем программы, который не удается быстро локализовать, можно применить обходной маневр непосредственно в формуле начисления. Мы можем изменить формулу так, чтобы знаменатель физически не мог принять нулевое значение.
Для этого выполним настройку формулы расчета:
НормаДней на математическое условие, которое подставит единицу, если норма вдруг окажется равной нулю.Посмотрим на пример измененной формулы с тернарным оператором:
Оклад * ВремяВДнях / ?(НормаДней = 0, 1, НормаДней)
Или с использованием функции выбора максимального значения:
Оклад * ВремяВДнях / Макс(НормаДней, 1)
Важное предупреждение: этот способ является экстренной мерой. Он предотвратит аварийное завершение программы, но если норма дней действительно должна была быть заполнена (например, равна 21 дню), а программа подставит 1, то итоговый расчет зарплаты сотрудника окажется некорректным. Используйте этот метод только для временной локализации проблемы или в случаях, когда это экономически и методологически обосновано.
Иногда ошибка «Деление на 0» вызвана нарушением последовательности проведения документов. Например, по сотруднику был проведен документ Табель учета рабочего времени, после чего бухгалтер решил внести изменения в график работы или провести документ Кадровый перевод (изменяющий систему оплаты труда или график). Из-за этого ранее проведенный табель начинает ссылаться на устаревшие плановые данные нормы времени, которые затираются или обнуляются в регистрах.
Чтобы исправить это, проделаем следующие шаги:
Помните, что в системе «1С:ЗУП 3» для расчета оклада по дням наличие проведенного документа «Табель» не является строго обязательным — программа умеет рассчитывать время напрямую по графику работы. Поэтому в целях диагностики можно попробовать временно распроводить табели и проверять расчет зарплаты без них.
Как профессиональные аналитики и программисты 1С, мы можем заглянуть «под капот» программы. Вся информация о нормах времени хранится в специализированных регистрах сведений. Давайте проанализируем регистр сведений Данные графиков работы сотрудников.
Для этого выполним следующие действия:
Данные графиков работы сотрудников.Значение (это норма дней/часов) и КалендарныеДни. Если в этих колонках стоят нули или записи отсутствуют, это прямое доказательство того, что график работы сотрудника не заполнен в базе данных на этот период.Регулярное проведение таких комплексных проверок позволит вам оперативно находить и устранять любые учетные расхождения в программе «1С:Зарплата и управление персоналом», гарантируя корректное и своевременное начисление заработной платы сотрудникам вашего предприятия.