Откуда в базе 1С берутся битые ссылки и как от них избавиться
Содержание
Надпись <Объект не найден> (45:b3e800155d01f20211e59c9f9c1fdc22) в поле документа или справочника значит одно: в базе хранится ссылка на объект, которого физически уже нет. Документ «помнит» контрагента, склад или номенклатуру, а записи с таким идентификатором в таблице нет. Это так называемая битая ссылка. Исправляют её двумя путями: находят и восстанавливают пропавший объект или заменяют ссылку на правильную. Массово это делает Конфигуратор → Администрирование → Тестирование и исправление.
Ошибка «Объект не найден» в 1С выглядит по-разному: строка в поле формы, сообщение при проведении документа, окно с ошибкой при открытии элемента из списка. Причина почти всегда одна из пяти: прямое удаление, обмен данными, частичная загрузка, обновление конфигурации или удаление объекта другим пользователем прямо во время работы.
Что означает «Объект не найден» и какие объекты пропадают
В 1С 8.3 каждый элемент справочника, документ, план видов характеристик или бизнес-процесс имеет уникальный идентификатор — GUID. Реквизиты других объектов хранят не название, а именно этот идентификатор. Пока объект на месте, платформа подставляет его представление. Когда объекта нет, вместо названия показывается <Объект не найден> и служебный код в скобках.
Код состоит из двух частей:
- 🔢 число до двоеточия — внутренний номер таблицы базы, то есть тип объекта (справочник «Контрагенты», документ «Реализация» и т. п.);
- 🧬 32 шестнадцатеричных символа после двоеточия — GUID пропавшего объекта, записанный в переставленном порядке.
Ссылки умеют хранить только ссылочные типы. Поэтому битыми бывают реквизиты, которые указывают на:
| Тип объекта | Где чаще всего встречается битая ссылка |
|---|---|
| Справочники | Контрагент, договор, номенклатура, склад, сотрудник в документах |
| Документы | Документ-основание, «Сделка», регистратор в регистрах |
| Планы видов характеристик | Значения дополнительных реквизитов и свойств |
| Перечисления | После удаления значения из конфигурации при обновлении |
| Планы счетов | Субконто и счета в ручных операциях |
Опасность не в самой надписи. Функция ЗначениеЗаполнено() для битой ссылки возвращает Истина, поэтому проверка заполнения проходит, документ проводится, а в регистры уходит мусор. Ошибка всплывает позже — в отчёте, при закрытии месяца или в обмене.
Как найти причину ошибки в журнале регистрации
Первое, что стоит выяснить: объект удалили или он никогда не попадал в эту базу. От ответа зависит способ исправления.
Журнал регистрации в БП 3.0, ЗУП 3.1 и УТ 11 открывается так: Администрирование → Обслуживание → Журнал регистрации. В любой конфигурации его можно открыть и через Все функции → Стандартные → Журнал регистрации (если пункт «Все функции» не виден, включите его в параметрах программы).
Порядок поиска:
- Откройте журнал и нажмите кнопку настройки отбора.
- В поле «События» отметьте
Данные. Удаление. - Задайте период — от даты, когда объект точно был, до момента появления ошибки.
- Если тип известен, ограничьте отбор по метаданным: например, только справочник «Контрагенты».
- Найдите запись, где в колонке «Данные» стоит пропавший объект. В строке будут пользователь, компьютер, время и приложение, из которого шло удаление.
Что говорит результат:
- 🗑️ есть событие
Данные. Удалениеот пользователя — объект удалили напрямую, в обход пометки на удаление; - 🔄 удаление выполнил пользователь обмена или фоновое задание — объект убрал обмен данными;
- ❓ событий нет — объект в эту базу не загружался: ссылка пришла извне через обмен, загрузку из файла или частичный перенос данных.
Если журнал хранится недолго или был очищен, проверьте его настройки в Конфигураторе: Администрирование → Настройка журнала регистрации. Там задаётся, какие события писать и как часто делить журнал на файлы.
Отдельно посмотрите события с уровнем «Ошибка» в момент появления сообщения. В записи часто видно, какая обработка или документ обращались к отсутствующему объекту.
Как найти проблемный объект и код в режиме 1С:Предприятие
Когда ошибка возникает не в поле, а в окне сообщения при проведении или записи, сначала нужно понять, какая строка кода к ней привела.
Подробности ошибки
В окне ошибки нажмите Подробно (или ссылку с подробностями). Откроется текст с модулем и номером строки, например ОбщийМодуль.ПроведениеСервер.Модуль(1532). По нему программист найдёт место в Конфигураторе. Там же есть команда формирования отчёта об ошибке — его удобно отправить разработчику целиком.
Перевод кода из скобок в GUID
Служебный код из надписи позволяет восстановить идентификатор пропавшего объекта. Его 32 символа переставляют по схеме: символы 25–32, затем 21–24, 17–20, 1–4 и 5–16.
Пример. Из <Объект не найден> (45:b3e800155d01f20211e59c9f9c1fdc22) получается GUID 9c1fdc22-9c9f-11e5-b3e8-00155d01f202.
Этот GUID можно искать в другой базе — например, в базе-источнике обмена или в резервной копии. Ссылку по нему получают так:
ИдСтрокой = "9c1fdc22-9c9f-11e5-b3e8-00155d01f202";
Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдСтрокой));
Объект = Ссылка.ПолучитьОбъект();
Если Объект = Неопределено Тогда
Сообщить("Объекта с таким GUID в этой базе нет");
Иначе
Сообщить("Найден: " + Объект.Наименование);
КонецЕсли;
Код выполняется на сервере, например во внешней обработке или в режиме отладки. ПолучитьОбъект() для несуществующей ссылки возвращает Неопределено, а не вызывает исключение. В типовых конфигурациях на БСП то же самое проверяет функция ОбщегоНазначения.СсылкаСуществует().
Поиск всех документов с битой ссылкой
Чтобы увидеть масштаб, выполните запрос в консоли запросов. Пример для документов реализации с пропавшими контрагентами:
ВЫБРАТЬ
Док.Ссылка КАК Документ,
Док.Контрагент КАК БитаяСсылка
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Спр
ПО Док.Контрагент = Спр.Ссылка
ГДЕ
Док.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
И Спр.Ссылка ЕСТЬ NULL
Логика простая: ссылка заполнена, а в справочнике пары для неё нет. Замените имена документа, реквизита и справочника на свои — запрос работает для любого ссылочного реквизита шапки.
Почему ссылки ломаются после обновления конфигурации и обмена
Обновление и обмен — две частые причины массовых битых ссылок. Механизм у них разный.
После обновления
Разработчик удалил из конфигурации справочник, документ или значение перечисления, а данные с этими ссылками остались. После обновления реквизиты, указывавшие на удалённый тип, показывают <Объект не найден>.
Типичные случаи:
- 🧩 доработанная конфигурация обновлена «поверх» без сравнения и объединения — пропали добавленные объекты;
- 📦 удалили расширение, в котором были свои справочники, а основные документы на них ссылались;
- 🔀 тип реквизита изменили, а старые значения не перенесли обработчиком обновления.
Что делать: сравнить старую и новую конфигурацию (Конфигурация → Сравнить конфигурации), найти удалённые объекты и вернуть их или написать перенос данных. Если ошибка появилась сразу после обновления и пропадает на другом компьютере, сначала очистите кэш клиента: запустите 1С с параметром /ClearCache или удалите кэш через окно запуска.
После обмена данными
При обмене между базами (РИБ, синхронизация БП и УТ, «Конвертация данных ») объект может прийти раньше тех, на кого он ссылается. Например, документ загрузился, а контрагент — нет из-за правил отбора или ошибки в его выгрузке. Получается ссылка на GUID, которого в базе-приёмнике нет.
Порядок проверки:
- Посмотрите протокол последнего обмена и ошибки загрузки.
- Найдите GUID пропавшего объекта по схеме выше.
- Проверьте, есть ли объект с этим GUID в базе-источнике.
- Если есть — выгрузите его повторно (зарегистрируйте к обмену) и запустите синхронизацию.
- Если нет и там — объект удалён в источнике, исправлять нужно в обеих базах.
Не создавайте вручную в приёмнике «такого же» контрагента. У нового элемента будет другой GUID, битая ссылка останется, а при следующем обмене появится дубль.
Тестирование и исправление: проверка ссылочной целостности базы
Когда битых ссылок много или их происхождение неизвестно, используют штатную проверку платформы.
Перед запуском сделайте резервную копию базы — выгрузку .dt или копию средствами СУБД. Режим исправления меняет данные необратимо.
Для проверки нужен монопольный доступ: все пользователи должны выйти, фоновые задания и обмены — остановлены. Запускайте вне рабочего времени, иначе придётся завершать чужие сеансы, а люди потеряют несохранённые данные.
Порядок:
- Откройте базу в Конфигураторе.
- Выберите
Администрирование → Тестирование и исправление. - Отметьте
Проверка логической целостности информационной базыиПроверка ссылочной целостности информационной базы. - Выберите режим: сначала
Тестирование— только отчёт, без изменений. Посмотрите, сколько и каких ссылок найдено. - Повторите в режиме
Тестирование и исправлениеи укажите действие для ссылок на несуществующие объекты.
Варианты действия:
| Действие | Что происходит | Когда выбирать |
|---|---|---|
| Создавать объекты | Платформа создаёт объекты-заглушки с нужными GUID | Нужно сохранить связи и потом заполнить или заменить заглушки |
| Очищать ссылки | Реквизиты с битой ссылкой становятся пустыми | Ссылки точно бесполезны, документы можно перезаполнить |
| Не изменять | Ссылки остаются, ошибка только фиксируется в отчёте | Нужен отчёт для ручного разбора |
Для учётных данных безопаснее «Создавать объекты». Связь документа с объектом сохраняется, а заглушку потом можно заменить на правильный элемент через обработку Поиск и удаление дублей (в БП 3.0: Администрирование → Обслуживание → Корректировка данных). Вариант «Очищать ссылки» стирает информацию, которую уже не вернуть без копии.
Найти созданные заглушки просто: их наименование начинается со слов «Объект не найден». Отберите список справочника по этой строке.
Для файловой базы перед логической проверкой стоит прогнать утилиту chkdbfl.exe из каталога bin платформы. Она проверяет физическую целостность файла 1Cv8.1CD. Если битые ссылки появились после сбоя питания или аварийного завершения, причина может быть именно в повреждении файла.
Объект не найден в списках и формах
Не каждая такая ошибка связана с испорченными данными. Часть случаев — следствие работы интерфейса.
Удаление другим пользователем
Пользователь А держит открытым список документов. Пользователь Б в это время удаляет документ из базы. Если А открывает его из своего списка, платформа не находит запись и сообщает, что объект не найден. Ошибка разовая: обновите список, и строка пропадёт.
Похоже ведёт себя форма, открытая давно: объект в ней уже удалён, а пользователь пытается его записать или перечитать.
Динамические списки с произвольным запросом
В динамических списках с собственным запросом, в отчётах и в отборах сохраняются ссылки. Если сохранённая настройка отбора указывает на удалённый элемент, в отборе появляется <Объект не найден>, а список показывает пустой результат. Решение — сбросить настройки списка или отчёта к стандартным и задать отбор заново.
Сохранённые настройки и значения по умолчанию
Основной склад, организация или ответственный в настройках пользователя тоже хранятся ссылками. Удалили склад — в каждом новом документе подставляется битое значение. Проверьте персональные настройки пользователя и значения по умолчанию.
Как не допустить появления битых ссылок
Большинство случаев предотвращаются настройкой прав и порядка работы:
- 🔒 Уберите у пользователей право на интерактивное удаление. Удалять можно только через пометку и обработку
Удаление помеченных объектов: она проверяет, ссылаются ли на объект другие данные, и не даст удалить используемый. - 📝 Проверьте, что журнал регистрации пишет события удаления и хранится достаточно долго.
- 🔁 Обновляйте доработанные конфигурации через сравнение и объединение, а не загрузкой поверх.
- 🧪 Перед удалением расширения проверьте, нет ли в основных данных ссылок на его объекты.
- 🔗 После настройки или изменения правил обмена проверяйте первую синхронизацию на копии базы.
- 💾 Делайте регулярные резервные копии: только в них можно найти объект, удалённый напрямую.
Частые ошибки при исправлении
- ❌ Сразу запускают «Очищать ссылки» в рабочей базе. Связь документов с контрагентами и номенклатурой теряется, а восстановить её можно только из копии.
- ❌ Создают объект заново с тем же названием. Название совпадает, GUID — нет, ссылки остаются битыми.
- ❌ Заменяют ссылку в одном документе вручную, не проверив остальные. Запрос из раздела выше покажет все документы сразу.
- ❌ Исправляют только приёмник обмена. Если объект удалён в источнике, при следующей синхронизации ошибка вернётся.
Частые вопросы
Можно ли восстановить объект, удалённый напрямую?
Влияют ли битые ссылки на остатки и отчёты?
<Объект не найден>. После замены ссылки документы нужно перепровести.Почему проверка заполнения не ловит битую ссылку?
ЗначениеЗаполнено() возвращает Истина, поэтому стандартная проверка заполнения её пропускает.Сколько времени занимает тестирование и исправление?
Нужно ли запускать проверку в клиент-серверной базе?
chkdbfl.exe в клиент-серверной базе не делают — за хранение там отвечает СУБД.