К статье
Практический материал

Разработка и Конфигурация · 12 мин

Ошибка преобразования к типу Булево в 1С: как найти и исправить

Разбираем ошибку «Преобразование значения к типу Булево не может быть выполнено» в 1С: причины, поиск места в коде, способы исправления и профилактика.

Ошибка «Преобразование значения к типу Булево не может быть выполнено» — одна из самых частых ошибок времени выполнения в 1С:Предприятие. Она возникает, когда платформа пытается интерпретировать значение как «Истина» или «Ложь», но тип данных этого не позволяет: например, в условии «Если» подставлена строка, число, дата или значение «Неопределено».

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

Хорошая новость в том, что ошибка почти всегда локализуема: в сообщении об ошибке платформа указывает модуль, строку и выражение, в котором произошёл сбой. Дальше остаётся понять, какое значение туда попало, и либо исправить данные, либо скорректировать код проверки.

Что означает эта ошибка и когда она возникает

Тип «Булево» в 1С имеет только два значения: «Истина» и «Ложь». Платформа автоматически не преобразует в булево произвольные типы — в отличие от некоторых других языков, где непустая строка или ненулевое число считаются «истиной». В 1С выражение Если "Текст" Тогда или Если 5 Тогда приведёт именно к этой ошибке.

Типичные ситуации появления ошибки: условие «Если» в модуле объекта или формы, тернарный оператор «?», логические операции «И», «ИЛИ», «НЕ» над небулевскими операндами, а также параметры методов, ожидающие булево значение, но получающие что-то другое.

Отдельный частный случай — значения «Неопределено» и «NULL». Результат запроса может вернуть NULL при левом соединении, функция может вернуть «Неопределено», если ветка кода не задала возврат. Попадание такого значения в условие вызывает ту же ошибку, хотя визуально код выглядит корректно.

Как найти место ошибки в коде

Первый шаг — внимательно прочитать окно сообщения об ошибке. Платформа показывает текст вида: «{ОбщийМодуль.ИмяМодуля.Модуль(123)}: Преобразование значения к типу Булево не может быть выполнено». Число в скобках — номер строки модуля. Двойной щелчок по сообщению в конфигураторе открывает модуль на нужной строке.

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

Для сложных случаев используйте отладчик: установите точку останова на указанной строке, повторите действие и посмотрите в табло значений всех переменных, участвующих в условии. Чаще всего оказывается, что одна из переменных содержит «Неопределено», NULL или строку вместо ожидаемого булева значения.

Порядок поиска источника ошибки
  1. 1
    Скопируйте полный текст сообщения об ошибке с указанием модуля и строки
  2. 2
    Откройте конфигуратор и перейдите к указанной строке двойным щелчком по сообщению
  3. 3
    Установите точку останова и запустите отладку, воспроизведите действие пользователя
  4. 4
    Проверьте в табло типы и значения всех переменных в условии
  5. 5
    Определите, откуда пришло неправильное значение: функция, реквизит, запрос, параметр

Типичные причины и способы исправления

Неопределено в условии

Функция без явного «Возврат» во всех ветках возвращает «Неопределено». Если результат такой функции используется в условии, возникает ошибка. Исправление — либо гарантировать возврат булева значения из функции, либо проверять результат: Если Результат = Истина Тогда вместо Если Результат Тогда.

NULL из запроса

При левом соединении таблиц поля присоединённой таблицы могут содержать NULL. Если выборка попадает в условие напрямую, ошибка неизбежна. Используйте функцию «ЕСТЬNULL» в тексте запроса или проверку Если Значение = NULL Тогда перед использованием. Обратите внимание: в 1С NULL сравнивается только через «= NULL», а не через «Если Значение Тогда».

Строка или число вместо флага

Иногда в параметры или реквизиты сохраняют строки «Да»/«Нет» или числа 0/1, а затем используют их как флаг. Платформа такое не примет. Замените условие на явное сравнение: Если Флаг = "Да" Тогда или Если КодСтатуса = 1 Тогда.

Реквизит составного типа

Если реквизит объекта имеет составной тип (например, строка или булево), при чтении он может вернуть пустую строку. Перед использованием в условии проверяйте тип через «ТипЗнч» или приводите логику к явному сравнению с ожидаемым значением.

bsl
// Неправильно: ошибка, если Результат = Неопределено
Если ПроверитьДоступ() Тогда
    // ...
КонецЕсли;

// Правильно: явное сравнение
Если ПроверитьДоступ() = Истина Тогда
    // ...
КонецЕсли;

// Правильно: проверка заполнения для произвольных типов
Если ЗначениеЗаполнено(Результат) И Результат = Истина Тогда
    // ...
КонецЕсли;

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

Если ошибка возникает в типовой конфигурации на поддержке и вы код не меняли, причина обычно в данных: некорректно заполненный реквизит, результат обмена, «битая» ссылка или значение, оставшееся после незавершённого обновления. Начните с проверки данных объекта, на котором возникает ошибка.

Проверьте, не установлены ли расширения конфигурации — они частая причина подобных сбоев после обновления платформы или конфигурации. Отключите расширения по очереди (Администрирование → Печатные формы, отчеты и обработки → Расширения) и проверьте, исчезла ли ошибка. Если да — проблема в конкретном расширении, его нужно обновить или доработать.

