Битая ссылка на удалённый объект в 1С: лечим «Объект не найден»
Содержание
Ошибка «Объект не найден» появляется, когда документ, справочник или регистр хранит ссылку на элемент, которого в базе уже нет. Лечат её тремя способами: заменой ссылки на другой элемент, очисткой ссылки или восстановлением самого объекта. Выбор зависит от того, сколько записей затронуто и нужны ли в них исходные данные.
Пользователь видит окно с текстом вроде Объект не найден и тип объекта в скобках, например СправочникСсылка.Контрагенты. Иногда сообщение приходит с {Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(120)} и подобной строкой модуля. Ниже по шагам: как определить виновника, как найти все места с битой ссылкой и как привести базу в порядок.
Откуда берётся битая ссылка
Нормальная платформа не даёт удалить элемент, на который кто-то ссылается: сначала помечают на удаление, потом запускают удаление помеченных, и 1С проверяет связи. Битая ссылка появляется в обход этой защиты.
Типичные причины:
- 🗑 удаление объекта из Конфигуратора или внешней обработкой с прямым
Удалить()без контроля ссылок; - 📥 загрузка данных из другой базы, где справочник не переносился, а документы пришли со ссылками на него;
- 🔄 сбой обмена: документ приехал раньше, чем элемент, на который он ссылается;
- 💥 аварийное завершение сеанса или обрыв записи в файловой базе;
- 🧩 переход на другую конфигурацию с потерей части справочников;
- 🛠 ручные правки через SQL, если базу трогали на уровне СУБД.
Если ошибка возникла сразу после обмена или загрузки, причина почти наверняка там. Если она «просто появилась» у одного документа, чаще всего виноват сбой записи или ручное удаление.
Диагностика: что именно не найдено
Запишите, где ошибка проявляется. От этого зависит способ лечения.
| Где видна ошибка | Что это значит |
|---|---|
| При открытии одного документа | Битая ссылка в реквизите или табличной части этого документа |
| При открытии списка | Ссылка в одной из строк, которую список пытается отобразить |
| При проведении | Битая ссылка в данных, нужных алгоритму (регистры, учётная политика) |
| В отчёте | Ссылка в записях регистра, по которому строится отчёт |
| При запуске | Ссылка в настройках пользователя или в константе |
Дальше по порядку:
- Закройте форму и откройте тот же объект ещё раз. Если ошибка повторяется, дело не в сеансе.
- Попробуйте открыть документ в режиме просмотра данных: в списке выделите его и нажмите
F2или используйте изменение. Если форма падает, читайте список полей: битая ссылка обычно в одном реквизите. - Включите режим запуска с показом технической информации. В окне ошибки раскройте подробности: там есть тип объекта и иногда идентификатор.
- Проверьте, не удалён ли элемент справочника на другом сервере: при распределённой базе объект мог не доехать.
Если в сообщении названа строка модуля, откройте этот модуль в Конфигураторе. Часто видно, какой именно реквизит читает код и какой справочник должен лежать в базе.
Поиск удалённых объектов запросом
Самый надёжный способ найти все битые ссылки в документе или справочнике: запрос с левым соединением. Если по ссылке элемента нет, поле соединённой таблицы вернёт NULL.
Откройте консоль запросов (внешняя обработка, популярная у администраторов 1С) в режиме «Предприятие» и выполните запрос по нужному документу.
ВЫБРАТЬ
Док.Ссылка КАК Документ,
Док.Номер КАК Номер,
Док.Дата КАК Дата,
Док.Контрагент КАК БитаяСсылка
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Док.Контрагент = Контрагенты.Ссылка
ГДЕ
Контрагенты.Ссылка ЕСТЬ NULL
И Док.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
Условие на пустую ссылку нужно, чтобы не поймать документы, где контрагент просто не заполнен. Подставьте свои имена документа, реквизита и справочника. Для табличной части запрос строится по Документ.РеализацияТоваровУслуг.Товары с соединением по полю Номенклатура.
Запрос ничего не меняет в базе, поэтому его можно гонять в рабочей базе в любой момент. На больших таблицах он идёт заметно дольше обычного отчёта: запускайте вне часа пик.
Что искать по списку результатов:
- ✅ одна и та же «битая» ссылка в десятках документов — один удалённый элемент, лечится одной заменой;
- ⚠️ разные ссылки в разных документах — значит, сломалось массово, лучше сначала понять причину;
- ❌ записи регистров сведений и накопления с битыми измерениями — отчёты будут врать, пока их не почистить.
Журнал регистрации и резервная копия: ищем момент поломки
Когда ссылок много, полезнее узнать, когда и кто удалил элемент. Тогда не придётся гадать, что именно восстанавливать.
- Откройте журнал регистрации:
Администрирование → Журнал регистрации(в режиме «Предприятие» он есть в разделе администрирования). - Поставьте отбор по периоду, когда ошибка ещё не проявлялась, и по событиям данных: удаление, запись.
- Найдите запись об удалении нужного объекта. В ней будет пользователь, компьютер и приложение: из Конфигуратора, из клиента или фонового задания обмена.
- Если элемент удалили вчера, а ошибка пришла сегодня, разворачивайте резервную копию на тестовом сервере.
Что даёт копия:
- 📂 открыв её в соседней базе, вы видите, как выглядел удалённый элемент: наименование, код, ИНН, реквизиты;
- 🧾 можно выгрузить элемент в файл и загрузить обратно в рабочую базу обработкой, а не набирать вручную;
- 🔍 можно сравнить число документов в копии и в рабочей базе, чтобы понять масштаб.
Если журнал не хранится так долго (его часто чистят по расписанию), смотрите по датам документов: все проблемные записи созданы или изменены после определённого момента, и этот момент указывает на причину.
Если удаление выполнялось фоновым заданием обмена, сначала остановите обмен и только потом чините данные. Иначе следующий сеанс обмена снова принесёт те же ссылки.
Замена ссылки на другой объект
Это основной способ, если нужный элемент можно подобрать: контрагент задвоился, номенклатуру удалили вместе с дублем, склад пересоздали.
Через «Где используется» и замену ссылок
Работает, пока сам элемент ещё есть в базе, но помечен на удаление или дублируется.
- Откройте справочник и найдите элемент-дубль или тот, который собираетесь убрать.
- Откройте для него команду «Где используется» (в меню «Ещё» или в разделе «Перейти»).
- В списке найдите действие «Заменить на» (в типовых конфигурациях с библиотекой стандартных подсистем оно есть) и выберите правильный элемент.
- Подтвердите замену. Система перепишет ссылки во всех документах и регистрах.
После замены отдельно проверьте регистры: часть из них перезаписывается только при перепроведении документов.
Если элемента уже нет
Тогда «Заменить на» нечего открывать: у ссылки нет объекта. Остаются два пути.
Восстановить пустышку. Вручную создать элемент с прежним внутренним идентификатором через интерфейс нельзя. Это умеет Конфигуратор: в тестировании и исправлении (раздел ниже) есть режим создания недостающих объектов.
Переписать реквизит. Запросом из предыдущего раздела получаете список документов, затем обработкой или внешней обработкой записываете в проблемный реквизит нужное значение. Пример для одного документа:
Документ = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("00000042", Дата(2025, 1, 1));
ДокОбъект = Документ.ПолучитьОбъект();
ДокОбъект.Контрагент = Справочники.Контрагенты.НайтиПоКоду("00001234");
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
Если документ проведён, запись в режиме «Запись» не перепроведёт его: учётные данные останутся прежними. Перепроведите отдельно, когда убедитесь, что документ корректен.
Массовую перезапись документов делайте на копии базы. Проверьте на 3–5 документах, посмотрите проводки и только потом гоните весь список.
Когда нужна работа с запросами к данным (SQL и СУБД)
Для серверной базы на PostgreSQL или MS SQL иногда проще посмотреть таблицы напрямую. Делайте это только для чтения и только на копии: структура таблиц 1С нетривиальна, а ручные правки обходят все проверки платформы.
Что полезно сделать на уровне СУБД:
- 🔎 посмотреть, есть ли записи в основной таблице справочника с нужным идентификатором;
- 📊 оценить объём затронутых строк до начала исправления;
- 🧪 проверить, что причина не в повреждённой таблице (ошибки чтения, а не просто отсутствие записи).
Править данные в таблицах 1С руками не нужно. Для этого есть штатные инструменты: перезапись реквизитов кодом, тестирование и исправление, загрузка из резервной копии. Прямой UPDATE или DELETE ломает связь между таблицами и контрольные суммы, и после него приходится поднимать базу из копии.
Восстановление целостности базы
Когда битых ссылок много, а искать каждую неудобно, подключайте штатное тестирование.
Порядок действий:
- Все пользователи выходят из базы. Нужен монопольный доступ: режим Конфигуратора.
- Сделайте резервную копию. Без неё запускать исправление нельзя — режим меняет данные.
- В Конфигураторе откройте
Администрирование → Тестирование и исправление. - Отметьте проверку логической целостности и проверку ссылочной целостности.
- Сначала запустите режим «Тестирование без исправления» и прочитайте отчёт.
- Затем решите, что делать с найденными ссылками: создать недостающие объекты, очистить ссылки или оставить как есть для ручной проверки.
- Запустите «Тестирование и исправление», дождитесь окончания и сохраните журнал.
Выбор режима по ссылочной целостности:
| Вариант | Когда подходит | Риск |
|---|---|---|
| Создание недостающих объектов | Нужно сохранить документ как есть, нужные данные восстановятся вручную | В базе появятся элементы-пустышки без наименований |
| Очистка ссылок | Ссылка не нужна, документ можно оставить с пустым реквизитом | Потеряете связь, вернуть её нельзя |
| Ручная замена кодом | Известно, на что заменить | Требует времени и проверки |
Сразу после тестирования откройте документы, которые падали, и проверьте проведение. Если по ним строятся отчёты, сравните итоги с копией базы до исправления.
Для файловой базы можно сначала прогнать то же самое на копии каталога и сравнить результат. Для серверной — на копии, развёрнутой из резервной.
Как не получить битые ссылки снова
Профилактика сводится к дисциплине с удалением и обменами.
- 🧹 Удаляйте объекты только через «Удаление помеченных объектов» (раздел «Администрирование», пункт обслуживания базы; точное место зависит от конфигурации). Система покажет, где объект используется, и остановит удаление.
- 🚫 Ограничьте права на прямое удаление: роль с правом
Интерактивное удалениенужна не каждому. - 🔁 Перед первым обменом настройте порядок: сначала справочники, потом документы. Следите, чтобы правила обмена переносили все нужные справочники.
- 📅 Раз в квартал запускайте проверку логической и ссылочной целостности на копии базы. Найденные ошибки лучше чинить, пока их десяток, а не тысяча.
- 📦 Перед обновлением конфигурации и массовой загрузкой делайте резервную копию: без неё откат превращается в ручную работу.
- 👀 Не гоняйте внешние обработки с прямым удалением без разбора кода: проверьте, что она проверяет ссылки перед
Удалить().