Очистка битых ссылок в 1С: от поиска до исправления

· 9 мин

Содержание

Битая ссылка — это ссылка на объект, которого в базе уже нет. В реквизитах документов, в списках и отчётах она показывается как <Объект не найден> (c3f1...) с GUID пропавшего объекта в скобках. Чтобы очистить битую ссылку в 1С штатно, идут в Конфигуратор: Администрирование → Тестирование и исправление, включают Проверка ссылочной целостности и выбирают действие Очищать ссылки. Перед запуском обязательны архивная копия и монопольный доступ к базе.

Это универсальный способ для всей базы сразу. Если битая ссылка одна-две и вы знаете, где она, быстрее исправить вручную в самом документе. Ниже — оба пути, автоматизация через код, таблица по типам битых ссылок и профилактика, чтобы они не появлялись снова.

Откуда берётся <Объект не найден> и как его распознать

Ссылка в 1С физически хранится как идентификатор (GUID) объекта в другой таблице. Пока объект на месте, платформа подставляет его представление — наименование номенклатуры, имя контрагента. Как только объект исчезает, а ссылка на него остаётся, вместо представления выводится <Объект не найден> (GUID).

Главная причина — объект удалили в обход контроля ссылок. Варианты:

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

Распознать битую ссылку просто: в поле документа или в колонке списка вместо значения стоит <Объект не найден>. Иногда она не видна на форме, но всплывает ошибкой при проведении, при построении отчёта или при обмене.

Не путайте битую ссылку с пустой. Пустая ссылка — это незаполненное поле (реквизит без значения), это нормально. Битая — поле заполнено, но указывает в никуда.

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

Как найти все битые ссылки в базе

Отдельной пользовательской кнопки «показать все битые ссылки» в типовых конфигурациях нет. Находят их двумя путями.

Через тестирование и исправление. В Конфигураторе проверка ссылочной целостности сама обходит всю базу и в своём логе перечисляет объекты с битыми ссылками. Это самый полный способ — он видит ссылки и в реквизитах, и в табличных частях, и в регистрах.

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

Для файловой базы не путайте проверку ссылочной целостности с проверкой физической целостности файла (chdbfl.exe). Chdbfl чинит повреждённый файл 1Cv8.1CD, но про битые ссылки ничего не знает — это логический уровень, а не физический.

Ещё один способ нащупать источник — Удаление помеченных объектов в пользовательском режиме. Если механизм отказывается удалять объект из-за ссылок на него, вы видите обратную картину: живые ссылки на существующий объект. А вот оборванная ранее операция удаления как раз и оставляет битые ссылки, поэтому доводите удаление до конца, а не прерывайте на полпути.

Очистка через «Тестирование и исправление»: пошагово

Это основной способ почистить всю базу разом. Работает только из Конфигуратора.

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

Перед запуском сделайте архивную копию базы . Действие «Очищать ссылки» необратимо.

Перед запуском тестирования
Выполнено: 0 / 4

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

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

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

На клиент-серверной базе Конфигуратор подключается к базе так же, как клиент, — отдельный chdbfl.exe здесь не применяют, физической целостностью на SQL-базе занимается сама СУБД. А вот монопольный доступ нужен в любом случае: и для файловой, и для серверной базы тестирование и исправление работает только когда в базе никого нет.

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

Ручная очистка в документе или справочнике

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

  1. Откройте документ или элемент справочника, где стоит <Объект не найден>.
  2. Найдите реквизит с битой ссылкой — в шапке, в табличной части или в дополнительных реквизитах.
  3. Решите, что ставить вместо него:
    • если верный объект известен — подберите его из справочника;
    • если объект больше не нужен — очистите поле (кнопка очистки в поле ввода или Del).
  4. Запишите и перепроведите документ.

Если битая ссылка сидит в движениях регистра, а в самом документе на форме её не видно, причина — старое движение. Найдите документ-регистратор (через Ещё → Движения документа или отчёт по регистру) и перепроведите его: движения сформируются заново уже без битой ссылки.

Ссылка может прятаться в настройке: значение по умолчанию, элемент константы, отбор в отчёте, строка регистра сведений. Если <Объект не найден> виден в настройках, а не в документе, откройте соответствующую форму настройки и переустановите значение.

Автоматизированная очистка: пакетный запуск и поиск по ссылкам

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

Поиск по GUID. Если из <Объект не найден> (GUID) вы знаете идентификатор и тип пропавшего объекта, постройте по нему ссылку и найдите все места, где она используется, штатной функцией НайтиПоСсылкам:

// GUID берём из скобок <Объект не найден> (...)
УИД = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");
БитаяСсылка = Справочники.Номенклатура.ПолучитьСсылку(УИД);

Массив = Новый Массив;
Массив.Добавить(БитаяСсылка);

Результат = НайтиПоСсылкам(Массив);
Для Каждого Стр Из Результат Цикл
    Сообщить(Стр.Данные); // объект, который держит битую ссылку
КонецЦикла;

