Откуда в базе берутся «мёртвые» ссылки и как вернуть данные в порядок

· 10 мин

Содержание

Надпись <Объект не найден> (49:a1b2c3d4e5f60718...) в поле документа значит одно: в реквизите записана ссылка на элемент, которого в базе больше нет. Чаще всего его удалили без контроля ссылок, он не пришёл при обмене или пропал после сбоя. Лечится это тремя способами: восстановить объект с той же ссылкой, заменить ссылку на правильную или запустить в конфигураторе Администрирование → Тестирование и исправление с режимом «Очищать ссылки» или «Создавать объекты».

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

Почему возникает ошибка «Объект не найден» и какие бывают битые ссылки

Каждый элемент справочника или документ хранится в своей таблице и имеет уникальный идентификатор (GUID). Реквизит «Контрагент» в документе хранит не название, а этот GUID. Если строку в таблице контрагентов удалили, документ продолжает ссылаться в пустоту. Платформа не может прочитать объект и показывает заглушку.

Цифры в скобках расшифровываются так:

  • 🔢 число до двоеточия — внутренний номер таблицы, то есть вид объекта (какой справочник или документ);
  • 🧬 длинная строка после двоеточия — GUID пропавшего элемента, записанный во внутреннем порядке байтов.

По этой строке можно найти тот же объект в резервной копии и вернуть его с прежней ссылкой.

Типы битых ссылок

Где сидит ссылкаКак проявляетсяЧем опасна
Реквизит шапки документаВ поле <Объект не найден>, документ не проводитсяДокумент выпадает из отчётов по контрагенту или договору
Табличная частьСтрока товара без номенклатурыНеверная себестоимость, ошибки при списании
Субконто проводокВ оборотно-сальдовой ведомости строка <Объект не найден>Сальдо «висит» на несуществующем аналитическом объекте
Измерение регистраОстатки по «пустому» складу или товаруОтчёты не сходятся с бухгалтерией
Регистратор движенияДвижения есть, документа нетОстатки, которые нельзя сторнировать обычным путём
Реквизит справочникаКарточка договора без владельцаОшибки при выборе договора в документах

Откуда они появляются

  • 🗑️ Удаление без контроля ссылок. Объект удалили непосредственно, через право интерактивного удаления, или сторонней обработкой.
  • 🔄 Обмен данными. В приёмник пришёл документ, а справочник, на который он ссылается, не отправился или был отфильтрован.
  • 💥 Сбой при записи. Отключение питания, переполненный диск, аварийное завершение сервера СУБД.
  • 📦 Частичная загрузка. Данные переносили выборочно: документы перенесли, справочники забыли.
  • 🧩 Доработки. Код расширения или внешней обработки удалял элементы методом Удалить() без проверки, где они используются.

Диагностика: как найти источник ошибки «Объект не найден»

Перед лечением надо понять масштаб. Одна битая ссылка в одном документе и тысяча ссылок на удалённый склад — разные задачи.

Шаг 1. Определите, на какой вид объекта ссылка

Откройте документ с ошибкой. Посмотрите, в каком реквизите стоит заглушка: «Контрагент», «Номенклатура», «Склад». Тип реквизита подскажет, в каком справочнике пропал элемент.

Если реквизит составного типа (например, «Субконто» в проводках), тип видно только по номеру таблицы. Тогда поможет запрос из следующего раздела: он вернёт ссылку вместе с её типом.

Шаг 2. Проверьте журнал регистрации

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

  • ✅ событие нашлось — знаете дату, пользователя и можете взять резервную копию на день раньше;
  • ❌ события нет — скорее всего, объект не пришёл при обмене или пропал при сбое.

Шаг 3. Оцените масштаб

Запустите в конфигураторе тестирование в режиме «Только тестирование» (о нём ниже). Платформа выведет в окно сообщений все найденные битые ссылки с указанием таблицы и объекта. Исправлять при этом ничего не будет.

Сохраните окно сообщений в файл: щёлкните в нём правой кнопкой и выберите сохранение. Список пригодится, чтобы потом проверить, что все ссылки вылечены.

Диагностика: выберите симптом

Тестирование и исправление: штатный способ исправить битые ссылки в 1С

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

Перед запуском сделайте резервную копию базы . Режим исправления меняет данные необратимо. Для файловой базы скопируйте каталог с файлом 1Cv8.1CD, для серверной — выгрузите .dt или сделайте бэкап средствами СУБД.

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

Порядок запуска

  1. Откройте базу в режиме «Конфигуратор».
  2. Выберите Администрирование → Тестирование и исправление.
  3. Отметьте «Проверка логической целостности информационной базы» и «Проверка ссылочной целостности информационной базы».
  4. Внизу выберите «Тестирование и исправление» (или «Только тестирование» для разведки).
  5. В блоке «При наличии ссылок на несуществующие объекты» выберите действие.
  6. Нажмите «Выполнить» и дождитесь сообщения о завершении.

Что выбрать при ссылках на несуществующие объекты

РежимЧто сделает платформаКогда выбиратьРиски
Создавать объектыСоздаст пустые элементы с тем же GUID и названием вида «Объект не найден (…)»Почти всегда, это самый безопасный вариантЗаглушки придётся разобрать вручную
Очищать ссылкиСделает реквизиты пустымиСсылок много, и восстанавливать нечегоТеряется информация, кому принадлежал документ
Не изменятьТолько сообщит о проблемеРазведка масштабаНичего не исправит

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

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

