К статье
Практический материал

Администрирование · 9 мин

Как проверить битые ссылки в 1С и устранить их

Как проверить битые ссылки в 1С: поиск объектов «Объект не найден», штатные и программные способы проверки, удаление битых ссылок и профилактика.

Битые ссылки в 1С возникают, когда объект (элемент справочника, документ) был удалён физически, а ссылки на него остались в других объектах, регистрах и реквизитах. В интерфейсе такая ссылка выглядит как строка вида «<Объект не найден> (84:8f2c00155d02...)», а при обращении к ней программно возвращается предопределённый пустой результат с несуществующим GUID.

Проблема не только косметическая: битые ссылки ломают отчёты (поля выводятся пустыми или с ошибкой), мешают обменам данными, вызывают ошибки при проведении документов и замедляют работу запросов с соединениями. Поэтому периодическая проверка базы на битые ссылки — обязательная часть регламентного обслуживания.

Ниже разобраны признаки битых ссылок, штатные и программные способы их поиска, безопасное удаление и профилактика появления.

Что такое битая ссылка и как её распознать

Когда объект помечается на удаление, а затем удаляется обработкой «Удаление помеченных объектов», платформа контролирует ссылочную целостность и не даст удалить объект, если на него есть ссылки. Битые ссылки появляются в обход этого механизма: при прямом удалении через запрос или внешнюю обработку, при сбое во время обмена, при восстановлении базы из повреждённой копии, при отключённом контроле ссылочной целостности.

Распознать битую ссылку можно по нескольким признакам:

  • в форме документа или списка вместо представления объекта виден текст «<Объект не найден>» с шестнадцатеричным идентификатором;
  • в отчётах поля ссылки пустые, хотя по логике учёта там должно быть значение;
  • при проведении документа возникает ошибка обращения к реквизиту;
  • обмен данными завершается с ошибками разрешения коллизий или «объект не найден».

Как проверить базу через «Тестирование и исправление»

Самый доступный штатный инструмент — утилита «Тестирование и исправление информационной базы». Она запускается из конфигуратора: меню «Администрирование» → «Тестирование и исправление».

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

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

Поиск битых ссылок штатными средствами управляемого приложения

В типовых конфигурациях на БСП (УТ, ERP, Бухгалтерия, ЗУП) есть встроенные инструменты. Основной — обработка «Удаление помеченных объектов» в разделе «Администрирование» → «Обслуживание». Она не только удаляет помеченное, но и показывает, какие объекты мешают удалению, что косвенно выявляет проблемные связи.

Дополнительно полезна обработка «Поиск и удаление дублей»: при слиянии дублей она корректно переносит ссылки, снижая риск появления битых в будущем. В некоторых конфигурациях есть регламентное задание контроля целостности — проверьте раздел «Регламентные и фоновые задания».

Для точечной проверки конкретного документа или элемента справочника откройте его реквизиты: поле с битой ссылкой отобразится строкой «<Объект не найден>». Через «Ещё» → «Изменить форму» такое поле можно найти и очистить вручную, если объектов немного.

Программная проверка битых ссылок через запрос

Для массовой диагностики удобнее написать проверку на встроенном языке. Классический приём — запрос с левым соединением таблицы к самой себе по ссылочному реквизиту: если соединение не нашло соответствующий объект, а ссылка не пустая, значит ссылка битая.

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

Альтернативный способ — метод менеджера объекта НайтиПоСсылкам или проверка через Ссылка.ПолучитьОбъект(): для битой ссылки метод вернёт Неопределено. Также существует приём сравнения строкового представления: у битой ссылки представление начинается с «<Объект не найден>».

Проверку через ПолучитьОбъект() не стоит запускать в цикле по всей таблице на больших базах — каждый вызов тянет объект из СУБД. Запрос с левым соединением отрабатывает на порядки быстрее и не блокирует таблицы надолго.
ПЗ
Практическое замечание

Как безопасно удалить битые ссылки

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

Порядок безопасного устранения
  1. 1
    Сделайте резервную копию базы (выгрузка .dt или копия средствами СУБД)
  2. 2
    Найдите битые ссылки запросом или тестированием и зафиксируйте список объектов
  3. 3
    Решите по каждому случаю: очистить ссылку или восстановить удалённый объект
  4. 4
    Выполните исправление в тестовой копии и проверьте ключевые отчёты
  5. 5
    Повторите исправление в рабочей базе в нерабочее время
  6. 6
    Проверьте результат повторным поиском — список битых ссылок должен быть пуст

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

Контрольные точки

Как проверить результат

Повторный запрос на битые ссылки
Норма

Выборка пустая

Тревожный признак

Остались документы с несуществующими ссылками

Ключевые отчёты (оборотка, взаиморасчёты)
Норма

Поля заполнены, суммы сходятся с прошлым периодом

Тревожный признак

Пустые строки, расхождения итогов

Обмен данными
Норма

Синхронизация завершается без ошибок

Тревожный признак

Ошибки «объект не найден» в протоколе

Типичные ошибки при работе с битыми ссылками

Типичные ошибки
01
Запуск исправления без резервной копии — при ошибке восстановить данные будет неоткуда
02
Очистка ссылок без анализа — вместе с битой ссылкой теряется аналитика в отчётах и проводках
03
Удаление объектов прямыми запросами к СУБД — главный источник новых битых ссылок
04
Прерывание тестирования и исправления — риск получить базу в несогласованном состоянии
05
Исправление только в рабочей базе без репетиции на копии — непредвиденные последствия обнаруживаются у пользователей

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

Профилактика: как не допустить появления битых ссылок

Основное правило — удалять объекты только штатным механизмом: пометка на удаление плюс «Удаление помеченных объектов» с контролем ссылочной целостности. Никаких прямых удалений через консоль запросов, внешние обработки или средства СУБД.

Дополнительные меры: регулярно (например, ежемесячно) запускать проверку ссылочной целостности на копии базы, контролировать протоколы обменов данными, ограничить права на интерактивное удаление и использование внешних обработок для рядовых пользователей. При разработке собственных доработок избегайте хранения ссылок в строковых реквизитах — платформа не контролирует их целостность.

Итог

Что важно запомнить

Битые ссылки ищут тестированием и исправлением или запросом с левым соединением. Исправление всегда начинается с резервной копии и репетируется на тестовой базе. Профилактика — только штатное удаление объектов и регулярный контроль целостности.

Частые вопросы

Можно ли восстановить объект, на который указывает битая ссылка?

Автоматически — нет, данные объекта уже удалены. Если есть архивная копия базы, объект можно найти там по GUID из текста «Объект не найден», выгрузить и загрузить обратно с сохранением ссылки (например, через выгрузку XML с сохранением уникального идентификатора). Иначе объект создают заново и заменяют битые ссылки на новый.

Почему «Удаление помеченных объектов» не удаляет объект, хотя ссылок вроде нет?

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

Мешают ли битые ссылки обмену данными?

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

Как найти битые ссылки в регистрах?

Тем же приёмом с левым соединением: выбираете таблицу регистра, соединяете по ссылочному измерению или регистратору с соответствующей таблицей и фильтруете записи, где соединение вернуло NULL, а поле не пустое. Для регистраторов удобно проверять условие «Регистратор.Ссылка ЕСТЬ NULL» через соединение с таблицей документа.

Нужен ли монопольный режим для поиска битых ссылок запросом?

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

Как часто проверять базу на битые ссылки?

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