Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

Найти битые ссылки запросом 1С и не только

Часто бывает, что в результате обмена данных в 1С 8.3 и 8.2 случаются ошибки, и вместо значения ссылочных данных в полях встречается «Объект не найден», то есть «битые ссылки».

Как выглядит битая ссылка

Никакими штатными механизмами исправить это невозможно и оперативно найти битые ссылки достаточно проблематично. Исключение составляют тестирования и исправления в конфигураторе информационной базы: он создает вместо битых ссылок заглушки — элементы с незаполненными реквизитами.

Поиск битых ссылок в 1С запросом

Очень часто встает вопрос: как отобрать элементы с битыми ссылками запросом 1С?

Вопрос решается достаточно легко, рассмотрим его на примере:

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

Решение задачи:

Поиск битый ссылок запросом

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Что мы сделали?

Первым отбором «НЕ СчетНаОплатуПокупателю.Организация ЕСТЬ NULL»  мы определили, что ссылка установлена.

Вторым отбором СчетНаОплатуПокупателю.Организация.Код ЕСТЬ NULL, обращаясь к коду организации по точке, система строит левое соединение, но не находит в таблице организаций такой элемент — возвращает NULL.

Всё получается достаточно просто.

Определение битой ссылки в объектной модели

Если у Вас нет возможности сделать проверку запросом, рекомендую использовать два разных метода. Рассмотрим их на примере, который давали ранее:

Используя ПолучитьОбъект()

При использовании метода «ПолучитьОбъект()» битая ссылка вернет «Неопределено».

Например:

Если Счет.Организация.ПолучитьОбъект() = Неопределено Тогда

Сообщить("Ссылка битая!");

КонецЕсли;

Поиск в строке

Этот метод самый простой — поиск строки «Объект не найден» в представлении элемента.

Например:

Если Найти(Строка(Счет.Организация),"Объект не найден") <> 0 Тогда

Сообщить("Ссылка битая!");

КонецЕсли;

Читайте также другие статьи по разработке в 1С.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 7 на “Найти битые ссылки запросом 1С и не только
  1. В указанном примере при использовании языка запросов, если документ не проведен и в нем не указана организация, то в результат запроса этот документ не попадет

    Ответить

    • Если организация не указана — значит и битой ссылки нет.

      А по не проведенным не согласен — на это никаких отборов в запросе нет.

      Ответить

  2. Привет всем. Есть вопрос. Почему то не корректно работает функционал «Поиск ссылок в объекте». Выводит не полный список: в действии 1 выводит вот такой маленький список. Хотя в форме этого объекта есть ссылка на обработку(цифра 2). При выполнении действия выбираю «Везде». http://vfl.ru/fotos/d64c37bf16194095.html

    Ответить

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

    Ответить

  4. С первым условием не получилось, мне помогла проверка на Значение(…Пустаяссылка)

    Ответить

  5. Еще нужно проверить ссылку, чтобы не было равно пустому значению, для составных типов придется много условий дописывать.

    Ответить

  6. Здравствуйте!

    Если для справочника метод ПолучитьОбъект() = Неопределено, то при попытке удалить программно неизбежно получим ошибку «Метод не найден Удалить()». В таком случае подобные ситуации только через ТИИ решаются, так?

    Ответить

Добавить комментарий:

Ваш адрес email не будет опубликован.