К статье
Практический материал

Администрирование · 11 мин

Как удалить пустые ссылки в 1С

Как найти и удалить пустые (битые) ссылки в 1С: типовая обработка, поиск ссылок на объект, монопольный режим, типичные ошибки и проверка результата.

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

Чаще всего пустые ссылки появляются после прямого удаления объектов обработкой, неудачного обмена данными, восстановления базы из старой копии или ручного вмешательства в таблицы SQL. Штатный механизм 1С при удалении объекта через «Удаление помеченных объектов» контролирует ссылки и не даёт удалить объект, пока на него кто-то ссылается. Но если контроль обошли — ссылки остаются.

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

Что такое пустая ссылка и как её распознать

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

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

Признаки наличия битых ссылок в базе: отчёты выдают строки с «Объект не найден», обмены данными завершаются с ошибками нарушения ссылочной целостности, при проведении документов возникают ошибки обращения к объекту, а тестирование и исправление информационной базы сообщает о потерянных ссылках.

Подготовка: резервная копия и монопольный режим

Любая операция массового удаления в 1С необратима. Перед очисткой пустых ссылок создайте резервную копию базы: для файловой базы достаточно скопировать файл 1Cv8.1CD, для клиент-серверной — сделайте выгрузку через конфигуратор («Администрирование» → «Выгрузить информационную базу») или средствами СУБД.

Массовые операции удаления выполняйте в монопольном режиме, чтобы другие пользователи не записывали данные в момент обработки. В файловой базе попросите всех выйти и запустите сеанс с монопольным доступом; в клиент-серверной установите блокировку сеансов через консоль кластера или через «Администрирование» → «Блокировка работы пользователей» в типовых конфигурациях.

Способ 1. Удаление помеченных объектов с контролем ссылок

Штатный и самый безопасный путь — типовая обработка «Удаление помеченных объектов». Она находится в разделе «Администрирование» → «Обслуживание» (в некоторых конфигурациях — «НСИ и администрирование» → «Поддержка и обслуживание»). Обработка удаляет только те объекты, на которые нет ссылок, поэтому она не создаёт новых битых ссылок.

Порядок работы: сначала пометьте ненужные объекты на удаление штатной командой, затем откройте обработку, выберите режим «Автоматическое удаление всех помеченных объектов» или «Выборочное удаление» и запустите. Если объект удалить нельзя, обработка покажет список мест использования — по этим местам можно перейти и заменить или очистить ссылку.

Порядок действий
  1. 1
    Сделайте резервную копию базы и установите монопольный режим
  2. 2
    Пометьте ненужные объекты на удаление штатной командой
  3. 3
    Откройте «Администрирование» → «Обслуживание» → «Удаление помеченных объектов»
  4. 4
    Запустите удаление и изучите список объектов, которые удалить не удалось
  5. 5
    По каждому месту использования замените или очистите ссылку, затем повторите удаление
  6. 6
    Проверьте отчёты и обмены на отсутствие ошибок

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

Способ 2. Поиск и удаление битых ссылок обработкой

Для поиска уже существующих битых ссылок используются специализированные обработки. В типовых конфигурациях на БСП есть обработка «Поиск и удаление дублей», но она решает другую задачу. Для именно битых ссылок применяют внешние обработки «Поиск битых ссылок» (доступны на официальном портале 1С и в составе инструментов разработчика) либо пишут простой код.

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

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

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

Способ 3. Тестирование и исправление информационной базы

В конфигураторе есть штатный инструмент «Администрирование» → «Тестирование и исправление». Среди проверок есть пункт «Проверка ссылочной целостности информационной базы». При включённом режиме исправления платформа обнаруживает объекты с битыми ссылками и обрабатывает их выбранным способом.

