Битые ссылки, удалённые объекты и кэш: откуда в базе 1С берётся «Объект не найден»

· 10 мин

Содержание

Ошибка «Объект не найден» в 1С почти всегда означает одно: в базе есть ссылка на запись, которой физически нет. Документ или справочник ссылается на контрагента, номенклатуру или договор, а сам элемент удалён, не загрузился при обмене или повреждён. Решение — найти битую ссылку, восстановить объект или очистить ссылку. Реже причина в кэше клиента или сервера и в параллельной работе пользователей.

Рецепт ниже общий для платформы 1С:Предприятие 8.3 и не зависит от конфигурации: одинаково работает в Бухгалтерии 3.0, ЗУП 3.1, УТ 11. Различаются только пути к служебным обработкам, их я указываю для БП 3.0.

Как выглядит ошибка и на что она указывает

Сообщение встречается в трёх видах, и каждый подсказывает своё направление поиска.

  • 🔗 В поле формы вместо значения стоит <Объект не найден> (231:a1b2c3d4e5f60718293a4b5c6d7e8f90). Это классическая битая ссылка. Число до двоеточия — внутренний номер типа объекта, после — идентификатор пропавшей записи.
  • 🧾 При проведении или записи появляется окно с текстом вроде Ошибка при вызове метода контекста (Записать): Объект не найден. Значит, код программы попытался прочитать реквизиты объекта по ссылке и не нашёл его.
  • 🌐 При переходе по навигационной ссылке (e1cib/data/...) из письма, задачи или избранного. Объект удалили после того, как ссылку сохранили.

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

Какие объекты чаще всего «пропадают»

Что ссылаетсяНа что ссылаетсяТипичная история
Документы реализации и поступленияКонтрагенты, договоры, номенклатураЭлемент удалили непосредственно, минуя контроль ссылок
Документы, пришедшие по обменуСправочники другой базыДокумент выгрузили, справочник — нет
Регистры сведений и накопленияУдалённые документы-регистраторыСбой при записи или ручная правка таблиц
Настройки отчётов, избранноеЛюбые объектыОбъект удалили после сохранения настройки
Реквизиты составного типаОбъекты удалённых или переименованных видовДоработка конфигурации без переноса данных

Ищем источник в журнале регистрации

Журнал регистрации отвечает на два вопроса: кто и когда удалил объект, и в какой операции возникла ошибка. Начинайте с него, особенно если ошибка появилась недавно.

Где открыть журнал

  • В БП 3.0 и других конфигурациях на БСП: Администрирование → Обслуживание → Журнал регистрации.
  • В Конфигураторе: Администрирование → Журнал регистрации.

Что искать

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

💡 Представление удалённого объекта в журнале — это его наименование на момент удаления. По нему проще всего найти этот же элемент в резервной копии.

Журнал хранит историю ровно столько, сколько разрешено в настройках. Если в Конфигураторе в Администрирование → Настройка журнала регистрации стоит сокращение журнала, старые удаления уже не найти. Тогда остаётся резервная копия.

Поиск битых ссылок и их устранение

Когда известен хотя бы один «сломанный» документ, задача — найти все остальные такие же и решить, что с ними делать. Вариантов три: восстановить объект, создать объект-заглушку с тем же идентификатором или очистить ссылку.

Запрос, который находит битые ссылки

Битую ссылку выдаёт простой признак: при обращении к реквизиту через точку запрос возвращает NULL. У существующего элемента пометка удаления всегда заполнена, у несуществующего — нет. Пример для реализаций и контрагентов, выполняется в консоли запросов:

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

Подставьте свой документ и реквизит. Для табличной части обращайтесь к ней как к таблице: Документ.РеализацияТоваровУслуг.Товары КАК Стр и проверяйте Стр.Номенклатура.ПометкаУдаления ЕСТЬ NULL.

Способ 1. Восстановить объект из резервной копии

