Частой задачей при выборке данных является фильтрация этих данных по значениям NULL.
Чтобы отфильтровать данные используем конструкцию ЕСТЬ NULL.
Пример запроса:ВЫБРАТЬ
ПТУТ.Номенклатура.Ссылка,
ПТУТ.Номенклатура.Наименование,
ПТУТ.ХарактеристикаНоменклатуры.Наименование КАК ХарактеристикаНоменклатуры
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПТУ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУТ
ПО ПТУ.Ссылка = ПТУТ.Ссылка
ГДЕ
ПТУТ.ХарактеристикаНоменклатуры.Наименование ЕСТЬ NULL
Запросом выведется номенклатура из документов поступления, где характеристика номенклатуры NULL.
Если же наоборот нужно вывести номенклатуру, где характеристика не есть NULL, то используем выражение в условии запроса ЕСТЬ НЕ NULL
Еще одной частой задачей является заменить в запросе значение NULL на другое, определенное значение.
Поможет нам в этом функция ISNULL, русскоязычное ЕСТЬNULL.
Синтаксис: ЕСТЬNULL(<Поле>, <ПодставляемоеЗначение> )
Если поле имеет тип NULL, то оно заменяется на второй параметр функции.
Тип NULL всегда желательно заменять на какое-то определенное значение, например, на пустую строку (если переменная - строка) или 0 (если переменная - число), т.к. сравнение с типом NULL всегда дает ЛОЖЬ.
Пример запроса:ВЫБРАТЬ
МАКСИМУМ(ПТУ.Дата) КАК МаксДата,
ПТУТ.Номенклатура.Ссылка,
ПТУТ.Номенклатура.Наименование,
ISNULL(ПТУТ.ХарактеристикаНоменклатуры.Наименование, "НЕТ") КАК Характеристика
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПТУ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУТ
ПО ПТУ.Ссылка = ПТУТ.Ссылка
СГРУППИРОВАТЬ ПО
ПТУТ.Номенклатура.Ссылка,
ПТУТ.Номенклатура.Наименование,
ПТУТ.ХарактеристикаНоменклатуры.Наименование
Данным запросом выбираем последнюю дату поступления товара. Если характеристика номенклатуры есть NULL, то заменяем ее на "НЕТ".
Очень мощной функцией по формированию выходных данных в запросах является функция ВЫБОР.
Синтаксис функции:
ВЫБОР КОГДА <Выражение> ТОГДА <Выражение> ИНАЧЕ <Выражение> КОНЕЦ
Пример, часть запроса: ВЫБОР
КОГДА СУММА(ПоступлениеТоваровУслугТовары.Количество)=0 ТОГДА 0
ИНАЧЕ
(СУММА(ПоступлениеТоваровУслугТовары.Сумма)/СУММА(ПоступлениеТоваровУслугТовары.Количество))
КОНЕЦ КАК ЦЕНА
В этой части запроса мы проверяем равно суммарное количество нулю или нет. Если равно нулю, то цене присваиваем 0, если - нет, то рассчитываем цену как сумму поступивших товаров делённую на суммарное количество.
Данные примеры взяты из рабочих скриптов программы оптимизации складских остатков https://yadmina.ru/main/sklad/
Сборник:
Программирование