Деление на 0 или итоги «нерабочего апреля 2020»
Проблема: В конце апреля месяца 2020 года на предприятии при попытке расчёта заработной платы сотрудникам появилась следующая ошибка:
Ошибка: При расчете начисления «Оплата по окладу» за Апрель 2020 для сотрудника ____ ____ ____ возникла ошибкаа. Деление на 0.
Формула, используемая при расчёте:
Оклад * ДоляНеполногоРабочегоВремени * ВремяВДнях / НормаДней
Оборудование: 1С ЗУП 3.1
Решение проблемы: Деление на 0 — классическая «запрещалка», о существовании которой нам говорят ещё в школе. На ноль делить нельзя и т.п. Если происходит деление на ноль, то в первую очередь требуется посмотреть, что именно предстаёт в таком большом количестве, как ноль. Обычно — это то, что следует за знаком деления. В данном случае:
«… / НормаДней»
Стало быть, 1С решила, что у нас нет в отчётном периоде ни одного дня, который бы считался рабочим.
Потому проверим, отчего и почему так может быть. Заходим:
Настройки —> Производственные календари —> Российская Федерация:
Что мы тут видим? А мы видим, что весь апрель у нас — красного цвета! 1С обновила данные из ИТС, где их заполнили, как нерабочими. Ну, а чего вы хотели? У нас 25 числа марта месяца один человек по телевидению выступил и сказал, что до 30 апреля объявляются выходными дням с сохранением заработной платы. Но беда в том, что подобного статуса дня вроде как до того самого 25 марта 2020 не существовало. Да и сейчас так и не существует. Потому в производственном календаре и пометили все дни выходными. То бишь — не рабочими!
Комментарий: Кстати, начисление я исправлял вчера (29 апреля). И потому горит красным только апрель. Сегодня (30 апреля) уже в 7:30 позвонили из других организаций, обращаясь за помощью. И там в производственном календаре горели красными ещё 6,7 и 8 мая. А заодно автоматически изменился и производственный календарь на апрель (вновь стал нерабочим). Видимо, после обеда 29 апреля в техподдержке 1С переделали производственный календарь.
В общем, для того, чтобы начислить зп за «нерабочий» апрель организациям нужно вручную поменять производственный календарь за месяц. Делаем это так.
Нажимаем правой кнопкой мыши. Нажимаем «Изменить день»
После чего выбираем «Рабочий».
И так по каждому дню. В итоге должно получиться как-то вот так:
После чего все начисления заработной платы должны отлично и вполне нормально проходить.
Ну, а в довершение хотелось порассуждать на тему того, что как это вообще — «выходные с сохранением заработной платы» (как ставить этот день в табеле для организаций, которые вроде как работают, но не работают, а заодно не будет ли это потом «преступлением» при проверке госорганов: «Почему вы работали по табелю, когда был нерабочий день??»). Однако эта тема ни капельки не программистская, а слишком философская и имеет весьма понятный и адекватный ответ, который может многим власть предержащим не совсем понравиться. Потому рекомендую каждому сформировать своё личное мнение.