Объект удалён, а ссылка осталась: как вычистить неразрешимые ссылки из конфигурации и базы 1С

· 9 мин

Содержание

Неразрешимые ссылки на объекты метаданных в 1С появляются, когда один объект конфигурации ссылается на другой, которого больше нет: справочник удалили, а реквизит документа всё ещё имеет тип СправочникСсылка.Удалённый. Исправляют их в Конфигураторе: Конфигурация → Проверка конфигурации с флажком «Поиск некорректных ссылок», затем правка каждого найденного свойства или возврат объекта в объединение.

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

Отдельная история — битые ссылки уже в данных: в документе вместо контрагента видно <Объект не найден>. Это другой слой проблемы, и лечится он тестированием и исправлением базы. Ниже оба слоя разобраны по порядку.

Где искать неразрешимые ссылки: проверка конфигурации

Первый шаг — понять, что именно сломано и где. Гадать по тексту ошибки не нужно: Конфигуратор сам составит список.

Проверка через меню Конфигуратора

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

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

💡 Если строк сотни, скопируйте окно сообщений в текстовый файл и отсортируйте. Обычно сотни строк сводятся к 3-5 удалённым объектам, на которые ссылаются из разных мест.

Проверка из командной строки

Для больших конфигураций и регулярных проверок удобнее запуск без интерфейса:

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" /CheckConfig -ConfigLogIntegrity -IncorrectReferences /Out "D:\Logs\check.txt"

Путь к платформе и номер версии подставьте свои. Результат окажется в check.txt — его удобно прикладывать к задаче разработчику.

Что обычно оказывается в списке

  • 🧩 тип реквизита, табличной части или параметра запроса указывает на удалённый объект;
  • 📂 в составе подсистемы, плана обмена или функциональной опции числится объект, которого нет;
  • 🔐 роль содержит права на несуществующий объект;
  • 🖼️ реквизит формы или элемент командного интерфейса ссылается на удалённую команду;
  • 🔗 определяемый тип или подписка на событие перечисляет устаревшие типы.

Откуда берутся битые ссылки после обновления

Неразрешимая ссылка — всегда след несогласованного изменения. Типовая конфигурация сама по себе их не содержит: фирма-разработчик проверяет релиз перед выпуском.

СитуацияЧто происходитКак распознать
Объединение с поставкой, часть объектов не отмеченаНовый объект поставщика не взяли, а изменённый объект, который на него ссылается, взялиОшибки сразу после «Сравнение, объединение»
Ручное удаление объектаОбъект удалили, не проверив, где он используетсяСсылки на один и тот же объект из многих мест
Частичная загрузка из XML-файловЗагрузили выборочный набор файлов без зависимых объектовОшибки после Загрузить конфигурацию из файлов
Перенос объектов между конфигурациямиСкопировали документ без справочников из его реквизитовСсылки на объекты с префиксом чужой разработки
Расширение после обновления основной конфигурацииВ расширении заимствован объект, который в новом релизе переименовали или удалилиРасширение не применяется, база пишет о несоответствии

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

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

Порядок исправления: от конфигурации к данным

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

Перед любыми правками сделайте выгрузку информационной базы в .dt и сохраните текущую конфигурацию в .cf. Выгрузка .dt требует, чтобы в базе не работали пользователи.

Шаг 1. Исправить объединение

Если ошибка возникла в окне сравнения и объединения, не закрывайте его.

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

💡 Если сомневаетесь, берите объект поставщика. Лишний справочник в конфигурации ничего не ломает, а выкинутый ломает следующее обновление.

Шаг 2. Убрать ссылки на удалённые объекты вручную

Для каждой строки из проверки конфигурации:

  1. Откройте объект двойным щелчком по сообщению.
  2. Найдите свойство из сообщения: тип реквизита, состав подсистемы, права роли.
  3. Выберите решение: заменить тип на существующий, удалить реквизит или вернуть удалённый объект.
  4. После всех правок повторите проверку, пока список не станет пустым.

Вернуть удалённый объект проще всего сравнением с сохранённой копией: Конфигурация → Сравнить, объединить с конфигурацией из файла..., отметить только нужный объект и выполнить объединение.

Шаг 3. Обновить конфигурацию базы данных

После исправлений выполните Конфигурация → Обновить конфигурацию базы данных (F7). Если меняли типы реквизитов, платформа покажет список реструктуризации — прочитайте его перед подтверждением. Удаление реквизита удаляет и его данные.

Шаг 4. Тестирование и исправление базы

Когда конфигурация чистая, переходите к данным: Администрирование → Тестирование и исправление... в Конфигураторе. Режим требует монопольного доступа, поэтому пользователей нужно попросить выйти.