Как найти созданные заглушки

После исправления откройте нужный справочник в пользовательском режиме и отберите элементы по слову «Объект не найден» в наименовании. Для каждого решите:

  • 🔁 есть «настоящий» дубль — замените заглушку на него обработкой поиска дублей и пометьте заглушку на удаление;
  • ✏️ дубля нет — заполните наименование и реквизиты, переименуйте.

Запуск из командной строки

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

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

Здесь -LogAndRefsIntegrity включает проверку логической и ссылочной целостности, -BadRefCreate соответствует режиму «Создавать объекты» (-BadRefClear — очищать ссылки, -TestOnly — только тестирование). Путь к платформе подставьте свой.

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

Ручное исправление битых ссылок через консоль запросов и код

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

Запрос: документы с битым контрагентом

Принцип простой: соединяем документ со справочником и ищем строки, где реквизит заполнен, а элемента в справочнике нет.

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

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

Запрос: битые ссылки в регистре

Для регистра накопления с измерением «Номенклатура» запрос строится так же. Имя регистра подставьте из своей конфигурации.

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

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

Как вернуть пропавший объект с той же ссылкой

Это главный приём для случая «удалили один элемент, а на него ссылается полбазы». Создаём новый элемент и присваиваем ему старый GUID — все документы сразу начинают его видеть.

Сначала получите GUID. В консоли запросов или в обработке выполните для найденной битой ссылки:

ИдСтрокой = Строка(БитаяСсылка.УникальныйИдентификатор());
Сообщить(ИдСтрокой);

Метод работает и для ссылки на несуществующий объект: он не читает данные, а берёт идентификатор из самой ссылки. Затем создайте элемент:

Ид = Новый УникальныйИдентификатор(ИдСтрокой);
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Ид);

НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(Ссылка);
НовыйЭлемент.Наименование = "ООО Ромашка (восстановлен)";
НовыйЭлемент.Записать();

После записи откройте элемент и заполните ИНН, КПП и остальное. Правильнее всего взять данные из резервной копии.

Если резервная копия есть, удобнее перенести элемент целиком: разверните копию в отдельную базу, выгрузите нужный элемент обработкой «Выгрузка и загрузка данных XML» и загрузите в рабочую. Обработка сохраняет GUID, поэтому ссылки восстановятся сами.

Как заменить битую ссылку на правильный элемент

Если «настоящий» контрагент в базе есть, а документы ссылаются на удалённый дубль, ссылки нужно переписать.

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

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

«Объект не найден» после обновления конфигурации, обмена и выгрузки

При обновлении

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

Порядок такой:

  1. Восстановите базу из копии, сделанной перед обновлением.
  2. Выполните тестирование и исправление с режимом «Создавать объекты».
  3. Повторите обновление.

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

При обмене данными

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

  • 🔍 найдите в базе-источнике объект по тому же GUID;
  • 📤 зарегистрируйте его к отправке и запустите синхронизацию заново;
  • ❗ не удаляйте вручную в приёмнике то, что придёт обменом: при следующем сеансе ссылка снова сломается.

При выгрузке и загрузке .dt

Сам по себе формат .dt переносит базу целиком, со всеми ссылками. Если после загрузки появились битые ссылки, они были и в исходной базе. Проверьте исходник тестированием в режиме «Только тестирование».

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

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

Профилактика здесь дешевле лечения в разы.

  • 🛡️ Отнимите право интерактивного удаления у всех, кроме администратора. Пользователи пусть только помечают объекты на удаление.
  • 🧹 Удаляйте помеченные объекты штатной обработкой Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов. Она проверяет, где используется объект, и не удалит то, на что есть ссылки.
  • 🔁 Не удаляйте элементы, участвующие в обмене, в одной базе в обход синхронизации.
  • 💾 Держите регулярные копии и храните несколько последних. Восстановить один элемент из копии недельной давности — пять минут.
  • 🧪 Проверяйте доработки. Код, который вызывает Удалить(), должен перед удалением искать ссылки (НайтиПоСсылкам()) или работать только с помеченными объектами.
  • 📅 Раз в месяц–квартал запускайте «Только тестирование» в выходные. Битые ссылки, найденные сразу, лечатся без последствий для отчётности.

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

Можно ли просто удалить документ с битой ссылкой?
Можно, но так вы теряете сам документ и его движения. Сначала восстановите или замените ссылку — документ останется в учёте с правильными данными.
Почему битая ссылка не видна в списке справочника?
Её там и нет: элемента не существует. Заглушка появляется в справочнике только после тестирования с режимом «Создавать объекты».
Битые ссылки влияют на отчётность?
Да. Суммы по несуществующему контрагенту или субконто попадают в отдельную строку, и сверка с контрагентом не сходится. В регламентированных отчётах итоги верны, но расшифровка — нет.
Работает ли тестирование и исправление в облачной базе 1С:Фреш?
Доступа к конфигуратору в сервисе нет. Битые ссылки ищите запросами и обработками БСП, а для полной проверки выгрузите базу и разверните локально.
Сколько длится тестирование и исправление?
Для файловой базы на 2–5 ГБ обычно от десятков минут до пары часов. На серверных базах в десятки гигабайт — дольше, поэтому планируйте на ночь или выходные.