Использование функции ЕСТЬNULL()
страницаИспользование функции ЕСТЬNULL()
Ранее в разделе «Как получить данные из разных таблиц для одного и того же поля» (рис. 11.29) вы узнали, что в результате соединения таблиц могут быть получены значения NULL. Они обозначают неуказанные (отсутствующие) значения.
Например, в предыдущем примере (рис. 11.65) такие значения содержатся в полях Дата и Номер для элемента Шланг резиновый и для группы Радиодетали, потому что для этих элементов нет подходящих записей в таблице регистра Цены.
Особенность значения NULL заключается в том, что это значение существует только в языке запросов. Во встроенном языке попытка использовать такое значение приведет к ошибке исполнения.
Для того чтобы во встроенном языке можно было свободно анализировать поля результата запроса, которые могут содержать значение NULL, используется функция языка запросов ЕСТЬNULL(). Первым параметром в эту функцию передается поле выборки запроса, а вторым параметром – значение, которое будет использовано в том случае, если переданное поле содержит NULL (листинг 11.56).
Листинг 11.56. Использование функции ЕСТЬNULL()
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование,
| ЕСТЬNULL(НакладнаяМатериалы.Дата, 0) КАК Дата,
| ЕСТЬNULL(НакладнаяМатериалы.Номер, 0) КАК Номер
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ НакладнаяМатериалы КАК НакладнаяМатериалы
| ПО Номенклатура.Ссылка = НакладнаяМатериалы.Материал
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура.Ссылка ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ";
Если теперь к этому запросу вы добавите поле Номенклатура.ЭтоГруппа, то вывод результата можно сделать более понятным и удобным (листинг 11.57, рис. 11.66).
Листинг 11.5****7. Использование функции ЕСТЬNULL()
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст = "ВЫБРАТЬ
| ПриходнаяНакладнаяМатериалы.Материал,
| ПриходнаяНакладнаяМатериалы.Ссылка.Дата,
| ПриходнаяНакладнаяМатериалы.Ссылка.Номер
|ПОМЕСТИТЬ НакладнаяМатериалы
|ИЗ
| Документ.ПриходнаяНакладная.Материалы КАК ПриходнаяНакладнаяМатериалы
|ГДЕ
| ПриходнаяНакладнаяМатериалы.Ссылка.Номер = &НомерНакладной";
Запрос.УстановитьПараметр("НомерНакладной", "000000001");
Запрос.Выполнить();
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Наименование КАК Наименование,
| ЕСТЬNULL(НакладнаяМатериалы.Дата, 0) КАК Дата,
| ЕСТЬNULL(НакладнаяМатериалы.Номер, 0) КАК Номер
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ НакладнаяМатериалы КАК НакладнаяМатериалы
| ПО Номенклатура.Ссылка = НакладнаяМатериалы.Материал
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура.Ссылка ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ";
РезультатЗапроса = Запрос2.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Сообщить("Группа: " + Выборка.Наименование);
ИначеЕсли Выборка.Дата = 0 Тогда
Сообщить("Материал: " + Выборка.Наименование + " – поступлений нет");
Иначе
Сообщить("Материал: " + Выборка.Наименование + " Дата: " + Выборка.Дата + " Номер: " + Выборка.Номер);
КонецЕсли;
КонецЦикла;

Рис. 11.66. Использование функции «ЕСТЬNULL()»