← Назад к вопросам

Что такое NULL, Неопределено, ПустаяСсылка и БитаяСсылка в 1С? Чем они отличаются?

2.0 Middle🔥 181 комментариев
#Объекты метаданных#Стандарты разработки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

NULL, Неопределено, ПустаяСсылка и БитаяСсылка в 1С

Это четыре принципиально разных значения, которые представляют различные состояния отсутствия или некорректности данных в 1С.

Неопределено

Неопределено — это специальное значение, которое может быть присвоено переменной любого типа:

Переменная = Неопределено;

Если Переменная = Неопределено Тогда
    Сообщение("Переменная не инициализирована");
КонецЕсли;
  • Тип: универсальное значение для всех типов
  • Использование: инициализация переменных, обозначение отсутствия значения
  • Проверка: = Неопределено или <> Неопределено
  • Контекст: используется при разработке, когда переменная еще не получила значение

ПустаяСсылка

ПустаяСсылка — это пустая (нулевая) ссылка на объект справочника или документа:

Ссылка = Справочники.Контрагенты.ПустаяСсылка();

Если Ссылка = Справочники.Контрагенты.ПустаяСсылка() Тогда
    Сообщение("Не выбран контрагент");
КонецЕсли;

// Или проще
Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
    Сообщение("Не выбран контрагент");
КонецЕсли;
  • Тип: относится к типу данных (Справочник, Документ, Перечисление)
  • Значение: существует, но указывает на "ничто"
  • Использование: обозначает, что ссылка не установлена, элемент не выбран
  • Типичный случай: поле формы, где контрагент не выбран

БитаяСсылка

БитаяСсылка — это ссылка на удалённый объект (элемент справочника или документ был удалён):

// Получаем элемент
Элемент = Справочники.Контрагенты.НайтиПоКоду(1);

// Удаляем его
Элемент.Удалить();

// Теперь Ссылка содержит БитаяСсылка
Если БитаяСсылка(Ссылка) Тогда
    Сообщение("Ссылка указывает на удалённый объект");
КонецЕсли;
  • Тип: специальное состояние ссылки на справочник/документ
  • Причина: объект был удалён, но на него остались ссылки в других местах
  • Проверка: функция БитаяСсылка(Значение) возвращает Истина
  • Опасность: может привести к ошибкам при работе с данными
  • Решение: регулярная очистка битых ссылок, каскадное удаление

NULL в контексте 1С

NULL — это скорее концепция из SQL/баз данных, но в платформе 1С часто используют следующие аналоги:

// В SQL запросе
ВЫБРАТЬ
    Контрагенты.Наименование,
    СЛУЧАЙ
        КОГДА Контрагенты.ИНН = NULL ТОГДА "ИНН не заполнен"
        ИНАЧЕ Контрагенты.ИНН
    КОНЕЦ
ИЗ Справочника.Контрагенты Как Контрагенты
  • Контекст: используется в SQL запросах при работе с БД
  • Эквивалент: в 1С коде это Неопределено или ПустаяСсылка
  • Обработка: ЕСТЬ NULL, НЕ ЕСТЬ NULL в запросах

Сравнительная таблица

ОсобенностьНеопределеноПустаяСсылкаБитаяСсылкаNULL
Тип данныхУниверсальныйСсылочныйСсылочныйSQL
СуществуетНет значенияПустая ссылкаУдалённый объектОтсутствует
Проверка= НеопределеноЗначениеЗаполнено()БитаяСсылка()IS NULL
Допускается вЛюбой типТолько ссылкиТолько ссылкиБД
ПроблемаОшибка при вычисленииЛогическая ошибкаОшибка при доступеПропуски данных

Практические примеры и ошибки

// ❌ Ошибка: попытка обращения к БитаяСсылка
Элемент = БитаяСсылка;
Название = Элемент.Наименование; // ОШИБКА!

// ✅ Правильно: проверяем перед использованием
Если НЕ БитаяСсылка(Элемент) И ЗначениеЗаполнено(Элемент) Тогда
    Название = Элемент.Наименование;
КонецЕсли;

// ✅ Инициализация переменной
Контрагент = Справочники.Контрагенты.ПустаяСсылка();

// ✅ Проверка результата функции
НайденныйЭлемент = Справочники.Товары.НайтиПоНаименованию("Товар", Ложь);
Если Найденный Элемент = Справочники.Товары.ПустаяСсылка() Тогда
    Сообщение("Товар не найден");
КонецЕсли;

Рекомендации

  1. Используй ЗначениеЗаполнено() — для проверки незаполненности ссылок
  2. Проверяй БитаяСсылка() — перед использованием ссылок в критичных местах
  3. Инициализируй переменные — избегай Неопределено в продакшене
  4. Логируй удаления — чтобы отслеживать появление битых ссылок
  5. Обрабатывай NULL в SQL — используй ЕСЛИ или COALESC()