Функция вернёт таблицу с объектами-носителями ссылки — их останется открыть и очистить или переназначить. Тип (Справочники.Номенклатура) должен совпадать с типом пропавшего объекта; если тип неизвестен, поиск по одному GUID не сработает.

Универсальная обработка. Для массовой замены есть типовая обработка Поиск и замена значений: она находит все ссылки на выбранный объект по всей базе и меняет их на другой или очищает. Это удобно, когда вместо удалённого объекта нужно подставить правильный.

Пакетный режим Конфигуратора. Тестирование и исправление можно запускать без интерфейса — ключом запуска Конфигуратора /IBCheckAndRepair. Это пригодится для регламентного обслуживания по расписанию. Точный набор флагов (какие проверки включить и что делать со ссылками) смотрите в справке по параметрам запуска — не задавайте наугад, чтобы не включить лишнюю проверку на рабочей базе.

Любой пакетный запуск тестирования — это те же монопольный доступ и необратимые изменения. Ставьте в расписание только после ручной обкатки и всегда с предшествующим бэкапом.

Типы битых ссылок и способы очистки

Путь зависит от того, где именно осела ссылка на удалённый объект.

Где битая ссылкаКак выглядитКак чистить
Реквизит шапки документа<Объект не найден> в поле на формеОчистить/переназначить поле, перепровести
Строка табличной части<Объект не найден> в колонке таблицыИсправить значение в строке, перепровести
Движение регистраСтрока <Объект не найден> в отчётеПерепровести документ-регистратор
Элемент справочника (реквизит)Пустое представление в карточкеОткрыть элемент, очистить реквизит, записать
Константа / регистр сведений / настройка<Объект не найден> в форме настройкиПереустановить значение в настройке
Массово по всей базеМного объектов сразуТестирование и исправление → Очищать ссылки

Общий принцип: реквизит очищается в самом объекте, а движения регистров приходят в порядок только перепроведением регистратора.

Как не плодить битые ссылки

Чистить следствие бессмысленно, пока не убрана причина. Несколько правил, которые закрывают почти все случаи:

  • ✅ Удаляйте объекты только через пометку на удаление и штатное Удаление помеченных объектов (Администрирование → Обслуживание → Удаление помеченных объектов). Этот механизм перед удалением проверяет ссылки и не даст удалить объект, на который кто-то ссылается.
  • 🚫 Не удаляйте объекты напрямую в Конфигураторе и кодом Удалить() на рабочей базе — это главный поставщик битых ссылок.
  • 🔄 Следите за порядком обмена в РИБ: нарушенная последовательность выгрузки/загрузки регулярно порождает <Объект не найден> на подчинённых узлах.
  • 💾 Держите регулярные архивные копии — откатиться быстрее, чем вычищать последствия.
  • 🧰 Не правьте таблицы СУБД в обход платформы.
  • 🗓️ На больших базах включите проверку ссылочной целостности в регламент обслуживания (раз в период, в нерабочее время).

Частые ошибки при очистке

  • Запуск без архивной копии. Действие Очищать ссылки необратимо. Если под очистку попало лишнее, вернуть данные можно только из бэкапа.
  • Выбрали «Создавать объекты» вместо «Очищать ссылки». Вместо чистки в справочниках появятся пустые элементы-пустышки с GUID вместо наименования — потом их придётся удалять отдельно.
  • Очистили реквизит, но не перепровели документ. Битая ссылка в движениях регистра осталась, в отчётах по-прежнему вылезает <Объект не найден>.
  • Чистят симптом при сбойном обмене. Пока не исправлен порядок выгрузки в РИБ, битые ссылки будут возвращаться после каждой синхронизации.
  • Путают с физическим повреждением. Гоняют chdbfl.exe, который к битым ссылкам отношения не имеет, и удивляются, что <Объект не найден> остался.

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

Очистка ссылок удалит мои документы?
Нет. Очищать ссылки затрагивает только реквизиты, указывающие на несуществующие объекты, — они становятся пустыми. Сами документы остаются. Но действие необратимо, поэтому бэкап обязателен, а документы после очистки нужно перепровести.
Можно почистить битую ссылку без Конфигуратора?
Точечно — да, вручную в документе или через обработку Поиск и замена значений в пользовательском режиме. Массовая проверка ссылочной целостности по всей базе выполняется только из Конфигуратора.
Сколько идёт проверка ссылочной целостности?
Зависит от объёма базы: от нескольких минут на маленькой до нескольких часов на крупной. Всё это время нужен монопольный доступ, поэтому запускают в нерабочее время.
После очистки `<Объект не найден>` появился снова. Почему?
Либо не устранён источник (сбойный обмен, прямое удаление объектов), либо вы очистили реквизит, но не перепровели документ — тогда битая ссылка осталась в движениях регистра.
Как узнать, в каких документах сидит конкретная битая ссылка?
По GUID из скобок постройте ссылку и выполните поиск функцией НайтиПоСсылкам либо используйте обработку Поиск и замена значений. Полный список носителей выдаст и лог тестирования ссылочной целостности.