Как в запросе отобрать элементы, значение которых — «битая ссылка», т.е. «объект не найден»
Для этого используется логический оператор ЕСТЬ NULL функций языка запросов.
Например, допустим, в регистре накопления «ПартииТоваровНаСкладах» мы хотим найти записи, в которых измерение «ДокументОприходования» оказалось такой вот битой ссылкой на «объект не найден». Запрос будет выглядеть примерно так:
"ВЫБРАТЬ | ПартииТоваровНаСкладах.Регистратор, | ПартииТоваровНаСкладах.Номенклатура, | ПартииТоваровНаСкладах.СерияНоменклатуры, | ПартииТоваровНаСкладах.ДокументОприходования, | ПартииТоваровНаСкладах.Качество, | ПартииТоваровНаСкладах.Склад, | ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры, | ПартииТоваровНаСкладах.СтатусПартии, | ПартииТоваровНаСкладах.Заказ |ИЗ | РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах |ГДЕ | ПартииТоваровНаСкладах.ДокументОприходования.Ссылка ЕСТЬ NULL"
Обратите внимание, если в запросе требуется получить ссылку на регистратор регистра накопления, то запрос должен быть построен не к остаткам и не к оборотам, а просто к регистру (как в этом примере)
Итог исполнения запроса:
Регистратор | Номенклатура | СерияНоменклатуры | ДокументОприходования |
Поступление товаров и услуг АМН00015703 от 26.11.2010 12:36:37 | УСИЛИТЕЛЬ БАМПЕРА ЗАДНЕГО | 10702030/281010/0044030, КОРЕЯ | <Объект не найден> (202:8f3be61ec213fa5511dffc85b405870a) |
… | … | … | … |
Качество | Склад | ХарактеристикаНоменклатуры | СтатусПартии | Заказ |
Некондиция 15 | Основной склад | <пустая ссылка Справочник ссылка: Характеристики номенклатуры> | Купленный | <пустая ссылка Документ ссылка: Заказ покупателя> |
… | … | … | … | … |
Дополнение
По сведениям наших коллег в некоторых случаях может потребоваться отбор не по
"ГДЕ ПартииТоваровНаСкладах.ДокументОприходования.Ссылка ЕСТЬ NULL"
а по представлению, т.е. с использованием конструкции вида:
"ГДЕ ПартииТоваровНаСкладах.ДокументОприходования.Ссылка.Представление ЕСТЬ NULL"
Мы думаем, что это может быть связано с различными видами «битости» ссылок. В любом случае, один из способов должен Вам помочь. Поэтому рекомендуем поэкспериментировать с обоими этими условиями.
Возможно, есть какие-то нюансы. На ум приходит то, что могут быть «полные» или «частичные» потери связей с исходными объектами и, как следствие, могут быть разные подходы решения задачи.
Хорошо бы проанализировать эту задачу на самых различных данных.
Будем рады любым дополнительным отзывам и сведениям от всех, кто с этим еще столкнется.
Думается мне, что нюанс тут… есть, но только в формулировке и ее понимании.
«нужно проверять на NULL значение ссылки» — неточная и/или неверная формулировка.
Речь идет о том, чтобы условие в запросе выглядело так:
ГДЕ Чек.Номенклатура.Ссылка ЕСТЬ NULL
А это почти равнозначно условию
ГДЕ Чек.Номенклатура.Представление ЕСТЬ NULL
(Почему почти? Я знаю пока одно различие: если есть, скажем, в регистре измерение Операция с типом ПеречислениеСсылка, так в запросе Операция.Ссылка использовать можно, а вот Операция.Представление вызывает ошибку! По крайней мере на платформе 8.2.16.)
По регистру сведений «АналитикаУчетаЗатрат» данный подход не работает ни по ссылке, ни по «Ссылка.Представление», если — тип СправочникСсылка.КлючиАналитикиУчетаЗатрат.