Очистка битых ссылок в 1С: от поиска до исправления
Содержание
Битая ссылка — это ссылка на объект, которого в базе уже нет. В реквизитах документов, в списках и отчётах она показывается как <Объект не найден> (c3f1...) с GUID пропавшего объекта в скобках. Чтобы очистить битую ссылку в 1С штатно, идут в Конфигуратор: Администрирование → Тестирование и исправление, включают Проверка ссылочной целостности и выбирают действие Очищать ссылки. Перед запуском обязательны архивная копия и монопольный доступ к базе.
Это универсальный способ для всей базы сразу. Если битая ссылка одна-две и вы знаете, где она, быстрее исправить вручную в самом документе. Ниже — оба пути, автоматизация через код, таблица по типам битых ссылок и профилактика, чтобы они не появлялись снова.
Откуда берётся <Объект не найден> и как его распознать
Ссылка в 1С физически хранится как идентификатор (GUID) объекта в другой таблице. Пока объект на месте, платформа подставляет его представление — наименование номенклатуры, имя контрагента. Как только объект исчезает, а ссылка на него остаётся, вместо представления выводится <Объект не найден> (GUID).
Главная причина — объект удалили в обход контроля ссылок. Варианты:
- 🗑️ объект удалён напрямую в Конфигураторе или кодом (
Удалить()), а не через пометку на удаление; - 🔄 сбой обмена: в РИБ или синхронизации пришёл документ со ссылкой на объект, который на этом узле ещё не выгрузился;
- 🧩 оборванное
Удаление помеченных объектов— процесс прервали, часть объектов удалилась, ссылки остались; - 🛠️ прямое вмешательство в таблицы СУБД в обход платформы;
- 📦 некорректная загрузка или свёртка базы.
Распознать битую ссылку просто: в поле документа или в колонке списка вместо значения стоит <Объект не найден>. Иногда она не видна на форме, но всплывает ошибкой при проведении, при построении отчёта или при обмене.
Не путайте битую ссылку с пустой. Пустая ссылка — это незаполненное поле (реквизит без значения), это нормально. Битая — поле заполнено, но указывает в никуда.
Как найти все битые ссылки в базе
Отдельной пользовательской кнопки «показать все битые ссылки» в типовых конфигурациях нет. Находят их двумя путями.
Через тестирование и исправление. В Конфигураторе проверка ссылочной целостности сама обходит всю базу и в своём логе перечисляет объекты с битыми ссылками. Это самый полный способ — он видит ссылки и в реквизитах, и в табличных частях, и в регистрах.
Через поиск по ссылкам. Если у вас на руках GUID из <Объект не найден>, можно построить по нему ссылку и штатной функцией найти все объекты, которые её держат (см. раздел про автоматизацию). Способ точечный: подходит, когда битых объектов немного.
Для файловой базы не путайте проверку ссылочной целостности с проверкой физической целостности файла (chdbfl.exe). Chdbfl чинит повреждённый файл 1Cv8.1CD, но про битые ссылки ничего не знает — это логический уровень, а не физический.
Ещё один способ нащупать источник — Удаление помеченных объектов в пользовательском режиме. Если механизм отказывается удалять объект из-за ссылок на него, вы видите обратную картину: живые ссылки на существующий объект. А вот оборванная ранее операция удаления как раз и оставляет битые ссылки, поэтому доводите удаление до конца, а не прерывайте на полпути.
Очистка через «Тестирование и исправление»: пошагово
Это основной способ почистить всю базу разом. Работает только из Конфигуратора.
Тестирование и исправление требует монопольного доступа: все пользователи должны выйти из базы, фоновые и регламентные задания остановятся, активные сеансы оборвутся. На клиент-серверной базе сеансы завершают через консоль кластера. Планируйте запуск на нерабочее время.
Перед запуском сделайте архивную копию базы . Действие «Очищать ссылки» необратимо.
Порядок действий:
- Откройте базу в режиме Конфигуратор.
- Меню
Администрирование → Тестирование и исправление. - Снимите лишние галочки и оставьте
Проверка логической целостностииПроверка ссылочной целостности. Остальные проверки (реиндексация, пересчёт итогов) к битым ссылкам отношения не имеют — включать их необязательно. - В группе
Проверка ссылочной целостностивыберите, что делать при наличии ссылок на несуществующие объекты. Доступны три варианта:- Очищать ссылки — реквизиты с битой ссылкой очищаются (становятся пустыми). Это и есть «очистка битой ссылки».
- Создавать объекты — платформа создаёт объект-пустышку с тем же GUID. В справочниках появятся пустые элементы без наименования. Для очистки это не то, что нужно.
- Не изменять — только показать проблемы в логе, ничего не менять. Удобно для первичной диагностики.
- Там же задайте поведение
При частичной потере данных объектов— для чистки битых ссылок обычно оставляютНе изменять. - Нажмите
Выполнить. По окончании изучите лог: платформа перечислит, что нашла и что исправила.
После очистки ссылок перепроведите документы, у которых были битые реквизиты. Очистка затронула реквизит, но движения в регистрах перестроятся только при перепроведении.
На клиент-серверной базе Конфигуратор подключается к базе так же, как клиент, — отдельный chdbfl.exe здесь не применяют, физической целостностью на SQL-базе занимается сама СУБД. А вот монопольный доступ нужен в любом случае: и для файловой, и для серверной базы тестирование и исправление работает только когда в базе никого нет.
Логику выбора действия держите в голове так: сначала запустите в режиме Не изменять и посмотрите масштаб, потом — Очищать ссылки с бэкапом наготове.
Ручная очистка в документе или справочнике
Когда битая ссылка точечная и вы знаете, где она, ручной путь быстрее и безопаснее массового тестирования — он не трогает остальную базу.
- Откройте документ или элемент справочника, где стоит
<Объект не найден>. - Найдите реквизит с битой ссылкой — в шапке, в табличной части или в дополнительных реквизитах.
- Решите, что ставить вместо него:
- если верный объект известен — подберите его из справочника;
- если объект больше не нужен — очистите поле (кнопка очистки в поле ввода или
Del).
- Запишите и перепроведите документ.
Если битая ссылка сидит в движениях регистра, а в самом документе на форме её не видно, причина — старое движение. Найдите документ-регистратор (через Ещё → Движения документа или отчёт по регистру) и перепроведите его: движения сформируются заново уже без битой ссылки.
Ссылка может прятаться в настройке: значение по умолчанию, элемент константы, отбор в отчёте, строка регистра сведений. Если <Объект не найден> виден в настройках, а не в документе, откройте соответствующую форму настройки и переустановите значение.
Автоматизированная очистка: пакетный запуск и поиск по ссылкам
Когда битых ссылок много или их нужно чистить регулярно, помогает автоматизация.
Поиск по GUID. Если из <Объект не найден> (GUID) вы знаете идентификатор и тип пропавшего объекта, постройте по нему ссылку и найдите все места, где она используется, штатной функцией НайтиПоСсылкам:
// GUID берём из скобок <Объект не найден> (...)
УИД = Новый УникальныйИдентификатор("a1b2c3d4-e5f6-7890-abcd-ef1234567890");
БитаяСсылка = Справочники.Номенклатура.ПолучитьСсылку(УИД);
Массив = Новый Массив;
Массив.Добавить(БитаяСсылка);
Результат = НайтиПоСсылкам(Массив);
Для Каждого Стр Из Результат Цикл
Сообщить(Стр.Данные); // объект, который держит битую ссылку
КонецЦикла;
Функция вернёт таблицу с объектами-носителями ссылки — их останется открыть и очистить или переназначить. Тип (Справочники.Номенклатура) должен совпадать с типом пропавшего объекта; если тип неизвестен, поиск по одному GUID не сработает.
Универсальная обработка. Для массовой замены есть типовая обработка Поиск и замена значений: она находит все ссылки на выбранный объект по всей базе и меняет их на другой или очищает. Это удобно, когда вместо удалённого объекта нужно подставить правильный.
Пакетный режим Конфигуратора. Тестирование и исправление можно запускать без интерфейса — ключом запуска Конфигуратора /IBCheckAndRepair. Это пригодится для регламентного обслуживания по расписанию. Точный набор флагов (какие проверки включить и что делать со ссылками) смотрите в справке по параметрам запуска — не задавайте наугад, чтобы не включить лишнюю проверку на рабочей базе.
Любой пакетный запуск тестирования — это те же монопольный доступ и необратимые изменения. Ставьте в расписание только после ручной обкатки и всегда с предшествующим бэкапом.
Типы битых ссылок и способы очистки
Путь зависит от того, где именно осела ссылка на удалённый объект.
| Где битая ссылка | Как выглядит | Как чистить |
|---|---|---|
| Реквизит шапки документа | <Объект не найден> в поле на форме | Очистить/переназначить поле, перепровести |
| Строка табличной части | <Объект не найден> в колонке таблицы | Исправить значение в строке, перепровести |
| Движение регистра | Строка <Объект не найден> в отчёте | Перепровести документ-регистратор |
| Элемент справочника (реквизит) | Пустое представление в карточке | Открыть элемент, очистить реквизит, записать |
| Константа / регистр сведений / настройка | <Объект не найден> в форме настройки | Переустановить значение в настройке |
| Массово по всей базе | Много объектов сразу | Тестирование и исправление → Очищать ссылки |
Общий принцип: реквизит очищается в самом объекте, а движения регистров приходят в порядок только перепроведением регистратора.
Как не плодить битые ссылки
Чистить следствие бессмысленно, пока не убрана причина. Несколько правил, которые закрывают почти все случаи:
- ✅ Удаляйте объекты только через пометку на удаление и штатное
Удаление помеченных объектов(Администрирование → Обслуживание → Удаление помеченных объектов). Этот механизм перед удалением проверяет ссылки и не даст удалить объект, на который кто-то ссылается. - 🚫 Не удаляйте объекты напрямую в Конфигураторе и кодом
Удалить()на рабочей базе — это главный поставщик битых ссылок. - 🔄 Следите за порядком обмена в РИБ: нарушенная последовательность выгрузки/загрузки регулярно порождает
<Объект не найден>на подчинённых узлах. - 💾 Держите регулярные архивные копии — откатиться быстрее, чем вычищать последствия.
- 🧰 Не правьте таблицы СУБД в обход платформы.
- 🗓️ На больших базах включите проверку ссылочной целостности в регламент обслуживания (раз в период, в нерабочее время).
Частые ошибки при очистке
- Запуск без архивной копии. Действие
Очищать ссылкинеобратимо. Если под очистку попало лишнее, вернуть данные можно только из бэкапа. - Выбрали «Создавать объекты» вместо «Очищать ссылки». Вместо чистки в справочниках появятся пустые элементы-пустышки с GUID вместо наименования — потом их придётся удалять отдельно.
- Очистили реквизит, но не перепровели документ. Битая ссылка в движениях регистра осталась, в отчётах по-прежнему вылезает
<Объект не найден>. - Чистят симптом при сбойном обмене. Пока не исправлен порядок выгрузки в РИБ, битые ссылки будут возвращаться после каждой синхронизации.
- Путают с физическим повреждением. Гоняют
chdbfl.exe, который к битым ссылкам отношения не имеет, и удивляются, что<Объект не найден>остался.
Частые вопросы
Очистка ссылок удалит мои документы?
Очищать ссылки затрагивает только реквизиты, указывающие на несуществующие объекты, — они становятся пустыми. Сами документы остаются. Но действие необратимо, поэтому бэкап обязателен, а документы после очистки нужно перепровести.Можно почистить битую ссылку без Конфигуратора?
Поиск и замена значений в пользовательском режиме. Массовая проверка ссылочной целостности по всей базе выполняется только из Конфигуратора.Сколько идёт проверка ссылочной целостности?
После очистки `<Объект не найден>` появился снова. Почему?
Как узнать, в каких документах сидит конкретная битая ссылка?
НайтиПоСсылкам либо используйте обработку Поиск и замена значений. Полный список носителей выдаст и лог тестирования ссылочной целостности.