Как в запросе отобрать битые ссылки, поиск Битых Ссылок
Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:<Объект не найден> (16:bca8000c6efdd52111d8eaba7c9706eb)
Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:
Код 1C v 8.х
Код 1C v 8.х
И последний вариант для проверки в запросах:
ГДЕ Объект.РеквизитОбъекта ЕСТЬ NULL И Не Объект=&ПустаяСсылкаОбъекта
Ниже дана программа для удаления записей регистров, у которых регистратор — битая ссылка, т.е. не существует в базе.
1с как определить битую ссылку
В 8.0 ссылки бывают пустыми. Тогда у нее идентификатор равен
00000000-0000-0000-0000-000000000000
У обычной ссылки уникальный идентификатор можно получить так:
Получить пустую ссылку можно методом:
Получить пустую ссылку по значению неизвестного типа можно следующей конструкцией:
Проверить на пустую ссылку можно так:
В запросах для версии 8.0 так:
В запросах для версии 8.1 так:
Пустые ссылки возвращаются методами НайтиПоНаименованию, НайтиПоКоду, НайтиПоНомеру в случае, когда объект не найден. Пустые ссылки являются значениями по умолчанию для реквизитов ссылочных типов. Если реквизит имеет составной тип данных,то значением по умолчанию для него является Неопределено.
Неопределено <> NULL <> «» <> 0 <> пустая ссылка <> Битая ссылка
У пустой ссылки есть все поля (реквизиты, табличные часть) и к ним можно обращаться. Они будут незаполнены (для чисел — 0, для ссылок — пустые ссылки, для строк переменной длины — «», для строк фиксированной длины — опр. количество пробелов). Табличные части будут иметь 0 строк.
Пустые ссылки можно «разыменовать» (обращаться через точку с свойствам). Следующий фрагмент кода вполне работоспособен:
Т.е. не нужно лишних проверок в программных модулях. Может кому пригодится.
Есть еще такое понятие, как «битая ссылка» (условное название). Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:
Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:
или так (ненадежно):
И последний вариант для проверки в запросах:
Ниже дана программа для удаления записей регистров, у которых регистратор — битая ссылка, т.е. не существует в базе.
1с как определить битую ссылку
А теперь напишем и выполним процедуру, которая удалит элемент Дырокол из справочника Товары

Поэтому, если есть острая необходимость не просто пометить какие-либо объекты на удаление, а программно удалить их насовсем из базы данных, необходимо предварительно выполнить поиск ссылок на эти объекты с помощью функции НайтиПоСсылкам(<МассивСсылок>). В качестве обязательного параметра в эту функцию передается массив со ссылками на проверяемые объекты. Можно также передавать дополнительные параметры, которые позволяют сузить область поиска. Возвращает эта функция таблицу значений со списком объектов, в которых были найдены ссылки на искомые объекты.
Также можно воспользоваться функцией УдалитьОбъекты(<МассивСсылок>), которая удаляет из базы данных объекты, переданные в массиве, но только те на которые не найдено ссылок. А еще лучше пользоваться стандартной схемой удаления объектов из базы данных, т.е. сначала помечать их на удаление, а потом уже удалять окончательно при помощи стандартной обработки, в которую уже встроен контроль ссылочной целостности.

В этом случае у пользователя появляется возможность не просто установить пометку удаления, а используя горячие клавиши Shift + Delete Удалить объект из базы данных без контроля ссылочной целостности. Поэтому, как правило, эти права отключены даже для администраторов.
Поиск и исправление битых ссылок в 1С
В типовых конфигурациях все элементы удаляются специальной обработкой, которая называется "Удаление помеченных объектов". Благодаря данному механизму обеспечивается целостность данных. Обработка не позволяет удалять объекты, которые используются другими объектами. Например, если в реквизите документа хранится ссылка на объект справочника, то этот объект справочника нельзя удалить. Таким образом стандартная обработка "Удаление помеченных объектов" обеспечивает целостность данных.
При написании собственных алгоритмов удаления элементов справочников или документов необходимо выполнять проверку на использование удаляемого объекта в других объектах. Если такая проверка не выполняется, то в тех реквизитах в которых использовался удаленный объект будут отображаться некорректные записи (битые ссылки).
<Объект не найден> (20:bf9b001bfc0aefea11e6339171699707)
<Объект не найден> (20:9f54001bfc0aefea11e63869c57994be)
<Объект не найден> (20:9f54001bfc0aefea11e63869c57994bf)
Автоматический поиск и исправление битых ссылок
В системе 1С предусмотрен специальный сервис для проверки информационной базы Тестирование и исправление информационной базы. В нем есть возможность искать битые ссылки. Кроме того он позволяет не только находить такие ссылки, а также очищать места использования этих ссылок или создавать пустые объекты взамен удаленных.
Программная проверка битых ссылок
Для того чтобы программно проверить ссылку, необходимо получить объект и проверить его на существование.
Комментарии (0)
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться