Ошибка «Преобразование значения к типу Булево не может быть выполнено» — одна из самых распространённых проблем в 1С:Предприятие, с которой сталкиваются как начинающие, так и опытные разработчики. Она возникает, когда система пытается интерпретировать значение (например, строку, число или NULL) как логическое (Истина/Ложь), но не может этого сделать из-за несовместимости типов. Чаще всего ошибка проявляется в отчётах, обработках или при выполнении программного кода с условными операторами.

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

Если вы видите это сообщение в 1С 8.3 или более ранних версиях, не спешите перезапускать платформу или восстанавливать базу из бэкапа. В 90% случаев проблема решается за 5–10 минут — нужно лишь понять, какое именно значение не может быть преобразовано и почему.

1. Почему возникает ошибка преобразования к Булево?

Логический тип (Булево) в принимает только два значения: Истина или Ложь. Ошибка появляется, когда система пытается привести к этому типу данные, которые:

  • 📌 Явно не являются логическими (например, строка "Да" вместо Истина).
  • 📌 Имеют неопределённое значение (NULL или Неопределённо).
  • 📌 Приходят из внешних источников (например, SQL-запросы, JSON, XML) в некорректном формате.
  • 📌 Являются результатом вычислений с ошибками (например, деление на ноль в условии).

Типичный пример: в коде есть проверка Если Значение Тогда ..., где Значение — это строка или число. Платформа автоматически пытается преобразовать его к Булево, но терпит неудачу. Например:

Если "2026" Тогда  // Ошибка! Строка не может быть преобразована к Булево

Сообщить("Условие истинно");

КонецЕсли;

Ещё одна частая причина — неявные преобразования в запросах. Если в результате запроса возвращается поле с типом NULL (например, из SQL-базы), а в коде оно используется в условии без явной проверки, платформа выдаст ошибку.

💡

Всегда проверяйте типы данных перед использованием в условиях! Функция ТипЗнч(Значение) поможет избежать неявных преобразований.

2. Где чаще всего встречается ошибка?

Ошибка может проявиться в разных частях системы, но есть «горячие точки», на которые стоит обратить внимание в первую очередь:

Место возникновения Типичный сценарий Пример кода с ошибкой
Условные операторы (Если...) Попытка использовать небулево значение в условии Если ПолучаемЗначение() Тогда
Запросы к базе данных Поле запроса содержит NULL или несовместимый тип Выбрать ПолеКакЛогическое Из Таблица
Обработки и отчёты Параметры или результаты вычислений не приведены к типу Параметры.Флаг = ПолучаемФлаг();
Обмен данными (JSON, XML) Внешний источник передаёт строку вместо true/false Флаг = JSONДанные.Поле;
Работа с коллекциями Попытка использовать элемент массива как условие Если Массив[0] Тогда

Особенно коварны ошибки в динамических запросах, где тип возвращаемого поля может меняться в зависимости от данных. Например, если в одном случае поле содержит 1 (которое можно интерпретировать как Истина), а в другом — NULL, код будет работать нестабильно.

📊 Где вы чаще всего сталкиваетесь с ошибкой Булево в 1С?
В условных операторах
В запросах к базе
В обработках/отчётах
При обмене данными
Другое

3. Как диагностировать проблему: пошаговая инструкция

Чтобы быстро найти источник ошибки, следуйте этому алгоритму:

Включите режим отладки (Сервис → Параметры → Отладка)

Поставьте точку останова на строке с ошибкой

Проверьте тип проблемного значения функцией ТипЗнч()

Используйте Сообщить() для вывода промежуточных данных

Просмотрите стек вызовов (Отладка → Стек вызовов)

-->

Пример диагностики:

Процедура ПроверитьФлаг(Значение)

// Ставим точку останова здесь

Сообщить("Тип значения: " + ТипЗнч(Значение)); // Выведет, например, "Строка"

Сообщить("Значение: " + Значение); // Покажет конкретное значение, например "Да"

Если Значение Тогда // Здесь возникнет ошибка, если Значение - строка

