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

Бухгалтер 1С v8.3 (Управляемые формы)
← На главную

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

Чаще всего система выдает предупреждение следующего вида:

При расчете начисления "Оплата по окладу" за январь 2018 для сотрудника *** возникла ошибка: Деление на 0. Формула, используемая при расчете: Оклад * ДоляНеполногоРабочегоВремени * ВремяВДнях / НормаДней

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

Причина 1. Скрытые автоматические перерасчеты за прошлые периоды

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

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

Рассмотрим, как это исправить:

  1. Перейдем в раздел меню Зарплата, затем выберем пункт Сервис и откроем рабочее место Перерасчеты.
  2. В открывшемся окне мы увидим список сотрудников, по которым система запланировала автоматический перерасчет. Проанализируем эти записи. Если там присутствуют периоды до начала ведения учета в новой базе, их необходимо удалить.
  3. Выделим все неактуальные записи в табличной части и нажмем кнопку Отменить (или клавишу Delete на клавиатуре).
  4. Вернемся в документ Начисление зарплаты и взносов, полностью очистим его, перезаполним заново и проверим результат.

Причина 2. Задвоение показателей расчета зарплаты при переносе данных

Выясним техническую сторону переноса данных из двух и более баз (например, отдельно по ООО и по ИП). При импорте информации механизмы платформы сопоставляют справочники. Однако предопределенные показатели расчета зарплаты, такие как НормаДней, ВремяВДнях или Оклад, могут некорректно синхронизироваться, из-за чего в базе создаются их полные дубли.

В результате в формуле начисления Оплата по окладу может использоваться один показатель, а кадровые документы и графики фиксируют данные по другому (внешне абсолютно такому же) показателю. В момент расчета программа обращается к «пустому» показателю-дублю, считывает оттуда значение 0 и выдает ошибку деления.

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

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных.
  2. Откроем ссылку Поиск и замена дублей.
  3. В поле «Искать в:» выберем справочник Показатели расчета зарплаты.
  4. Нажмем кнопку Найти дубли. Программа просканирует базу данных и выведет список схожих элементов.
  5. Внимательно изучим список. Нам нужно определить правильный, предопределенный показатель (он отмечен специальным значком-кружком в интерфейсе платформы 1С) и назначить его в качестве оригинала. Второй элемент (созданный переносом дубль) помечаем как дубликат.
  6. Нажмем кнопку Заменить дубли. Система автоматически перепишет ссылки во всех формулах, кадровых документах и регистрах, решив проблему несовместимости показателей.

Причина 3. График работы заполнен на экране, но отсутствует в базе данных

Рассмотрим еще одну коварную ситуацию. Открывая справочник Графики работы сотрудников, мы можем видеть красивую заполненную сетку часов. Однако на физическом уровне в базе данных СУБД (или в файловой таблице) данные в регистре сведений Параметры графиков работы могут отсутствовать из-за того, что перенос выполнил прямую запись объектов без вызова встроенных процедур заполнения.

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

  1. Перейдем в раздел Настройки — Производственные календари.
  2. Откроем текущий производственный календарь (например, на 2018 год), нажмем кнопку Заполнить по умолчанию, а затем обязательно нажмем Записать и закрыть. Это запишет норму времени в регистр данных производственного календаря.
  3. Перейдем в раздел Настройки — Графики работы сотрудников.
  4. Откроем поочередно каждый график, используемый на предприятии. Внутри формы нажмем кнопку Заполнить. Убедимся, что рабочие часы распределились корректно. Обязательно нажмем кнопку Записать и закрыть. При записи объекта программа выполнит фоновый расчет и физически заполнит регистры сведений данными о норме времени.

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


ВЫБРАТЬ
    Графики.Ссылка КАК ГрафикРаботы,
    Параметры.Год КАК Год,
    Параметры.Месяц КАК Месяц
ИЗ
    Справочник.ГрафикиРаботыСотрудников КАК Графики
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыГрафиковРаботы КАК Параметры
        ПО Графики.Ссылка = Параметры.ГрафикРаботы
        И Параметры.Год = 2018
ГДЕ
    Параметры.ГрафикРаботы ЕСТЬ NULL

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

Причина 4. График заполнен, но не назначен сотруднику

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

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

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

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

Программисты могут быстро проверить наличие сотрудников с незаполненными графиками работы в регистре кадровой истории с помощью следующего запроса:


ВЫБРАТЬ
    Сотрудники.Ссылка КАК Сотрудник,
    КадроваяИстория.Организация КАК Организация,
    КадроваяИстория.ГрафикРаботы КАК ГрафикРаботы
ИЗ
    Справочник.Сотрудники КАК Сотрудники
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Период, ) КАК КадроваяИстория
        ПО Сотрудники.Ссылка = КадроваяИстория.Сотрудник
ГДЕ
    КадроваяИстория.ГрафикРаботы = ЗНАЧЕНИЕ(Справочник.ГрафикиРаботыСотрудников.ПустаяСсылка)
    ИЛИ КадроваяИстория.ГрафикРаботы ЕСТЬ NULL

Причина 5. Попадание в расчет «декретниц» и уволенных сотрудников

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

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

Решить эту проблему можно так:

  1. Временным решением будет просто удалить таких сотрудников вручную из табличной части документа начисления зарплаты.
  2. Для системного исправления ситуации проверим кадровые документы по этим сотрудникам. Нам нужно убедиться, что в базу корректно перенесены и проведены документы Отпуск по уходу за ребенком или Увольнение, которые приостанавливают плановые начисления по окладу.

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

← На главную