Почему не рассчитывается больничный лист с доплатой до среднего в ЗУП 3.1.27.51 и как это исправить?

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

При работе в конфигурации «Зарплата и управление персоналом», редакция 3.1 (релиз 3.1.27.51 и смежные), многие пользователи столкнулись с критической проблемой. При попытке рассчитать документ «Больничный лист» с установленным флагом «Доплата до среднего заработка» программа аварийно завершает работу с системной ошибкой. Ошибка возникает непосредственно в момент расчета или при попытке печати расчета среднего заработка.

Текст ошибки выглядит следующим образом: Преобразование значения к типу Число не может быть выполнено {ОбщийМодуль.УчетПособийСоциальногоСтрахованияКлиентСервер.Модуль(596)}:Итог = Итог + ПараметрыРасчета.ПредельныеВеличиныПоГодам.Получить(Год);. Разберем подробно, почему это происходит и как восстановить работоспособность программы.

Проанализируем причину возникновения ошибки

Давайте выясним, что именно происходит в программном коде. Ошибка локализована в общем модуле УчетПособийСоциальногоСтрахованияКлиентСервер. При расчете доплаты до среднего система обращается к механизмам расчета обычных пособий по временной нетрудоспособности. Однако алгоритм расчета «доплаты» (которую осуществляет работодатель за свой счет) имеет важную особенность: он не должен ограничиваться предельными величинами базы страховых взносов, которые устанавливаются государством ежегодно.

В коде релиза 3.1.27.51 при установке галочки доплаты программно устанавливается параметр ПараметрыРасчета.ПрименятьПредельнуюВеличину = Ложь;. В результате коллекция ПредельныеВеличиныПоГодам в параметрах расчета остается пустой или не содержит данных за нужные годы. Когда управление передается в функцию СреднийЗаработокФСС2011, система пытается сложить текущий итог с предельной величиной за год, обращаясь к пустой коллекции. Метод Получить(Год) возвращает значение Неопределено, и попытка прибавить его к числу вызывает исключение.

Ситуация значительно осложняется, если в документе используется замена лет. В этом случае алгоритм пытается найти предельные значения для «старых» периодов (например, 2018 или 2019 год), которые в текущем контексте вызова отсутствуют, что также приводит к «падению» системы.

Вариант 1: Установка официальных патчей (исправлений)

Компания 1С признала наличие программной ошибки (зарегистрированы номера 70058618, 70059158 и 70058190). Самым быстрым и безопасным способом решения является установка специальных патчей. Проверим наличие и установим следующие исправления:

  1. Перейдем в раздел АдминистрированиеОбслуживаниеОбновление программы.
  2. Выберем пункт Установка исправлений (патчей).
  3. Найдем и установим патчи:
    • EF_70058618 — исправляет основную ошибку преобразования к числу при расчете доплаты;
    • EF_70059158 — корректирует определение периодов, исключаемых из расчета при доплате;
    • EF_70058190 — восстанавливает работу печатных форм при использовании замены лет.

После установки патчей необходимо перезапустить сеанс работы с программой. Больничные листы начнут рассчитываться корректно без дополнительных правок.

Вариант 2: Исправление кода через расширение конфигурации

Если по каким-то причинам установка патчей невозможна (например, закрытый контур или отсутствие доступа к интернет-поддержке), проанализируем возможность исправления кода вручную. Мы можем создать расширение и перехватить выполнение функции в общем модуле. Рассмотрим, какие изменения необходимо внести.

В процедуре УчетПособийСоциальногоСтрахованияКлиентСервер.СреднийЗаработокФСС2011 найдем блок условия, проверяющий применение максимального среднедневного заработка. Нам нужно добавить дополнительную проверку на заполненность предельных величин.

Пример исправленного кода для расширения:


&Вместо("СреднийЗаработокФСС2011")
Функция ИмяВашегоРасширения_СреднийЗаработокФСС2011(ПараметрыРасчета)
    // ... существующий код подготовки параметров ...
    
    // В блоке расчета максимума заменяем условие:
    // ИначеЕсли ПрименятьМаксимальныйСреднедневнойБезУчетаИсключаемыхПериодов(ПараметрыРасчета) тогда
    
    // На исправленное:
    ИначеЕсли ПрименятьМаксимальныйСреднедневнойБезУчетаИсключаемыхПериодов(ПараметрыРасчета) 
        И ПараметрыРасчета.ПрименятьПредельнуюВеличину Тогда
        
        // Только в этом случае мы можем безопасно обращаться к коллекции
        // Итог = Итог + ПараметрыРасчета.ПредельныеВеличиныПоГодам.Получить(Год);
    КонецЕсли;

    // ... остальной код функции ...
КонецФункции

Этот код предотвращает обращение к ПредельныеВеличиныПоГодам, если флаг применения лимитов снят, что логично для расчета доплаты до среднего заработка.

Вариант 3: Обновление конфигурации до актуальной версии

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

Временный обходной путь (без изменения кода)

Разберем ситуацию, когда расчет нужно сделать «здесь и сейчас», а правки вносить некому. В этом случае выполним следующие действия:

  1. В документе Больничный лист снимем галочку «Доплата до среднего заработка».
  2. Рассчитаем и проведем документ (только пособие за счет работодателя и данные для СФР).
  3. Создадим документ Разовое начисление.
  4. Рассчитаем сумму доплаты вручную: вычтем из среднего заработка сотрудника сумму начисленного пособия в день и умножим на количество дней болезни.
  5. Добавим эту сумму в Разовое начисление с соответствующим видом начисления.

Важно: Этот способ является временным и трудозатратным, так как требует ручного контроля сумм. После обновления программы или установки патчей рекомендуется вернуться к использованию штатного механизма в самом документе «Больничный лист» для обеспечения корректности учета в будущем.

Подводя итог, отметим: если вы столкнулись с ошибкой преобразования числа в ЗУП 3.1.27.51, первым делом проверьте раздел «Исправления (патчи)». В 90% случаев установка EF_70058618 решает проблему мгновенно.

← На главную