Перед любыми правками кода типовой конфигурации сделайте резервную копию базы. Изменение типового кода снимает объекты с полной поддержки и усложняет будущие обновления — предпочтительнее исправить данные или оформить доработку через расширение.

Ошибка после обновления конфигурации или платформы

Заметная доля обращений с этой ошибкой приходится на период после обновлений. Типичный сценарий: обновление конфигурации завершилось с ошибками или было прервано, и часть обработчиков обновления данных не выполнилась. Проверьте журнал регистрации на наличие ошибок в момент обновления и статус отложенных обработчиков (в типовых конфигурациях: Администрирование → Обслуживание → Результаты обновления программы).

Другой сценарий — несовместимость версии платформы с конфигурацией. Если ошибка появилась сразу после обновления платформы, проверьте рекомендуемую версию платформы для вашей конфигурации в документации поставщика и при необходимости откатитесь на поддерживаемую версию.

Если обновление прервано, не пытайтесь «дожать» его повторным запуском на той же базе без анализа. Восстановите копию, сделанную до обновления, и повторите процедуру, контролируя журнал регистрации.

Маршрут решения

Как выбрать действие

Ошибка в собственном коде или доработкеИсправьте условие: явное сравнение с Истина или проверка через ЗначениеЗаполнено
Ошибка в типовом коде, есть расширенияОтключите расширения по очереди и найдите проблемное
Ошибка появилась после обновленияПроверьте статус отложенных обработчиков обновления и журнал регистрации
Ошибка только на конкретном документе или элементеПроверьте данные объекта: незаполненные реквизиты, битые ссылки, значения после обмена
Ошибка массовая у всех пользователей после обновления платформыПроверьте совместимость версии платформы с конфигурацией

Как проверить, что проблема решена

После исправления воспроизведите исходный сценарий на тестовой копии: откройте тот же документ, сформируйте тот же отчёт, запустите тот же обмен. Ошибка не должна появиться, а прикладной результат (проведение, движения по регистрам, сформированный отчёт) должен соответствовать ожиданиям.

Если исправлялся код, прогоните смежные сценарии: условие может использоваться в нескольких ветках логики, и исправление одной ситуации не гарантирует корректность остальных. Полезно поискать по конфигурации все места вызова изменённой функции.

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

Контрольные точки

Как проверить результат

Повторное выполнение действия
Норма

Документ проводится, отчёт формируется без сообщений об ошибке

Тревожный признак

Ошибка повторяется или появилась новая

Тип значения в отладчике
Норма

В условии — Истина/Ложь или результат явного сравнения

Тревожный признак

Неопределено, NULL, строка или число в логическом выражении

Журнал регистрации
Норма

Нет ошибок за период после исправления

Тревожный признак

Ошибки продолжают записываться

Данные после операции
Норма

Движения документа и связанные данные корректны

Тревожный признак

Частичные записи, пустые движения, разрывы в данных

Профилактика: как не допустить повторения

Разработчикам: всегда возвращайте из функций с логическим результатом явное булево значение «Возврат Истина» или «Возврат Ложь» во всех ветках. В условиях используйте явные сравнения вместо неявного приведения, а для проверки заполненности — «ЗначениеЗаполнено». В запросах оборачивайте потенциально NULL-поля в «ЕСТЬNULL».

Администраторам: перед обновлением делайте полную резервную копию, обновляйте сначала тестовую копию базы и проверяйте ключевые сценарии. Следите за совместимостью версий платформы и конфигурации, а расширения после каждого обновления проверяйте на работоспособность.

Типичные ошибки при исправлении
01
Правка типового кода без резервной копии — усложняет обновления и рискует потерей изменений
02
Замена условия на «Если Значение Тогда» в другом виде без проверки типа — ошибка просто переезжает в другую строку
03
Игнорирование NULL из запросов — проверка «Если Значение Тогда» не отлавливает NULL, нужен ЕСТЬNULL или сравнение с NULL
04
Исправление только на рабочей базе без тестирования смежных сценариев — ошибка всплывает в другой операции
05
Повторный запуск прерванного обновления без восстановления копии — накапливаются частично применённые изменения данных

Частые вопросы

Может ли эта ошибка появиться у обычного пользователя, который не пишет код?

Да. Пользователь видит её, когда сбой происходит в коде конфигурации, расширения или внешней обработки при работе с конкретными данными. Самостоятельно пользователь может проверить заполненность реквизитов объекта и сообщить администратору полный текст ошибки и последовательность действий.

Чем отличаются Неопределено и NULL в контексте этой ошибки?

«Неопределено» — значение по умолчанию для переменных и невозвращённых результатов функций в коде. NULL — значение из базы данных, появляющееся в результатах запросов, например при левом соединении. Оба вызывают ошибку в условии, но обрабатываются по-разному: NULL — через ЕСТЬNULL в запросе, «Неопределено» — проверкой в коде.

Ошибка возникает только у одного пользователя. В чём причина?

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

Поможет ли тестирование и исправление базы?

Нет, «Тестирование и исправление» устраняет физические повреждения данных и нарушения ссылочной целостности, но не исправляет логическую ошибку в коде или некорректный тип значения в условии. Оно имеет смысл только если диагностика показала именно повреждение данных, например битые ссылки.

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

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

Почему ошибка появляется не всегда, а «плавает»?

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

Итог

Что важно запомнить

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