Объект не найден: что делать с битыми ссылками в базе 1С
Содержание
Битая ссылка в 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, но логические битые ссылки не чинит — это задача тестирования в Конфигураторе.
Восстановление удалённых объектов из резервной копии
Это лучший способ, если пропавший объект есть в старой копии. Объект возвращается с тем же уникальным идентификатором — и все битые ссылки на него сами становятся рабочими.
Порядок действий:
- Разверните резервную копию в отдельную базу. Рабочую не трогайте.
- Найдите в копии нужные элементы — по номеру таблицы и GUID из представления битой ссылки, либо по наименованию.
- Выгрузите их универсальной обработкой выгрузки и загрузки данных в XML. Она сохраняет идентификаторы объектов.
- Загрузите файл в рабочую базу.
- Откройте документ, где была битая ссылка, — там должно появиться нормальное наименование.
Обычная копия через буфер обмена или «Скопировать» здесь не подойдёт: новый элемент получит новый идентификатор, и старые ссылки на него не укажут.
Если в рабочей базе уже прогнали «Создавать объекты», загрузка из копии с тем же идентификатором просто перезапишет заглушку полными данными. Это удобная связка: сначала заглушки, чтобы база работала, потом точечное восстановление.
Если объект пропал при обмене, правильнее повторить выгрузку из базы-источника. Объекты обмена тоже переносят идентификатор, так что после повторной загрузки ссылки починятся.
Заглушки и мусор после исправления
После варианта «Создавать объекты» в справочниках появляются пустые элементы. Наименование у них служебное, реквизиты не заполнены. Оставлять их так нельзя: отчёты покажут непонятную строку, а пользователи начнут их выбирать.
Что делать с заглушками
Поиск и удаление дублей в БСП-конфигурациях находится в Администрирование → Обслуживание → Корректировка данных. Он умеет заменять ссылки не только на дубли, но и на любой выбранный элемент того же справочника.
Перепроведение после замены ссылок
Замена ссылок в проведённых документах не всегда перестраивает движения регистров. После массовой замены перепроведите документы за затронутый период групповой обработкой. Если период закрыт отчётностью — сначала сверьте обороты и согласуйте перепроведение с главным бухгалтером.
Регистры сведений и регистры накопления тоже могут содержать битые ссылки в измерениях. Тестирование в Конфигураторе их видит; после исправления выполните пересчёт итогов в том же окне тестирования.
Удаление мусора
Объекты, помеченные на удаление, удаляйте через Администрирование → Обслуживание → Удаление помеченных объектов. Эта обработка проверяет ссылки: если на объект кто-то ссылается, она его не удалит и покажет, кто мешает. Так новых битых ссылок не появится.
Как не допустить появления битых ссылок в 1С
Исправленная база через месяц снова наполнится битыми ссылками, если не убрать причину.
- 🔒 Заберите право интерактивного удаления. В типовых конфигурациях оно есть только у полных прав. Обычным пользователям хватит пометки на удаление.
- 🧹 Удаляйте только через обработку помеченных. Она не тронет объект, на который есть ссылки.
- 🔄 Контролируйте обмены. После каждой ошибки обмена проверьте журнал: загружены ли все связанные справочники. Правила обмена с фильтрами по организации или складу — частый источник «недоехавших» объектов.
- 🧑💻 Проверяйте внешние обработки. Любой код с
Удалить()или режимом загрузки должен проверять места использования. Запускайте такие обработки сначала на копии. - 🚫 Не правьте данные в SQL напрямую. СУБД ничего не знает о ссылочной структуре 1С.
- 🗓 Регулярное тестирование. Раз в квартал — проверка без исправления на копии базы. Ранняя находка — десять ссылок вместо тысячи.
- 💾 Храните копии подольше. Восстановить объект с тем же идентификатором можно только из копии, где он ещё есть.