При выполнении операции обработки «Удаление помеченных объектов» в платформах 1С:Предприятие 8.3 пользователи и администраторы нередко сталкиваются с ситуацией, когда система блокирует удаление элемента справочника (например, Организация). При этом в списке ссылок, мешающих удалению, отображается запись вида Документ Операция (бух. и нал. учет) <Объект не найден> (GUID). Стандартные процедуры, такие как утилита chdbfl.exe, выгрузка и загрузка информационной базы через файл .dt или базовое тестирование и исправление (ТиИ), зачастую не приносят результата. Рассмотрим подробнее, почему возникают такие битые ссылки и как очистить базу данных.
Проанализируем механику возникновения битых ссылок в 1С. Ситуация, когда документ физически отсутствует в таблице документов, но ссылка на него сохраняется в связанных механизмах, обычно возникает по следующим причинам:
Удалить() для объекта напрямую из кода без предварительной отмены проведения и очистки связанных движений/последовательностей. В результате сам документ удаляется, а его записи в служебных таблицах остаются.Платформа 1С при выполнении функции НайтиПоСсылкам() проверяет не только прямые реквизиты объектов, но и системные таблицы. Если ссылка сохранилась хотя бы в одном служебном месте, система справедлива блокирует физическое удаление элемента.
Посмотрим, где именно может затаиться невидимая ссылка, если стандартный поиск по реквизитам ничего не дает:
ЗарегистрированныеИзменения), история версионирования объектов, независимые регистры сведений, а также хранилища пользовательских настроек.Разберем по шагам основные способы устранения битых ссылок в зависимости от причины их возникновения.
Если битая ссылка блокирует удаление из-за присутствия в последовательностях, выполним пересчет или очистку границы последовательности документов. Для этого можно сбросить границу последовательности через режим конфигуратора или восстановить ее штатной обработкой проведения документов.
Также можно программно прочитать таблицу последовательности и очистить наборы записей, где измерение или регистратор содержит ссылку вида <Объект не найден>.
Если известна битая ссылка и ее GUID, разберем вариант с программным воссозданием удаленного документа. Метод заключается в том, чтобы временно создать документ с тем же GUID, записать его, а затем правильно распровести и удалить штатным образом.
Пример кода для программного создания объекта с конкретным GUID:
// Получаем GUID из битой ссылки
Идентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); // Укажите реальный GUID
// Формируем ссылку на будущий документ
СсылкаНаДокумент = Документы.ОперацияБух.ПолучитьСсылку(Идентификатор);
// Создаем новый документ и присваиваем ему ссылку
НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();
НовыйДокумент.УстановитьСсылкуНового(СсылкаНаДокумент);
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = ЭлементОрганизация; // Ссылка на удаляемую организацию
НовыйДокумент.Записать();
После записи такого документа битая ссылка превращается в полноценный документ. Затем его необходимо пометить на удаление и повторно запустить обработку «Удаление помеченных объектов». При штатном удалении платформа корректно очистит все связанные движения и записи в последовательностях.
В режиме Конфигуратора выберем пункт меню Администрирование -> Тестирование и исправление. В настройках укажем флаги проверки ссылочной целостности базы. В разделе «При наличии ссылок на несуществующие объекты» выберем вариант Создавать объекты.
В этом случае платформа автоматически воссоздаст физические объекты вместо битых ссылок, после чего их можно будет найти в списке документов и окончательно удалить вместе с правильной очисткой всех системных таблиц.
Если в конфигурации используется Библиотека Стандартных Подсистем (БСП), воспользуемся типовыми обработками «Поиск и замена ссылок» или «Поиск и удаление дублей». Данные инструменты позволяют заменить битую ссылку в объектах на пустую или на другой существующий элемент справочника.