При обновлении типовых конфигураций иногда возникают непредвиденные ситуации. Сегодня мы разберем по шагам довольно распространенную проблему, с которой сталкиваются пользователи программы 1С:Управление нашей фирмой (УНФ). Речь идет об ошибке, возникающей на этапе выполнения дополнительных процедур обновления данных.
Проанализируем ситуацию. После запуска обновления базы в пользовательском режиме процесс прерывается со следующим служебным сообщением: Процедура "ОбновлениеИнформационнойБазыУНФ.УдалитьНеИспользуемыеОчередиЗадачОбменаССайтом" обработки данных завершилась с ошибкой: Слишком много фактических параметров...
Выясним причину такого поведения системы. Ошибка «Слишком много фактических параметров» имеет сугубо программный характер. Она означает, что при вызове определенного метода в него передается больше аргументов, чем прописано в его определении. В данном случае разработчики фирмы «1С» изменили логику работы процедуры в подсистеме обмена с сайтом (часто эта проблема проявлялась в ветке релизов 1.6.24), но вызывающий механизм остался старым. Так как процедура УдалитьНеИспользуемыеОчередиЗадачОбменаССайтом запускается как фоновое задание через подсистему ДлительныеОперации, стандартные методы перезапуска не всегда приносят результат.
Давайте рассмотрим подробнее несколько способов решения этой задачи, начиная от самого надежного (программного) и заканчивая пользовательскими методами.
Посмотрим на пример решения, который гарантированно помогает закрыть этот вопрос. Поскольку официальные патчи в некоторых случаях не срабатывают, нам потребуется временно разрешить редактирование конфигурации и внести небольшую правку в исходный код.
ОбновлениеИнформационнойБазыУНФ.УдалитьНеИспользуемыеОчередиЗадачОбменаССайтом. По умолчанию она выглядит так:
Процедура УдалитьНеИспользуемыеОчередиЗадачОбменаССайтом() Экспорт
// Исходный код процедуры
КонецПроцедуры
Нам необходимо добавить в скобки входящий параметр. Измените строку объявления процедуры следующим образом:
Процедура УдалитьНеИспользуемыеОчередиЗадачОбменаССайтом(Параметры) Экспорт
// Код процедуры остается без изменений
КонецПроцедуры
Сохраните изменения (клавиша F7), после чего запустите 1С в режиме предприятия и позвольте системе завершить выполнение отложенных обработчиков обновления. Задание завершится успешно. После этого настоятельно рекомендуется вернуть конфигурацию обратно на поддержку, чтобы избежать проблем при последующих обновлениях.
Если вы не хотите вмешиваться в программный код 1С, рассмотрим альтернативный вариант. Некоторым администраторам баз данных помогает штатный механизм тестирования. Из-за некорректных ссылок в базе фоновые задания обмена могут зависать или передавать неверный контекст.
Разберем порядок действий:
После завершения ТиИ зайдите в режим предприятия и проверьте список дополнительных процедур обработки данных. Процедура УдалитьНеИспользуемыеОчередиЗадачОбменаССайтом должна выполниться без ошибок.
Если во время обновления произошел сбой фонового задания, платформа могла закэшировать ошибочные метаданные. В этом случае обычный перезапуск не поможет.
Что нужно сделать:
Проанализируем еще несколько важных моментов. Ошибка часто проявляется, если вы обновляете конфигурацию, «перепрыгивая» сразу через несколько релизов (обновление .cf-файлом). Если вы застряли на версии с данной ошибкой, проверьте официальный сервис «Публикация ошибок 1С» (Bugboard). Если проблема признана разработчиками и исправлена в следующем релизе, оптимальным маршрутом будет восстановить базу из архива и обновиться сразу на следующий, уже исправленный релиз (строго соблюдая таблицу допустимых переходов обновлений).