Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

1C_ERR_CAST_TO_BOOLEAN 1С:Предприятие и СУБД

Ошибка 1С: Преобразование значения к типу Булево не может быть выполнено

Обновлено: 25.08.2026 · Официальная документация ↗
  • Аварийная остановка программы в условных операторах Если <Выражение> Тогда или тернарных операторах ?(<Выражение>, ...).
  • Текст ошибки: {Модуль(Строка)}: Преобразование значения к типу Булево не может быть выполнено.
  • Сбой при подстановке в условие переменных типа Строка, Число, Неопределено или ссылок БД без явного сравнения.

1. Причина строгой типизации булевых выражений в 1С

В отличие от JavaScript, PHP или Python, во встроенном языке 1С:Предприятие нет автоматического неявного приведения произвольных типов к булеву. Значения 0, 1, пустая строка "" или Неопределено НЕ конвертируются автоматически в Истина или Ложь.

Внутри условия Если ... Тогда должно находиться выражение, строго возвращающее тип Булево.

2. Анализ частых ошибок и их исправление

Ошибка 1: Использование числовых флагов (C/JS стиль)

// НЕПРАВИЛЬНО (Флаг = 1 или 0):
Если Флаг Тогда // Ошибка: Преобразование к Булево не может быть выполнено!

// ИСПРАВЛЕНИЕ:
Если Флаг = 1 Тогда
// ИЛИ явное приведение:
Если Булево(Флаг) Тогда // Булево(1) -> Истина, Булево(0) -> Ложь

Ошибка 2: Проверка заполненности ссылки без функции ЗначениеЗаполнено()

// НЕПРАВИЛЬНО (Контрагент содержит СправочникСсылка или Неопределено):
Если Контрагент Тогда // Ошибка!

// ИСПРАВЛЕНИЕ:
Если ЗначениеЗаполнено(Контрагент) Тогда
    // Выполняется, если ссылка не пустая и не Неопределено
КонецЕсли;

Ошибка 3: Логические операции над небулевыми типами

// НЕПРАВИЛЬНО:
Если Реквизит1 И Реквизит2 Тогда // Если хотя бы один не Булево — сбой!

// ИСПРАВЛЕНИЕ:
Если ЗначениеЗаполнено(Реквизит1) И ЗначениеЗаполнено(Реквизит2) Тогда
    // Логика
КонецЕсли;

Ошибка 4: Неверная работа функции Булево() для строк

Функция Булево("Строка") вызовет исключение! Функция платформы Булево() преобразует только числа (0 -> Ложь, не 0 -> Истина) и сам тип Булево. Для строк используйте явное сравнение:

ЗначениеБулево = (ВРег(СокрЛП(СтроковоеЗначение)) = "ИСТИНА" ИЛИ СокрЛП(СтроковоеЗначение) = "1");
💡 Практика специалистов: Самый безопасный способ проверки любых флагов неясного типа в 1С — прямое сравнение с эталоном: 'Если МойФлаг = Истина Тогда'. Это исключает падение программы при любом типе переменной.

Частые вопросы (FAQ)

Что возвращает Булево(Неопределено) и Булево(Null)?

Оба вызова завершатся ошибкой 'Преобразование значения к типу Булево не может быть выполнено'. Функцию Булево() можно применять только к числам и булевым значениям.

Как безопасно проверить реквизит формы, который может быть не инициализирован?

Используйте конструкцию: 'Если Объект.Свойство = Истина Тогда'. Прямое сравнение с литералом Истина безопасно вернет Ложь, даже если реквизит содержит Неопределено или Null.

Почему тернарный оператор '?(Флаг, А, Б)' падает с этой ошибкой?

Первый операнд тернарного оператора '?(...)' обязан строго иметь тип Булево. Если туда передано число или ссылка, возникнет ошибка приведения типа.

Как проверить результат SQL-запроса на истинность поля?

В запросе используйте конструкцию ВЫБОР КОГДА Поле ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ, либо в коде сравнивайте: 'Если Выборка.БулевоПоле = Истина Тогда'.

Полезные материалы
Рекомендуем