Объект не найден: что делать с битыми ссылками в базе 1С

· 9 мин

Содержание

Битая ссылка в 1С — это реквизит, который указывает на удалённый объект. В форме документа вместо контрагента или номенклатуры вы видите <Объект не найден> (78:a1b2c3d4e5f6...). Найти такие ссылки можно запросом в консоли или проверкой Администрирование → Тестирование и исправление в Конфигураторе. Исправить — там же, выбрав, что делать со ссылками на несуществующие объекты.

Частое заблуждение — считать, что битые ссылки появляются «сами» после обновления или от сбоя диска. Чаще причина прозаичнее: кто-то удалил объект в обход проверки ссылок, или обмен загрузил документ без связанного справочника. Поэтому первый шаг — не чинить вслепую, а понять, какой объект пропал и есть ли он в резервной копии. Всё ниже относится к платформе 8.3 и подходит для любой типовой конфигурации: БП 3.0, ЗУП 3.1, УТ 11.

Откуда в базе 1С берутся битые ссылки

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

Основные причины:

  • 🗑 Непосредственное удаление. Пользователь с правом интерактивного удаления стёр элемент сразу, без пометки. Ссылки в документах остались, объекта нет.
  • 🔄 Сбой или неполный обмен. Узел загрузил документ, а справочник, на который он ссылается, не пришёл или был отфильтрован правилами обмена.
  • 📦 Частичный перенос данных. Выгрузили документы из одной базы в другую без связанных справочников, или загрузили не все объекты.
  • 💻 Код с отключёнными проверками. Обработка удаляет объекты методом Удалить() или пишет данные в режиме ОбменДанными.Загрузка = Истина — платформа в этом режиме ссылки не контролирует.
  • ⚙️ Ручная правка данных в СУБД. Кто-то удалил строки прямо в SQL, минуя 1С.
  • 💥 Аварийное завершение. Падение сервера или файловой базы во время записи может оставить запись без связанного объекта. Это реже, чем принято думать.

Если битых ссылок много и все на один тип (например, только на договоры), почти наверняка виноват обмен или массовое удаление. Если они разбросаны по разным справочникам — проверьте целостность базы целиком.

Как выглядит битая ссылка и как понять, на что она указывала

В поле формы и в отчётах битая ссылка видна как <Объект не найден> (НН:GUID). Число до двоеточия — внутренний номер таблицы хранения, после — уникальный идентификатор пропавшего объекта.

Определяем тип пропавшего объекта

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

Структура = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Структура Цикл
	Если Строка.ИмяТаблицыХранения = "_Reference78" Тогда
		Сообщить(Строка.Метаданные);
	КонецЕсли;
КонецЦикла;

Для документов имя таблицы начинается с _Document, для справочников — с _Reference. Подставьте свой номер из представления битой ссылки.

Находим запись в журнале регистрации

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

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

Поиск битых ссылок в режиме 1С:Предприятие

Тестирование в Конфигураторе требует монопольного доступа. Если выгнать пользователей сейчас нельзя, начните с поиска в рабочем режиме.

Запрос через консоль запросов

Битая ссылка не находит пары в таблице объектов. Это видно левым соединением:

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

Условие на пустую ссылку обязательно: иначе в результат попадут документы с незаполненным контрагентом. Так же проверяйте табличные части — например, Документ.РеализацияТоваровУслуг.Товары против Справочник.Номенклатура.

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

Проверка конкретного объекта

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

Исправление битых ссылок через Конфигуратор: тестирование базы

Главный инструмент — Администрирование → Тестирование и исправление в Конфигураторе. Режим требует монопольного доступа: перед запуском завершите сеансы пользователей и сделайте резервную копию базы . Для файловой базы скопируйте файл 1Cv8.1CD, для клиент-серверной — выгрузите .dt или сделайте бэкап средствами СУБД.

Сначала только проверка

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

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

Три варианта для ссылок на несуществующие объекты

При исправлении платформа спросит, что делать с битыми ссылками:

ВариантЧто происходитКогда выбиратьРиск
Создавать объектыДля каждой битой ссылки создаётся пустой объект с тем же идентификаторомСсылки нужны: документы проведены, по ним отчётностьПочти нет — заглушки потом заполняют или заменяют
Очищать ссылкиРеквизит становится пустымСсылка на мусор, восстанавливать нечегоДокументы теряют данные, могут не перепровестись
Не изменятьНичего не меняетсяТолько диагностикаПроблема остаётся

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

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

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

Пакетный запуск по расписанию

Для ночного запуска подходит командная строка Конфигуратора:

"C:\Program Files\1cv8\8.3.24.1342\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "пароль" /IBCheckAndRepair -LogAndRefsIntegrity -BadRefCreate /Out "D:\Logs\check.txt"

