Конструкция ЕСТЬ 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 не попадают в результат запроса.
Задачи на эту тему:
- Задача № 10. Определить общее количество ингредиентов для каждой продукции с отбором
- Задача № 11. Определить продукцию, у которой нет ингредиентов
- Задача № 30. Вывести самую высокую розничную цену для номенклатуры с видом номенклатуры «Готовая продукция».
- Задача № 29. Вывести себестоимость и розничную цену для всей номенклатуры с видом номенклатуры «Полуфабрикат»
- Задача № 34. Вывести итоговую себестоимость для товара «Торт Прага»
- Задача № 33. Вывести себестоимость для всех ингредиентов товара «Торт Прага»
- Задача № 35. Вывести себестоимость, розничную цену и наценку для товара "Торт Прага"
- Задача 65. Выборка элементов из журнала документов
- Задача № 27. Вывести себестоимость для всей номенклатуры с видом номенклатуры «Готовая продукция»
- Задача № 28. Вывести себестоимость и розничную цену для всей номенклатуры.
- Задача № 12. Определить продукцию с самым большим количеством ингредиентов (по количеству)
- Задача № 14. Определить общий вес каждой продукции. Вес рассчитать по ингредиентам, входящих в состав продукции с отбором по виду продукции
- Задача № 15. Определить общий вес каждой продукции. Вес рассчитывать по ингредиентам, входящих в состав продукции с отбором виду продукции и с учетом коэффициента пересчета.
- Задача № 32. Вывести закупочные цены для каждого ингредиента товара «Торт Прага»
- Задача № 13. Определить вес каждой продукции по ингредиентам, входящих в ее состав. Применение агрегатных функций
- Задача № 36. Вывести итоговую себестоимость, розничные цены и наценку для всех товаров с видом «Готовая продукция».
- Задача № 21. Применение агрегатных функций к элементам табличных частей по определенному условию
- Задача № 5. Выборка пустых групп из справочника