При переходе с устаревших релизов конфигурации «Зарплата и управление персоналом», редакция 3.1 (например, с версии 3.1.18.83 на 3.1.18.119), многие технические специалисты сталкиваются с аварийным завершением отложенного обновления информационной базы. Проблема локализуется в работе фонового задания, которое пытается выполнить процедуру обновления нормативно-справочной информации. Рассмотрим подробно причины возникновения этой ситуации и разберем пошаговые инструкции по её устранению.
Проанализируем техническую сторону вопроса. Ошибка возникает при выполнении метода Справочники.ОснованияУвольнения.ОбновитьОснованияВАрхиве. Суть проблемы заключается в архитектурном изменении требований Библиотеки стандартных подсистем (БСП) к процедурам-обработчикам обновления.
В релизе 3.1.18.119 разработчики объявили процедуру ОбновитьОснованияВАрхиве в модуле менеджера справочника без входящих параметров. Однако механизм отложенного обновления, работающий через общий модуль ДлительныеОперации, при вызове обработчиков в серверном режиме принудительно передает структуру с параметрами (контекст выполнения). Поскольку в самом определении процедуры параметры не предусмотрены, платформа выбрасывает исключение: «Слишком много фактических параметров».
Выясним, почему ошибка проявляется не у всех. Чаще всего ситуация воспроизводится в клиент-серверном варианте работы базы данных. В файловом варианте менеджер заданий может использовать упрощенные механизмы вызова, которые в ряде случаев игнорируют передачу лишних структур, если они не требуются. Также критическую роль играет «прыжок» через несколько релизов. Если обновляться последовательно на каждый промежуточный релиз, система может успеть выполнить часть обработчиков до того, как возникнет конфликт версий БСП.
Наиболее правильным и безопасным методом решения проблемы является использование актуальных дистрибутивов, где ошибка уже признана и исправлена разработчиками 1С. Посмотрим на последовательность действий:
Если по каким-то причинам вы не можете оперативно перейти на версию 3.1.18.120 (например, конфигурация сильно доработана и требует длительного сравнения/объединения), существует механизм установки патчей. Для данной проблемы выпущен официальный патч EF_00_00373405.
Разберем процесс установки патча:
ОбновитьОснованияВАрхиве, добавив в неё необязательный параметр, что снимет проблему конфликта при вызове.В ситуациях, когда патч не устанавливается или требуется немедленное продолжение работы, можно прибегнуть к ручному изменению кода. Рассмотрим, как это сделать правильно, если конфигурация находится на поддержке с возможностью изменения.
Проанализируем необходимые правки в модуле менеджера справочника ОснованияУвольнения. Нам нужно найти объявление проблемной процедуры и добавить в неё параметр по умолчанию.
Исходный код в проблемном релизе выглядит примерно так:
Процедура ОбновитьОснованияВАрхиве() Экспорт
// Логика обновления признака архивации
КонецПроцедуры
Нам необходимо привести заголовок процедуры к следующему виду:
Процедура ОбновитьОснованияВАрхиве(Параметры = Неопределено) Экспорт
// Логика обновления остается прежней
КонецПроцедуры
Добавление конструкции Параметры = Неопределено позволяет процедуре принимать любое количество аргументов (от 0 до 1), что полностью устраняет ошибку «Слишком много фактических параметров» при вызове из механизмов БСП.
Иногда после исправления кода или установки патча фоновое задание может оставаться в статусе «Ошибка» или «Приостановлено». Чтобы «подтолкнуть» систему к завершению процессов, выполним следующие шаги:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "ПутьКБазе" /С ЗапуститьОбновлениеИнформационнойБазы
/С ЗапуститьОбновлениеИнформационнойБазы заставляет систему игнорировать некоторые блокировки и инициирует повторный запуск всех незавершенных обработчиков в монопольном режиме.Рассмотрим, почему нельзя просто «пропустить» эту ошибку в консоли обслуживания. Процедура ОбновитьОснованияВАрхиве отвечает за актуализацию нормативной базы в соответствии с изменениями в Трудовом кодексе РФ. В последних релизах ЗУП произошла масштабная переработка справочников законодательных оснований.
Если обработчик не будет выполнен:
Таким образом, мы видим, что решение проблемы требует либо административных действий по обновлению конфигурации, либо точечного вмешательства в программный код для обеспечения совместимости процедур обновления с серверными механизмами платформы 1С:Предприятие 8.3.