Как округлить среднемесячное количество часов для расчета доплат в 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) Промышленность, строительство и АПК
← На главную

В практике кадрового учета и расчета заработной платы часто возникают ситуации, когда внутренние локальные нормативные акты организации (приказы, положения об оплате труда) устанавливают фиксированные значения для расчетных величин. Одной из таких величин является среднемесячное количество рабочих часов. Несмотря на то что программа 1С:ЗУП (ЗГУ) 3.1 рассчитывает этот показатель автоматически на основе производственного календаря или графика работы, бухгалтеры сталкиваются с необходимостью округления этого значения (например, с 164,91667 до 164,9).

Разберем подробно, почему ручная правка в справочнике Графики работы не всегда дает результат и какими способами можно добиться корректного расчета доплат за ночные, праздничные или сверхурочные часы.

Почему изменения в графике работы игнорируются программой?

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

  1. Точность хранения данных: В базе данных 1С реквизиты, отвечающие за числовые показатели, часто имеют точность до 5 знаков. Даже если на форме вы видите 164,9, в памяти системы может храниться исходное значение 164,91667.
  2. Динамический расчет: Расчетный модуль 1С:ЗУП часто игнорирует записанное в реквизит значение и рассчитывает среднемесячное количество часов «на лету», деля годовую норму по графику на 12 месяцев.
  3. Приоритет алгоритма пересчета: В настройках программы (раздел Настройка — Расчет зарплаты) задан общий порядок пересчета тарифной ставки. Если там выбрано «По среднемесячному количеству часов», программа будет использовать свой жестко зашитый алгоритм, который не предполагает округления до одного знака.

Решение 1: Использование пользовательского показателя в формуле

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

Шаг 1. Создание показателя. Перейдем в раздел Настройка — Показатели расчета зарплаты и создадим новый показатель:

Шаг 2. Ввод значения. Через документ Данные для расчета зарплаты (или через настройки организации, если выбран соответствующий тип показателя) введем значение 164,9 на текущий год.

Шаг 3. Изменение формулы начисления. Найдем начисление (например, Доплата за работу в ночное время) и изменим его формулу. Вместо стандартного механизма пересчета через слэш, который задействует типовой алгоритм 1С, пропишем формулу явно:


Оклад / СреднемесячноеЧислоЧасовОкругленное * ВремяВЧасах * ПроцентДоплатыЗаРаботуВНочноеВремя / 100

Важный нюанс: Если в организации часть сотрудников рассчитывается по «норме времени», а часть — по «среднемесячному количеству», мы можем усложнить формулу, используя условие:


?(СпособРасчетаСтоимостиЧаса = ЗначениеПеречисления.СпособыПересчетаТарифнойСтавки.СреднемесячноеКоличествоЧасов, 
  Оклад / СреднемесячноеЧислоЧасовОкругленное, 
  Оклад / НормаВремени) 
* ВремяВЧасах * ПроцентДоплатыЗаРаботуВНочноеВремя / 100

Решение 2: Программная корректировка через расширение или обработку

Если необходимо, чтобы округление работало именно в типовом механизме без изменения формул, придется обратиться к доработке системы. Как было замечено в обсуждении, на форме отображается округленное значение, а в объекте хранится исходное.

Рассмотрим пример кода, который можно использовать в обработке проведения или при записи графика (в модуле объекта):


Процедура ПриЗаписи(Отказ)
    // Принудительно округляем значение реквизита перед сохранением в базу
    ЭтотОбъект.СреднемесячноеЧислоЧасов = Окр(ЭтотОбъект.СреднемесячноеЧислоЧасов, 1);
КонецПроцедуры

Однако помните, что при обновлении производственного календаря или перезаполнении графика программа может снова рассчитать неокругленное значение. Поэтому использование пользовательского показателя (Решение 1) является более стабильным.

Решение 3: Настройка стоимости часа (ЧТС)

Проанализируем еще один механизм — использование регистра сведений Коэффициент пересчета тарифных ставок. В программе 1С:ЗУП 3.1 стоимость часа (показатель СтоимостьЧаса) рассчитывается при назначении сотруднику планового начисления (например, приеме на работу или кадровом переводе).

Если вы хотите контролировать результат, вы можете:

  1. Открыть документ кадрового изменения.
  2. Нажать на карандаш рядом с полем Доп. тарифы, коэффициенты или проверить поле Стоимость часа (если оно выведено).
  3. Вручную скорректировать стоимость часа, исходя из вашего округленного значения (Оклад / 164,9).

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

Методологические и юридические риски

Выясним, чем грозит подобное округление. Стоимость часа — критически важный параметр. Согласно позиции Роструда, любые округления в локальных актах предприятия не должны приводить к ухудшению положения работника. Если вы округляете 164,91667 до 164,9 (в меньшую сторону), то знаменатель уменьшается, а итоговая стоимость часа — увеличивается. Это безопасно с точки зрения трудовых споров. Однако если в другой год значение будет, например, 164,25 и вы округлите его до 164,3 (в большую сторону), стоимость часа уменьшится, что может стать причиной предписания при проверке ГИТ.

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

← На главную