Пустая ссылка составного типа в запросе

Пришла на днях задачка от клиента: Хочу говорит такой-сякой отчет, с такими то данными, ресурсами, группировкам и т.д. Но главное условие этого отчета, что бы выводились только те документы, у которых некий реквизит “ДокументОснование” был не пустой. Фигня делов, накидал сделал и понял… не работает главное условие. Итак разберемся.

Есть к примеру у нас документ “ЗарплатаСотрудника” с реквизитом “ДокументОснование” составного типа:

Пример документа с реквизитом "ДокументОснование"
Пример документа с реквизитов

Первое что я сделал на автомате при реализации условия, что ссылка составного типа не должны быть пустой, это использовал значение “null”:

Соответственно не получив результат вспомнил, что NULL – это по сути отсутствующие значения, а не как не нулевое или пустое. Это значение появляется в результате соединений в запросе, обращениям к реквизитам для битой ссылки…

Тогда пришлось использовать второй на вскидку вариант: значение “Неопределено”:

Этот вариант оказался более рабочим, но и здесь была проблема: если в документе в реквизите “ДокументОснование” никогда ничего не выбирали, то там действительно будет значение “Неопределено”. Но если в этом реквизите был выбран тип значения, а само значение выбрано не было – то в этом случае в реквизите будет уже пустая ссылка этого типа, а не значение “Неопределено”. Что меня не устраивало.

И остался у меня последний вариант: проверка на пустую ссылку для всех типов:

Данный вариант оказался рабочим и документы с пустым полем “ДокументОснование” не попадали в отчет. Но мне данное решение показалось не оптимальным: как минимум оно выглядело не красиво, а как максимум при добавлении нового типа в данный реквизит, пришлось бы переписывать запрос отчета.

Полазив на форумах и почитав методическую информацию было найдено решение со значением NULL. Поскольку NULL появляется при соединения, то в запросе можно получить у реквизита “ДокументОснование” ссылку. Соответственно на уровне SQL все ссылочные значения, получаемые через точку, формируются через левое соединение, что и даст нам NULL при пустых значениях:

Вот таким нехитрым способом удалось решить задачу. Если можете предложить решение лучше или оптимальнее пишите. Всегда интересно узнать что-то новое.

1+
К вопросу о соотношении понятий доменное имя и название сайт а хозяйство и право.

3 комментария

  1. Ал

    Спасибо тебе, добрый человечище!

    1+
  2. Admin (Автор записи)

    Всегда пожалуйста, заходи если что еще, может чего полезного найдешь!

    0
  3. Илья

    ВЫБРАТЬ
    ЗарплатаСотрудника.Ссылка КАК Ссылка,
    ЗарплатаСотрудника.ДокументОснование КАК ДокументОснование
    ИЗ
    Документ.ЗарплатаСотрудника КАК ЗарплатаСотрудника
    ГДЕ
    НЕ ЗарплатаСотрудника.ДокументОснование = НЕОПРЕДЕЛЕНО
    И ЗарплатаСотрудника.ДокументОснование.Ссылка ЕСТЬ NULL

    4+

Оставить комментарий

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