К статьям

Конструкция ЕСТЬ NULL

3 мин


Описание

Значение NULL в запросе может появиться в момент когда мы соединяем две таблицы используя Левое/Правое/Полное соединение, и в тех полях, где должны были быть значения присоединяемой таблицы, но условие связи не выполнилось, будет значение NULL. 

Следует различать так же функцию ЕСТЬNULL и выражение ЕСТЬ NULL, между ними кроме наличия пробела между словами есть более сильные различия.

Функция ЕСТЬNULL

ЕстьNULL(ПроверяемоеПоле, ВыражениеЗамены) - Где ПроверяемоеПоле это поле таблицы результата запроса, а ВыражениеЗамены определяет какое значение будет подставлено в поле, если вдруг там попалось значение NULL

Пример: 

 ВЫБРАТЬ

     ПоступлениеТоваровУслуг.Ссылка КАК Поступление,

    РеализацияТоваровУслуг.Ссылка КАК Реализация

ИЗ

    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг

        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

        ПО ПоступлениеТоваровУслуг.Контрагент = РеализацияТоваровУслуг.Контрагент  

 В результате мы увидим:

Поступление Реализация
Поступление товаров услуг 000000001 от 13.05.2022 9:51:06 NULL
Поступление товаров услуг 000000002 от 16.05.2022 10:30:32 NULL
Поступление товаров услуг 000000003 от 16.05.2022 10:30:41 NULL

Так как тип NULL при попадании в результат запроса и дальнейшей обработке его кодом 1С содержит крайне мало информации мы должны преобразовать его в что-то более понятное. В данном случае в запросе мы хотели получить значение ссылки документа РеализацияТоваровУслуг. Потому будет логично, если мы заменим NULL на какое-то более понятное значение. Можно было бы заменить значение на пустую ссылку документа РеализацияТоваровУслуг, но для простоты мы поместим туда просто строку "Нет документа реализации". А если интересно, как подставить пустую ссылку в качестве значения, то обратите внимание на статью Использование предопределенных значений в запросах.

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

Пример. Доработаем запрос из предыдущего примера, и сделаем его результат более понятным:

 ВЫБРАТЬ

    ПоступлениеТоваровУслуг.Ссылка КАК Поступление,

    ЕСТЬNULL(РеализацияТоваровУслуг.Ссылка, "Нет документа реализации") КАК Реализация

ИЗ

    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг

        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

        ПО ПоступлениеТоваровУслуг.Контрагент = РеализацияТоваровУслуг.Контрагент

Результат: 

Поступление Реализация
Поступление товаров услуг 000000001 от 13.05.2022 9:51:06 Нет документа реализации
Поступление товаров услуг 000000002 от 16.05.2022 10:30:32 Нет документа реализации
Поступление товаров услуг 000000003 от 16.05.2022 10:30:41 Нет документа реализации

Оператор ЕСТЬ NULL

Оператор ЕСТЬ NULL – это выражение условия проверяющее является ли выбранное значение типом значения Null. При проверке следует применять именно его так как сравнение вида Номенклатура.Ссылка = Null не даст корректного результата.

Этот оператор нужен нам когда нам необходимо выполнить обработку всего набора данных, в зависимости от наличия значения NULL в результате. Например, мы хотим очистить результат запроса от неподходящих данных и полностью исключить из результата все строки, где в поле Реализация содержится значение NULL.

Пример:

 ВЫБРАТЬ

    ПоступлениеТоваровУслуг.Ссылка КАК Поступление,

    РеализацияТоваровУслуг.Ссылка КАК Реализация

ИЗ

    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг

        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

        ПО ПоступлениеТоваровУслуг.Контрагент = РеализацияТоваровУслуг.Контрагент

ГДЕ

    НЕ РеализацияТоваровУслуг.Ссылка ЕСТЬ NULL 

Результатом будет пустая таблица, так как в базе нет документов подходящих под условие. В данном случае мы убрали из текста запроса функцию ЕСТЬNULL, из-за того что она больше не несет никакого смысла, так как записи с NULL не попадают в результат запроса. 

Задачи на эту тему: