584 документа
← К списку

Использование функции ЕСТЬ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()»