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

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

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

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

Разница в алгоритмах расчета документов «Начисление зарплаты» и «Увольнение»

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

Дело в особенностях работы встроенных алгоритмов конфигурации 1С. В коде этих двух документов заложены разные алгоритмы поиска «резервных» данных (так называемые защитные механизмы или фолбеки):

  1. При заполнении документа «Начисление зарплаты и взносов» встроенный алгоритм умеет анализировать отсутствие заполненного графика полного рабочего времени у сотрудника. Если программа видит, что показатель не определен, она автоматически подставляет текущий график сотрудника в качестве резервного.
  2. В документе «Увольнение» этот защитный механизм отсутствует. Алгоритм пытается жестко обратиться к показателю НормаДнейПоГрафикуПолногоРабочегоВремени. Если в настройках графика сотрудника связанный график полного времени поврежден, не заполнен на текущий год или отсутствует вовсе, этот показатель возвращает значение «0». Происходит попытка деления на ноль, и программа прекращает проведение документа.

Решение 1. Проверка и настройка графиков неполного рабочего времени

В большинстве случаев виновником ошибки является некорректная настройка графиков работы сотрудников, особенно тех, кто трудится на полставки, по индивидуальному графику или сокращенному времени. Проверим настройки графиков по шагам:

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

Решение 2. Корректировка формулы начисления оплаты по окладу

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

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

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

Если в формуле вместо показателя НормаДней используется показатель НормаДнейПоГрафикуПолногоРабочегоВремени, или если сама НормаДней по какой-то причине (например, из-за неотработанного месяца или отсутствия графика) возвращает ноль, система падает с ошибкой.

Чтобы обезопасить базу от подобных сбоев в будущем (например, при уходе сотрудников в длительные отпуска за свой счет, когда норма рабочих дней за месяц может стать нулевой), разработчики рекомендуют использовать в формулах условные операторы платформы 1С.

Рассмотрим безопасный вариант написания формулы расчета оклада:


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

Давайте разберем, как работает эта конструкция. Встроенная функция ?(,,) является аналогом условного оператора. Если условие в первом параметре (НормаДней = 0) истинно, то функция возвращает значение второго параметра (в нашем случае 1). Если же условие ложно (норма дней заполнена и больше нуля), то возвращается значение третьего параметра (само значение НормаДней). Таким образом, даже если норма времени по каким-то причинам не определилась или равна нулю, программа выполнит безопасное деление на единицу и не заблокирует расчет увольнения аварийным завершением.

Решение 3. Устранение зарегистрированной ошибки ЗУП 3.1 (Баг 60030848)

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

Выясним причину этого бага. Ошибка проявляется при расчете увольнения, когда в системе используются начисления, завязанные на показатели среднего заработка с учетом районного коэффициента (РК) и северной надбавки (СН) — например, при расчете компенсации неиспользованного отпуска. При этом самому увольняемому сотруднику данные надбавки в программе не начисляются (например, он работает в регионе, где РК и СН не предусмотрены).

В процессе проведения документа «Увольнение» программа пытается обработать пустые значения показателей РК и СН, что приводит к системному сбою «Деление на 0» или «Поле объекта не обнаружено».

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

  1. Перейдем в раздел «Администрирование» — «Обслуживание» — «Обновление программы».
  2. Откроем ссылку «Установленные исправления (патчи)».
  3. Убедимся, что в списке установлен патч с кодом EF_60030848.
  4. Если патч отсутствует, нажмем кнопку «Поиск и установка исправлений» (при наличии активной поддержки ИТС и подключения к интернет-поддержке) либо скачаем патч вручную с портала 1С и загрузим его в базу.

Решение 4. Устранение дубликатов показателей после переноса данных

Нередко базы данных «1С:ЗУП 3.1» создаются путем переноса сведений из старых версий конфигураций (например, «1С:Зарплата и кадры 7.7» или «1С:Бухгалтерия 8»). При таком переходе в справочниках могут возникнуть дубли предопределенных показателей расчета.

Выясним, как это влияет на расчет увольнения:

  1. В системе могут появиться два абсолютно одинаковых по названию показателя НормаДней. При этом один из них является корректным системным показателем, а второй — «битым» дубликатом, который не заполняется расчетным механизмом программы.
  2. Если при переносе или последующей настройке в формулу начисления оклада подставился именно «битый» показатель, система всегда будет видеть его значение как «0», игнорируя любые заполненные графики работы.

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

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

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

← На главную