Значение 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