Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

Ошибка 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-запроса на истинность поля?

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