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

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

Как определить, что ссылка в 1С битая

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

Битая ссылка в 1С — это ссылка на объект, который был удалён из базы без контроля ссылочной целостности. В интерфейсе такие ссылки отображаются как «<Объект не найден> (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)», а при программном обращении могут вызывать ошибки, пустые значения реквизитов и сбои в отчётах.

Чаще всего битые ссылки появляются после прямого удаления объектов (без пометки удаления), после обменов данными, при восстановлении базы из неполной копии или из-за ошибок в самописных обработках. Определить их можно несколькими способами: визуально в интерфейсе, через запрос, программно на встроенном языке и штатными средствами тестирования и исправления.

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

Что такое битая ссылка и как она выглядит

В 1С каждый объект базы (справочник, документ, план счетов) имеет уникальный идентификатор — GUID. Когда один объект ссылается на другой, он хранит именно этот идентификатор. Если объект-владелец GUID удалён физически, ссылка остаётся, но разрешиться уже не может — это и есть битая ссылка.

В пользовательском интерфейсе битая ссылка выглядит как строка вида «<Объект не найден> (a1b2c3d4-...)». В табличных частях документов, в движениях по регистрам и в отчётах такие значения либо показываются этой строкой, либо отображаются пустыми — в зависимости от того, как построен запрос.

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

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

Самый надёжный способ определить битость одной конкретной ссылки — попытаться получить объект по ней. Если метод ПолучитьОбъект() возвращает Неопределено при непустой ссылке, объект отсутствует в базе.

Если НЕ Ссылка.Пустая() Тогда

Если Ссылка.ПолучитьОбъект() = Неопределено Тогда

// Ссылка битая: объект удалён

Сообщить("Битая ссылка: " + Строка(Ссылка));

КонецЕсли;

КонецЕсли;

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

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Т.Ссылка ИЗ Справочник.Номенклатура КАК Т

|ГДЕ Т.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", ПроверяемаяСсылка);

Если Запрос.Выполнить().Пустой() Тогда

// Объект не существует — ссылка битая

КонецЕсли;

Поиск битых ссылок запросом

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

ВЫБРАТЬ

Реализация.Ссылка КАК Документ,

Реализация.Контрагент КАК БитаяСсылка

ИЗ

Документ.РеализацияТоваровУслуг КАК Реализация

ЛЕВОЕ СОЕДИНЕНИЕ

Справочник.Контрагенты КАК Контрагенты

ПО

Реализация.Контрагент = Контрагенты.Ссылка

ГДЕ

Контрагенты.Ссылка ЕСТЬ NULL

И Реализация.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)

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

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

Порядок поиска битых ссылок запросом
  1. 1
    Определите поля-ссылки, которые нужно проверить (реквизиты документов, измерения и ресурсы регистров)
  2. 2
    Составьте запрос с левым соединением к таблице объекта-владельца
  3. 3
    Добавьте условия: соединение IS NULL и ссылка не равна пустой
  4. 4
    Выполните запрос в консоли запросов и выгрузите список проблемных объектов
  5. 5
    Проверьте выборочно несколько записей вручную перед массовой обработкой

Штатные средства: тестирование и исправление

Платформа 1С включает встроенный механизм «Тестирование и исправление» (доступен в конфигураторе и через файл chdbfl.exe для файловых баз). Среди проверок есть пункт «Проверка ссылочной целостности информационной базы» — он находит все битые ссылки автоматически.

При выборе режима «Тестирование и исправление» с вариантом обработки битых ссылок платформа может либо только вывести список, либо очистить битые ссылки, либо создать объекты-заглушки. Для первого прохода выбирайте вариант «Не изменять» — сначала нужно увидеть масштаб проблемы.

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

Удаление помеченных объектов и типовая обработка

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

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

Сравнение способов поиска

Запрос с левым соединением

Быстро, гибко, точечно по нужным полям. Требует навыка написания запросов и знания структуры конфигурации

Тестирование и исправление

Проверяет всю базу целиком без написания кода. Требует монопольного доступа и много времени на больших базах

Типовые обработки (БСП)

Удобный интерфейс, не нужен конфигуратор. Есть не во всех конфигурациях, проверяют ограниченный набор объектов

Что делать с найденными битыми ссылками

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

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

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

Маршрут решения

Как выбрать действие

Битая ссылка в необязательном реквизите, не влияющем на учётОчистите ссылку — замените на пустое значение
Битая ссылка в проведённом документе закрытого периода или в движениях регистровВосстановите объект из архивной копии по GUID
Известен правильный объект-заменитель (дублёр, переименованный элемент)Выполните замену ссылок штатной обработкой поиска и замены значений
Битых ссылок много и источник неизвестенСначала найдите причину (обмен, обработка удаления), иначе ссылки появятся снова

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

Главное правило — никогда не удалять объекты напрямую, минуя пометку удаления. Прямое удаление (через Удалить() в коде или Shift+Del с отключённым контролем) не проверяет ссылки и гарантированно создаёт битые ссылки, если объект где-то используется.

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

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

Типичные ошибки
01
Удаление объектов методом Удалить() без контроля ссылок — мгновенно создаёт битые ссылки во всех местах использования
02
Запрос на поиск без условия «ссылка не пустая» — тысячи ложных срабатываний на незаполненных полях
03
Автоматическая очистка битых ссылок в тестировании и исправлении без анализа — безвозвратная потеря данных в проведённых документах
04
Исправление последствий без поиска причины — битые ссылки появляются снова после очередного обмена

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

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

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

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

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

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

Выборка пустая по всем проверенным полям

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

Остаются записи — часть ссылок не обработана или появились новые

Тестирование ссылочной целостности
Норма

Проверка завершается без сообщений о битых ссылках

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

Ошибки в движениях регистров или табличных частях

Ключевые отчёты за период
Норма

Обороты сходятся с данными до исправления или расхождения объяснимы

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

Необъяснимые изменения сумм — возможна некорректная очистка

Итог

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

Битая ссылка — это ссылка на удалённый объект, определяется по «Объект не найден», через ПолучитьОбъект() = Неопределено или запросом с левым соединением и условием IS NULL. Перед очисткой делайте копию базы, сначала восстанавливайте критичные объекты по GUID, а профилактика — только штатное удаление через пометку.

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

Чем битая ссылка отличается от пустой ссылки?

Пустая ссылка — это штатное значение «ничего не выбрано», она корректна и не вызывает ошибок. Битая ссылка формально заполнена (содержит GUID), но объект с этим GUID удалён, поэтому обращение к ней возвращает «Объект не найден» или NULL в запросах.

Можно ли найти битые ссылки без конфигуратора и программирования?

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

Опасно ли автоматическое удаление битых ссылок при тестировании и исправлении?

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

Как восстановить удалённый объект, если известен его GUID из битой ссылки?

Найдите объект с этим GUID в архивной копии базы и перенесите его в рабочую — через выгрузку/загрузку XML, план обмена или обработку переноса данных. Поскольку GUID сохранится, все существующие битые ссылки начнут работать автоматически, без правки документов.

Почему битые ссылки появляются снова после очистки?

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

Ломают ли битые ссылки проведение документов и отчёты?

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