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