Как завершить обновление 1С 11.5, если оно зациклилось из-за битых ссылок в реестре документов?

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

Переход с версии 11.4 на 11.5 в конфигурациях на базе современной платформы 1С (таких как «Управление торговлей», «ERP» или «Комплексная автоматизация») — это сложный процесс, затрагивающий фундаментальные изменения в структуре хранения данных. Одной из самых частых проблем является «зависание» или бесконечное выполнение фоновых обработчиков обновления. Рассмотрим подробнее, почему это происходит и как исправить ситуацию, если пользователи уже начали работать в базе и откат к резервной копии невозможен.

Выясним причину: почему зацикливается обновление?

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

Ситуация осложняется тем, что обычное Тестирование и исправление не всегда находит такие связи в регистрах сведений, так как они не являются ссылочными объектами в классическом понимании. Проанализируем способы ручного и программного исправления этой ошибки.

Шаг 1. Анализ результатов обновления информационной базы

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

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

Шаг 2. Очистка битых ссылок в плане обмена «Обновление информационной базы»

Это один из самых эффективных методов. Система 1С использует скрытый план обмена ОбновлениеИнформационнойБазы для отслеживания объектов, которые еще нужно обработать. Если в этом плане зарегистрирована битая ссылка, система будет пытаться ее обработать снова и снова.

Рассмотрим, как очистить эти записи:

  1. Воспользуемся стандартной обработкой «Регистрация изменений для обмена данными» (она входит в состав инструментов разработчика или доступна через «Все функции/Функции для технического специалиста»).
  2. В поле выбора плана обмена выберем ОбновлениеИнформационнойБазы. В списке узлов выберем узел, связанный с текущим обновлением.
  3. Проанализируем состав зарегистрированных изменений. Нам нужно найти строки, где в колонке «Объект» написано «Объект не найден...».
  4. Выделим такие строки и нажмем «Снять регистрацию». Это «обманет» систему обновления, и она пропустит несуществующий объект.

Шаг 3. Ручное удаление записей из регистра «Реестр документов»

Если ссылки «застряли» непосредственно в регистре, их можно удалить вручную или простым запросом. Посмотрим на ситуацию глазами системы: запись в регистре есть, а самого документа нет.

Для удаления через интерфейс:

  1. Откроем регистр сведений РеестрДокументов (через функции для технического специалиста).
  2. Настроим список, чтобы увидеть подозрительные записи. Битые ссылки обычно выглядят как длинная строка с уникальным идентификатором (GUID) и текстом «Объект не найден».
  3. Если таких записей немного, выделим их и нажмем Del.

Если записей много, проанализируем их с помощью Консоли запросов. Пример условия для поиска битых ссылок в запросе:


ВЫБРАТЬ
    Реестр.Ссылка КАК БитыйОбъект
ИЗ
    РегистрСведений.РеестрДокументов КАК Реестр
ГДЕ
    Реестр.Ссылка.Номер ЕСТЬ NULL

Если запрос возвращает строки, значит, в поле Ссылка действительно находится «фантомный» объект.

Шаг 4. Программная очистка регистра (скрипт)

В случаях, когда ручное удаление невозможно из-за огромного объема данных, напишем и выполним внешнюю обработку. Рассмотрим пример кода, который обходит регистр и удаляет записи с битыми ссылками:


Процедура ОчиститьРеестрОтБитыхСсылок()
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Реестр.Регистратор КАК Регистратор
        |ИЗ
        |   РегистрСведений.РеестрДокументов КАК Реестр";
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        // Проверяем, существует ли объект в базе
        Если Выборка.Регистратор.ПолучитьОбъект() = Неопределено Тогда
            НаборЗаписей = РегистрыСведений.РеестрДокументов.СоздатьНаборЗаписей();
            НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
            НаборЗаписей.Записать(); // Записываем пустой набор, тем самым удаляя записи
            Сообщить("Удалена битая запись для: " + Выборка.Регистратор);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

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

Шаг 5. Радикальный метод: полная пересборка реестра

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

Разберем алгоритм действий:

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

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

Дополнительные рекомендации

После того как битые ссылки будут удалены, а регистрация изменений очищена, выполните следующие действия:

Таким образом, мы проанализировали основные технические способы решения проблемы «зацикливания» перехода на 11.5. Главное — помнить, что в новой версии реестр документов является производным объектом, и его можно пересоздать, опираясь на реально существующие в базе документы.

← На главную