Значение NULL в 1Cv8

Материал из КинтВики
Перейти к: навигация, поиск


Источник: http://kb.mista.ru/article.php?id=144&

NULL – отсутствующие значения. Не равны пробелу, пустой ссылке, Неопределено.

NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. (аналогично Неопределено)

NULL значения появляются в запросе в следующих ситуациях:

  • Внешнее соединение, при котором не было найдено соответствующей записи в другой таблице (при левом – во второй, при правом – в первой, при полном – в обоих)
  • Обращение к реквизитам элементов для группы и наоборот.
  • NULL в списке полей выборки (ВЫБРАТЬ)
  • Обращение к реквизитам для битой ссылки

Функция ЕСТЬNULL предназначена для замены значения NULL на другое значение. Является свернутым ВЫБОР…КОНЕЦ, но ЕСТЬNULL предпочтительнее.

ЕСТЬNULL (значение, РезультатЕслиNULL)
/* эквивалентно */
ВЫБОР
 КОГДА Значение ЕСТЬ NULL ТОГДА РезультатЕслиNULL
 ИНАЧЕ Значение
КОНЕЦ

ЕСТЬNULL отличается от ВЫБОР по следующим причинам:

  • При ЕСТЬNULL лучше читается запрос (проще)
  • При ЕСТЬNULL, если проверяется сложное выражение, то работает быстрее, поскольку вычисляется один раз
  • При ЕСТЬNULL выражение замены приводится к типу проверяемого выражения, если оно имеет тип Строка (длина) или Число (разрядность).

Нельзя проверять значения на NULL обычным равенством, потому что в SQL действует трехзначная логика – Истина, Ложь, NULL, и результатом такого сравнения будет UNKNOWN, что в 1С 8.0 аналогично ЛОЖЬ.

NULL <> 0, поэтому при левых внешних соединениях спр. Номенклатура с таблицами остатков, цен, Контрагентов со взаиморасчетами при отсутствии таких записей там будет NULL, который не равен 0. Лучшее решение – ЕСТЬNULL