Null, Есть Null и ЕстьNull в запросах 1С. Разбираемся кто есть кто

В языке запросов 1С платформа предоставляет специальные инструменты для работы с отсутствующими значениями, известными как NULL. Понимание особенностей использования литерала NULL, оператора ЕСТЬ NULL и функции ЕСТЬNULL является важным аспектом для начинающих программистов, работающих с запросами в 1С.

Тип значения Null

Тип значения Null – это переменная или поле с отсутствующим значением. Если реквизит объекта имеет один определенный тип, например, Справочник.Контрагенты, то незаполненное значение в запросе будет равно Справочник.Контрагенты.ПустаяСсылка. Если же реквизит имеет составной тип, то его незаполненное значение будет Неопределено, поскольку известны типы данных, но неизвестно, какой из них использовать. Например, в документе РеализацияТоваровУслуг реквизит ДокументОснование может быть как ЗаказПокупателя, так и СчетНаОплату. В случаях, когда неизвестны даже возможные типы, значением свойства является Null.

Когда в запросах может возникать NULL

Наиболее частый случай появления Null в запросах – это левое соединение таблиц (LEFT JOIN), когда в присоединяемой таблице отсутствуют строки, удовлетворяющие условиям соединения.

Пример кода: присоединение к таблице контрагентов таблицы договоров

ВЫБРАТЬ
Контрагенты.Наименование,
Договоры.Номер КАК НомерДоговора
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры
ПО Контрагенты.Ссылка = Договоры.Владелец

Если у контрагента отсутствует договор, в результате запроса поле НомерДоговора будет содержать Null

Обращение к реквизитам групп и элементов

При попытке получить реквизиты элемента для группы или наоборот, значение может быть NULL, поскольку такие реквизиты не существуют для соответствующего типа объекта.

Работа с Null в 1С

При обработке данных в 1С важно учитывать, что сравнение любого значения с Null всегда возвращает ЛОЖЬ, даже Null = Null. Для корректной работы используются специальные методы: оператор сравнения ЕСТЬ NULL и функция ЕСТЬNULL

Оператор ЕСТЬ NULL

Этот оператор проверяет, является ли значение Null. Пример использования:

ВЫБРАТЬ
Контрагенты.Наименование
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.Договор ЕСТЬ NULL

Важно! Простое сравнение (Договор = NULL) не сработает.

Функция ЕСТЬNULL

Позволяет заменить Null на заданное значение. Пример:

ВЫБРАТЬ
Контрагенты.Наименование,
ЕСТЬNULL(Договоры.Номер, "Нет договора") КАК НомерДоговора
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры
ПО Контрагенты.Ссылка = Договоры.Владелец

Если у контрагента нет договора, вместо Null подставится строка “Нет договора”.

Часто вместо Null подставляют пустое значение нужного типа

  • Пустую строку: ЕСТЬNULL(Договоры.Номер, “”)
  • Ноль: ЕСТЬNULL(Договоры.Сумма, 0)
  • Пустую ссылку: ЕСТЬNULL(Договоры.Партнер, Справочник.Партнеры.ПустаяСсылка)
  • Пустую дату: ЕСТЬNULL(Договоры.Дата, ДАТАВРЕМЯ(1,1,1,0,0,0))

Заключение

Null в 1С может появляться в запросах из-за соединений таблиц, реквизитов составных типов и некорректном обращении к реквизитам элементов и групп. Его нельзя сравнивать напрямую, но можно обработать с помощью ЕСТЬ NULL и ЕСТЬNULL. Важно отслеживать появление Null, чтобы данные в системе оставались корректными и удобными для анализа.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

6 + 1 =

К НАЧАЛУ