Поиск битых ссылок

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

Битые ссылки глазами пользователя

В режиме предприятия битые ссылки выглядят так:

Пример битой ссылки 1С


Внимание!

Следует учесть, что такую же «картинку» пользователь может увидеть и в случае некорректно настроенных ролей.


Ниже описано несколько способов поиска некорректных ссылок на объекты.

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

Для открытия окна настройки проверки необходимо в конфигураторе выбрать пункт меню Администрирование > Тестирование и исправление.

Запуск проверки ссылочной целостности 1С

В открывшемся окне устанавливаем флаг «Проверка ссылочной целостности информационной базы». Данная проверка выполняется только совместно с проверкой логической целостности информационной базы.

Далее выбираем что необходимо сделать при обнаружении битых ссылок:

  • Только тестирование — после анализа будет отображен перечень некорректных ссылок;
  • Тестирование и исправление — можно не только получить перечень некорректных ссылок, но и исправить их: очистить некорректную ссылку или создать объект, соответствующий некорректной ссылке.

Следует иметь в виду, что проверка ссылочной целостности выполняется в монопольном режиме, а значит работа пользователей в это время невозможна.

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

Программный поиск битых ссылок

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

Фирма 1С не предоставляет какой-то универсальной обработки для поиска битых ссылок в пользовательском режиме, поэтому придется «творить» самому. Вот несколько подходов, которые можно использовать:

  • Получение в запросе подчиненного реквизита и сравнение его с NULL. В качестве подчиненного реквизита наиболее рационально использовать ссылку — она есть у всех объектов. В запросе также необходимо учесть, что подчиненный реквизит от пустой ссылки также возвращает NULL.
  • Получение объекта от ссылки при помощи метода ПолучитьОбъект(). Если ссылка битая, то будет возвращено значение Неопределено.
  • Получение представления ссылочного типа и сравнение его со строкой «<Объект не найден>».

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

// ***** Определение корректности ссылки при помощи метода ПолучитьОбъект() *****
Если ЗначениеЗаполнено(Док.Контрагент) И Док.Контрагент.ПолучитьОбъект() = Неопределено Тогда
// Значение реквизита Контрагент - битая ссылка
КонецЕсли;

// ***** Определение корректности ссылки путем анализа представления *****
Если Найти(Строка(Док.Контрагент), "<Объект не найден>") > 0 Тогда
// Значение реквизита Контрагент - битая ссылка
КонецЕсли;

Понравилась статья? Поделиться с друзьями: