При работе в конфигурации «Зарплата и управление персоналом», редакция 3.1 (релиз 3.1.27.51 и смежные), многие пользователи столкнулись с критической проблемой. При попытке рассчитать документ «Больничный лист» с установленным флагом «Доплата до среднего заработка» программа аварийно завершает работу с системной ошибкой. Ошибка возникает непосредственно в момент расчета или при попытке печати расчета среднего заработка.
Текст ошибки выглядит следующим образом: Преобразование значения к типу Число не может быть выполнено {ОбщийМодуль.УчетПособийСоциальногоСтрахованияКлиентСервер.Модуль(596)}:Итог = Итог + ПараметрыРасчета.ПредельныеВеличиныПоГодам.Получить(Год);. Разберем подробно, почему это происходит и как восстановить работоспособность программы.
Давайте выясним, что именно происходит в программном коде. Ошибка локализована в общем модуле УчетПособийСоциальногоСтрахованияКлиентСервер. При расчете доплаты до среднего система обращается к механизмам расчета обычных пособий по временной нетрудоспособности. Однако алгоритм расчета «доплаты» (которую осуществляет работодатель за свой счет) имеет важную особенность: он не должен ограничиваться предельными величинами базы страховых взносов, которые устанавливаются государством ежегодно.
В коде релиза 3.1.27.51 при установке галочки доплаты программно устанавливается параметр ПараметрыРасчета.ПрименятьПредельнуюВеличину = Ложь;. В результате коллекция ПредельныеВеличиныПоГодам в параметрах расчета остается пустой или не содержит данных за нужные годы. Когда управление передается в функцию СреднийЗаработокФСС2011, система пытается сложить текущий итог с предельной величиной за год, обращаясь к пустой коллекции. Метод Получить(Год) возвращает значение Неопределено, и попытка прибавить его к числу вызывает исключение.
Ситуация значительно осложняется, если в документе используется замена лет. В этом случае алгоритм пытается найти предельные значения для «старых» периодов (например, 2018 или 2019 год), которые в текущем контексте вызова отсутствуют, что также приводит к «падению» системы.
Компания 1С признала наличие программной ошибки (зарегистрированы номера 70058618, 70059158 и 70058190). Самым быстрым и безопасным способом решения является установка специальных патчей. Проверим наличие и установим следующие исправления:
После установки патчей необходимо перезапустить сеанс работы с программой. Больничные листы начнут рассчитываться корректно без дополнительных правок.
Если по каким-то причинам установка патчей невозможна (например, закрытый контур или отсутствие доступа к интернет-поддержке), проанализируем возможность исправления кода вручную. Мы можем создать расширение и перехватить выполнение функции в общем модуле. Рассмотрим, какие изменения необходимо внести.
В процедуре УчетПособийСоциальногоСтрахованияКлиентСервер.СреднийЗаработокФСС2011 найдем блок условия, проверяющий применение максимального среднедневного заработка. Нам нужно добавить дополнительную проверку на заполненность предельных величин.
Пример исправленного кода для расширения:
&Вместо("СреднийЗаработокФСС2011")
Функция ИмяВашегоРасширения_СреднийЗаработокФСС2011(ПараметрыРасчета)
// ... существующий код подготовки параметров ...
// В блоке расчета максимума заменяем условие:
// ИначеЕсли ПрименятьМаксимальныйСреднедневнойБезУчетаИсключаемыхПериодов(ПараметрыРасчета) тогда
// На исправленное:
ИначеЕсли ПрименятьМаксимальныйСреднедневнойБезУчетаИсключаемыхПериодов(ПараметрыРасчета)
И ПараметрыРасчета.ПрименятьПредельнуюВеличину Тогда
// Только в этом случае мы можем безопасно обращаться к коллекции
// Итог = Итог + ПараметрыРасчета.ПредельныеВеличиныПоГодам.Получить(Год);
КонецЕсли;
// ... остальной код функции ...
КонецФункции
Этот код предотвращает обращение к ПредельныеВеличиныПоГодам, если флаг применения лимитов снят, что логично для расчета доплаты до среднего заработка.
Посмотрим на статус исправления в новых релизах. Начиная с версий 3.1.27.90 и выше, данный баг был полностью устранен на уровне основной конфигурации. Если ваша база находится на релизе 3.1.27.51, рекомендуется выполнить плановое обновление. Это не только решит проблему с больничными, но и обновит формы отчетности, что критично для кадрового учета.
Разберем ситуацию, когда расчет нужно сделать «здесь и сейчас», а правки вносить некому. В этом случае выполним следующие действия:
Важно: Этот способ является временным и трудозатратным, так как требует ручного контроля сумм. После обновления программы или установки патчей рекомендуется вернуться к использованию штатного механизма в самом документе «Больничный лист» для обеспечения корректности учета в будущем.
Подводя итог, отметим: если вы столкнулись с ошибкой преобразования числа в ЗУП 3.1.27.51, первым делом проверьте раздел «Исправления (патчи)». В 90% случаев установка EF_70058618 решает проблему мгновенно.