Null в запросе
Значение NULL и методы работы с ним "Есть Null" и "ЕстьNull".
Значение Null означает что переменная(поле) не содержит значения. Возникает оно например, при левом соединении таблиц, когда в правой таблице нет подходящего значения для левой таблицы. Присоединим к таблице Контрагенты таблицу Договоры:
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Контрагент,
| ДоговорыКонтрагентов.Ссылка КАК Договор
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ПО Контрагенты.ОсновнойДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка"
Если при выполнении данного текста запроса у контрагента не будет договора, то тогда в результате будет примерно следующее:
Контрагент | Договор |
Интенсивник ООО | Договор подряда |
Рога и копыта АО | NULL |
Колобок и Ко | Договор поставки |
Значение Null не имеет визуального представления - будет показываться как пустая строка.
Чтобы корректно обрабатывать такие ситуации и созданы методы "Есть Null" и "ЕстьNull".
Есть Null
Данное логическое выражение проверяет является ли значение значением Null. При проверке обязательно нужно использовать данное выражение т.к. сравнивать значение с Null(Договор.Ссылка = Null) не имеет смысла, это не даст необходимого результата.
Пример:
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Контрагент,
| ВЫБОР
| КОГДА ДоговорыКонтрагентов.Ссылка ЕСТЬ NULL
| ТОГДА ""Договора нет""
| ИНАЧЕ ДоговорыКонтрагентов.Ссылка
| КОНЕЦ КАК Договор
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ПО Контрагенты.ОсновнойДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка
|ГДЕ
| (НЕ ДоговорыКонтрагентов.Ссылка ЕСТЬ NULL )"
Здесь выражение используется в условии и в конструкции выбора в одном из выбираемых полей. Конечно бессмысленно в выбираемом поле ставить конструкцию выбора т.к. такие значения отсекаются в условии, это сделано только для ознакомления.
ЕстьNull
Метод позволяет заменять значение Null на выбранное нами значение.
Пример:
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Контрагент,
| ЕСТЬNULL(ДоговорыКонтрагентов.Ссылка, ""Договора нет"") КАК Договор
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ПО Контрагенты.ОсновнойДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка"