«Объект не найден» в базе 1С: где искать потерянные ссылки и как их вернуть
Содержание
Битую ссылку в 1С проще всего найти так: запустите Конфигуратор в монопольном режиме, откройте Администрирование → Тестирование и исправление, включите флажок «Проверка ссылочной целостности информационной базы» и режим «Только проверка». Платформа пройдёт по всем таблицам и выведет в окно сообщений каждый реквизит, который указывает на несуществующий объект. В пользовательском режиме битая ссылка видна как текст <Объект не найден> (45:8f6a00155d01080111e7c63c15a9e5f0) в поле документа, строке отчёта или списке.
Проверка в Конфигураторе — не единственный путь. Ниже семь способов: от просмотра форм до SQL-запроса к таблицам. Каждый подходит под свою ситуацию: одна ошибка в одном документе, массовая потеря справочника после обмена или регулярный контроль большой базы.
Что такое битая ссылка в 1С и почему она появляется
В базе 1С документ хранит не имя контрагента, а его внутренний идентификатор — 16 байт GUID. Если элемента с таким идентификатором в таблице справочника больше нет, ссылка «повисает». Документ открывается, но в поле вместо названия стоит <Объект не найден>.
Откуда берутся такие ссылки:
- 🗑️ Непосредственное удаление. Пользователь с правом интерактивного удаления стёр элемент кнопкой
Shift+Delили командой «Удалить» без пометки. Контроль ссылок при этом не выполняется. - 🔄 Обмен данными. В РИБ или по правилам конвертации пришёл документ, а справочник, на который он ссылается, не выгрузили или отфильтровали.
- 📥 Загрузка из XML или .dt частями. Перенесли документы из одной базы в другую без связанных справочников.
- 🧑💻 Код с отключёнными проверками. Обработка удалила объект через
Удалить()сОбменДанными.Загрузка = Истина. - 💥 Аварии. Сбой записи, восстановление базы из неполной копии, повреждение файла
1Cv8.1CD. - ✂️ Свёртка базы. Старые документы удалили, а регистры сведений или настройки продолжают на них ссылаться.
Битая ссылка — не повод паниковать, но и не косметика. Документы с такими реквизитами часто не проводятся, отчёты дают строки без расшифровки, обмен может падать на выгрузке.
Как прочитать сообщение «Объект не найден»
Текст в скобках — готовая улика. Возьмём пример: <Объект не найден> (17:8f6a00155d01080111e7c63c15a9e5f0).
| Часть | Что означает |
|---|---|
17 | Внутренний номер типа объекта. Обычно совпадает с номером таблицы в СУБД: _Reference17, _Document17 |
8f6a…e5f0 | 32 шестнадцатеричных символа — идентификатор объекта в том порядке байтов, в котором он лежит в таблице |
Чтобы получить привычный GUID для поиска средствами 1С, строку переставляют по блокам. Из 32 символов берут:
- Символы 25–32 → первый блок GUID.
- Символы 21–24 → второй блок.
- Символы 17–20 → третий блок.
- Символы 1–4 → четвёртый блок.
- Символы 5–16 → пятый блок.
Для примера выше получится 15a9e5f0-c63c-11e7-8f6a-00155d010801. По этому GUID объект ищут в резервной копии и восстанавливают с той же ссылкой. Для SQL переставлять ничего не нужно: строка из скобок со значком 0x впереди — это значение поля _IDRRef.
Тип объекта по номеру определяют через ПолучитьСтруктуруХраненияБазыДанных(): функция возвращает соответствие имён таблиц СУБД и объектов метаданных. Найдите в результате таблицу с номером 17 — и станет понятно, какой это справочник.
Способ 1 и 2: ищем битые ссылки в формах, отчётах и «Всех функциях»
Просмотр документов и отчётов
Если ошибку заметили в одном документе, начинать с Конфигуратора не нужно. Откройте документ и пройдите по шапке и табличным частям: битый реквизит сразу выделяется текстом <Объект не найден>.
Для массового поиска удобнее отчёты. Оборотно-сальдовая ведомость по счёту с разворотом по субконто показывает строку <Объект не найден>, если проводки ссылаются на удалённого контрагента, договор или номенклатуру. Так видно не только факт, но и сумму, которая «висит» на потерянном объекте.
- 📊 ОСВ по счетам 60, 62, 76 — потерянные контрагенты и договоры.
- 📦 ОСВ по счетам 10, 41, 43 — потерянная номенклатура.
- 🧾 Отчёт по проводкам с отбором по счёту — конкретные документы с битым субконто.
Двойной щелчок по сумме в строке <Объект не найден> открывает расшифровку, а из неё — сами документы.
Режим «Все функции»
Часть данных не видна из обычного меню: регистры сведений, служебные справочники, планы обмена. Их открывают через «Все функции».
- Откройте главное меню (кнопка с тремя полосками в левом верхнем углу).
- Перейдите в
Сервис → Параметрыи включите флажок «Отображать команду “Все функции”». - В главном меню появится пункт
Все функции. В нём раскройте нужную ветку:Справочники,Регистры сведений,Регистры накопления. - Откройте список и просмотрите колонки: битые значения показаны как
<Объект не найден>.
В ветке Стандартные есть обработка «Поиск ссылок на объект». Она показывает, где используется существующий элемент. Для битой ссылки она бесполезна — искать нечего, объекта нет. Зато она пригодится перед удалением: проверить, что элемент никуда не ссылается, и не создать новую битую ссылку своими руками.
Способ 3: проверка ссылочной целостности в Конфигураторе
Это штатный инструмент платформы, и он проверяет все таблицы сразу.
- Сделайте резервную копию базы
:
Администрирование → Выгрузить информационную базув Конфигураторе или средствами СУБД. - Попросите всех пользователей выйти. Для тестирования и исправления нужен монопольный доступ — сеансы пользователей нужно завершить заранее, иначе Конфигуратор откажется начинать.
- Откройте
Администрирование → Тестирование и исправление. - Включите «Проверка логической целостности информационной базы» и «Проверка ссылочной целостности информационной базы».
- Выберите режим «Только проверка» — для первого прохода.
- Нажмите «Выполнить» и дождитесь окончания.
Результат появится в окне сообщений Конфигуратора. Для каждой проблемы указан объект и реквизит, где найдена ссылка на несуществующий элемент. Скопируйте список в файл: он понадобится для разбора.
Режимы исправления
После анализа можно запустить проверку повторно, уже с исправлением. Для ссылок на несуществующие объекты платформа предлагает три варианта:
| Режим | Что сделает платформа | Когда выбирать | Риск |
|---|---|---|---|
| Создавать объекты | Создаст элементы-заглушки с той же ссылкой | Объекты нужны, их потом заполнят или заменят | Заглушки без реквизитов, их надо разобрать вручную |
| Удалять ссылки | Очистит реквизиты, где была битая ссылка | Ссылки точно не нужны: мусор после обмена или свёртки | Данные о том, на что ссылался документ, теряются навсегда |
| Не изменять | Только сообщит о проблеме | Хотите исправить вручную или кодом | Нет |
Режим «Удалять ссылки» на рабочей базе без копии — плохая идея: документы останутся без контрагентов и договоров, а восстановить связь будет не из чего.
Самый безопасный вариант для бухгалтерской базы — «Создавать объекты». После него в справочнике появятся элементы с названием вида «Объект не найден (…)». Их можно найти по названию, заполнить или заменить на правильные через обработку поиска и замены дублей.
На большой базе тестирование идёт часами. Планируйте его на нерабочее время: всё это время пользователи не смогут войти.
Способ 4 и 5: запрос на языке 1С и внешние обработки
Когда известно, в каком реквизите искать, запрос быстрее Конфигуратора и не требует выгонять пользователей.
Запрос к конкретному реквизиту
Приём простой: если ссылка не пустая, а разыменованное поле объекта возвращает NULL, значит, объекта в таблице нет. Пример для документа реализации в 1С:Бухгалтерии 3.0:
ВЫБРАТЬ
Док.Ссылка КАК Документ,
Док.Дата КАК Дата,
Док.Контрагент КАК БитаяСсылка
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
ГДЕ
Док.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
И Док.Контрагент.ПометкаУдаления ЕСТЬ NULL
Запрос выполняют в консоли запросов — внешней обработке, которая входит в стандартный набор инструментов разработчика. Для табличной части замените источник на Документ.РеализацияТоваровУслуг.Товары и проверяйте, например, Номенклатура.
Ту же проверку в коде делают одной строкой. На сервере у битой ссылки метод ПолучитьОбъект() возвращает Неопределено:
Если ЗначениеЗаполнено(Ссылка) И Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Битая ссылка: " + Строка(Ссылка));
КонецЕсли;
Внешние обработки
Перебирать вручную все реквизиты всех объектов долго. Для этого пишут или берут готовые внешние обработки: они проходят по метаданным, строят запрос для каждого ссылочного реквизита и собирают результат в таблицу «объект — реквизит — битое значение».
Перед запуском чужой обработки:
- 🔍 откройте её в Конфигураторе и посмотрите, что она делает, особенно команды записи и удаления;
- 🧪 запустите сначала на копии базы;
- 📝 убедитесь, что в обработке есть режим «только отчёт», без автоматического исправления.
В типовых конфигурациях на БСП есть свой механизм проверок учёта: в разделе Администрирование → Обслуживание ищите контроль ведения учёта. Состав проверок зависит от конфигурации и релиза, поэтому посмотрите список проверок в своей базе, прежде чем на него полагаться.
Способ 6: SQL-запрос для клиент-серверной базы
Администратор может найти битые ссылки прямо в СУБД, не нагружая сервер 1С. Это удобно на базах в сотни гигабайт, где тестирование в Конфигураторе идёт ночь.
Сначала узнайте имена таблиц и полей через ПолучитьСтруктуруХраненияБазыДанных(). Допустим, документ хранится в _Document567, реквизит «Контрагент» — поле _Fld1234RRef, справочник контрагентов — _Reference45. Запрос для MS SQL Server:
SELECT d._IDRRef, d._Number, d._Date_Time, d._Fld1234RRef
FROM _Document567 d
LEFT JOIN _Reference45 r ON r._IDRRef = d._Fld1234RRef
WHERE r._IDRRef IS NULL
AND d._Fld1234RRef <> 0x00000000000000000000000000000000;
Найти конкретный потерянный объект по сообщению тоже можно. Строку из скобок подставляют как есть: WHERE _IDRRef = 0x8F6A00155D01080111E7C63C15A9E5F0.
Что учесть:
- 🧩 У реквизитов составного типа три поля: тип значения, номер таблицы и сама ссылка. Связывать нужно с учётом номера таблицы.
- 🐘 В PostgreSQL имена таблиц в нижнем регистре, а пустая ссылка сравнивается как значение типа
bytea. - 📖 Добавьте к запросу
WITH (NOLOCK)в MS SQL, если не хотите мешать пользователям, но помните: так можно увидеть незафиксированные данные.
Используйте SQL только для чтения. Запись в таблицы 1С средствами СУБД обходит всю логику платформы и легко ломает базу окончательно.
Способ 7: регулярная проверка без участия человека
Отдельных сервисов для этого не нужно: проверку ссылочной целостности умеет запускать сама платформа из командной строки. Её ставят в планировщик задач на ночь, а утром читают лог.
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /S "srv1c\buh" /N "Admin" /P "пароль" /IBCheckAndRepair -LogAndRefsIntegrity -TestOnly /Out "D:\logs\check_refs.txt"
/IBCheckAndRepair— запуск тестирования и исправления.-LogAndRefsIntegrity— проверка логической и ссылочной целостности.-TestOnly— только проверка, без изменений./Out— файл, куда попадут сообщения.
Номер платформы в пути замените на свой. Для файловой базы вместо /S используют /F "D:\Bases\Buh".
Команда требует монопольного доступа, как и ручной запуск. Если в это время работают регламентные задания или пользователи, проверка не стартует. Перед ночным запуском блокируйте начало сеансов и предупредите тех, кто работает допоздна.
Второй вариант автоматизации — регламентное задание в конфигурации, которое раз в неделю выполняет запросы из способа 4 по ключевым реквизитам и пишет результат в журнал регистрации. Это не требует монопольного доступа, но покрывает только те реквизиты, которые вы перечислили.
Как исправить найденные битые ссылки
Порядок зависит от того, нужен ли потерянный объект.
Код для восстановления элемента-заглушки по GUID. Выполняется на сервере, например во внешней обработке:
УИД = Новый УникальныйИдентификатор("15a9e5f0-c63c-11e7-8f6a-00155d010801");
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(УИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Объект = Справочники.Контрагенты.СоздатьЭлемент();
Объект.УстановитьСсылкуНового(Ссылка);
Объект.Наименование = "Восстановлен по битой ссылке - проверить";
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
КонецЕсли;
ОбменДанными.Загрузка = Истина отключает проверки заполнения: у заглушки нет ИНН и других обязательных реквизитов. Потом элемент нужно открыть и заполнить нормально.
Как не наплодить новых битых ссылок
- 🔒 Отберите у пользователей право интерактивного удаления. Пусть удаляют только через пометку и обработку
Удаление помеченных объектов— она проверяет, используется ли объект. - 🔄 В правилах обмена проверяйте, что вместе с документами выгружаются справочники, на которые они ссылаются.
- 💾 Перед свёрткой и массовой загрузкой делайте копию и после операции запускайте проверку ссылочной целостности в режиме «Только проверка».