При переходе с версии 1С:ЗУП 2.5 на 3.1 пользователи часто сталкиваются с ситуацией, когда привычные формулы расчета дают иной результат. Особенно это заметно в начислениях, где используется расчет стоимости часа и процентные надбавки. Разберем на конкретном примере, почему возникают расхождения и как составить математически верную формулу в редакторе 1С.
Рассмотрим ситуацию: нам необходимо рассчитать оплату за ночные часы, исходя из оклада сотрудника, количества фактически отработанных ночных часов и установленного процента доплаты. В нашем примере используются следующие данные:
Автор темы изначально использовал формулу:
((Оклад / СреднегодовоеКолВоКалендарныхДнейМесяца) + ПроцентДоплатыЗаРаботуВНочноеВремя) * ВремяВЧасах
При подстановке чисел расчет выглядел так: ((24000 / 162) + 20) * 37. Проанализируем это действие. С точки зрения системы, ПроцентДоплатыЗаРаботуВНочноеВремя — это просто число 20. Программа прибавляет 20 рублей к стоимости одного дня/часа, а не увеличивает стоимость на 20%. В этом и заключается главная методическая ошибка.
Выясним причину расхождения. В 1С:Предприятие 8 в редакторе формул символ % не является оператором. Чтобы увеличить какое-либо значение на определенный процент, мы должны использовать классическую математическую формулу: Значение * (1 + Процент / 100).
Если мы хотим получить полную оплату за часы (включая и саму ставку, и надбавку за ночные), формула должна выглядеть следующим образом:
(Оклад / СреднегодовоеКолВоКалендарныхДнейМесяца * (1 + ПроцентДоплатыЗаРаботуВНочноеВремя / 100)) * ВремяВЧасах
Проверим расчет по этой формуле:
После округления мы получаем искомый результат: 6577,78.
Хотя создание собственных показателей (таких как СреднегодовоеКолВоКалендарныхДнейМесяца) допустимо, в ЗУП 3.1 реализован более гибкий механизм — предопределенный показатель СтоимостьЧаса. Рассмотрим подробнее, почему его использование предпочтительнее.
В меню Настройка — Расчет зарплаты — Ссылка "Детальная настройка" (или Настройка состава начислений и удержаний) можно определить, как система будет пересчитывать месячный оклад в часовую или дневную ставку. Программа предлагает три варианта:
Если мы настроим этот механизм, наша формула сократится и станет более понятной:
СтоимостьЧаса * (1 + ПроцентДоплатыЗаРаботуВНочноеВремя / 100) * ВремяВЧасах
Проанализируем ситуацию с точки зрения методологии 1С. Обычно работа в ночное время оплачивается в два этапа:
В этом случае типовая формула доплаты за ночные часы в программе выглядит гораздо проще:
СтоимостьЧаса * ВремяВЧасах * ПроцентДоплатыЗаРаботуВНочноеВремя / 100
Посмотрим на пример: 148,148 * 37 * 0,2 = 1096,30. Это сумма чистой доплаты. Если прибавить её к основной оплате за эти часы (148,148 * 37 = 5481,48), мы получим те же самые 6577,78. Разделение начислений помогает избежать путаницы при расчете среднего заработка для отпусков и больничных.
Важно обратить внимание на разницу в точности вычислений между ЗУП 2.5 и 3.1. Разберем по шагам:
В старой версии (2.5) программа часто округляла промежуточный результат (стоимость часа) до двух знаков после запятой. Если мы возьмем 148,15 (округленное) и умножим на 37 и на 1,2, мы можем получить небольшую погрешность в копейках.
В ЗУП 3.1 вычисления производятся с точностью до 10 знаков после запятой, а округляется только финальный результат документа. Если вам принципиально нужно получить результат "копейка в копейку" как в старой программе, в формуле следует использовать функцию Окр(). Например:
Окр(Оклад / СреднегодовоеКолВоКалендарныхДнейМесяца, 2) * (1 + ПроцентДоплаты / 100) * ВремяВЧасах
Для успешного решения задачи нам необходимо выполнить следующие действия:
Оклад является постоянным показателем, а ВремяВЧасах связано с видом времени "Ночные часы" в табеле.Правильно составленная формула — залог корректного расчета не только текущей зарплаты, но и всех зависимых начислений в будущем.