NULL в запросе 1C 8.5

NULL в запросе 1С

NULL в запросе 1С означает отсутствие данных, а не «пустое» или «ноль». Это важно, потому что ведет себя особо и влияет на результаты выборки, соединений и фильтров.

NULL — это специальный тип “значение‑отсутствует”, который возникает, например:

  • при левом соединении (ЛЕВОЕ СОЕДИНЕНИЕ), если связанных записей нет;
  • при несвязанном ссылочном поле;
  • при выражении, которое не вернуло данные (например, подзапрос без строк).

При этом NULL не равно ни пустой строке, ни пустой ссылке, ни 0, ни Неопределено во встроенном языке.

Как правильно сравнивать с NULL

В отличие от обычных значений, NULL нельзя сравнивать операторами = или <>. Любое сравнение с NULL дает результат Ложь, даже NULL = NULL.

Для проверки на отсутствие данных в запросе используется оператор ЕСТЬ NULL. Это единственный корректный способ проверить, является ли значение NULL.

ВЫБРАТЬ
   NULL ЕСТЬ NULL КАК ЭтоНулл, //вернет истину
   Таблица.Поле ЕСТЬ NULL КАК ПолеНулл //вернет Истину если поле NULL
ИЗ 
   &Таблица КАК Таблица

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

Когда нужно “заменить” NULL на что‑то осмысленное, используется встроенная функция ЕСТЬNULL(). Она похожа на предыдущую по написанию, но пишется слитно. Синтаксис следующий:

ЕСТЬNULL(<Выражение проверки>, <Значение замены>)

Если первый операнд (выражение проверки) окажется NULL, то функция вернет значение замены. Если же выражение проверки не NULL, то функция возвращает результат выражения. Например, если Документ.Наименование примет значение NULL, то функция ЕСТЬNULL(Документ.Наименование, «Наименование по умолчанию») вернет значение «Наименование по умолчанию», в противном случае вернет значение, которое содержит реквизит Документ.Наименование.

NULL в левом соединении в запросе

При использовании ЛЕВОЕ СОЕДИНЕНИЕ по строке, которой нет в правой таблице, соответствующие поля в правой части запроса будут NULL.

Приведем пример реальной задачи. В справочнике Номенклатура существует реквизит вес. В зависимости от типа номенклатуры делаются поправки на вес номенклатуры на определенный коэффициент. Коэффициенты хранятся в Регистре сведений ПоправкиВеса. Чтобы получить итоговый вес нужно перемножить вес, указанный в номенклатуре на Коэффициент из регистра сведений. Но ведь может быть ситуация, когда для вида номенклатуры не указан коэффициент. В таком случае значение коэффициента будет NULL. Но мы не можем производить арифметические операции с NULL. Если хотя бы одно значениее NULL — результат также будет NULL. Поэтому нужно привести отсутствующий коэффициент к какому то значению по умолчанию. Пусть оно будет равно 1. Тогда имеем такой запрос:

ВЫБРАТЬ
   Номенклатура.Ссылка КАК НоменклатураСсылка,
   Номенклатура.Вес * ЕСТЬNULL(ПоправкиВеса.Значение, 1) КАК ВесНоменклатуры,
   ВЫБОР 
      КОГДА ПоправкиВеса.Значение ЕСТЬ NULL 
         ТОГДА Истина
      ИНАЧЕ ЛОЖЬ
   КОНЕЦ КАК ЗначениеПоправокПоУмолчанию
ИЗ 
   Справочник.Номенклатура КАК Номенклатура
      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПоправкиВеса КАК ПоправкиВеса
         ПО Номенклатура.ВидНоменклатуры = ПоправкиВеса.ВидНоменклатуры 

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

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

Отправьте форму и мы вам перезвоним

Отправляя форму вы соглашаетесь с политикой конфиденциальности и даете согласие на обработку персональных данных компании ИП Рыжиченко Антону Ивановичу
Сайт itviar.ru использует cookie для персонализации и хранения настроек.
Отправляя форму вы соглашаетесь с политикой конфиденциальности и даете согласие на обработку персональных данных компании ИП Рыжиченко Антону Ивановичу