При расчете разовых или плановых начислений в программе «1С:Зарплата и управление персоналом 3.1» расчетчики часто сталкиваются с ситуацией, когда итоговая сумма получается с копейками. Например, при делении оклада на дни и умножении на фактически отработанное время может получиться сумма 22994,99 руб. С точки зрения ведения учета и выплаты сотрудникам, гораздо удобнее округлить этот результат до целого рубля — 22995 руб.
В этой статье мы подробно разберем, как правильно настроить формулу расчета в программе, какие функции использовать, а также рассмотрим альтернативные способы округления непосредственно при выплате зарплаты.
Для настройки округления непосредственно в самом начислении нам понадобится встроенный редактор формул. Перейдем в настройки начисления (раздел «Настройки» — «Начисления»), откроем нужное разовое начисление и найдем поле редактирования формулы.
Самый правильный и математически верный способ округлить результат — использовать функцию Окр. Давайте разберем ее синтаксис:
Окр(Выражение, Разрядность)
Где параметры означают следующее:
Выражение — это наша математическая формула расчета. В рассматриваемом примере формула выглядит так: (РасчетнаяБаза/ОтработаноДней)*НормаДней.Разрядность — число, указывающее, до какого знака после запятой нужно произвести округление:
0 — округление до целого рубля (то, что нам нужно);2 — округление до копеек (двух знаков после запятой);-1, -2, -3) позволяют округлять результат до десятков, сотен или тысяч рублей соответственно. Например, Окр(Сумма, -1) округлит 1234 рубля до 1230 рублей.Давайте посмотрим на готовый пример формулы для нашего разового начисления с округлением до целого рубля:
Окр((РасчетнаяБаза / ОтработаноДней) * НормаДней, 0)
При использовании такой конструкции сумма 22994,99 автоматически округлится до 22995 по стандартным правилам математики (так как дробная часть 0,5 и выше округляется в большую сторону).
Иногда пользователи пытаются использовать функцию Цел, которая просто отбрасывает дробную часть числа. Давайте проанализируем, почему конструкция Цел((РасчетнаяБаза/ОтработаноДней)*НормаДней) работает некорректно для нашей задачи.
Функция Цел возвращает только целую часть. Для числа 22994,99 результатом работы функции будет 22994,00. Программа просто «отрежет» 99 копеек, проигнорировав правила математического округления. В итоге сотрудник недополучит деньги.
Чтобы обойти это ограничение и заставить функцию Цел округлять по правилам математики, можно применить проверенный математический прием — прибавить к результату расчета константу 0.5 перед отбрасыванием дробной части. Наша формула примет следующий вид:
Цел(((РасчетнаяБаза / ОтработаноДней) * НормаДней) + 0.5)
Давайте выясним причину, почему это работает:
22994,49: прибавляем 0.5, получаем 22994,99. Функция Цел отбрасывает дробную часть и возвращает 22994 (округление вниз).22994,50: прибавляем 0.5, получаем 22995,00. Функция Цел возвращает 22995 (округление вверх).Этот способ полностью рабочий, однако мы рекомендуем использовать штатную функцию Окр, так как она более понятна при чтении формулы другими расчетчиками и минимизирует вероятность ошибок.
Бывают ситуации, когда по условиям коллективного договора или локальных нормативных актов работодатель обязуется округлять любые начисления в пользу сотрудника (то есть всегда в большую сторону). В этом случае стандартная функция Окр нам не подойдет, так как она округлит, к примеру, 22994,15 руб. в меньшую сторону до 22994 руб.
Рассмотрим, как реализовать округление «вверх» в 1С:ЗУП 3.1 двумя путями:
Мы можем прибавить к результату расчетов 0.49 (или 0.499) перед округлением до целого:
Окр(((РасчетнаяБаза / ОтработаноДней) * НормаДней) + 0.49, 0)
В этом случае даже минимальные 0.01 копейки превратятся в 0.50 копеек и округлятся до целого рубля в большую сторону.
Мы можем использовать функцию ветвления ? для проверки наличия дробной части у числа. Формула выглядит следующим образом:
?(Результат = Цел(Результат), Результат, Цел(Результат) + 1)
Проанализируем работу этой конструкции: если наше число уже целое (например, 22000), программа оставляет его без изменений. Если у числа есть любая дробная часть (например, 22000.01), программа отбрасывает копейки с помощью Цел и прибавляет ровно 1 рубль, гарантируя округление в большую сторону.
На практике часто требуется настроить округление оклада до целого рубля, но только если месяц отработан сотрудником полностью. Если же сотрудник находился на больничном или в отпуске, расчет должен происходить с точностью до копеек, чтобы не искажать расчет среднего заработка в будущем.
Для реализации такой логики мы можем использовать в формуле начисления проверку отработанного времени:
?(ВремяВДнях = НормаДней, Окр(ФормулаРасчета, 0), ФормулаРасчета)
Если фактическое время работы в днях (ВремяВДнях) равно норме дней за месяц (НормаДней), программа применит к формуле округление до целого. Если же имели место отклонения, то расчет будет произведен по стандартной формуле с сохранением копеек.
Важно помнить, что округление непосредственно в формуле начисления влияет на расчет НДФЛ и страховых взносов, так как налоги рассчитываются от начисленной базы. Если ваша цель — просто выдавать сотрудникам «красивые» суммы без копеек в ведомостях, правильнее использовать встроенный механизм округления выплат в ЗУП 3.1.
Выполним настройку округления выплаты по шагам:
При использовании этого механизма копейки не теряются и не списываются, а автоматически переносятся как долг за предприятием или сотрудником на следующий календарный месяц, что позволяет вести абсолютно точный бухгалтерский и налоговый учет.