В начале 2025 года многие пользователи конфигурации «1С:Управление производственным предприятием» (УПП), а также схожих по зарплатному блоку конфигураций (например, ЗУП 2.5), столкнулись с неприятной ошибкой. При начислении пособия по временной нетрудоспособности программа стала делить заработок сотрудника за расчетный период на 731 день, а не на положенные по закону 730. Это приводит к занижению суммы среднего дневного заработка и, как следствие, к недоплате по больничному листу.
Давайте подробно разберем, почему возникла эта проблема, как должно быть по закону, и какие существуют способы ее исправления, если вы не можете оперативно обновить конфигурацию.
Проблема кроется в механике расчета среднего заработка и особенностях календаря. Для расчета больничных в 2025 году берутся данные за два предыдущих календарных года — 2023 и 2024.
Суммарное количество дней в расчетном периоде составляет 365 + 366 = 731 день. Программный алгоритм в некоторых версиях 1С:УПП по ошибке начал использовать именно это фактическое количество дней в качестве делителя.
Как подтверждает анализ кода, упомянутый в обсуждении, ошибка, скорее всего, связана с тем, что для расчета пособия по временной нетрудоспособности был ошибочно применен алгоритм, предназначенный для других видов пособий (например, по беременности и родам). Именно для декретных выплат используется фактическое число дней в расчетном периоде за вычетом исключаемых периодов. Для обычного больничного листа закон устанавливает строго фиксированный делитель.
Ключевым документом, регулирующим расчет пособий, является Постановление Правительства РФ от 11.09.2021 № 1540, а также статья 14 Федерального закона № 255-ФЗ. В этих документах четко указано:
Средний дневной заработок для исчисления пособия по временной нетрудоспособности определяется путем деления суммы заработка, начисленного за два календарных года, предшествующих году наступления временной нетрудоспособности, на 730.
Таким образом, наличие високосного года в расчетном периоде не влияет на делитель при расчете обычного больничного листа. Он всегда равен 730. Использование программой значения 731 является подтвержденной ошибкой, которую фирма «1С» признала и исправила в последующих обновлениях.
Важный нюанс: из этого правила есть исключение, которое касается сотрудников с приостановкой трудового договора (например, мобилизованных). Для них из числа 730 вычитаются календарные дни, приходящиеся на период приостановки. Это важно учитывать при ручном исправлении кода, чтобы не нарушить расчеты для этой категории работников.
Самый правильный и безопасный способ исправить ошибку — обновить вашу конфигурацию 1С:УПП до последнего релиза, в котором эта проблема уже решена разработчиками. Если по каким-то причинам обновление невозможно в ближайшее время, можно внести изменения в код самостоятельно.
Все правки вносятся в конфигураторе, в общем модуле ПроведениеРасчетов. Рассмотрим несколько вариантов исправлений, от самого простого, но рискованного, до более аккуратного.
Первое, что приходит в голову — найти строку, где вычисляется количество дней, и жестко прописать нужное значение. Проблемный участок кода выглядит примерно так (номер строки может отличаться в зависимости от релиза):
// Примерный исходный код в районе строки 3488
УчитываемыхДнейВКалендарныхГодах = ?(Не ЗначениеЗаполнено(ИсходныеДанные.ОтработаноДнейБезДнейПриостановленияТД), 730, ИсходныеДанные.ОтработаноДнейБезДнейПриостановленияТД);
Самое простое исправление — заменить эту строку на следующую:
// НЕ РЕКОМЕНДУЕТСЯ!
УчитываемыхДнейВКалендарныхГодах = 730;
Почему этот способ плохой? Как мы уже выяснили, законодательство требует уменьшать делитель 730 на количество дней приостановки трудового договора. Жестко установив значение 730, вы сломаете этот механизм. Для всех сотрудников, включая тех, у кого была приостановка, программа будет использовать 730 дней, что приведет к неверному расчету пособия для них. Этот вариант можно рассматривать только как временную меру, если у вас в компании гарантированно нет и не будет таких сотрудников.
Более правильный подход — исправить только конкретную ошибку (когда программа насчитала 731 день), не затрагивая другие сценарии расчета. Для этого можно использовать условный оператор, который будет корректировать значение только в том случае, если оно равно 731.
Заменим исходную строку на следующую конструкцию:
// Рекомендуемый вариант для ручного исправления
УчитываемыхДнейВКалендарныхГодах = ?(Не ЗначениеЗаполнено(ИсходныеДанные.ОтработаноДнейБезДнейПриостановленияТД), 730,
?(ИсходныеДанные.ОтработаноДнейБезДнейПриостановленияТД = 731, 730, ИсходныеДанные.ОтработаноДнейБезДнейПриостановленияТД));
Как это работает:
ИсходныеДанные.ОтработаноДнейБезДнейПриостановленияТД. Если нет, по умолчанию используется 730.Этот способ является точечным исправлением ("патчем"), который решает проблему с високосным годом, но сохраняет логику для особых случаев, предусмотренных законодательством.
После внесения изменений в код необходимо сохранить конфигурацию, обновить базу данных и пересчитать ранее созданные в январе 2025 года документы «Начисление по больничному листу», чтобы суммы были рассчитаны уже по правильному алгоритму.
В заключение, еще раз подчеркнем: ручное изменение типовой конфигурации — это крайняя мера. Приоритетным решением всегда должно быть обновление программы до актуальной версии от разработчика.