Самый чистый путь, если копия свежая и объект в ней есть.

  1. Разверните копию в отдельную базу (никогда поверх рабочей).
  2. Найдите в ней пропавший элемент по наименованию из журнала.
  3. Перенесите его в рабочую базу с сохранением ссылки. Подойдёт обработка выгрузки-загрузки данных в формате XML: она переносит объект с тем же уникальным идентификатором, и все документы «оживают».

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

Способ 2. Создать объект-заглушку с тем же идентификатором

Если копии нет, создайте элемент программно, присвоив ему ссылку пропавшего объекта. Идентификатор берётся из текста <Объект не найден> (231:...), но записан там во внутреннем порядке байтов. Строку из 32 символов нужно переставить в обычный вид GUID:

// Хвост = строка после двоеточия, 32 символа без скобок
Хвост = "a1b2c3d4e5f60718293a4b5c6d7e8f90";
СтрокаГУИД = Сред(Хвост, 25, 8) + "-" + Сред(Хвост, 21, 4) + "-"
    + Сред(Хвост, 17, 4) + "-" + Сред(Хвост, 1, 4) + "-" + Сред(Хвост, 5, 12);

Ссылка = Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаГУИД));
Элемент = Справочники.Контрагенты.СоздатьЭлемент();
Элемент.УстановитьСсылкуНового(Ссылка);
Элемент.Наименование = "Восстановлен: " + СтрокаГУИД;
Элемент.ОбменДанными.Загрузка = Истина;
Элемент.Записать();

Код выполняется на сервере, во внешней обработке или в режиме «Выполнить код». После записи откройте документ с ошибкой: в поле должен появиться «Восстановлен: …». Если поле по-прежнему пустое или с ошибкой, проверьте тип: ссылка может указывать на другой справочник.

Затем заполните заглушку нормальными данными (ИНН, наименование) или замените её на правильный элемент через поиск и замену дублей.

Способ 3. Тестирование и исправление в Конфигураторе

Штатный инструмент платформы для массовой обработки: Конфигуратор → Администрирование → Тестирование и исправление.

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

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

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

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

Кэш и целостность файлов базы

Если битых ссылок запрос не находит, а ошибка воспроизводится, подозревайте кэш. Клиент 1С хранит у себя копию метаданных и части данных. После обновления, восстановления из копии или замены базы с тем же путём этот кэш может указывать на объекты, которых в базе уже нет.

Очистка кэша клиента

  1. Закройте все окна 1С на компьютере пользователя.
  2. Запустите 1С с параметром /ClearCache. Его можно дописать в строку запуска базы: в окне выбора баз Изменить → Дополнительные параметры запуска.
  3. Если не помогло, удалите папки кэша вручную: содержимое %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8, кроме файлов списка баз (ibases.v8i) и подпапок с настройками, если не хотите их терять.

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

Повреждение самой базы

Битые ссылки массово, в разных справочниках, без следов удаления в журнале — признак физического повреждения. Для файловой базы это сбой питания, обрыв сети при работе по общей папке, антивирус, блокирующий файл 1Cv8.1CD. В таком случае логическая проверка бессильна, сначала нужна физическая.

Блокировки и параллельные сеансы

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

  1. Бухгалтер открыл документ и оставил форму на час.
  2. Коллега за это время удалил документ через удаление помеченных или перезаписал его обменом с новой версией.
  3. Бухгалтер жмёт «Записать» — форма держит ссылку на объект, которого больше нет.

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

Как проверить, кто сейчас работает в базе

  • Администрирование → Обслуживание → Активные пользователи в БП 3.0 — список сеансов с компьютерами и временем начала.
  • В Конфигураторе: Администрирование → Активные пользователи.
  • Для серверной базы — консоль администрирования кластера, ветка сеансов нужной информационной базы, или rac session list с указанием кластера и базы.

💡 Удаление помеченных объектов запускайте, когда в базе никто не работает с удаляемыми документами. Встроенная обработка удаления в БСП проверяет ссылки и не даст удалить элемент, на который кто-то ссылается. Битые ссылки появляются, когда объект удаляют непосредственно (через Shift+Del при наличии прав или кодом), минуя эту проверку.