Доступны варианты обработки потерянных ссылок: создавать объекты (платформа создаст объект-заглушку с нужным GUID), очищать ссылки или не изменять. Вариант «создавать объекты» полезен, когда важно сохранить аналитику в отчётах, — появится элемент с пустым наименованием, который потом можно заполнить или заменить. Вариант «очищать ссылки» быстрее, но теряет информацию о том, что в реквизите было значение.

Сравнение вариантов

Удаление помеченных объектов

Самый безопасный штатный способ; не удаляет объекты, на которые есть ссылки. Не подходит для уже существующих битых ссылок.

Тестирование и исправление

Находит и обрабатывает битые ссылки по всей базе. Требует монопольного доступа и может занять много времени на больших базах.

Внешние обработки и код

Гибкий поиск по конкретным объектам и реквизитам с выборочной очисткой. Требует аккуратности и понимания структуры данных.

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

Очистка битых ссылок в регистрах сведений и накопления

Отдельная ситуация — битые ссылки в измерениях и ресурсах регистров. В регистрах сведений, подчинённых регистратору, записи с битыми ссылками на регистратор часто являются «сиротами»: документ-регистратор удалён, а движения остались. Такие записи удаляют запросом: выбираются записи, у которых регистратор не существует, и удаляются набором записей.

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

Типичные ошибки
01
Удаление объектов обработкой «прямого удаления» без контроля ссылок — создаёт новые битые ссылки по всей базе
02
Очистка битой ссылки в обязательном реквизите документа — документ перестаёт проводиться, отчёты искажаются
03
Запуск тестирования и исправления без резервной копии — исправление необратимо, откатить можно только из копии
04
Очистка ссылок в одном узле обмена без синхронизации — битые ссылки появляются в других узлах
05
Удаление «сирот» в регистрах без анализа — можно потерять данные, которые ещё нужны для отчётности

Проверка результата и профилактика

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

Чтобы битые ссылки не появлялись снова, запретите пользователям прямое удаление объектов: в типовых конфигурациях это регулируется правами доступа (роль «Интерактивное удаление» должна быть снята у рядовых пользователей). Все удаления должны идти только через пометку и штатную обработку с контролем ссылок.

Контрольные точки

Как проверить результат

Отчёты по проблемным разделам
Норма

Нет строк «Объект не найден»

Тревожный признак

Строки с битыми ссылками остаются

Проверка ссылочной целостности
Норма

Проверка завершается без ошибок

Тревожный признак

Сообщения о потерянных ссылках

Обмен данными
Норма

Обмен завершается успешно

Тревожный признак

Ошибки нарушения ссылочной целостности

Проведение документов
Норма

Документы проводятся без ошибок

Тревожный признак

Ошибки обращения к объекту

Итог

Что важно запомнить

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

Часто задаваемые вопросы

Чем битая ссылка отличается от незаполненного реквизита?

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

Можно ли удалить пустые ссылки без конфигуратора?

Да. В типовых конфигурациях большинство задач решается из пользовательского режима: обработка «Удаление помеченных объектов» и внешние обработки поиска битых ссылок работают в режиме «Предприятие». Конфигуратор нужен только для тестирования и исправления или для написания собственного кода.

Что выбрать в тестировании и исправлении: очищать ссылки или создавать объекты?

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

Почему после удаления битых ссылок они появились снова?

Чаще всего причина в обмене данными: объект удалили в одном узле, а в другом на него остались ссылки, которые вернулись при синхронизации. Также проверьте, не использует ли кто-то обработки прямого удаления без контроля ссылок. Устраните источник, а затем повторите очистку во всех узлах обмена.

Опасно ли удалять записи регистров с битыми ссылками?

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

Как запретить пользователям создавать битые ссылки?

Снимите у пользователей право интерактивного удаления объектов, оставив только установку пометки удаления. Все фактические удаления пусть выполняет администратор через «Удаление помеченных объектов» с контролем ссылок. Дополнительно настройте регламентное задание автоматического удаления помеченных объектов в нерабочее время.