Как в запросе выполнить отбор по «объект не найден» (1С: v8: Программисту) — 1C-h
 

Как в запросе выполнить отбор по «объект не найден» (1С: v8: Программисту)

4

Как в запросе отобрать элементы, значение которых — «битая ссылка», т.е. «объект не найден»

Для этого используется логический оператор ЕСТЬ NULL функций языка запросов.
Например, допустим, в регистре накопления «ПартииТоваровНаСкладах» мы хотим найти записи, в которых измерение «ДокументОприходования» оказалось такой вот битой ссылкой на «объект не найден». Запрос будет выглядеть примерно так:

"ВЫБРАТЬ
|    ПартииТоваровНаСкладах.Регистратор,
|    ПартииТоваровНаСкладах.Номенклатура,
|    ПартииТоваровНаСкладах.СерияНоменклатуры,
|    ПартииТоваровНаСкладах.ДокументОприходования,
|    ПартииТоваровНаСкладах.Качество,
|    ПартииТоваровНаСкладах.Склад,
|    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
|    ПартииТоваровНаСкладах.СтатусПартии,
|    ПартииТоваровНаСкладах.Заказ
|ИЗ
|    РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах
|ГДЕ
|    ПартииТоваровНаСкладах.ДокументОприходования.Ссылка ЕСТЬ NULL"

Обратите внимание, если в запросе требуется получить ссылку на регистратор регистра накопления, то запрос должен быть построен не к остаткам и не к оборотам, а просто к регистру (как в этом примере)

Итог исполнения запроса:

Регистратор Номенклатура СерияНоменклатуры ДокументОприходования
Поступление товаров и услуг АМН00015703 от 26.11.2010 12:36:37 УСИЛИТЕЛЬ БАМПЕРА ЗАДНЕГО 10702030/281010/0044030, КОРЕЯ <Объект не найден> (202:8f3be61ec213fa5511dffc85b405870a)

 

Качество Склад ХарактеристикаНоменклатуры СтатусПартии Заказ
Некондиция 15 Основной склад <пустая ссылка Справочник ссылка: Характеристики номенклатуры> Купленный <пустая ссылка Документ ссылка: Заказ покупателя>

Дополнение

По сведениям наших коллег в некоторых случаях может потребоваться отбор не по

"ГДЕ
    ПартииТоваровНаСкладах.ДокументОприходования.Ссылка ЕСТЬ NULL"

а по представлению, т.е. с использованием конструкции вида:

"ГДЕ
    ПартииТоваровНаСкладах.ДокументОприходования.Ссылка.Представление ЕСТЬ NULL"

Мы думаем, что это может быть связано с различными видами «битости» ссылок. В любом случае, один из способов должен Вам помочь. Поэтому рекомендуем поэкспериментировать с обоими этими условиями.

4 thoughts on “Как в запросе выполнить отбор по «объект не найден» (1С: v8: Программисту)

    1. Возможно, есть какие-то нюансы. На ум приходит то, что могут быть «полные» или «частичные» потери связей с исходными объектами и, как следствие, могут быть разные подходы решения задачи.

      Хорошо бы проанализировать эту задачу на самых различных данных.

      Будем рады любым дополнительным отзывам и сведениям от всех, кто с этим еще столкнется.

      1. Думается мне, что нюанс тут… есть, но только в формулировке и ее понимании.
        «нужно проверять на NULL значение ссылки» — неточная и/или неверная формулировка.
        Речь идет о том, чтобы условие в запросе выглядело так:
        ГДЕ Чек.Номенклатура.Ссылка ЕСТЬ NULL
        А это почти равнозначно условию
        ГДЕ Чек.Номенклатура.Представление ЕСТЬ NULL
        (Почему почти? Я знаю пока одно различие: если есть, скажем, в регистре измерение Операция с типом ПеречислениеСсылка, так в запросе Операция.Ссылка использовать можно, а вот Операция.Представление вызывает ошибку! По крайней мере на платформе 8.2.16.)

  1. По регистру сведений «АналитикаУчетаЗатрат» данный подход не работает ни по ссылке, ни по «Ссылка.Представление», если — тип СправочникСсылка.КлючиАналитикиУчетаЗатрат.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Next Post

Особенности разупаковки номенклатуры, когда по одной строке «Взять» должно быть несколько строк «Положить» (1С: Логистика - управление складом Axelot: Пользователю)

Ср Июн 9 , 2010
Вопрос Как оформить документ «Переупаковка номенклатуры», когда нужно разупаковать упаковку из 100 шт на 3 упаковки по 30 шт + 10 штук? Ответ Для этого порядок строк «положить» должен быть такой: сначала 10 штук по штукам, потом 3 упаковки по 30 штук, но не наоборот. См. инструкцию