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