22 ноября, 2024

Null <> Неопределено

С непривычки, может показаться, что понятия “Неопределено” и “Null” – синонимы в языке 1С, как, например, “Пока” и “While”. На самом деле это два разных типа. Значения типа Null в основном встречаются в результатах запроса, при объединении таблиц или в значениях группировок, когда запрос строится с итогами по группировкам, а значения некоторых реквизитов запроса попадают не во все группировки.

Вот описание типов из документации:

Значение типа Неопределено используется прежде всего как значение по умолчанию (незаданное значение) для полей с составным типом. Например, если есть реквизит, который имеет составной тип, включающий СправочникСсылка.Товары и СправочникСсылка.Материалы, то значением реквизита по умолчанию будет Неопределено. Так же это значение используется и в других случаях для обозначения неуказанного значения.

Значение типа Null используется при работе с таблицами прикладных объектов. Оно обозначает отсутствие значения поля в выборке. Прежде всего оно используется в результатах запросов выполняющих левое или правое соединение. Поля невыбранных записей таблиц участвующих в таких соединениях будут иметь значение Null. Кроме того, значение типа Null будет иметь, например, реквизит иерархического справочника для элементов-групп, если в метаданных указано, что этот реквизит используется только для элементов не являющихся группами.

Наглядный пример, когда одновременно понадобилось использовать оба типа:

2011-05-30_115347

В этом примере “Обороты” – выборка из запроса, “СписокТочек” – список значений, одно и то же значение из выборки нужно проверить пустое или нет и принадлежит списку значений или нет. Т.е. обращаясь к результату запроса, сравниваем с Null, а проверяя результат поиска в списке, сравниваем с Неопределено.