← Назад к вопросам
Что такое 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 |
| Допускается в | Любой тип | Только ссылки | Только ссылки | БД |
| Проблема | Ошибка при вычислении | Логическая ошибка | Ошибка при доступе | Пропуски данных |
Практические примеры и ошибки
// ❌ Ошибка: попытка обращения к БитаяСсылка
Элемент = БитаяСсылка;
Название = Элемент.Наименование; // ОШИБКА!
// ✅ Правильно: проверяем перед использованием
Если НЕ БитаяСсылка(Элемент) И ЗначениеЗаполнено(Элемент) Тогда
Название = Элемент.Наименование;
КонецЕсли;
// ✅ Инициализация переменной
Контрагент = Справочники.Контрагенты.ПустаяСсылка();
// ✅ Проверка результата функции
НайденныйЭлемент = Справочники.Товары.НайтиПоНаименованию("Товар", Ложь);
Если Найденный Элемент = Справочники.Товары.ПустаяСсылка() Тогда
Сообщение("Товар не найден");
КонецЕсли;
Рекомендации
- Используй
ЗначениеЗаполнено()— для проверки незаполненности ссылок - Проверяй
БитаяСсылка()— перед использованием ссылок в критичных местах - Инициализируй переменные — избегай Неопределено в продакшене
- Логируй удаления — чтобы отслеживать появление битых ссылок
- Обрабатывай NULL в SQL — используй
ЕСЛИилиCOALESC()