Сообщить("Условие истинно");

КонецЕсли;

КонецПроцедуры

Если ошибка возникает в запросе, проверьте структуру результата:

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| Таблица.ПолеКакЛогическое КАК Флаг

|ИЗ

| Таблица КАК Таблица";

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(ТипЗнч(Выборка.Флаг)); // Если здесь NULL - будет ошибка

КонецЦикла;

💡

В 80% случаев ошибка возникает из-за того, что разработчик не учёл возможность NULL в данных. Всегда проверяйте значения на ЗначениеЗаполнено() перед использованием в условиях!

4. Типичные ошибки и как их исправить

Рассмотрим наиболее распространённые сценарии и способы их исправления.

4.1. Строка вместо Булево

Если в условии используется строка (например, "Да", "Нет", "1"), её нужно явно преобразовать:

// Ошибка:

Если ПолучаемСтрокуФлага() Тогда

// Исправлено:

Если ПолучаемСтрокуФлага() = "Да" Тогда

или

Флаг = (ПолучаемСтрокуФлага() = "Да"); // Явное преобразование к Булево

4.2. NULL или Неопределённо

Всегда проверяйте значения на заполненность:

Если ЗначениеЗаполнено(Поле) И Поле Тогда

// Действия для Истина

ИначеЕсли ЗначениеЗаполнено(Поле) И НЕ Поле Тогда

// Действия для Ложь

Иначе

// Поле не заполнено (NULL)

КонецЕсли;

4.3. Числовые значения

Числа 0 и 1 часто используются как замена Ложь/Истина, но в это не работает автоматически:

// Ошибка:

Если 1 Тогда // 1 не является Булево!

// Исправлено:

Если ПолучаемЧисло() <> 0 Тогда

4.4. Ошибки в запросах

Если поле запроса может содержать NULL, используйте ВЫРАЗИТЬ или ЕСТЬNULL:

Запрос.Текст = "

ВЫБРАТЬ

ЕСТЬNULL(Таблица.ЛогическоеПоле, ЛОЖЬ) КАК БезопасныйФлаг

ИЗ

Таблица КАК Таблица";

Что делать, если ошибка возникает в стандартной обработке?

Если ошибка появляется в типовой конфигурации (например, в отчёте из 1С:Бухгалтерия), не редактируйте её код напрямую! Вместо этого:

1. Создайте копию обработки через Файл → Сохранить как....

2. Исправьте ошибку в копии.

3. Используйте модифицированную версию, не затрагивая оригинал.

Это сохранит поддержку обновлений конфигурации.

5. Сложные случаи: когда стандартные методы не помогают

Иногда ошибка возникает из-за системных проблем, а не очевидных ошибок в коде. Рассмотрим такие scenarios:

5.1. Повреждение данных в базе

Если в таблице базы данных хранятся некорректные значения (например, вместо 0/1 записано "Y/N"), это может вызывать ошибку при чтении. Решение:

  • 🛠️ Проверить целостность базы (Тестирование и исправление в Конфигураторе).
  • 🛠️ Выполнить запрос напрямую к SQL-серверу и проверить проблемные записи.
  • 🛠️ Исправить данные вручную или через обработку.

5.2. Конфликты при обмене данными

При интеграции с внешними системами (например, через REST API или компоненту "1С:Интеграция") логические значения могут передаваться в неожиданном формате:

  • 🔄 Проверьте формат передачи данных (например, true/false vs 1/0).
  • 🔄 Используйте промежуточное преобразование:
    Флаг = JSONДанные.Поле = "true";  // Явное сравнение со строкой

5.3. Ошибки в расширениях конфигурации

Если ошибка появилась после установки расширения, проверьте:

  • 🔍 Совместимость версий расширения и основной конфигурации.
  • 🔍 Переопределённые процедуры, где мог измениться тип возвращаемого значения.
  • 🔍 Логику подключаемых обработчиков событий.
💡

Для диагностики сложных случаев используйте Журнал регистрации (Администрирование → Журнал регистрации). Фильтруйте записи по времени возникновения ошибки — это поможет найти связанные события.

