Мусор в ссылках базы 1С: найти, проверить и убрать без потерь
Содержание
Очистить ссылки в 1С можно тремя путями. Лишние объекты, помеченные на удаление, убирает Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов. Битые ссылки вида <Объект не найден> (45:b2f1…) чинит Конфигуратор: Администрирование → Тестирование и исправление, флажок проверки ссылочной целостности и режим «Очищать ссылки». Пустые реквизиты находят запросом или отбором списка и заполняют вручную либо групповой обработкой.
Типичная ситуация: бухгалтер открывает старую реализацию, а в поле «Контрагент» вместо названия стоит <Объект не найден>. Документ не проводится, отчёт по взаиморасчётам показывает строку без имени. Удаление и диагностику таких ссылок важно делать в правильном порядке: сначала найти, где ссылка используется, потом решить, восстанавливать объект или очищать поле.
Пустая, битая, помеченная: три разных проблемы
Под «очисткой ссылок» понимают разное. От типа проблемы зависит инструмент.
| Что видите | Что это | Чем лечат |
|---|---|---|
| Поле реквизита пустое | Пустая ссылка: значение просто не выбрано | Заполнение вручную, групповое изменение реквизитов |
<Объект не найден> (32:8f3a…) | Битая ссылка: в поле хранится идентификатор объекта, которого в базе нет | Тестирование и исправление, восстановление объекта |
| Объект с красным крестиком в списке | Объект помечен на удаление, но ещё физически в базе | Удаление помеченных объектов |
| Два элемента «ООО Ромашка» | Дубль: обе ссылки живые, но учёт раздваивается | Поиск и удаление дублей |
Откуда берутся битые ссылки:
- 🗑️ объект удалили непосредственно, без проверки ссылок (право «Интерактивное удаление» или программный вызов
Удалить()у объекта); - 🔄 обмен данными загрузил документ, а элемент справочника, на который он ссылается, не пришёл;
- 💥 файловая база пострадала при сбое питания или копировании «на ходу»;
- 🛠️ кто-то правил таблицы напрямую в SQL, минуя платформу;
- 📦 данные перенесли частично: выгрузили документы без справочников.
Цифры в скобках после <Объект не найден> полезны. Первое число — номер таблицы, второе — идентификатор записи. По ним в Конфигураторе можно понять, из какого справочника пропал объект, и восстановить его из резервной копии.
Как найти, где используется ссылка
Перед удалением любого объекта посмотрите, кто на него ссылается. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) это делается из карточки объекта.
Места использования объекта
- Откройте элемент справочника или документ.
- Нажмите
Ещёи выберитеМеста использования. - Система покажет список документов, регистров и справочников, где объект встречается.
Тот же поиск есть в стандартной обработке: Все функции → Стандартные → Поиск ссылок на объект. Команда «Все функции» появляется в главном меню после флажка Сервис и настройки → Параметры → Отображать команду «Все функции».
Как найти битые ссылки запросом
Тестирование базы находит битые ссылки разом, но меняет данные. Если сначала нужно просто посмотреть масштаб, используйте консоль запросов. Пример для реализаций с несуществующим контрагентом:
ВЫБРАТЬ
Реализация.Ссылка КАК Документ,
Реализация.Контрагент КАК БитаяСсылка
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Реализация.Контрагент = Контрагенты.Ссылка
ГДЕ
Контрагенты.Ссылка ЕСТЬ NULL
И Реализация.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
Логика простая: левое соединение не нашло пару в справочнике, но поле при этом не пустое. Значит, ссылка ведёт в никуда.
Пустые ссылки ищут ещё проще: условие ГДЕ Реализация.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка). Без запроса тоже можно: в списке документов настройте отбор по полю «Контрагент» с видом сравнения «Не заполнено».
Консоль запросов в Такси открывается как внешняя обработка. Её версия под управляемые формы входит в набор обработок с диска ИТС; откройте её через главное меню Файл → Открыть.
Удаление помеченных и тестирование базы
Удаление помеченных объектов
Это основной штатный способ убрать мусор, не создав битых ссылок. Обработка перед удалением проверяет, не ссылается ли на объект что-то живое.
- Сделайте резервную копию базы .
- Откройте
Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов. Если пути нет, используйтеВсе функции → Стандартные → Удаление помеченных объектов. - Выберите режим: все помеченные или выборочно. Выборочный режим удобен, когда помечены сотни объектов, а удалить нужно только старые номенклатурные позиции.
- Запустите удаление.
- В конце обработка покажет объекты, которые удалить не удалось, и места, где они используются.
Объект не удаляется, если на него ссылается непомеченный документ или элемент. Выход: открыть место использования, заменить значение в поле на правильное или тоже пометить документ на удаление, затем повторить проход.
В клиент-серверной базе удаление помеченных можно запускать при работающих пользователях, но на большой базе оно идёт часами и нагружает сервер. Планируйте его на вечер. В файловой базе лучше попросить всех выйти.
Тестирование и исправление
Битые ссылки, которые уже есть в базе, штатно лечит Конфигуратор.
- Выгрузите базу в
.dt(Администрирование → Выгрузить информационную базу) или сделайте копию файла1Cv8.1CD. Без копии не начинайте: исправление необратимо. - Попросите пользователей выйти. Тестирование требует монопольного доступа.
- В Конфигураторе:
Администрирование → Тестирование и исправление. - Отметьте «Проверка логической целостности информационной базы» и «Проверка ссылочной целостности информационной базы».
- Выберите режим «Тестирование и исправление».
- В блоке «При наличии ссылок на несуществующие объекты» выберите действие.
- Нажмите
Выполнитьи дождитесь протокола.
Что выбрать в шаге 6:
| Вариант | Что произойдёт | Когда выбирать |
|---|---|---|
| Создавать объекты | Платформа создаст пустые объекты-заглушки с именем вида «Объект не найден (…)» | Нужно сохранить связи и потом заполнить заглушку правильными данными |
| Очищать ссылки | Поле станет пустым | Значение не важно или его проще выбрать заново |
| Не изменять | Только отчёт в протоколе | Первый прогон: оценить масштаб |
Начинайте с «Не изменять» и галки «Только тестирование». Протокол покажет, сколько ссылок битые и в каких таблицах. Если речь о десятке документов, проще восстановить пропавший элемент из копии. Если о тысячах — выбирайте «Создавать объекты» и затем разбирайтесь с заглушками.
Тот же режим запускается из командной строки, удобно для ночного обслуживания:
"C:\Program Files\1cv8\8.3.24.1691\bin\1cv8.exe" DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /IBCheckAndRepair -ReIndex -BadRefCreate /Out"D:\Logs\check.txt"
Ключ -BadRefClear очищает ссылки, -BadRefNone ничего не меняет, -TestOnly включает режим только проверки. Номер версии в пути замените на свой.
Для файловой базы есть отдельная утилита chdbfl.exe в каталоге bin платформы. Она проверяет физическую целостность файла 1Cv8.1CD. Запускайте её первой, если база падала: логическая проверка на повреждённом файле может не дойти до конца.
chdbfl.exe, для серверной — проверка базы средствами СУБД.Обработки и код для массовой очистки
Штатных средств хватает в большинстве задач. Внешние обработки нужны, когда надо массово заменить одну ссылку на другую или почистить определённый реквизит по условию.
Встроенные обработки БСП
В разделе Администрирование → Обслуживание → Корректировка данных типовых конфигураций есть:
- 🔁 Поиск и удаление дублей — находит похожие элементы, переносит все ссылки на основной и помечает остальные на удаление;
- ✏️ Групповое изменение реквизитов — меняет значение поля сразу у выделенных объектов: например, ставит правильного контрагента в 200 документов, где была заглушка.
Связка для заглушек после тестирования: в списке справочника найдите элементы с «Объект не найден» в наименовании. Если это дубль существующего элемента, объедините их через поиск дублей. Ссылки перейдут на правильный элемент, заглушка уйдёт на удаление.
Внешние обработки
Открываются через Файл → Открыть. Нужно право «Интерактивное открытие внешних обработок» и подтверждение запуска в окне безопасности.
Берите обработки только из проверенных источников. Обработка выполняется с вашими правами и может изменить или удалить данные. Чужой .epf сначала прогоните на копии базы.
Если пишете свою
Для поиска мест использования в коде есть метод НайтиПоСсылкам. Он принимает массив ссылок и возвращает таблицу значений с колонками «Ссылка», «Данные», «Метаданные». Проверка, существует ли объект за ссылкой:
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
// объекта нет, ссылка битая
КонецЕсли;
Не используйте в своих обработках Объект.Удалить() для очистки. Этот метод удаляет запись без проверки ссылок и как раз плодит битые ссылки. Ставьте пометку УстановитьПометкуУдаления(Истина) и отдавайте удаление штатной обработке.
Большие базы: SQL, индексы и время
Удаление помеченных на базе в 200-300 ГБ упирается в поиск ссылок. Платформа для каждого объекта проверяет все таблицы, где может стоять ссылка этого типа. Медленная СУБД превращает это в ночь работы.
Что помогает:
- Реиндексация. В Конфигураторе в том же окне тестирования отметьте только «Реиндексация таблиц информационной базы», остальные флажки снимите. Для серверной базы то же делает СУБД.
- Обслуживание индексов в MS SQL. План обслуживания с перестроением индексов и обновлением статистики. Ручной вариант для одной базы:
USE Buh;
EXEC sp_MSforeachtable 'ALTER INDEX ALL ON ? REBUILD';
EXEC sp_updatestats;
В PostgreSQL ту же роль выполняют REINDEX DATABASE и VACUUM ANALYZE.
- Выборочное удаление частями. Удалять по 500-1000 объектов за проход быстрее, чем все 40 тысяч сразу: меньше длинных транзакций и блокировок.
- Время. Запускайте вечером, когда пользователей нет. Перестроение индексов на MS SQL Standard блокирует таблицы.
Не удаляйте записи и не очищайте поля SQL-запросами напрямую в таблицах _Reference, _Document и подобных. Платформа не узнает об изменениях, итоги регистров разойдутся, а битых ссылок станет больше. SQL — только для обслуживания индексов и статистики.
Как не допустить новых битых ссылок
- 🔐 Отберите право «Интерактивное удаление» у всех, кроме администратора. Пользователи помечают, администратор удаляет помеченные.
- 📅 Чистите помеченные регулярно, раз в месяц или квартал, а не раз в пять лет.
- 🔄 В обменах проверяйте, что правила выгружают справочники вместе с документами. После обмена загляните в протокол.
- 💾 Копируйте файловую базу
только выгрузкой
.dtили после выхода всех пользователей. - 🧪 Проверяйте базу тестированием в режиме «Не изменять» раз в квартал: проблемы заметнее, пока их десять, а не десять тысяч.
Если ссылки не очищаются
Бывает, что ничего из штатного не срабатывает.
- Тестирование пишет ошибку и останавливается. Начните с физической проверки (
chdbfl.exeдля файловой базы). В серверной базе проверьте СУБД: для MS SQLDBCC CHECKDB. - Битые ссылки возвращаются после обмена. Источник — другая база. Почистите её или исправьте правила обмена, иначе каждая синхронизация привезёт мусор заново.
- Объект не удаляется даже после замены ссылок. На него могут ссылаться регистры сведений или настройки, которые не видны в форме документа. Список «Места использования» показывает и их.
- Нужно вернуть удалённый элемент с его идентификатором. Разверните копию базы, выгрузите элемент универсальным обменом XML (обработка
Выгрузка и загрузка данных XML) и загрузите в рабочую базу. Идентификатор сохранится, и битые ссылки снова станут живыми.