В языке запросов 1С платформа предоставляет специальные инструменты для работы с отсутствующими значениями, известными как NULL. Понимание особенностей использования литерала NULL, оператора ЕСТЬ NULL и функции ЕСТЬNULL является важным аспектом для начинающих программистов, работающих с запросами в 1С.
Тип значения Null
Тип значения Null – это переменная или поле с отсутствующим значением. Если реквизит объекта имеет один определенный тип, например, Справочник.Контрагенты, то незаполненное значение в запросе будет равно Справочник.Контрагенты.ПустаяСсылка. Если же реквизит имеет составной тип, то его незаполненное значение будет Неопределено, поскольку известны типы данных, но неизвестно, какой из них использовать. Например, в документе РеализацияТоваровУслуг реквизит ДокументОснование может быть как ЗаказПокупателя, так и СчетНаОплату. В случаях, когда неизвестны даже возможные типы, значением свойства является Null.
Когда в запросах может возникать NULL
Наиболее частый случай появления Null
в запросах – это левое соединение таблиц (LEFT JOIN), когда в присоединяемой таблице отсутствуют строки, удовлетворяющие условиям соединения.
Пример кода: присоединение к таблице контрагентов таблицы договоров
ВЫБРАТЬ
Контрагенты.Наименование,
Договоры.Номер КАК НомерДоговора
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры
ПО Контрагенты.Ссылка = Договоры.Владелец
Если у контрагента отсутствует договор, в результате запроса поле НомерДоговора будет содержать Null
Обращение к реквизитам групп и элементов
При попытке получить реквизиты элемента для группы или наоборот, значение может быть NULL, поскольку такие реквизиты не существуют для соответствующего типа объекта.
Работа с Null в 1С
Оператор ЕСТЬ 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, чтобы данные в системе оставались корректными и удобными для анализа.