6. Профилактика: как избежать ошибок в будущем

Чтобы минимизировать риск возникновения ошибок преобразования к Булево, следуйте этим рекомендациям:

  • 🛡️ Всегда проверяйте типы данных перед использованием в условиях. Функции ТипЗнч() и ЗначениеЗаполнено() — ваши лучшие помощники.
  • 🛡️ Используйте явные преобразования:
    Флаг = Булево(ПолучаемЗначение());  // Явное приведение типа
  • 🛡️ Документируйте формат данных в обменах и API. Например, если внешняя система передаёт флаги как "Y"/"N", зафиксируйте это в техническом задании.
  • 🛡️ Тестируйте граничные случаи: пустые значения, NULL, неожиданные типы данных.

Для командной разработки полезно внедрить статический анализ кода (например, через 1С:Сканер кода или SonarQube). Эти инструменты могут автоматически находить потенциально опасные конструкции, например:

Если Не Булево(ПолучаемЗначение()) Тогда  // Сканер предупредит о возможной ошибке

Критическая ошибка: в версиях 1С 8.3.20 и выше при неявном преобразовании строки к Булево платформа может не выдавать ошибку, а молча интерпретировать пустую строку как Ложь, а непустую — как Истина. Это может привести к скрытым логическим ошибкам! Всегда используйте явные проверки.

💡

Лучшая защита от ошибок преобразования — это строгая типизация. Избегайте конструкций, где тип значения определяется неявно (например, Если Значение Тогда без проверки типа).

7. Частые вопросы и ответы

Почему ошибка возникает только на некоторых данных?

Скорее всего, в вашей базе есть записи с некорректными значениями (например, NULL вместо 0/1 или строки вместо логических значений). Проверьте данные с помощью запроса:

ВЫБРАТЬ

Таблица.Поле

ИЗ

Таблица КАК Таблица

ГДЕ

НЕ Таблица.Поле ЗАПОЛНЕНО

ИЛИ ТипЗнч(Таблица.Поле) <> Тип("Булево")

Как исправить ошибку в типовой конфигурации без изменения кода?

Если ошибка возникает в стандартной обработке (например, в 1С:Зарплата и Управление Персоналом), вы можете:

  1. Создать расширение конфигурации и переопределить проблемную процедуру.
  2. Использовать подписку на событие (ПередЗаписью, ПриОткрытии) для корректировки данных.
  3. Настроить проверку данных на уровне SQL-триггеров (если используется SQL-сервер).

Может ли ошибка быть связана с обновлением платформы?

Да, в новых версиях 1С:Предприятие (например, при переходе с 8.2 на 8.3) могли ужесточиться правила неявного преобразования типов. Проверьте журнал изменений для вашей версии. Часто такие ошибки исправляются добавлением явных преобразований в код.

Как отладить ошибку, если она возникает только у одного пользователя?

Вероятно, проблема связана с:

  • 🖥️ Локальными настройками (например, региональные стандарты влияют на интерпретацию строк).
  • 🖥️ Правами доступа (пользователь не видит часть данных, из-за чего возвращается NULL).
  • 🖥️ Кэшем 1С (попробуйте очистить кэш через Сервис → Очистить кэш).

Для диагностики сравните данные, которые видят разные пользователи, с помощью запроса:

ВЫБРАТЬ

ТекущийПользователь() КАК Пользователь,

Таблица.Поле КАК ПроблемноеПоле

ИЗ

Таблица КАК Таблица

Что делать, если ошибка появляется после обновления конфигурации?

Обновление могло изменить:

  • 🔄 Структуру базы данных (например, тип поля в таблице).
  • 🔄 Логику стандартных процедур (теперь они могут возвращать другие типы).
  • 🔄 Форматы обмена данными (например, в JSON теперь передаётся "true" вместо 1).

Сравните текущую и предыдущую версию конфигурации через Конфигуратор → Сравнить конфигурации и обратите внимание на изменения в проблемных модулях.