Как в коде 1С правильно проверить значение переменной на NULL?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки на платформе «1С:Предприятие 8» программисты часто сталкиваются с необходимостью обработки «пустых» значений. Особняком среди них стоит NULL — специальное значение, указывающее на отсутствие данных. В отличие от Неопределено или пустого значения типа (например, 0 для чисел или пустой строки), NULL ведет себя специфическим образом. В этой статье мы подробно разберем, как правильно идентифицировать это значение в программном коде, и выясним, какие методы являются наиболее эффективными.

Природа появления NULL в коде

Прежде чем переходить к методам проверки, давайте проанализируем ситуацию и выясним причину появления NULL в ваших переменных. По умолчанию новые переменные в языке 1С инициализируются значением Неопределено. Значение NULL практически никогда не возникает «само по себе». Рассмотрим основные источники его появления:

  1. Результаты запросов: Это самый частый случай. При использовании ЛЕВОЕ СОЕДИНЕНИЕ (или ПРАВОЕ СОЕДИНЕНИЕ), если в правой таблице не найдено соответствие, все поля этой таблицы в результате запроса примут значение NULL.
  2. Агрегатные функции: Если вы используете в запросе функцию СУММА или СРЕДНЕЕ по пустой выборке, результатом может стать NULL.
  3. Внешние источники данных: При получении данных через ADO, COM-соединение или при чтении файлов DBF/Excel значения, которые в источнике не заполнены, часто интерпретируются платформой как NULL.

Способ 1. Прямое сравнение (Оператор Равно)

Рассмотрим самый простой и быстрый способ. Во встроенном языке 1С (в отличие от языка запросов) оператор сравнения = корректно работает со значением NULL. Если вы точно знаете, что переменная может содержать либо число, либо NULL, используйте следующую конструкцию:


Если Переменная = Null Тогда
    // Обработка случая, когда значение отсутствует
    Переменная = 0;
КонецЕсли;

Важно: Обратите внимание, что слово Null пишется без кавычек — это литерал встроенного языка. Этот метод является самым производительным, так как процессор выполняет прямое сравнение значений без вызова дополнительных функций.

Способ 2. Использование функции ЗначениеЗаполнено()

Проанализируем ситуацию, когда мы не уверены, что именно пришло в переменную: NULL, Неопределено или просто пустая ссылка. В этом случае на помощь приходит системная функция ЗначениеЗаполнено().

Эта функция возвращает Ложь, если значение переменной является «пустым» для своего типа. Разберем по шагам, что именно считает «пустотой» эта функция:

Для нашей задачи по замене отсутствующего числа на ноль код будет выглядеть так:


Если Не ЗначениеЗаполнено(Переменная) Тогда
    Переменная = 0;
КонецЕсли;

Этот метод считается более «безопасным» и универсальным, так как он страхует разработчика от различных типов неопределенности данных. Однако помните: если число 0 для вашей бизнес-логики является валидным заполненным значением, этот метод вам не подойдет, так как он приравняет 0 к «пустоте».

Способ 3. Проверка типа значения

Если нам нужно строго убедиться, что в переменной лежит именно NULL, и никакое другое значение, мы можем использовать функцию ТипЗнч(). Посмотрим на пример кода:


Если ТипЗнч(Переменная) = Тип("Null") Тогда
    Переменная = 0;
КонецЕсли;

Такой подход часто встречается в коде, написанном опытными разработчиками для обеспечения максимальной наглядности, однако с технической точки зрения он идентичен простому сравнению Переменная = Null, но работает чуть медленнее из-за вызова функций определения типа.

Принципиальное отличие: Код vs Запросы

Выясним важный нюанс, который часто путает новичков. В языке запросов 1С логика работы с NULL строится по стандартам SQL (трехуровневая логика).

В запросе: Выражение ГДЕ Поле = NULL всегда будет возвращать Ложь, даже если в поле действительно NULL. Для проверки в запросах используется специальный оператор ЕСТЬ NULL.

В коде (встроенном языке): Оператор = Null работает как обычное сравнение.

Рассмотрим пример правильной обработки NULL еще на этапе получения данных. Это «золотой стандарт» разработки — стараться избавиться от NULL как можно раньше, чтобы не плодить проверки в коде:


// Пример фрагмента текста запроса
"ВЫБРАТЬ
|   ЕСТЬNULL(Продажи.СуммаОборота, 0) КАК Сумма
|ИЗ
|   РегистрНакопления.Продажи.Обороты КАК Продажи"

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

Опасность «заражения» NULL

Посмотрим на типичную ошибку. Что будет, если попытаться сложить число и NULL во встроенном языке?


// Если Переменная = Null
Результат = Переменная + 10; // Вызовет ошибку: «Операция не определена для данных значений»

В отличие от классического SQL, где NULL + 10 = NULL, 1С выдаст критическую ошибку выполнения. Именно поэтому, если вы работаете с результатами левых соединений, проверка на NULL перед арифметическими операциями обязательна.

Подведем итоги

Мы проанализировали основные способы проверки значения на NULL. Выбор метода зависит от контекста:

  1. Если важна максимальная скорость и вы проверяете конкретно результат запроса — используйте Если Переменная = Null Тогда.
  2. Если вам нужна универсальная проверка на любое отсутствие данных (включая Неопределено) — используйте Если Не ЗначениеЗаполнено(Переменная) Тогда.
  3. Если вы хотите писать отказоустойчивый код — используйте ЕСТЬNULL(Поле, 0) прямо в тексте запроса.

Помните, что NULL — это не ноль и не пустая строка. Это отсутствие значения как такового, и правильная его обработка — признак профессионального подхода к разработке на платформе 1С.

← На главную