Переход с версии 11.4 на 11.5 в конфигурациях на базе современной платформы 1С (таких как «Управление торговлей», «ERP» или «Комплексная автоматизация») — это сложный процесс, затрагивающий фундаментальные изменения в структуре хранения данных. Одной из самых частых проблем является «зависание» или бесконечное выполнение фоновых обработчиков обновления. Рассмотрим подробнее, почему это происходит и как исправить ситуацию, если пользователи уже начали работать в базе и откат к резервной копии невозможен.
В версии 11.5 разработчики существенно переработали механизм работы со списками документов. Теперь за отображение данных в журналах отвечает специальный регистр сведений — РеестрДокументов. В процессе перехода система пытается перенести данные из документов в этот регистр. Если в базе данных существуют «битые ссылки» (записи, указывающие на несуществующие объекты, помеченные как «Объект не найден»), стандартный обработчик обновления может войти в бесконечный цикл или постоянно выдавать ошибку, не позволяя завершить процесс перехода.
Ситуация осложняется тем, что обычное Тестирование и исправление не всегда находит такие связи в регистрах сведений, так как они не являются ссылочными объектами в классическом понимании. Проанализируем способы ручного и программного исправления этой ошибки.
Прежде чем что-то удалять, нам необходимо точно определить, какой именно обработчик вызывает сбой. Разберем по шагам, как это сделать:
Это один из самых эффективных методов. Система 1С использует скрытый план обмена ОбновлениеИнформационнойБазы для отслеживания объектов, которые еще нужно обработать. Если в этом плане зарегистрирована битая ссылка, система будет пытаться ее обработать снова и снова.
Рассмотрим, как очистить эти записи:
ОбновлениеИнформационнойБазы. В списке узлов выберем узел, связанный с текущим обновлением.Если ссылки «застряли» непосредственно в регистре, их можно удалить вручную или простым запросом. Посмотрим на ситуацию глазами системы: запись в регистре есть, а самого документа нет.
Для удаления через интерфейс:
РеестрДокументов (через функции для технического специалиста).Если записей много, проанализируем их с помощью Консоли запросов. Пример условия для поиска битых ссылок в запросе:
ВЫБРАТЬ
Реестр.Ссылка КАК БитыйОбъект
ИЗ
РегистрСведений.РеестрДокументов КАК Реестр
ГДЕ
Реестр.Ссылка.Номер ЕСТЬ NULL
Если запрос возвращает строки, значит, в поле Ссылка действительно находится «фантомный» объект.
В случаях, когда ручное удаление невозможно из-за огромного объема данных, напишем и выполним внешнюю обработку. Рассмотрим пример кода, который обходит регистр и удаляет записи с битыми ссылками:
Процедура ОчиститьРеестрОтБитыхСсылок()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Реестр.Регистратор КАК Регистратор
|ИЗ
| РегистрСведений.РеестрДокументов КАК Реестр";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Проверяем, существует ли объект в базе
Если Выборка.Регистратор.ПолучитьОбъект() = Неопределено Тогда
НаборЗаписей = РегистрыСведений.РеестрДокументов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Записать(); // Записываем пустой набор, тем самым удаляя записи
Сообщить("Удалена битая запись для: " + Выборка.Регистратор);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важный момент: в некоторых версиях 11.5 регистр РеестрДокументов может быть не подчинен регистратору. В этом случае для удаления следует использовать отбор по измерениям, например, по полю Ссылка.
Если битых ссылок слишком много и база ведет себя нестабильно, мы можем прибегнуть к полной очистке регистра. После очистки система сама заполнит его корректными данными с помощью регламентного задания.
Разберем алгоритм действий:
РеестрДокументов программным способом (через НаборЗаписей.Записать() без установленных отборов, если это позволяет структура регистра).Этот процесс может занять от нескольких часов до суток в зависимости от объема базы данных, поэтому выполнять его рекомендуется в периоды минимальной нагрузки (например, ночью).
После того как битые ссылки будут удалены, а регистрация изменений очищена, выполните следующие действия:
Тестирование и исправление, выбрав только соответствующие пункты.Таким образом, мы проанализировали основные технические способы решения проблемы «зацикливания» перехода на 11.5. Главное — помнить, что в новой версии реестр документов является производным объектом, и его можно пересоздать, опираясь на реально существующие в базе документы.