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

· 9 мин

Содержание

Битая ссылка в 1С — это реквизит, который хранит ссылку на объект, которого в базе данных уже нет. Вместо контрагента или номенклатуры в поле видна строка вида <Объект не найден> (32:8f3a0050568b2c1e11ef4d2a9b7c5e01). Исправить её можно тремя путями: восстановить пропавший объект с тем же идентификатором, заменить ссылку на правильную или очистить её через «Тестирование и исправление» в Конфигураторе.

Какой путь выбрать, зависит от масштаба. Одна-две битые ссылки после случайного удаления — восстанавливаем объект или правим вручную. Сотни ссылок после сбоя обмена или загрузки — сначала находим их запросом, потом решаем пакетно. Тотальная очистка через тестирование — крайний вариант: данные о том, что там было, теряются.

Откуда в базе данных появляются битые ссылки

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

Платформа проверяет, ссылается ли кто-то на объект, только при удалении через обработку «Удаление помеченных объектов». Все остальные способы удаления этот контроль обходят.

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

  • 🗑️ Непосредственное удаление. Пользователь с правом «Интерактивное удаление» удалил элемент клавишей Shift+Delete или командой удаления без пометки. Объект исчез сразу, ссылки на него остались.
  • 🔄 Обмен данными. Документ пришёл из другой базы, а связанный справочник — нет: правило обмена не выгрузило элемент, обмен прервался на середине, узлы рассинхронизировались.
  • 📥 Загрузка из файла. Выгрузка/загрузка XML, «Загрузка данных из табличного документа», самописные обработки переноса. Объекты создаются с готовыми ссылками, а их «соседей» в базе нет.
  • 💻 Программный код. Обработка или расширение удаляет объекты методом Удалить() без проверки, кто на них ссылается.
  • ⚡ Аварии. Обрыв питания, сбой диска, падение сервера СУБД во время записи. Часть данных записалась, часть — нет.
  • 🧩 Ручные правки в СУБД. Кто-то удалил строки SQL-запросом прямо в таблицах. Так делать нельзя ни при каких обстоятельствах.

Число перед двоеточием в строке <Объект не найден> (32:...) — внутренний номер таблицы, то есть тип объекта. Вторая часть — GUID. По GUID объект потом и восстанавливают, поэтому скопируйте эту строку целиком, прежде чем что-то менять.

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

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

Косвенные симптомы:

  1. Документ не проводится с ошибкой о незаполненном реквизите, хотя поле на экране заполнено.
  2. В оборотно-сальдовой ведомости появляется строка без названия или с пустой аналитикой, а суммы по ней не нулевые.
  3. Отчёт в разрезе контрагентов показывает итог, который не сходится с суммой строк.
  4. Выгрузка в другую программу или обмен останавливается с сообщением о том, что объект не найден.
  5. Печатная форма выходит с пустым наименованием покупателя или товара.
  6. Обработка «Удаление помеченных объектов» не находит связей, хотя данные явно ссылались на удалённый элемент.
Диагностика: выберите симптом

Кто и когда удалил объект: журнал регистрации и технический журнал

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

Журнал регистрации

Это первое место, куда стоит заглянуть. В пользовательском режиме он открывается через Администрирование → Обслуживание → Журнал регистрации, в Конфигураторе — через Администрирование → Журнал регистрации.

Что настроить в отборе:

  1. Событие — Данные. Удаление.
  2. Метаданные — нужный справочник или документ.
  3. Период — от даты, когда объект точно был на месте.

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

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

Технический журнал

Технический журнал нужен, когда журнал регистрации молчит: ошибка возникает в коде обработки, при обмене на сервере или в фоновом задании. Его включают файлом logcfg.xml в каталоге conf платформы (например, C:\Program Files\1cv8\conf). Платформа перечитывает файл сама, перезапуск не нужен.

Минимальная настройка для поиска исключений:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\1c_techlog" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <property name="all"/>
  </log>
</config>

В логах ищите события EXCP с текстом об отсутствующем объекте и смотрите свойство Context: там стек вызовов, то есть модуль и строка кода, которые споткнулись о битую ссылку.

Технический журнал быстро растёт. Включайте его на время диагностики, на отдельный диск, и удаляйте logcfg.xml сразу после поиска. Иначе логи забьют диск сервера, и остановится уже вся база.

Тестирование и исправление информационной базы

Штатный инструмент платформы для ссылочной целостности — режим «Тестирование и исправление» в Конфигураторе: Администрирование → Тестирование и исправление.

Режим требует монопольного доступа: все пользователи должны выйти из базы, фоновые задания — остановиться. Запускайте вечером или в выходной, предупредив коллег. Перед запуском сделайте выгрузку .dt или резервную копию средствами СУБД.

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

  1. Сначала запустите проверку с вариантом «Только тестирование». Так вы увидите масштаб, ничего не меняя.
  2. Включите флажки «Проверка логической целостности информационной базы» и «Проверка ссылочной целостности информационной базы».
  3. Изучите протокол: какие объекты и какие реквизиты ссылаются на несуществующие данные.
  4. Решите, как поступать с битыми ссылками, и запустите повторно с вариантом «Тестирование и исправление».

Для ссылок на несуществующие объекты есть три варианта:

