Зацикливается обработчик обновления при переходе с УТ 11.4 на 11.5: как найти причину и исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Переход с конфигурации «Управление торговлей 11.4» на редакцию 11.5 является одним из самых сложных процессов обновления за последние годы. Это связано с кардинальной сменой архитектуры взаиморасчетов (переход на так называемые «онлайн взаиморасчеты»). Часто этот процесс сопровождается зависанием или зацикливанием отложенных обработчиков обновления. В этой статье мы подробно разберем, как диагностировать проблему, выявить конкретные документы-виновники и корректно завершить переход.

Почему происходит зацикливание?

При обновлении система пытается конвертировать данные из старых регистров накопления (например, РасчетыСКлиентами) в новые структуры. В версии 11.4 контроль целостности данных был мягче, и в базе могли существовать записи с незаполненными ключевыми измерениями (например, пустой «Объект расчетов» или битая ссылка на «Заказ»). Подобные ситуации часто возникают после нетиповых обменов или переноса остатков, когда в регистрах накопления отсутствуют необходимые ключи аналитики, для исправления чего могут потребоваться дополнительные инструменты.

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

Этап 1: Диагностика проблемы

Первое, что нам нужно сделать — перестать смотреть на бегунок прогресса и выяснить, на чем именно спотыкается система. Рассмотрим инструменты, которые помогут нам в этом.

  1. Анализ Журнала регистрации. Это самый надежный источник информации. Если обновление выполняется в фоновом режиме, ошибки не выводятся на экран. Откройте Журнал регистрации и установите отбор по событию «Обновление информационной базы» и статусу «Ошибка». Ищите записи, содержащие текст ВызватьИсключение или ссылки на общие модули обновления.
  2. Просмотр списка обработчиков. Перейдем в форму результатов обновления. Для этого можно воспользоваться прямой ссылкой (через Shift+F11): e1cib/app/Обработка.РезультатыОбновленияПрограммы. Здесь мы увидим список незавершенных процедур. Если нажать на конкретную процедуру, внизу часто отображается техническая информация: имя метода и количество необработанных объектов.
  3. Отчет по прогрессу. В интерфейсе БСП (Библиотеки стандартных подсистем) есть полезный отчет «Прогресс отложенного обновления». Он показывает, сколько объектов осталось обработать по каждому регистру или виду документов.

В рассматриваемом нами случае наиболее частыми виновниками являются:

Этап 2: Выявление проблемных объектов

Предположим, мы выяснили, что проблема в регистре ДенежныеСредстваБезналичные или в документах ВзаимозачетЗадолженности. Как найти конкретные 2-3 документа среди тысяч?

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

Откроем обработку «Регистрация изменений для обмена данными». Обычно она доступна через «Функции для технического специалиста» или через меню «Все функции».

  1. В открывшейся обработке найдем узел плана обмена, отвечающий за обновление. Обычно он называется «Обновление информационной базы» (или имеет похожий код, связанный с версионированием).
  2. Раскроем дерево метаданных в этом узле.
  3. Найдем проблемный тип документов (например, ВзаимозачетЗадолженности).
  4. Мы увидим список конкретных ссылок, которые зарегистрированы для обработки, но еще не обработаны.

Именно эти документы, оставшиеся в списке регистрации, являются причиной сбоя. Чаще всего в них отсутствуют обязательные аналитики, например, объект расчетов (ссылка на накладную или заказ) в табличной части.

Этап 3: Варианты решения

Рассмотрим три основных способа устранения проблемы, от самого простого к правильному.

Способ 1: Исключение объектов из обработки (Быстрый метод)

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

Порядок действий:

  1. В обработке «Регистрация изменений для обмена данными» (которую мы открывали на этапе 2) выделите проблемные документы.
  2. Нажмите кнопку отмены регистрации (обычно выглядит как «Снять с регистрации»).
  3. После этого вернитесь в форму «Результаты обновления программы».
  4. В меню «Еще» выберите пункт «Запустить обработчики обновления» или «Возобновить».

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

Способ 2: Ручное исправление данных

Если данные важны, нужно исправить причину. Откройте проблемный документ. Если система не дает его провести или записать, возможно, придется воспользоваться редактором реквизитов (например, через обработку «Групповое изменение реквизитов», которую можно вызывать прямо из формы документа).

Частая ошибка в документах ВзаимозачетЗадолженности при переходе — незаполненная колонка «Объект расчетов» или некорректное распределение сумм. Попробуйте заполнить пустые поля фиктивными или реальными данными, чтобы документ прошел валидацию.

Способ 3: Выбор правильной версии релиза (Стратегический метод)

Практика показывает, что релизы ветки 11.5.7 содержат больше ошибок в механизмах конвертации данных, чем последующие версии. Ошибки, приводящие к зацикливанию на ровном месте, часто исправляются самими разработчиками в более свежих релизах.

Если вы обновляетесь последовательно и застряли на версии 11.5.7, рассмотрите возможность обновления сразу на более стабильный релиз, например 11.5.8.443 или новее. В этих версиях алгоритмы перехода были доработаны: они лучше обрабатывают исключительные ситуации и вместо падения всего процесса могут просто пропускать некорректные записи с записью в лог.

Рекомендация по предотвращению проблем

Чтобы минимизировать подобные ситуации в будущем, перед любым крупным обновлением (сменой редакции) настоятельно рекомендуем выполнять следующие действия:

  1. Тестирование и исправление базы данных. Запустите конфигуратор, выберите меню Администрирование -> Тестирование и исправление. Установите галочки «Проверка логической целостности» и «Проверка ссылочной целостности». Это уберет битые ссылки, на которых часто падают обработчики.
  2. Установка патчей. Перед запуском режима 1С:Предприятие после обновления конфигуратора, проверьте наличие патчей (исправлений) для конкретной версии, на которую вы обновляетесь. Часто фирма 1С выпускает патчи именно для процедур обновления (имена патчей часто содержат EF_..._Обновление...).

Подведем итог: если обработчик зациклился, используйте Журнал регистрации для поиска ошибки, найдите конкретные объекты через «Регистрацию изменений для обмена» и либо исправьте их, либо исключите из обновления, понимая риски для учета.

← На главную