Администрирование · 9 мин
Как проверить битые ссылки в 1С и устранить их
Как проверить битые ссылки в 1С: поиск объектов «Объект не найден», штатные и программные способы проверки, удаление битых ссылок и профилактика.
Битые ссылки в 1С возникают, когда объект (элемент справочника, документ) был удалён физически, а ссылки на него остались в других объектах, регистрах и реквизитах. В интерфейсе такая ссылка выглядит как строка вида «<Объект не найден> (84:8f2c00155d02...)», а при обращении к ней программно возвращается предопределённый пустой результат с несуществующим GUID.
Проблема не только косметическая: битые ссылки ломают отчёты (поля выводятся пустыми или с ошибкой), мешают обменам данными, вызывают ошибки при проведении документов и замедляют работу запросов с соединениями. Поэтому периодическая проверка базы на битые ссылки — обязательная часть регламентного обслуживания.
Ниже разобраны признаки битых ссылок, штатные и программные способы их поиска, безопасное удаление и профилактика появления.
Что такое битая ссылка и как её распознать
Когда объект помечается на удаление, а затем удаляется обработкой «Удаление помеченных объектов», платформа контролирует ссылочную целостность и не даст удалить объект, если на него есть ссылки. Битые ссылки появляются в обход этого механизма: при прямом удалении через запрос или внешнюю обработку, при сбое во время обмена, при восстановлении базы из повреждённой копии, при отключённом контроле ссылочной целостности.
Распознать битую ссылку можно по нескольким признакам:
- в форме документа или списка вместо представления объекта виден текст «<Объект не найден>» с шестнадцатеричным идентификатором;
- в отчётах поля ссылки пустые, хотя по логике учёта там должно быть значение;
- при проведении документа возникает ошибка обращения к реквизиту;
- обмен данными завершается с ошибками разрешения коллизий или «объект не найден».
Как проверить базу через «Тестирование и исправление»
Самый доступный штатный инструмент — утилита «Тестирование и исправление информационной базы». Она запускается из конфигуратора: меню «Администрирование» → «Тестирование и исправление».
Для поиска битых ссылок достаточно включить режим «Проверка ссылочной целостности информационной базы». Остальные пункты (реиндексация, проверка логической целостности) можно отключить, чтобы сократить время. Режим работы — «Тестирование», если нужно только найти проблемы, или «Тестирование и исправление», если платформа должна сама очистить ссылки.
По завершении утилита выводит протокол: какие объекты содержали ссылки на несуществующие данные и что с ними сделано. Важно понимать ограничение: исправление очищает ссылку, но не восстанавливает удалённый объект — если данные нужны, их придётся вводить заново.
Поиск битых ссылок штатными средствами управляемого приложения
В типовых конфигурациях на БСП (УТ, ERP, Бухгалтерия, ЗУП) есть встроенные инструменты. Основной — обработка «Удаление помеченных объектов» в разделе «Администрирование» → «Обслуживание». Она не только удаляет помеченное, но и показывает, какие объекты мешают удалению, что косвенно выявляет проблемные связи.
Дополнительно полезна обработка «Поиск и удаление дублей»: при слиянии дублей она корректно переносит ссылки, снижая риск появления битых в будущем. В некоторых конфигурациях есть регламентное задание контроля целостности — проверьте раздел «Регламентные и фоновые задания».
Для точечной проверки конкретного документа или элемента справочника откройте его реквизиты: поле с битой ссылкой отобразится строкой «<Объект не найден>». Через «Ещё» → «Изменить форму» такое поле можно найти и очистить вручную, если объектов немного.
Программная проверка битых ссылок через запрос
Для массовой диагностики удобнее написать проверку на встроенном языке. Классический приём — запрос с левым соединением таблицы к самой себе по ссылочному реквизиту: если соединение не нашло соответствующий объект, а ссылка не пустая, значит ссылка битая.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Реализация.Ссылка КАК Документ,
| Реализация.Контрагент КАК СсылкаНаКонтрагента
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
| ПО Реализация.Контрагент = Контрагенты.Ссылка
|ГДЕ
| Контрагенты.Ссылка ЕСТЬ NULL
| И Реализация.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Сообщить("Битая ссылка в " + Результат.Документ);
КонецЦикла;Альтернативный способ — метод менеджера объекта НайтиПоСсылкам или проверка через Ссылка.ПолучитьОбъект(): для битой ссылки метод вернёт Неопределено. Также существует приём сравнения строкового представления: у битой ссылки представление начинается с «<Объект не найден>».
Проверку через ПолучитьОбъект() не стоит запускать в цикле по всей таблице на больших базах — каждый вызов тянет объект из СУБД. Запрос с левым соединением отрабатывает на порядки быстрее и не блокирует таблицы надолго.
Как безопасно удалить битые ссылки
Порядок действий зависит от масштаба. Единичные битые ссылки проще очистить вручную: открыть объект, заменить значение реквизита на корректное или пустое, записать. Массовые проблемы устраняются либо режимом «Тестирование и исправление», либо программной обработкой, которая находит битые ссылки и присваивает реквизитам пустое значение.
- 1Сделайте резервную копию базы (выгрузка .dt или копия средствами СУБД)
- 2Найдите битые ссылки запросом или тестированием и зафиксируйте список объектов
- 3Решите по каждому случаю: очистить ссылку или восстановить удалённый объект
- 4Выполните исправление в тестовой копии и проверьте ключевые отчёты
- 5Повторите исправление в рабочей базе в нерабочее время
- 6Проверьте результат повторным поиском — список битых ссылок должен быть пуст
Если удалённый объект содержал важные данные (например, контрагент с договорами), очистка ссылки приведёт к потере аналитики в отчётах. В таких случаях объект восстанавливают: создают новый элемент и заменяют битые ссылки на него через обработку поиска и замены значений.
Как проверить результат
Выборка пустая
Остались документы с несуществующими ссылками
Поля заполнены, суммы сходятся с прошлым периодом
Пустые строки, расхождения итогов
Синхронизация завершается без ошибок
Ошибки «объект не найден» в протоколе
Типичные ошибки при работе с битыми ссылками
Отдельная ошибка — игнорировать битые ссылки в регистрах. Администраторы часто чистят только документы и справочники, а записи регистров сведений и накопления с несуществующими регистраторами или измерениями остаются и продолжают искажать отчёты.
Профилактика: как не допустить появления битых ссылок
Основное правило — удалять объекты только штатным механизмом: пометка на удаление плюс «Удаление помеченных объектов» с контролем ссылочной целостности. Никаких прямых удалений через консоль запросов, внешние обработки или средства СУБД.
Дополнительные меры: регулярно (например, ежемесячно) запускать проверку ссылочной целостности на копии базы, контролировать протоколы обменов данными, ограничить права на интерактивное удаление и использование внешних обработок для рядовых пользователей. При разработке собственных доработок избегайте хранения ссылок в строковых реквизитах — платформа не контролирует их целостность.
Что важно запомнить
Битые ссылки ищут тестированием и исправлением или запросом с левым соединением. Исправление всегда начинается с резервной копии и репетируется на тестовой базе. Профилактика — только штатное удаление объектов и регулярный контроль целостности.
Частые вопросы
Можно ли восстановить объект, на который указывает битая ссылка?
Автоматически — нет, данные объекта уже удалены. Если есть архивная копия базы, объект можно найти там по GUID из текста «Объект не найден», выгрузить и загрузить обратно с сохранением ссылки (например, через выгрузку XML с сохранением уникального идентификатора). Иначе объект создают заново и заменяют битые ссылки на новый.
Почему «Удаление помеченных объектов» не удаляет объект, хотя ссылок вроде нет?
Обработка показывает все места использования объекта, включая регистры и реквизиты других документов. Если объект не удаляется, разверните список мест использования — ссылка может скрываться в движениях документа, регистре сведений или плане обмена.
Мешают ли битые ссылки обмену данными?
Да. При синхронизации битая ссылка может выгрузиться в другую базу как несуществующий объект, вызвать ошибку разрешения коллизий или остановить обмен. Перед настройкой нового обмена базу стоит проверить и почистить.
Как найти битые ссылки в регистрах?
Тем же приёмом с левым соединением: выбираете таблицу регистра, соединяете по ссылочному измерению или регистратору с соответствующей таблицей и фильтруете записи, где соединение вернуло NULL, а поле не пустое. Для регистраторов удобно проверять условие «Регистратор.Ссылка ЕСТЬ NULL» через соединение с таблицей документа.
Нужен ли монопольный режим для поиска битых ссылок запросом?
Для поиска — нет, запрос на чтение можно выполнять при работающих пользователях. Монопольный доступ нужен для «Тестирования и исправления» и желателен для массового исправления, чтобы никто не изменял данные параллельно.
Как часто проверять базу на битые ссылки?
Для активно используемых баз достаточно ежемесячной проверки на копии, плюс внепланово — после сбоев обмена, восстановления из резервной копии или массовых загрузок данных внешними обработками.