Разработка и Конфигурация · 11 мин
Ошибка «Преобразование значения к типу Булево не может быть выполнено» в 1С: причины и пошаговое исправление
Пошаговая инструкция по устранению ошибки «Преобразование значения к типу Булево не может быть выполнено» в 1С: причины, код исправления, проверка результата.
Ошибка «Преобразование значения к типу Булево не может быть выполнено» возникает, когда платформа 1С пытается привести значение к логическому типу (Истина/Ложь), а исходные данные для этого не подходят. Чаще всего это происходит при сравнениях в условиях «Если», при чтении реквизитов объектов с неопределённым значением или при обработке данных из внешних источников — файлов, веб-сервисов, запросов.
Характерный признак: программа или обработка внезапно прерывается, а в окне сообщений или журнале регистрации появляется текст ошибки с указанием строки модуля. Ошибка относится к ошибкам времени выполнения — конфигуратор её не находит при синтаксической проверке, потому что тип значения становится известен только в момент работы кода.
Исправить ситуацию можно самостоятельно, если есть доступ к конфигуратору и понимание, откуда приходит проблемное значение. Ниже — разбор причин, пошаговая диагностика и готовые варианты кода с проверкой результата.
Что означает ошибка и почему она возникает
Тип Булево в 1С принимает только два значения: Истина и Ложь. В отличие от некоторых других языков, платформа 1С не выполняет «мягкого» приведения: нельзя автоматически превратить число 1 или строку «Истина» в логическое значение внутри условия. Если в оператор «Если … Тогда» попадает значение другого типа, платформа пытается его преобразовать — и при невозможности выдаёт именно эту ошибку.
Типичные значения-источники проблемы:
- Неопределено — например, функция не вернула значение, или реквизит не был инициализирован;
- NULL — результат запроса, когда поле в базе пустое или соединение таблиц не нашло соответствия;
- Строка — данные из файла обмена, XML, JSON или веб-сервиса, где «Истина» хранится текстом;
- Число — флаги 0/1 из внешних систем или старых форматов обмена;
- Пустая ссылка или объект, переданный туда, где ожидался логический признак.
Шаг 1. Найдите точное место ошибки
Первое действие — определить строку кода, где происходит преобразование. Откройте текст ошибки полностью: в нём обычно указано «{Обработка.ИмяОбработки.Форма.Форма.Форма(123)}: Преобразование значения к типу Булево не может быть выполнено». Число в скобках — номер строки модуля.
Если ошибка возникает в типовой конфигурации при работе пользователя, откройте журнал регистрации (Администрирование → Обслуживание → Журнал регистрации), отфильтруйте по уровню «Ошибка» и посмотрите стек вызовов в комментарии. Там видно, какая процедура вызвала проблемную строку.
Если конфигурация доработанная или ошибка в собственной обработке, запустите отладку: конфигуратор → Отладка → Начать отладку, поставьте точку останова на найденной строке и посмотрите значения переменных в табло (Shift+F9). Именно здесь видно, что в условие попало Неопределено или строка.
- 1Скопируйте полный текст ошибки и найдите номер строки модуля
- 2Откройте конфигуратор и перейдите к указанной строке модуля
- 3Запустите отладку и поставьте точку останова перед проблемной строкой
- 4Через табло (Shift+F9) проверьте тип и значение каждой переменной в условии
- 5Определите, откуда приходит проблемное значение: функция, запрос, файл, реквизит
- 6Выберите способ исправления: проверка перед сравнением или явное преобразование
Шаг 2. Исправьте условие с Неопределено или NULL
Самая частая причина — сравнение переменной, которая оказалась равна Неопределено или NULL. Конструкция вида «Если РезультатФункции() Тогда» безопасна только если функция гарантированно возвращает Булево. Если она может вернуть Неопределено, условие нужно переписать.
Рабочий вариант — явное сравнение с Истина:
Результат = ПолучитьПризнак(Документ);
Если Результат = Истина Тогда
// дальнейшие действия
КонецЕсли;
Для значений из запроса, где может прийти NULL, используйте функцию ЕСТЬNULL прямо в тексте запроса:
ВЫБРАТЬ
ЕСТЬNULL(Товары.НеОтгружать, ЛОЖЬ) КАК НеОтгружать
ИЗ
Справочник.Номенклатура КАК Товары
Такой подход гарантирует, что на выходе всегда будет Булево, и последующие условия в коде не упадут с ошибкой преобразования.
Шаг 3. Преобразуйте строки и числа из внешних источников
При загрузке данных из файлов обмена, XML, JSON или ответов веб-сервисов логические значения часто приходят текстом: «true», «Истина», «1», «Да». Перед использованием в условии их нужно привести к Булеву вручную.
Пример безопасного преобразования строки:
Функция СтрокаВБулево(ЗначениеСтрока)
Если СтрокаСтрока = "Истина" Или ЗначениеСтрока = "true"
Или ЗначениеСтрока = "1" Или ЗначениеСтрока = "Да" Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Для числовых флагов достаточно сравнения: «Если КодФлага = 1 Тогда». Не пытайтесь передать число напрямую в условие — платформа не примет его как Булево.
При чтении JSON через «ПрочитатьJSON» проверяйте тип полученного значения функцией ТипЗнч() перед использованием: структура может не содержать нужного свойства, и обращение к нему вернёт Неопределено.
Если ТипЗнч(Значение) = Тип("Булево") И Значение Тогда
// значение гарантированно логическое и истинное
КонецЕсли;Шаг 4. Проверьте реквизиты объектов и настройки отбора
В типовых конфигурациях ошибка нередко возникает в динамических списках, отборах компоновки данных и условном оформлении, когда в условие попадает реквизит с незаполненным значением или поле, которого нет в запросе. Проверьте: если ошибка появляется при открытии списка документов или отчёта — проблема почти наверняка в отборе или варианте настроек СКД.
Порядок действий для отчёта на СКД: откройте «Ещё → Изменить вариант», перейдите на вкладку «Отбор» и временно отключите все условия. Если отчёт сформировался — включайте отборы по одному, пока не найдёте проблемный. Обычно это сравнение логического поля со значением неподходящего типа или отбор по полю, которое возвращает NULL из-за левого соединения.
Для реквизитов справочников и документов проверьте, не обращается ли код к реквизиту, которого нет у данного вида объекта — например, в общем модуле, обрабатывающем разные типы документов. Здесь помогает проверка через метаданные или обёртка в «Попытка … Исключение».
Как выбрать способ исправления
Шаг 5. Проверьте результат и защититесь от повторения
После исправления кода повторите сценарий, который вызывал ошибку, минимум на тех же данных. Если ошибка возникала при загрузке конкретного файла — загрузите его снова. Если при проведении документа — проведите проблемный документ. Убедитесь, что в журнале регистрации нет новых записей об ошибке.
Чтобы проблема не вернулась, полезно принять простые правила для всего кода: функции, возвращающие признаки, всегда должны явно возвращать Истина или Ложь (без «пустого» Возврата); значения из запросов — оборачиваться в ЕСТЬNULL; данные из внешних источников — проходить через функции преобразования с проверкой типа.
Если ошибка появляется в типовой конфигурации без доработок и на актуальном релизе, возможно повреждение данных. В этом случае перед любыми действиями сделайте резервную копию и запустите «Тестирование и исправление» информационной базы в режиме проверки логической целостности.
Типичные ошибки при исправлении
Распространённая ошибка — «заглушить» проблему, обернув весь код в «Попытка … Исключение» без разбора причины. Ошибка перестанет показываться, но логика будет работать неправильно: условие просто не выполнится, и документы или данные обработаются некорректно.
Вторая ошибка — исправить только одно место, когда проблемное значение формируется в другом модуле. Если функция возвращает Неопределено в десяток вызовов, правильнее исправить саму функцию, а не каждый вызов по отдельности.
Часто задаваемые вопросы
Можно ли преобразовать строку «Истина» в Булево напрямую?
Штатной функции автоматического преобразования строки в Булево в языке 1С нет. Нужно написать собственную функцию сравнения строки с допустимыми вариантами («Истина», «true», «1», «Да») и возвращать Истина или Ложь явно.
Почему ошибка не находится синтаксической проверкой конфигуратора?
Это ошибка времени выполнения: тип значения переменной становится известен только при работе программы. Синтаксическая проверка анализирует только структуру кода, а не реальные данные, поэтому такие ошибки выявляются тестированием или отладкой.
Ошибка появляется только у одного пользователя. Что это значит?
Скорее всего, дело в данных или настройках этого пользователя: сохранённый вариант отчёта с некорректным отбором, настройки динамического списка или права, из-за которых запрос возвращает NULL. Попробуйте очистить настройки пользователя (Администрирование → Пользователи и права → Очистка настроек) и повторить действие.
Чем отличается NULL от Неопределено в этой ошибке?
NULL приходит только из запросов и означает отсутствие значения в поле результата. Неопределено — значение встроенного языка, появляется когда переменная не инициализирована или функция не вернула результат. Оба вызывают ошибку в условии, но обрабатываются по-разному: NULL — через ЕСТЬNULL в запросе, Неопределено — проверкой в коде.
Поможет ли обновление конфигурации, если код типовой?
Часто да: если ошибка воспроизводится на типовой логике без доработок, она может быть уже исправлена в более новом релизе. Обновитесь на тестовой копии базы и проверьте сценарий. Если ошибка осталась — стоит проверить данные через тестирование и исправление.
Как быстро найти все места в коде с риском такой ошибки?
В конфигураторе выполните глобальный поиск по шаблону «Если » с последующим ручным просмотром условий, где сравнивается результат функций или поля запросов. Обратите внимание на условия без явного сравнения с Истина — именно они наиболее уязвимы.
Что важно запомнить
Ошибка преобразования к Булево означает, что в условие попало Неопределено, NULL, строка или число. Найдите строку через стек ошибки и отладчик, добавьте явное сравнение с Истина, ЕСТЬNULL в запросах и функции преобразования для внешних данных. Перед исправлением данных обязательно сделайте резервную копию.