Найти битые ссылки запросом 1С и не только
Часто бывает, что в результате обмена данных в 1С 8.3 и 8.2 случаются ошибки, и вместо значения ссылочных данных в полях встречается «Объект не найден», то есть «битые ссылки».
Никакими штатными механизмами исправить это невозможно и оперативно найти битые ссылки достаточно проблематично. Исключение составляют тестирования и исправления в конфигураторе информационной базы: он создает вместо битых ссылок заглушки — элементы с незаполненными реквизитами.
Поиск битых ссылок в 1С запросом
Очень часто встает вопрос: как отобрать элементы с битыми ссылками запросом 1С?
Вопрос решается достаточно легко, рассмотрим его на примере:
необходимо отобрать документы Счет на оплату покупателю, где вместо организации установлена «битая ссылка».
Решение задачи:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Что мы сделали?
Первым отбором «НЕ СчетНаОплатуПокупателю.Организация ЕСТЬ NULL» мы определили, что ссылка установлена.
Вторым отбором СчетНаОплатуПокупателю.Организация.Код ЕСТЬ NULL, обращаясь к коду организации по точке, система строит левое соединение, но не находит в таблице организаций такой элемент — возвращает NULL.
Всё получается достаточно просто.
Определение битой ссылки в объектной модели
Если у Вас нет возможности сделать проверку запросом, рекомендую использовать два разных метода. Рассмотрим их на примере, который давали ранее:
Используя ПолучитьОбъект()
При использовании метода «ПолучитьОбъект()» битая ссылка вернет «Неопределено».
Например:
Если Счет.Организация.ПолучитьОбъект() = Неопределено Тогда Сообщить("Ссылка битая!"); КонецЕсли;
Поиск в строке
Этот метод самый простой — поиск строки «Объект не найден» в представлении элемента.
Например:
Если Найти(Строка(Счет.Организация),"Объект не найден") <> 0 Тогда Сообщить("Ссылка битая!"); КонецЕсли;
Читайте также другие статьи по разработке в 1С.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Эдуард:
В указанном примере при использовании языка запросов, если документ не проведен и в нем не указана организация, то в результат запроса этот документ не попадет
Программист 1С:
Если организация не указана — значит и битой ссылки нет.
А по не проведенным не согласен — на это никаких отборов в запросе нет.
Алексей:
Привет всем. Есть вопрос. Почему то не корректно работает функционал «Поиск ссылок в объекте». Выводит не полный список: в действии 1 выводит вот такой маленький список. Хотя в форме этого объекта есть ссылка на обработку(цифра 2). При выполнении действия выбираю «Везде». http://vfl.ru/fotos/d64c37bf16194095.html
Павел С:
Согласно вашей статье про рлс, запросом как я понимаю тоже не особо правильно получиться определить, либо укажите в статье, что такой запрос нужно выполнять только с полными правами.
Мегатон:
С первым условием не получилось, мне помогла проверка на Значение(…Пустаяссылка)
Максим:
Еще нужно проверить ссылку, чтобы не было равно пустому значению, для составных типов придется много условий дописывать.
Аноним:
Здравствуйте!
Если для справочника метод ПолучитьОбъект() = Неопределено, то при попытке удалить программно неизбежно получим ошибку «Метод не найден Удалить()». В таком случае подобные ситуации только через ТИИ решаются, так?
Даниил:
Поиск битых ссылок в 1С запросом — мне такой запрос при поиске битых ссылок в измерениях регистра сведений не помог.
Помогло
ГДЕ СчетНаОплатуПокупателю.Ссылка IS NULL
Виктор:
Этим запросом вывалятся не только битые ссылки но и просто документы с незаполненной организацией.
Илья:
Если ОбщегоНазначения.СсылкаСуществует(ОбъектСсылка) = Ложь тогда
……