Переход с конфигурации «Управление торговлей 11.4» на редакцию 11.5 является одним из самых сложных процессов обновления за последние годы. Это связано с кардинальной сменой архитектуры взаиморасчетов (переход на так называемые «онлайн взаиморасчеты»). Часто этот процесс сопровождается зависанием или зацикливанием отложенных обработчиков обновления. В этой статье мы подробно разберем, как диагностировать проблему, выявить конкретные документы-виновники и корректно завершить переход.
При обновлении система пытается конвертировать данные из старых регистров накопления (например, РасчетыСКлиентами) в новые структуры. В версии 11.4 контроль целостности данных был мягче, и в базе могли существовать записи с незаполненными ключевыми измерениями (например, пустой «Объект расчетов» или битая ссылка на «Заказ»). Подобные ситуации часто возникают после нетиповых обменов или переноса остатков, когда в регистрах накопления отсутствуют необходимые ключи аналитики, для исправления чего могут потребоваться дополнительные инструменты.
В версии 11.5 эти поля стали обязательными. Обработчик обновления, встречая такую запись, пытается выполнить код, сталкивается с ошибкой (исключением), откатывает транзакцию и... пытается снова в следующем цикле. Это выглядит как бесконечное выполнение или ошибка «Ожидается выражение» в отладчике.
Первое, что нам нужно сделать — перестать смотреть на бегунок прогресса и выяснить, на чем именно спотыкается система. Рассмотрим инструменты, которые помогут нам в этом.
ВызватьИсключение или ссылки на общие модули обновления.e1cib/app/Обработка.РезультатыОбновленияПрограммы.
Здесь мы увидим список незавершенных процедур. Если нажать на конкретную процедуру, внизу часто отображается техническая информация: имя метода и количество необработанных объектов.В рассматриваемом нами случае наиболее частыми виновниками являются:
РегистрыНакопления.ДенежныеСредстваБезналичные.ОбработатьДанныеДляПереходаНаНовуюВерсиюВзаимозачетЗадолженностиПредположим, мы выяснили, что проблема в регистре ДенежныеСредстваБезналичные или в документах ВзаимозачетЗадолженности. Как найти конкретные 2-3 документа среди тысяч?
Если отчет по прогрессу обновления не дает расшифровки до конкретного документа (показывает только количество), нам придется воспользоваться механизмом регистрации изменений.
Откроем обработку «Регистрация изменений для обмена данными». Обычно она доступна через «Функции для технического специалиста» или через меню «Все функции».
ВзаимозачетЗадолженности).Именно эти документы, оставшиеся в списке регистрации, являются причиной сбоя. Чаще всего в них отсутствуют обязательные аналитики, например, объект расчетов (ссылка на накладную или заказ) в табличной части.
Рассмотрим три основных способа устранения проблемы, от самого простого к правильному.
Если количество проблемных документов невелико (единицы), и они относятся к старым закрытым периодам, можно исключить их из процесса обновления. Это позволит обработчикам завершиться.
Порядок действий:
Важно: При этом данные этих конкретных документов могут некорректно отразиться в новой архитектуре взаиморасчетов. Рекомендуем записать номера этих документов и после обновления провести анализ расчетов по проблемным контрагентам. При необходимости откорректируйте остатки. Для этого можно использовать как стандартный документ «Корректировка задолженности» (для массовых исправлений существует обработка для группового создания таких документов), так и более универсальные инструменты корректировки регистров.
Если данные важны, нужно исправить причину. Откройте проблемный документ. Если система не дает его провести или записать, возможно, придется воспользоваться редактором реквизитов (например, через обработку «Групповое изменение реквизитов», которую можно вызывать прямо из формы документа).
Частая ошибка в документах ВзаимозачетЗадолженности при переходе — незаполненная колонка «Объект расчетов» или некорректное распределение сумм. Попробуйте заполнить пустые поля фиктивными или реальными данными, чтобы документ прошел валидацию.
Практика показывает, что релизы ветки 11.5.7 содержат больше ошибок в механизмах конвертации данных, чем последующие версии. Ошибки, приводящие к зацикливанию на ровном месте, часто исправляются самими разработчиками в более свежих релизах.
Если вы обновляетесь последовательно и застряли на версии 11.5.7, рассмотрите возможность обновления сразу на более стабильный релиз, например 11.5.8.443 или новее. В этих версиях алгоритмы перехода были доработаны: они лучше обрабатывают исключительные ситуации и вместо падения всего процесса могут просто пропускать некорректные записи с записью в лог.
Чтобы минимизировать подобные ситуации в будущем, перед любым крупным обновлением (сменой редакции) настоятельно рекомендуем выполнять следующие действия:
Администрирование -> Тестирование и исправление. Установите галочки «Проверка логической целостности» и «Проверка ссылочной целостности». Это уберет битые ссылки, на которых часто падают обработчики.EF_..._Обновление...).Подведем итог: если обработчик зациклился, используйте Журнал регистрации для поиска ошибки, найдите конкретные объекты через «Регистрацию изменений для обмена» и либо исправьте их, либо исключите из обновления, понимая риски для учета.