Битая ссылка на удалённый объект в 1С: лечим «Объект не найден»

· 9 мин

Содержание

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

Пользователь видит окно с текстом вроде Объект не найден и тип объекта в скобках, например СправочникСсылка.Контрагенты. Иногда сообщение приходит с {Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(120)} и подобной строкой модуля. Ниже по шагам: как определить виновника, как найти все места с битой ссылкой и как привести базу в порядок.

Откуда берётся битая ссылка

Нормальная платформа не даёт удалить элемент, на который кто-то ссылается: сначала помечают на удаление, потом запускают удаление помеченных, и 1С проверяет связи. Битая ссылка появляется в обход этой защиты.

Типичные причины:

  • 🗑 удаление объекта из Конфигуратора или внешней обработкой с прямым Удалить() без контроля ссылок;
  • 📥 загрузка данных из другой базы, где справочник не переносился, а документы пришли со ссылками на него;
  • 🔄 сбой обмена: документ приехал раньше, чем элемент, на который он ссылается;
  • 💥 аварийное завершение сеанса или обрыв записи в файловой базе;
  • 🧩 переход на другую конфигурацию с потерей части справочников;
  • 🛠 ручные правки через SQL, если базу трогали на уровне СУБД.

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

Диагностика: что именно не найдено

Запишите, где ошибка проявляется. От этого зависит способ лечения.

Где видна ошибкаЧто это значит
При открытии одного документаБитая ссылка в реквизите или табличной части этого документа
При открытии спискаСсылка в одной из строк, которую список пытается отобразить
При проведенииБитая ссылка в данных, нужных алгоритму (регистры, учётная политика)
В отчётеСсылка в записях регистра, по которому строится отчёт
При запускеСсылка в настройках пользователя или в константе

Дальше по порядку:

  1. Закройте форму и откройте тот же объект ещё раз. Если ошибка повторяется, дело не в сеансе.
  2. Попробуйте открыть документ в режиме просмотра данных: в списке выделите его и нажмите F2 или используйте изменение. Если форма падает, читайте список полей: битая ссылка обычно в одном реквизите.
  3. Включите режим запуска с показом технической информации. В окне ошибки раскройте подробности: там есть тип объекта и иногда идентификатор.
  4. Проверьте, не удалён ли элемент справочника на другом сервере: при распределённой базе объект мог не доехать.

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

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

Самый надёжный способ найти все битые ссылки в документе или справочнике: запрос с левым соединением. Если по ссылке элемента нет, поле соединённой таблицы вернёт NULL.

Откройте консоль запросов (внешняя обработка, популярная у администраторов 1С) в режиме «Предприятие» и выполните запрос по нужному документу.

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

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

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

Что искать по списку результатов:

  • ✅ одна и та же «битая» ссылка в десятках документов — один удалённый элемент, лечится одной заменой;
  • ⚠️ разные ссылки в разных документах — значит, сломалось массово, лучше сначала понять причину;
  • ❌ записи регистров сведений и накопления с битыми измерениями — отчёты будут врать, пока их не почистить.

Журнал регистрации и резервная копия: ищем момент поломки

Когда ссылок много, полезнее узнать, когда и кто удалил элемент. Тогда не придётся гадать, что именно восстанавливать.

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

Что даёт копия:

  • 📂 открыв её в соседней базе, вы видите, как выглядел удалённый элемент: наименование, код, ИНН, реквизиты;
  • 🧾 можно выгрузить элемент в файл и загрузить обратно в рабочую базу обработкой, а не набирать вручную;
  • 🔍 можно сравнить число документов в копии и в рабочей базе, чтобы понять масштаб.

Если журнал не хранится так долго (его часто чистят по расписанию), смотрите по датам документов: все проблемные записи созданы или изменены после определённого момента, и этот момент указывает на причину.

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

Замена ссылки на другой объект

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

Через «Где используется» и замену ссылок

Работает, пока сам элемент ещё есть в базе, но помечен на удаление или дублируется.

  1. Откройте справочник и найдите элемент-дубль или тот, который собираетесь убрать.
  2. Откройте для него команду «Где используется» (в меню «Ещё» или в разделе «Перейти»).
  3. В списке найдите действие «Заменить на» (в типовых конфигурациях с библиотекой стандартных подсистем оно есть) и выберите правильный элемент.
  4. Подтвердите замену. Система перепишет ссылки во всех документах и регистрах.

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

