Администрирование · 11 мин
Как удалить пустые ссылки в 1С
Как найти и удалить пустые (битые) ссылки в 1С: типовая обработка, поиск ссылок на объект, монопольный режим, типичные ошибки и проверка результата.
Пустые ссылки в 1С — это записи в документах, регистрах и справочниках, которые указывают на объекты, уже удалённые из базы. В отчётах они выглядят как строки вида «Объект не найден» или как незаполненные поля, хотя формально значение в реквизите есть. Такие «битые» ссылки ломают отчёты, мешают обменам данными и замедляют выборки.
Чаще всего пустые ссылки появляются после прямого удаления объектов обработкой, неудачного обмена данными, восстановления базы из старой копии или ручного вмешательства в таблицы SQL. Штатный механизм 1С при удалении объекта через «Удаление помеченных объектов» контролирует ссылки и не даёт удалить объект, пока на него кто-то ссылается. Но если контроль обошли — ссылки остаются.
Удалить пустые ссылки можно несколькими способами: штатной обработкой «Поиск и удаление дублей», типовой обработкой очистки, типовой процедурой тестирования и исправления, а также программно через встроенный язык. Выбор зависит от объёма базы, конфигурации и того, где именно обнаружены битые ссылки.
Что такое пустая ссылка и как её распознать
Пустая ссылка в терминологии 1С — это ссылка на несуществующий объект. Физически в реквизите хранится уникальный идентификатор (GUID) объекта, но сам объект в таблице отсутствует. При обращении к такой ссылке платформа возвращает «битую» ссылку, а в пользовательском интерфейсе вы видите надпись «<Объект не найден> (длинный код)».
Важно не путать битую ссылку с незаполненным реквизитом. Незаполненный реквизит — это просто пустое значение, которое очищается обычным редактированием. Битая ссылка выглядит заполненной, но при открытии объекта выдаёт ошибку. Проверить это просто: попробуйте открыть значение в поле — если появляется сообщение об ошибке или пустая форма, значит ссылка битая.
Признаки наличия битых ссылок в базе: отчёты выдают строки с «Объект не найден», обмены данными завершаются с ошибками нарушения ссылочной целостности, при проведении документов возникают ошибки обращения к объекту, а тестирование и исправление информационной базы сообщает о потерянных ссылках.
Подготовка: резервная копия и монопольный режим
Любая операция массового удаления в 1С необратима. Перед очисткой пустых ссылок создайте резервную копию базы: для файловой базы достаточно скопировать файл 1Cv8.1CD, для клиент-серверной — сделайте выгрузку через конфигуратор («Администрирование» → «Выгрузить информационную базу») или средствами СУБД.
Массовые операции удаления выполняйте в монопольном режиме, чтобы другие пользователи не записывали данные в момент обработки. В файловой базе попросите всех выйти и запустите сеанс с монопольным доступом; в клиент-серверной установите блокировку сеансов через консоль кластера или через «Администрирование» → «Блокировка работы пользователей» в типовых конфигурациях.
Способ 1. Удаление помеченных объектов с контролем ссылок
Штатный и самый безопасный путь — типовая обработка «Удаление помеченных объектов». Она находится в разделе «Администрирование» → «Обслуживание» (в некоторых конфигурациях — «НСИ и администрирование» → «Поддержка и обслуживание»). Обработка удаляет только те объекты, на которые нет ссылок, поэтому она не создаёт новых битых ссылок.
Порядок работы: сначала пометьте ненужные объекты на удаление штатной командой, затем откройте обработку, выберите режим «Автоматическое удаление всех помеченных объектов» или «Выборочное удаление» и запустите. Если объект удалить нельзя, обработка покажет список мест использования — по этим местам можно перейти и заменить или очистить ссылку.
- 1Сделайте резервную копию базы и установите монопольный режим
- 2Пометьте ненужные объекты на удаление штатной командой
- 3Откройте «Администрирование» → «Обслуживание» → «Удаление помеченных объектов»
- 4Запустите удаление и изучите список объектов, которые удалить не удалось
- 5По каждому месту использования замените или очистите ссылку, затем повторите удаление
- 6Проверьте отчёты и обмены на отсутствие ошибок
Если помеченных объектов много, используйте регламентное задание «Удаление помеченных объектов» — в типовых конфигурациях оно может выполняться автоматически по расписанию в нерабочее время.
Способ 2. Поиск и удаление битых ссылок обработкой
Для поиска уже существующих битых ссылок используются специализированные обработки. В типовых конфигурациях на БСП есть обработка «Поиск и удаление дублей», но она решает другую задачу. Для именно битых ссылок применяют внешние обработки «Поиск битых ссылок» (доступны на официальном портале 1С и в составе инструментов разработчика) либо пишут простой код.
Логика поиска проста: обходятся все реквизиты ссылочного типа у всех объектов метаданных, и для каждого значения проверяется, существует ли объект по данной ссылке. Программно это делается через метод ПолучитьОбъект() или через запрос с соединением по ссылке — если соединение вернуло NULL, ссылка битая.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Док.Ссылка КАК Документ,
| Док.Контрагент КАК Контрагент
|ИЗ Документ.РеализацияТоваровУслуг КАК Док
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Спр
| ПО Док.Контрагент = Спр.Ссылка
|ГДЕ Док.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| И Спр.Ссылка ЕСТЬ NULL";
Результат = Запрос.Выполнить().Выгрузить();Найденные битые ссылки можно либо очистить (присвоить пустую ссылку соответствующего типа), либо заменить на корректный объект, если известно, что там должно быть. Очистка безопаснее, но в документах с обязательными реквизитами это может нарушить проведение — тогда нужна замена значения.
Способ 3. Тестирование и исправление информационной базы
В конфигураторе есть штатный инструмент «Администрирование» → «Тестирование и исправление». Среди проверок есть пункт «Проверка ссылочной целостности информационной базы». При включённом режиме исправления платформа обнаруживает объекты с битыми ссылками и обрабатывает их выбранным способом.
Доступны варианты обработки потерянных ссылок: создавать объекты (платформа создаст объект-заглушку с нужным GUID), очищать ссылки или не изменять. Вариант «создавать объекты» полезен, когда важно сохранить аналитику в отчётах, — появится элемент с пустым наименованием, который потом можно заполнить или заменить. Вариант «очищать ссылки» быстрее, но теряет информацию о том, что в реквизите было значение.
Сравнение вариантов
Самый безопасный штатный способ; не удаляет объекты, на которые есть ссылки. Не подходит для уже существующих битых ссылок.
Находит и обрабатывает битые ссылки по всей базе. Требует монопольного доступа и может занять много времени на больших базах.
Гибкий поиск по конкретным объектам и реквизитам с выборочной очисткой. Требует аккуратности и понимания структуры данных.
Учтите ограничение: тестирование и исправление работает только в монопольном режиме и на больших базах может идти часами. Запускайте его в нерабочее время и обязательно после резервного копирования, так как исправление необратимо.
Очистка битых ссылок в регистрах сведений и накопления
Отдельная ситуация — битые ссылки в измерениях и ресурсах регистров. В регистрах сведений, подчинённых регистратору, записи с битыми ссылками на регистратор часто являются «сиротами»: документ-регистратор удалён, а движения остались. Такие записи удаляют запросом: выбираются записи, у которых регистратор не существует, и удаляются набором записей.
В независимых регистрах сведений битые ссылки в измерениях чистят аналогично — через запрос с левым соединением и последующим удалением найденных записей. Перед удалением убедитесь, что записи действительно не нужны: иногда проще заменить измерение на корректное значение, чем терять данные.
Проверка результата и профилактика
После очистки проверьте результат: сформируйте типовые отчёты, в которых раньше встречались строки «Объект не найден», запустите обмен данными, если он настроен, и повторно выполните проверку ссылочной целостности. Если ошибок больше нет — задача решена.
Чтобы битые ссылки не появлялись снова, запретите пользователям прямое удаление объектов: в типовых конфигурациях это регулируется правами доступа (роль «Интерактивное удаление» должна быть снята у рядовых пользователей). Все удаления должны идти только через пометку и штатную обработку с контролем ссылок.
Как проверить результат
Нет строк «Объект не найден»
Строки с битыми ссылками остаются
Проверка завершается без ошибок
Сообщения о потерянных ссылках
Обмен завершается успешно
Ошибки нарушения ссылочной целостности
Документы проводятся без ошибок
Ошибки обращения к объекту
Что важно запомнить
Пустые ссылки удаляют через штатное «Удаление помеченных объектов», обработки поиска битых ссылок или тестирование и исправление с проверкой ссылочной целостности. Всегда делайте резервную копию, работайте в монопольном режиме и не используйте прямое удаление без контроля ссылок.
Часто задаваемые вопросы
Чем битая ссылка отличается от незаполненного реквизита?
Незаполненный реквизит — это пустое значение, его видно сразу и очищает обычное редактирование. Битая ссылка выглядит заполненной, но объект по ней не существует: при открытии появляется «Объект не найден» с шестнадцатеричным кодом. Определить можно попыткой открыть значение или запросом с левым соединением.
Можно ли удалить пустые ссылки без конфигуратора?
Да. В типовых конфигурациях большинство задач решается из пользовательского режима: обработка «Удаление помеченных объектов» и внешние обработки поиска битых ссылок работают в режиме «Предприятие». Конфигуратор нужен только для тестирования и исправления или для написания собственного кода.
Что выбрать в тестировании и исправлении: очищать ссылки или создавать объекты?
Если в отчётах важно видеть, что значение было, выбирайте «создавать объекты» — появятся заглушки, которые потом можно заполнить или заменить. Если значение не представляет ценности, выбирайте «очищать ссылки» — это быстрее и не засоряет справочники пустыми элементами.
Почему после удаления битых ссылок они появились снова?
Чаще всего причина в обмене данными: объект удалили в одном узле, а в другом на него остались ссылки, которые вернулись при синхронизации. Также проверьте, не использует ли кто-то обработки прямого удаления без контроля ссылок. Устраните источник, а затем повторите очистку во всех узлах обмена.
Опасно ли удалять записи регистров с битыми ссылками?
Записи регистров, подчинённых регистратору, у которых регистратор не существует, обычно безопасно удалять — они недоступны из интерфейса и только мешают. Но перед удалением убедитесь, что эти данные не нужны для отчётности, и сделайте резервную копию. В независимых регистрах сведений сначала оцените, нельзя ли заменить битую ссылку корректным значением.
Как запретить пользователям создавать битые ссылки?
Снимите у пользователей право интерактивного удаления объектов, оставив только установку пометки удаления. Все фактические удаления пусть выполняет администратор через «Удаление помеченных объектов» с контролем ссылок. Дополнительно настройте регламентное задание автоматического удаления помеченных объектов в нерабочее время.