При обновлении типовых конфигураций на платформе 1С:Предприятие 8.3, таких как «Управление торговлей 11», «ERP» или «Комплексная автоматизация», специалисты часто сталкиваются с критическими ошибками на этапе выполнения отложенных обработчиков обновления. Одной из самых распространенных и «тяжелых» является ошибка, связанная с регистром сведений РеестрДокументов. В этой статье мы подробно разберем, как диагностировать и устранить данную проблему, используя инструменты платформы и встроенные механизмы конфигурации.
Ситуация обычно выглядит следующим образом: при запуске системы после обновления метаданных открывается окно «Обновление информационной базы», процесс доходит до определенного процента и останавливается с ошибкой. В технической информации или журнале регистрации фиксируется запись следующего вида:
{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(6265)}: Не удалось выполнить обработчик обновления "РегистрыСведений.РеестрДокументов.ОбработатьДанныеДляПереходаНаНовуюВерсию". Подробнее в журнале регистрации.
Давайте проанализируем, почему это происходит. Обработчик ОбработатьДанныеДляПереходаНаНовуюВерсию отвечает за пересчет и заполнение вспомогательного регистра РеестрДокументов. Этот регистр необходим для оптимизации работы динамических списков документов. Если в базе данных присутствуют «битые ссылки» (объекты, которые были удалены, но ссылки на них остались в других таблицах) или данные нарушают логическую целостность, обработчик прерывается с исключением.
Первым делом нам необходимо выяснить, на каком именно объекте спотыкается система. Для этого выполним следующие шаги:
В современных типовых конфигурациях процесс обновления опирается на специальный план обмена, который называется ОбновлениеИнформационнойБазы. Рассмотрим подробнее, как использовать его для решения нашей задачи.
Когда запускается отложенное обновление, система регистрирует все объекты, подлежащие обработке, на узлах этого плана обмена. Если обработчик не может завершиться, скорее всего, в регистрации «зависла» запись, которую система не может прочитать или записать.
Для исправления ситуации выполним следующие действия:
Обновление информационной базы.Объект не найден (битая ссылка), это и есть причина нашей ошибки.Важный момент: если мы обнаружили битую ссылку, ее необходимо удалить из регистрации. Это не удалит сам документ (которого и так нет), но позволит системе «пропустить» несуществующий объект и продолжить обновление остальных данных. После снятия с регистрации попробуем запустить обновление повторно через форму «Результаты обновления».
Иногда стандартных инструментов недостаточно, и требуется вмешательство на уровне кода или таблиц базы данных. Рассмотрим ситуацию, когда обработчик зависает из-за огромного объема данных. В этом случае мы можем принудительно изменить статус обработчика, если уверены, что данные в регистре РеестрДокументов нам не критичны в данный момент или мы планируем пересчитать их позже.
Для этого можно воспользоваться регистром сведений СтатусыОбработчиковОбновления. Найдем запись, соответствующую нашему обработчику, и изменим статус с Ошибка или Выполняется на Выполнено.
Если же вы решили докопаться до сути программно, можно найти метод в конфигураторе:
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
// Здесь находится логика выборки данных из плана обмена
// и заполнения регистра РеестрДокументов
КонецПроцедуры
Чтобы отловить конкретную ошибку, установите точку останова в начале этой процедуры. Учтите, что отложенное обновление выполняется в фоновом задании. Для отладки фонового задания необходимо:
-debug).Разберем, как предотвратить подобные ситуации в будущем. Появление битых ссылок — это признак нарушения целостности базы. Перед любым обновлением критически важно выполнять процедуру «Тестирование и исправление» в конфигураторе. Проанализируем оптимальные настройки для нашего случая:
Очищать ссылки или Создавать объекты (в зависимости от вашей политики восстановления данных).Выясним еще одну причину: кэш сервера. Иногда, особенно на релизах 11.4.6.х, платформа кэширует схемы запросов, которые меняются в процессе обновления. Если после исправления всех данных ошибка сохраняется, рекомендуется остановить службу 1C:Enterprise Server и очистить содержимое папки srvinfo/reg_1541/snccntx... (сеансовые данные и кэш).
Подведем итог нашему исследованию. Ошибка обновления регистра РеестрДокументов чаще всего вызвана грязными данными в информационной базе. Алгоритм решения задачи всегда должен быть последовательным: от простого просмотра журнала регистрации к анализу планов обмена и, в крайнем случае, к программной корректировке статусов заданий.
Помните, что регистрация изменений в плане обмена ОбновлениеИнформационнойБазы — это мощный механизм. Если вы видите там тысячи объектов, которые не могут обработаться, возможно, стоит выполнить полное ТиИ, прежде чем пытаться «протолкнуть» обновление вручную. Совместная работа администратора и программиста над анализом регистратора и планов обмена позволяет успешно завершить переход даже на самых объемных и запущенных базах «1С:Управление торговлей».