Если элемента уже нет

Тогда «Заменить на» нечего открывать: у ссылки нет объекта. Остаются два пути.

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

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

Документ = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("00000042", Дата(2025, 1, 1));
ДокОбъект = Документ.ПолучитьОбъект();
ДокОбъект.Контрагент = Справочники.Контрагенты.НайтиПоКоду("00001234");
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);

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

Массовую перезапись документов делайте на копии базы. Проверьте на 3–5 документах, посмотрите проводки и только потом гоните весь список.

Когда нужна работа с запросами к данным (SQL и СУБД)

Для серверной базы на PostgreSQL или MS SQL иногда проще посмотреть таблицы напрямую. Делайте это только для чтения и только на копии: структура таблиц 1С нетривиальна, а ручные правки обходят все проверки платформы.

Что полезно сделать на уровне СУБД:

  • 🔎 посмотреть, есть ли записи в основной таблице справочника с нужным идентификатором;
  • 📊 оценить объём затронутых строк до начала исправления;
  • 🧪 проверить, что причина не в повреждённой таблице (ошибки чтения, а не просто отсутствие записи).

Править данные в таблицах 1С руками не нужно. Для этого есть штатные инструменты: перезапись реквизитов кодом, тестирование и исправление, загрузка из резервной копии. Прямой UPDATE или DELETE ломает связь между таблицами и контрольные суммы, и после него приходится поднимать базу из копии.

Восстановление целостности базы

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

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

  1. Все пользователи выходят из базы. Нужен монопольный доступ: режим Конфигуратора.
  2. Сделайте резервную копию. Без неё запускать исправление нельзя — режим меняет данные.
  3. В Конфигураторе откройте Администрирование → Тестирование и исправление.
  4. Отметьте проверку логической целостности и проверку ссылочной целостности.
  5. Сначала запустите режим «Тестирование без исправления» и прочитайте отчёт.
  6. Затем решите, что делать с найденными ссылками: создать недостающие объекты, очистить ссылки или оставить как есть для ручной проверки.
  7. Запустите «Тестирование и исправление», дождитесь окончания и сохраните журнал.

Выбор режима по ссылочной целостности:

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

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

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

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

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

Профилактика сводится к дисциплине с удалением и обменами.

  • 🧹 Удаляйте объекты только через «Удаление помеченных объектов» (раздел «Администрирование», пункт обслуживания базы; точное место зависит от конфигурации). Система покажет, где объект используется, и остановит удаление.
  • 🚫 Ограничьте права на прямое удаление: роль с правом Интерактивное удаление нужна не каждому.
  • 🔁 Перед первым обменом настройте порядок: сначала справочники, потом документы. Следите, чтобы правила обмена переносили все нужные справочники.
  • 📅 Раз в квартал запускайте проверку логической и ссылочной целостности на копии базы. Найденные ошибки лучше чинить, пока их десяток, а не тысяча.
  • 📦 Перед обновлением конфигурации и массовой загрузкой делайте резервную копию: без неё откат превращается в ручную работу.
  • 👀 Не гоняйте внешние обработки с прямым удалением без разбора кода: проверьте, что она проверяет ссылки перед Удалить().

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

Можно ли удалить документ с битой ссылкой?
Часто да: пометьте его на удаление и выполните удаление помеченных. Если форма не открывается, помечайте прямо в списке по правой кнопке мыши.
Потеряю ли я данные при очистке ссылок?
Потеряете только саму ссылку: реквизит станет пустым. Остальные поля документа сохранятся, но проводки по нему могут стать некорректными, перепроверьте.
Нужен ли монопольный доступ для исправления?
Для тестирования и исправления в Конфигураторе — да, все пользователи должны выйти. Запросы и замену кодом можно выполнять и в работающей базе, если нет блокировок.
Помогает ли обновление платформы?
Саму битую ссылку обновление не устранит. Но на новой платформе ошибка чаще видна сразу с описанием, что мешает.
Как проверить, что исправление удалось?
Повторно запустите запрос с левым соединением и тестирование без исправления: оба должны вернуть пустой результат.