Как в запросе отобрать битые ссылки, поиск Битых Ссылок Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:
<Объект не найден> (16:bca8000c6efdd52111d8eaba7c9706eb)
Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:
Код 1C v 8.х Если Ссылка. ПолучитьОбъект( ) = Неопределено Тогда
КонецЕсли ;
Если Лев( СокрЛП( Ссылка) , 18 ) = "<Объект не найден>" Тогда
Код 1C v 8.х
Попытка
обьект= Ссылка. Ссылка;
Исключение
сообщить( "битая" ) ;
КонецПопытки ;
И последний вариант для проверки в запросах:
ГДЕ Объект.РеквизитОбъекта ЕСТЬ NULL И Не Объект=&ПустаяСсылкаОбъекта
Ниже дана программа для удаления записей регистров, у которых регистратор - битая ссылка, т.е. не существует в базе.
Код 1C v 8.х Процедура УдалениеБитыхСсылок(ИмяРегистра,ТипРегистра,ТипРегистраЗ)
МенеджерРегистра = ТипРегистра[ИмяРегистра];
Запрос = Новый Запрос( "
|ВЫБРАТЬ Регистратор
|ИЗ " + ТипРегистраЗ+ "." + ИмяРегистра+ "
|ГДЕ Регистратор.Ссылка ЕСТЬ NULL И НЕ Регистратор = &ПустаяСсылкаДокумента" ) ;
Запрос. УстановитьПараметр( "ПустаяСсылкаДокумента" , Неопределено ) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
Набор = ТипРегистра[ИмяРегистра]. СоздатьНаборЗаписей( ) ;
Набор. Отбор. Регистратор. Установить( Выборка. Регистратор) ;
Набор. Записать( ) ;
ОбработкаПрерыванияПользователя( ) ;
Состояние( "" + ТипРегистра+ " " + ИмяРегистра) ;
КонецЦикла ;
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Кнопка)
Для Каждого пРегистр из Метаданные. РегистрыСведений Цикл
Подчинен = ( пРегистр. РежимЗаписи = Метаданные. СвойстваОбъектов. РежимЗаписиРегистра. ПодчинениеРегистратору) ;
Если Подчинен Тогда
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыСведений, "РегистрСведений" )
КонецЕсли ;
КонецЦикла ;
Для Каждого пРегистр из Метаданные. РегистрыБухгалтерии Цикл
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыБухгалтерии, "РегистрБухгалтерии" )
КонецЦикла ;
Для Каждого пРегистр из Метаданные. РегистрыРасчета Цикл
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыРасчета, "РегистрРасчета" )
КонецЦикла ;
Для Каждого пРегистр из Метаданные. РегистрыНакопления Цикл
УдалениеБитыхСсылок( пРегистр. Имя, РегистрыНакопления, "РегистрНакопления" )
КонецЦикла ;
КонецПроцедуры
Категория:
Запросы