В ходе работы с запросами любому программисту приходится так или иначе взаимодействовать с пустыми значениями. Что мы понимаем под пустым значением?
Пустое значение – это или отсутствие значения, или значение по умолчанию для типа данных. С примитивными типами все довольно просто: значением по умолчанию является некое начальное значение, служащее точкой отсчета.
Видео эксперта
Виды пустых значений
Рассмотрим типы пустых значений, которые могут встретиться или потребоваться в запросе.
- Для типа Число – пустым значением является ноль – 0.
- Для типа Строка – пустая строка – «».
- Для типа Дата – первое января первого года – 01.01.0001 00:00:00. Именно с этой даты ведется отсчет времени в 1С.*
- Для типа Булево – значением по умолчанию, технически, является Ложь, но логически оба значения типа являются заполненными. Поэтому принятие решения о том пустое значение Ложь или нет, основывается на логике конкретного алгоритма.
*Будьте внимательны, вне 1С существуют различные системы счисления дат с разными точками отсчета.
Отсутствующее значение в полном смысле соответствует только типу Null. Этот тип содержит лишь одно значение, которое обозначает отсутствие значения.
Похожий на него тип Неопределено тоже содержит лишь одно значение, но Неопределено означает не отсутствие данных, а лишь невозможность определить значение по умолчанию для типа. Неопределено является значением по умолчанию для составных, в том числе не определенных явно, типов. Например, значение в новой строке таблицы значений в колонке, для которой тип не определен явно.
Со ссылочными типами намного меньше неопределенности. Все ссылочные типы предусматривают пустое значение. Пустое значение — это та же самая ссылка с указанием типа данных, но без уникального идентификатора конкретного значения. Благодаря этому мы можем обращаться с пустой ссылкой как с обычной и применять к ней все предусмотренные платформой методы, работая с ней как с полноценным значением.
Работа с пустыми значениями в запросе
Независимо от того, необходимо ли вам явно ввести в результат запроса пустое значение или сравнить с ним существующие значения, необходимо знать, каким образом описывать пустые значения в запросе.
Типы Число, Строка, Булево описываются в запросе как во встроенном языке:
ВЫБРАТЬ
0 КАК ПримерТипаЧисло,
"Привет мир" КАК ПримерТипаСтрока,
Истина КАК ПримерТипаБулево
Неопределено, являясь по существу примитивным типом, описывается аналогично:
Выбрать
Партии.Период Из РегистрНакопления.Партии Как Партии
Где Остатки.ДокументПартии = Неопределено
Пустые ссылочные значения определяются немного сложнее. У всех ссылочных объектов предусмотрено предопределенное служебное значение ПустаяСсылка. Благодаря этому есть возможность единым способом выбрать пустую ссылку – через функцию Значение:
Выбрать Значение(Справочник.Номенклатура.ПустаяСсылка) Как Пустая Номенклатура
Возможности работы со значениями типа Null несколько богаче. Как и другие примитивные типы, Null описывается так же, как во встроенном языке. Помимо этого, предусмотрены специальный оператор Есть Null и функция ЕстьNull.
- Оператор Есть Null позволяет создать логическое выражение сравнивающее выбранное значение со значением Null.
- Функция ЕстьNull возвращает первый аргумент, если он не равен Null, и второй аргумент в обратном случае.
Выражения, определяющие пустые значения, можно использовать в любых разделах запроса поддерживающих выражения. Например, вы можете добавить пустую ссылку в секцию Выбрать или проверку на Null в Условие.
Практические примеры
Проверка на пустую ссылку
С использованием функции Значение
Выбрать
Товары.Ссылка Как Номенклатура,
Товары.Ссылка = Значение(Справочник.Номенклатура.ПустаяСсылка) Как
ЭтаСсылкаПустая
Из втТовары Как втТовары
С использованием оператора Есть Null
Выбрать
Товары.Ссылка Как Номенклатура,
Товары.Ссылка Есть Null Как ЭтаСсылкаПустая
Из втТовары Как втТовары
Null при левом или полном соединении
Проверка на Null
Пример демонстрирует частую практическую ситуацию, когда при левом соединении, для первой таблицы не находится соответствия во второй. В этом случае все поля второй таблицы будут равны Null.
Выбрать
втТовары.Ссылка Как Номенклатура,
Остатки.КоличествоОстаток Как Количество,
Остатки.КоличествоОстаток Есть Null Как НетОстатка
Из втТовары как втТовары
Левое Соединение РегистрНакопления.ТоварыНаСкладах.Остатки Как
Остатки
По втТовары.Ссылка = Остатки.Номенклатура
Обработка Null-значений
Модификация предыдущего запроса для демонстрации часто встречающейся методики по получению каких-либо значений по умолчанию, взамен отсутствующих. В данном примере с использованием функции ЕстьNull, производится замена отсутствующего значения остатка, на логически правильное 0.
Выбрать
втТовары.Ссылка Как Номенклатура,
ЕстьNull(Остатки.КоличествоОстаток, 0) Как Количество
Из втТовары как втТовары
Левое Соединение РегистрНакопления.ТоварыНаСкладах.Остатки Как
Остатки
По втТовары.Ссылка = Остатки.Номенклатура
В рамках этой статьи мы рассмотрели различные типы пустых значений и их свойства, изучили способы определения различных типов пустых значений в запросах, а в практической части убедились в простоте применения рассмотренного материала.
консультация эксперта
самые свежие новости 1 раз в месяц