Как исправить ошибку «Деление на 0» при оформлении увольнения, командировки или начислении зарплаты в 1С

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

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

Анализируем формулу начисления

Первым делом нам необходимо выяснить, какая именно формула вызывает сбой. Как правило, в сообщениях об ошибке 1С выводит текст формулы. Рассмотрим стандартный пример для начисления «Оплата по окладу (по часам)»:

Оклад * ВремяВЧасах / НормаЧасов

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

Шаг 1: Проверка заполнения графиков и производственного календаря

Прежде чем переходить к сложным техническим манипуляциям, проверим базовые настройки системы, от которых зависит расчет нормы времени:

  1. Производственный календарь: Убедимся, что основной производственный календарь заполнен на текущий и (обязательно!) на прошлый год. Проверим наличие праздничных и перенесенных дней.
  2. График работы сотрудника: Зайдем в карточку сотрудника, откроем привязанный к нему график работы. Проверим, заполнен ли он на год, в котором оформляется документ. Даже если визуально сетка заполнена, рекомендуется нажать кнопку «Заполнить график» и затем «Записать». Это принудительно обновит данные в регистрах сведений.
  3. Индивидуальные графики: Проверим, не введен ли по сотруднику документ Индивидуальный график. Если он создан, но не заполнен или заполнен некорректно, система будет брать норму именно из него, игнорируя основной график.

Шаг 2: Проверка настроек неполного рабочего времени

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

В поле «Считать норму по другому графику» должен быть указан корректный график полного рабочего времени. Если этот «эталонный» график не заполнен на текущий период, показатель НормаЧасов примет значение 0, что приведет к ошибке при расчете.

Шаг 3: Выявление дублей предопределенных показателей (Техническая причина)

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

Выясним, не зациклилась ли программа на «пустом» показателе:

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

Важно: Программа может использовать в формуле начисления один элемент, а данные (норму из графика) записывать в другой. В итоге в расчете участвует показатель со значением 0.

Для исправления ситуации воспользуемся типовой обработкой «Поиск и замена дублей»:

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

Шаг 4: Проверка регистров через функции технического специалиста

Рассмотрим ситуацию, когда в интерфейсе все выглядит правильно, но расчет не идет. Проанализируем состояние регистров, из которых система черпает данные «напрямую». Нам помогут Функции технического специалиста (ранее — Все функции):

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

Программные методы обхода ошибки (для разработчиков)

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

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


// Вместо: Оклад * ВремяВЧасах / НормаЧасов
// Используем проверку условия:
Оклад * ВремяВЧасах / ?(НормаЧасов = 0, 1, НормаЧасов)

Внимание: Этот метод является «костылем». Он позволит провести документ, но результат расчета будет некорректным. Используйте его только для диагностики или в экстренных случаях с последующим исправлением данных.

Почему это происходит при начальной штатной расстановке?

Если вы начали работать в базе недавно (например, ввели остатки через документ Начальная штатная расстановка), обратите внимание на дату начала эксплуатации. Если данные введены на 01.01.2021, а увольнение происходит в начале января, программа должна иметь информацию о норме времени именно на этот период. Убедитесь, что в документе расстановки верно указаны графики и что они были актуальны на момент переноса данных. Иногда помогает перевыбор графика в самом документе Начальная штатная расстановка и его перепроведение.

Подведем итог: ошибка «Деление на 0» в 90% случаев лечится перезаполнением графиков или удалением дублей показателей. Тщательная проверка цепочки «Производственный календарь -> График -> Показатель в формуле» позволяет быстро вернуть систему в рабочее состояние.

← На главную