Ключевые настройки для битых ссылок:

ПараметрЗначениеЧто даёт
Проверка логической целостности информационной базывкл.Находит повреждённые записи
Проверка ссылочной целостности информационной базывкл.Ищет ссылки на несуществующие объекты
При наличии ссылок на несуществующие объекты«Создавать объекты» или «Очищать ссылки»Определяет, как поступить с битой ссылкой
Режимсначала «Только тестирование»Показывает масштаб без изменений

Выбор между двумя режимами важен:

  • ✅ Создавать объекты — платформа создаёт элемент-заглушку с тем же идентификатором. Документы сохраняют связь, а заглушку потом можно заполнить или объединить с правильным элементом. Это вариант по умолчанию для учётных данных.
  • ⚠️ Очищать ссылки — поле становится пустым. Связь теряется навсегда, проводки документа могут перестать сходиться с регистрами.

Тот же прогон можно запустить из командной строки:

"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" /IBCheckAndRepair -LogIntegrity -TestOnly /Out "D:\Logs\tii.txt"

После анализа отчёта уберите -TestOnly и добавьте -BadRefCreate (создавать объекты) или -BadRefClear (очищать ссылки).

Порядок работ с неразрешимыми ссылками
Выполнено: 0 / 8

Точечная чистка обработками и скриптами

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

Как найти битые ссылки запросом

Приём простой: если ссылка не пустая, а обращение к её реквизиту возвращает NULL, объекта в базе нет.

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

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

Как очистить или заменить ссылки кодом

Если решено заменить битую ссылку правильным элементом, код во внешней обработке может выглядеть так:

&НаСервереБезКонтекста
Процедура ЗаменитьБитыеСсылкиНаСервере(НовыйКонтрагент)

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

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

КонецПроцедуры

ОбменДанными.Загрузка = Истина отключает проверки и обработчики записи, поэтому документ записывается без перепроведения. Движения при этом не меняются: если контрагент участвует в регистрах, их придётся поправить отдельно или перепровести документы штатно.

Запускайте такой код сначала на копии базы. Загрузка в режиме обмена обходит всю бизнес-логику, и ошибку в условии отбора никто не остановит.

Типовые инструменты конфигурации

В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) есть «Поиск и удаление дублей» и «Удаление помеченных объектов» в разделе Администрирование → Обслуживание. Первая помогает, когда после исправления с созданием объектов появились заглушки: их можно заменить на правильные элементы во всех документах сразу.

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

Логика исправления одна, но инструменты и риски различаются.

Что делаемФайловая базаКлиент-серверная (MS SQL, PostgreSQL)
Резервная копияКопия файла 1Cv8.1CD при закрытой базе или .dt.dt плюс бэкап средствами СУБД
Монопольный доступВсе пользователи выходят из базыБлокировка начала сеансов в консоли кластера
Физические поврежденияУтилита chdbfl.exe из каталога bin платформыСредства проверки самой СУБД
Тестирование и исправлениеМожет идти долго на больших файлахНагрузка на сервер, лучше ночью
Правка таблиц напрямуюНевозможнаТехнически возможна, но запрещена

Для файловой базы есть нюанс: если chdbfl.exe находит физические ошибки, сначала исправьте их, а потом запускайте тестирование и исправление. Иначе проверка ссылок будет читать повреждённые страницы.

Для клиент-серверной базы перед тестированием установите блокировку начала сеансов в свойствах информационной базы через консоль администрирования кластера. Принудительное завершение сеансов обрывает работу пользователей без сохранения — предупредите их и выберите нерабочее время.

Не правьте таблицы 1С прямыми SQL-запросами, даже если видите «битые» значения в полях. Платформа хранит данные в своей внутренней структуре, и ручная правка легко ломает связи, которые она потом не сможет восстановить. Все исправления — только через платформу.

Как не допустить повторения

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

  • 📦 Дорабатывайте через расширения. Всё, что можно вынести в расширение, не трогает основную конфигурацию, и объединение при обновлении проходит без конфликтов.
  • 🔍 Удаляйте объекты через поиск ссылок. Перед удалением объекта выполните для него в дереве метаданных «Поиск ссылок на объект» и уберите все найденные упоминания.
  • 🧪 Обновляйте на копии. Обновление доработанной конфигурации сначала прогоните на копии, проверку конфигурации включите в обязательный порядок работ.
  • 📝 Не снимайте галочки с новых объектов поставщика без понимания, кто на них ссылается.
  • 💾 Храните .cf каждой версии. Сохранённая конфигурация до обновления — самый быстрый способ вернуть удалённый по ошибке объект.
  • 👥 Используйте хранилище конфигурации при командной разработке: видно, кто и когда удалил объект.

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

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

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