1С полезные конструкция ЕСТЬ NULL, функции ISNULL и ВЫБОР в запросах

Частой задачей при выборке данных является фильтрация этих данных по значениям NULL.
Чтобы отфильтровать данные используем конструкцию ЕСТЬ NULL.
Пример запроса:
ВЫБРАТЬ
ПТУТ.Номенклатура.Ссылка,
ПТУТ.Номенклатура.Наименование,
ПТУТ.ХарактеристикаНоменклатуры.Наименование КАК ХарактеристикаНоменклатуры
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПТУ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУТ
ПО ПТУ.Ссылка = ПТУТ.Ссылка
ГДЕ
ПТУТ.ХарактеристикаНоменклатуры.Наименование ЕСТЬ NULL


Запросом выведется номенклатура из документов поступления, где характеристика номенклатуры NULL.
Если же наоборот нужно вывести номенклатуру, где характеристика не есть NULL, то используем выражение в условии запроса  ЕСТЬ НЕ NULL

Еще одной частой задачей является заменить в запросе значение NULL на другое, определенное значение. 
Поможет нам в этом функция  ISNULL, русскоязычное ЕСТЬNULL.
Синтаксис: ЕСТЬNULL(<Поле>, <ПодставляемоеЗначение> )
Если поле имеет тип NULL, то оно заменяется на второй параметр функции.
Тип NULL всегда желательно заменять на какое-то определенное значение, например, на пустую строку (если переменная - строка) или 0 (если переменная - число), т.к. сравнение с типом NULL всегда дает ЛОЖЬ.

Пример запроса:
ВЫБРАТЬ
МАКСИМУМ(ПТУ.Дата) КАК МаксДата,
ПТУТ.Номенклатура.Ссылка,
ПТУТ.Номенклатура.Наименование,
ISNULL(ПТУТ.ХарактеристикаНоменклатуры.Наименование, "НЕТ") КАК Характеристика
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПТУ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУТ
ПО ПТУ.Ссылка = ПТУТ.Ссылка
СГРУППИРОВАТЬ ПО
ПТУТ.Номенклатура.Ссылка,
ПТУТ.Номенклатура.Наименование,
ПТУТ.ХарактеристикаНоменклатуры.Наименование


Данным запросом выбираем последнюю дату поступления товара. Если характеристика номенклатуры есть NULL, то заменяем ее на "НЕТ".

Очень мощной функцией по формированию выходных данных в запросах является функция ВЫБОР.
Синтаксис функции: 
ВЫБОР КОГДА <Выражение> ТОГДА <Выражение> ИНАЧЕ <Выражение> КОНЕЦ

Пример, часть запроса:

ВЫБОР
КОГДА СУММА(ПоступлениеТоваровУслугТовары.Количество)=0 ТОГДА 0
ИНАЧЕ
(СУММА(ПоступлениеТоваровУслугТовары.Сумма)/СУММА(ПоступлениеТоваровУслугТовары.Количество))
КОНЕЦ КАК ЦЕНА


В этой части запроса мы проверяем равно суммарное количество нулю или нет. Если равно нулю, то цене присваиваем 0, если - нет, то рассчитываем цену как сумму поступивших товаров делённую на суммарное количество.

Данные примеры взяты из рабочих скриптов программы оптимизации складских остатков  https://yadmina.ru/main/sklad/


Сборник: Программирование