Как исправить ошибку «Слишком много фактических параметров» при обновлении 1С:ЗУП 3.1.18?

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

При переходе с устаревших релизов конфигурации «Зарплата и управление персоналом», редакция 3.1 (например, с версии 3.1.18.83 на 3.1.18.119), многие технические специалисты сталкиваются с аварийным завершением отложенного обновления информационной базы. Проблема локализуется в работе фонового задания, которое пытается выполнить процедуру обновления нормативно-справочной информации. Рассмотрим подробно причины возникновения этой ситуации и разберем пошаговые инструкции по её устранению.

Технический анализ причины возникновения ошибки

Проанализируем техническую сторону вопроса. Ошибка возникает при выполнении метода Справочники.ОснованияУвольнения.ОбновитьОснованияВАрхиве. Суть проблемы заключается в архитектурном изменении требований Библиотеки стандартных подсистем (БСП) к процедурам-обработчикам обновления.

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

Выясним, почему ошибка проявляется не у всех. Чаще всего ситуация воспроизводится в клиент-серверном варианте работы базы данных. В файловом варианте менеджер заданий может использовать упрощенные механизмы вызова, которые в ряде случаев игнорируют передачу лишних структур, если они не требуются. Также критическую роль играет «прыжок» через несколько релизов. Если обновляться последовательно на каждый промежуточный релиз, система может успеть выполнить часть обработчиков до того, как возникнет конфликт версий БСП.

Способ 1: Обновление до исправленного релиза

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

  1. Если вы уже установили версию 3.1.18.119 и получили ошибку, необходимо скачать и установить релиз 3.1.18.120 или выше.
  2. В релизе 3.1.18.120 ошибка официально исправлена: разработчики либо изменили сигнатуру процедуры, либо скорректировали механизм её вызова.
  3. После обновления конфигурации запустите базу в режиме «Предприятие» и дождитесь завершения отложенных процедур обновления (раздел Администрирование — Обслуживание — Обновление программы — Результаты обновления).

Способ 2: Установка официального патча (исправления)

Если по каким-то причинам вы не можете оперативно перейти на версию 3.1.18.120 (например, конфигурация сильно доработана и требует длительного сравнения/объединения), существует механизм установки патчей. Для данной проблемы выпущен официальный патч EF_00_00373405.

Разберем процесс установки патча:

Способ 3: Ручная правка кода (для программистов)

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

Проанализируем необходимые правки в модуле менеджера справочника ОснованияУвольнения. Нам нужно найти объявление проблемной процедуры и добавить в неё параметр по умолчанию.

Исходный код в проблемном релизе выглядит примерно так:


Процедура ОбновитьОснованияВАрхиве() Экспорт
    // Логика обновления признака архивации
КонецПроцедуры

Нам необходимо привести заголовок процедуры к следующему виду:


Процедура ОбновитьОснованияВАрхиве(Параметры = Неопределено) Экспорт
    // Логика обновления остается прежней
КонецПроцедуры

Добавление конструкции Параметры = Неопределено позволяет процедуре принимать любое количество аргументов (от 0 до 1), что полностью устраняет ошибку «Слишком много фактических параметров» при вызове из механизмов БСП.

Принудительный запуск обновления

Иногда после исправления кода или установки патча фоновое задание может оставаться в статусе «Ошибка» или «Приостановлено». Чтобы «подтолкнуть» систему к завершению процессов, выполним следующие шаги:

  1. Закройте все сеансы пользователей.
  2. Запустите базу через командную строку или ярлык с использованием специального параметра: "C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "ПутьКБазе" /С ЗапуститьОбновлениеИнформационнойБазы
  3. Параметр /С ЗапуститьОбновлениеИнформационнойБазы заставляет систему игнорировать некоторые блокировки и инициирует повторный запуск всех незавершенных обработчиков в монопольном режиме.

Важность исправления и возможные последствия

Рассмотрим, почему нельзя просто «пропустить» эту ошибку в консоли обслуживания. Процедура ОбновитьОснованияВАрхиве отвечает за актуализацию нормативной базы в соответствии с изменениями в Трудовом кодексе РФ. В последних релизах ЗУП произошла масштабная переработка справочников законодательных оснований.

Если обработчик не будет выполнен:

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

← На главную