Ключ -BadRefCreate соответствует варианту «Создавать объекты», -BadRefClear — очистке. Путь к платформе и номер версии подставьте свои. Полный список ключей — в справке по параметрам командной строки.

Для файловой базы есть ещё утилита chdbfl.exe в папке bin платформы. Она проверяет физическую целостность файла 1Cv8.1CD, но логические битые ссылки не чинит — это задача тестирования в Конфигураторе.

Восстановление удалённых объектов из резервной копии

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

Порядок действий:

  1. Разверните резервную копию в отдельную базу. Рабочую не трогайте.
  2. Найдите в копии нужные элементы — по номеру таблицы и GUID из представления битой ссылки, либо по наименованию.
  3. Выгрузите их универсальной обработкой выгрузки и загрузки данных в XML. Она сохраняет идентификаторы объектов.
  4. Загрузите файл в рабочую базу.
  5. Откройте документ, где была битая ссылка, — там должно появиться нормальное наименование.

Обычная копия через буфер обмена или «Скопировать» здесь не подойдёт: новый элемент получит новый идентификатор, и старые ссылки на него не укажут.

Если в рабочей базе уже прогнали «Создавать объекты», загрузка из копии с тем же идентификатором просто перезапишет заглушку полными данными. Это удобная связка: сначала заглушки, чтобы база работала, потом точечное восстановление.

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

Заглушки и мусор после исправления

После варианта «Создавать объекты» в справочниках появляются пустые элементы. Наименование у них служебное, реквизиты не заполнены. Оставлять их так нельзя: отчёты покажут непонятную строку, а пользователи начнут их выбирать.

Что делать с заглушками

Что делать с объектом-заглушкой?

Поиск и удаление дублей в БСП-конфигурациях находится в Администрирование → Обслуживание → Корректировка данных. Он умеет заменять ссылки не только на дубли, но и на любой выбранный элемент того же справочника.

Перепроведение после замены ссылок

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

Регистры сведений и регистры накопления тоже могут содержать битые ссылки в измерениях. Тестирование в Конфигураторе их видит; после исправления выполните пересчёт итогов в том же окне тестирования.

Удаление мусора

Объекты, помеченные на удаление, удаляйте через Администрирование → Обслуживание → Удаление помеченных объектов. Эта обработка проверяет ссылки: если на объект кто-то ссылается, она его не удалит и покажет, кто мешает. Так новых битых ссылок не появится.

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

Исправленная база через месяц снова наполнится битыми ссылками, если не убрать причину.

  • 🔒 Заберите право интерактивного удаления. В типовых конфигурациях оно есть только у полных прав. Обычным пользователям хватит пометки на удаление.
  • 🧹 Удаляйте только через обработку помеченных. Она не тронет объект, на который есть ссылки.
  • 🔄 Контролируйте обмены. После каждой ошибки обмена проверьте журнал: загружены ли все связанные справочники. Правила обмена с фильтрами по организации или складу — частый источник «недоехавших» объектов.
  • 🧑‍💻 Проверяйте внешние обработки. Любой код с Удалить() или режимом загрузки должен проверять места использования. Запускайте такие обработки сначала на копии.
  • 🚫 Не правьте данные в SQL напрямую. СУБД ничего не знает о ссылочной структуре 1С.
  • 🗓 Регулярное тестирование. Раз в квартал — проверка без исправления на копии базы. Ранняя находка — десять ссылок вместо тысячи.
  • 💾 Храните копии подольше. Восстановить объект с тем же идентификатором можно только из копии, где он ещё есть.
Перед тестированием и исправлением базы
Выполнено: 0 / 6

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

Почему битая ссылка не находится поиском по справочнику?
Объекта в таблице нет — искать нечего. Битую ссылку видно только в реквизитах других объектов: документах, табличных частях, регистрах.
Можно ли исправить битые ссылки без монопольного режима?
Частично. Найти их запросом и заменить вручную или обработкой можно при работающих пользователях. Массовое исправление через тестирование требует монопольного доступа.
Тестирование нашло ошибки, а битых ссылок в формах не видно. Это нормально?
Да. Часть ссылок лежит в регистрах, служебных справочниках и старых версиях объектов. Пользователь их не видит, но отчёты и закрытие месяца могут на них спотыкаться.
Опасно ли вариант «Очищать ссылки» для проведённых документов?
Да. Документ теряет реквизит, но движения остаются старыми. При следующем перепроведении он может не провестись или дать другие суммы.
Помогает ли обновление конфигурации от битых ссылок?
Нет. Обновление меняет структуру, а не данные. Битые ссылки останутся, пока их не исправить тестированием или заменой.