Права на непосредственное удаление

Самый надёжный способ предотвратить новые битые ссылки — забрать у пользователей право интерактивного непосредственного удаления. В типовых конфигурациях на БСП его нет у обычных профилей, но в доработанных базах и у пользователей с полными правами оно остаётся. Пусть удалением занимается один администратор через штатную обработку.

Файловая база и клиент-серверная: в чём разница

Причины ошибки одинаковые, а инструменты диагностики и цена ошибки — разные.

Что проверяемФайловая базаКлиент-серверная база
Физическая целостностьУтилита chdbfl.exe из папки bin платформы, база должна быть закрыта всемиСредства СУБД (проверка базы в SQL Server или PostgreSQL)
Логическая и ссылочнаяТестирование и исправление в КонфигуратореТо же, плюс можно искать битые ссылки запросом без монопольного режима
КэшТолько клиентскийКлиентский и кэш сервера 1С
СеансыАктивные пользователиКонсоль кластера, rac session list

Кэш сервера 1С

В клиент-серверном режиме сервер хранит свой сеансовый кэш в каталоге кластера (папки snccntx* внутри srvinfo\reg_1541). Если ошибка «Объект не найден» появилась у всех пользователей сразу после восстановления базы из копии или после переноса, а битых ссылок нет — очистка этого кэша часто помогает.

  1. Предупредите пользователей: остановка службы обрывает все сеансы на сервере, во всех базах кластера. Делайте это вечером или в выходной.
  2. Остановите службу «Агент сервера 1С:Предприятия 8.3».
  3. Переименуйте папки snccntx* (не удаляйте сразу — так проще откатиться).
  4. Запустите службу и проверьте вход в базу.
  5. Если всё работает, через пару дней удалите переименованные папки.

Остальное содержимое srvinfo не трогайте: там реестр кластера со списком баз и настройками.

Для файловой базы

Утилита chdbfl.exe лежит в каталоге установленной платформы, например C:\Program Files\1cv8\8.3.24.1691\bin\ (номер версии у вас свой). Порядок:

  1. Все пользователи выходят из базы, делаете копию файла 1Cv8.1CD.
  2. Запускаете утилиту, указываете путь к файлу базы.
  3. Сначала проверка без исправления, затем с флажком исправления ошибок.
  4. После — Тестирование и исправление в Конфигураторе со ссылочной проверкой.

Если база лежит в сетевой папке и с ней работают несколько человек, задумайтесь о переходе на клиент-серверный вариант или хотя бы о стабильной локальной сети. Физические повреждения файловой базы — частый источник «необъяснимых» битых ссылок.

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

Профилактика битых ссылок
Выполнено: 0 / 6

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

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

Можно ли просто проигнорировать битую ссылку?
В справочной информации — да, если она не мешает. В проведённых документах — нет: отчёты, сверки и регламентированная отчётность по такому документу будут неполными.
Почему после «Создавать объекты» в справочнике появились элементы без названия?
Это и есть заглушки, созданные платформой на месте пропавших объектов. Их надо открыть, понять по документам, кем они были, и заполнить или заменить на правильные элементы.
Ошибка «Объект не найден» появляется в отчёте, а не в документе. Что делать?
Чаще всего в сохранённой настройке отчёта есть отбор по удалённому элементу. Сбросьте настройки отчёта на стандартные и задайте отбор заново.
Помогает ли обновление платформы?
Нет, если в базе битые ссылки: данные от смены версии не меняются. Обновление помогает, только когда причина в ошибке конкретной сборки платформы, а это редкость.
Можно ли найти битые ссылки в облачной базе 1С:Фреш?
Конфигуратора и Тестирования и исправления там нет. Ищите запросом через внешнюю обработку, если сервис разрешает их запуск, или обращайтесь в поддержку сервиса.