ВариантЧто делаетКогда выбиратьРиск
Создавать объектыСоздаёт объекты-заглушки с теми же GUIDСсылок много, данные важны, объекты можно потом переименовать и заполнитьВ справочниках появятся пустые элементы, их придётся разбирать
Очищать ссылкиДелает реквизит пустымСсылки точно мусорные, например в старых черновикахИнформация о том, что было в поле, теряется насовсем
Не изменятьОставляет как естьНужен только протоколПроблема остаётся

💡 На практике чаще всего выбирают «Создавать объекты». Заглушка сохраняет связь: в документах снова виден элемент справочника, а не <Объект не найден>. Дальше заглушку можно заполнить реквизитами или объединить с правильным элементом через стандартную обработку поиска и удаления дублей.

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

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

"C:\Program Files\1cv8\8.3.25.1394\bin\1cv8.exe" DESIGNER /S "srv1c\buh" /N "Администратор" /P "пароль" /IBCheckAndRepair -LogAndRefsIntegrity -BadRefCreate /Out "D:\logs\check.txt"

Ключ -BadRefCreate соответствует варианту «Создавать объекты», -BadRefClear — «Очищать ссылки», -BadRefNone — «Не изменять». Для пробного прогона вместо них используйте -TestOnly. Номер платформы в пути замените на свой.

Проверка ссылочной целостности в пользовательском режиме

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

Плюсы такого способа:

  • ✅ пользователи могут продолжать работать;
  • ✅ результат виден списком с переходом к проблемному объекту;
  • ✅ проверку можно поставить регламентным заданием.

Минус — он только находит. Исправлять приходится вручную или способами из следующего раздела.

Если раздел найти не получается, откройте Все функции (включается в настройках как «Отображать команду Все функции») и найдите обработку по слову «проверка» в разделе «Обработки».

Поиск и ручное исправление через консоль запросов

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

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

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

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

Восстановление объекта с тем же GUID

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

Код выполняется на сервере, в обработке или в консоли с режимом выполнения произвольного кода:

// GUID берём из результата запроса: Строка(БитаяСсылка.УникальныйИдентификатор())
// Значение ниже — пример, подставьте своё
ИдентификаторСтроки = "4d2a9b7c-5e01-11ef-8f3a-0050568b2c1e";
Ид = Новый УникальныйИдентификатор(ИдентификаторСтроки);
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Ид);

Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
    Элемент = Справочники.Контрагенты.СоздатьЭлемент();
    Элемент.УстановитьСсылкуНового(Ссылка);
    Элемент.Наименование = "Восстановленный контрагент";
    Элемент.Записать();
КонецЕсли;

Учтите: в строке <Объект не найден> GUID записан в «перевёрнутом» внутреннем порядке, без дефисов. Надёжнее получить его из запроса методом УникальныйИдентификатор() у самой битой ссылки.

После создания заполните реквизиты элемента: ИНН, КПП, договоры. Если сохранилась резервная копия, проще перенести элемент оттуда выгрузкой в XML — он придёт с тем же GUID и всеми реквизитами.

Замена на правильный объект

Если нужный контрагент в базе есть, но под другим GUID, битую ссылку меняют на него. Для десятка документов хватит ручной правки. Для сотен — используйте групповое изменение реквизитов (Администрирование → Обслуживание → Корректировка данных) с отбором по проблемному значению.

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

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

Профилактика дешевле разбора последствий. Основные меры:

  1. Уберите непосредственное удаление. Право «Интерактивное удаление» в профилях пользователей должно быть только у администратора. Остальные ставят пометку на удаление, а удаляет обработка «Удаление помеченных объектов» — она проверяет связи.
  2. Настройте хранение журнала регистрации минимум на год, чтобы всегда можно было найти, кто удалил объект.
  3. Проверяйте обмены. После изменения правил обмена или обновления одной из баз сделайте пробный обмен и проверку ссылочной целостности в базе-приёмнике.
  4. Контролируйте самописные обработки. Любой код с Удалить() должен сначала искать ссылки на объект методом НайтиПоСсылкам().
  5. Делайте резервные копии по расписанию и раз в квартал проверяйте, что копия разворачивается.
  6. Запускайте тестирование без исправления раз в месяц или после каждого крупного обновления, чтобы видеть проблему, пока она маленькая.
Регламент обслуживания базы
Выполнено: 0 / 5

Частые вопросы о битых ссылках

Можно ли удалить битую ссылку, просто очистив поле в документе?
Да, если вы знаете, какой объект там должен быть, и сразу выберете правильный. Пустое поле в проведённом документе часто приводит к ошибке проведения.
Почему «Удаление помеченных» не нашло связей, а после удаления появились битые ссылки?
Обработка видит только ссылки в объектах базы. Если ссылка хранилась в данных, которые пришли позже обменом или загрузкой, она станет битой уже после удаления.
Исправит ли битые ссылки утилита chdbfl.exe?
Нет. Она проверяет физическую структуру файловой базы. Ссылочную целостность проверяет только «Тестирование и исправление» или запросы.
Влияют ли битые ссылки на отчётность?
Да, если они попали в движения регистров. Суммы есть, а аналитики нет: в ОСВ и расшифровках появляются строки без контрагента или номенклатуры.
Опасна ли битая ссылка в черновике, который не проведён?
Почти нет: движений документ не делает. Но при попытке провести его или выгрузить в другую базу он даст ошибку.