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

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

Тип Булево в 1С: что это и как с ним работать

Тип Булево в 1С — это логический тип со значениями Истина и Ложь. Разбираем синтаксис, операции сравнения, типичные ошибки и примеры кода.

Тип Булево (Boolean) в 1С — это встроенный примитивный тип данных, который может принимать только два значения: Истина (True) или Ложь (False). Он используется для хранения логических состояний: включён или выключен флаг, прошёл документ проверку или нет, есть ли у контрагента задолженность.

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

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

Что такое тип Булево и какие значения он принимает

Булево — один из примитивных типов встроенного языка 1С наряду с Число, Строка и Дата. Значений ровно два: Истина и Ложь. В англоязычном синтаксисе они записываются как True и False — оба варианта работают в конфигураторе независимо от варианта встроенного языка.

Пример объявления переменной:

ФлагАктивен = Истина;

Проведен = Ложь;

Важно понимать, что Булево — это не число и не строка. Значение Истина не равно числу 1 и строке «Истина». Платформа не выполняет неявного преобразования Булево в другие типы при сравнении, поэтому выражение 1 = Истина вернёт Ложь, а не Истину.

Логические операции: И, ИЛИ, НЕ

Над значениями Булево определены три базовые логические операции, которые используются в условиях:

  • И (And) — результат Истина, только если оба операнда Истина;
  • ИЛИ (Or) — результат Истина, если хотя бы один операнд Истина;
  • НЕ (Not) — инверсия значения: НЕ Истина даёт Ложь.

Пример составного условия:

Если Контрагент.Активен И НЕ Контрагент.ЕстьДолг Тогда

// можно отгружать товар

КонецЕсли;

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

bsl
Результат = (Сумма > 0) И (НЕ Отказ);

Как получить Булево: операции сравнения

Чаще всего значения Булево не присваиваются напрямую, а возникают как результат сравнения. Операторы =, <>, >, <, >=, <= всегда возвращают именно Булево:

ЕстьОстаток = ОстатокТовара > 0;        // Булево

Совпадает = ТекущийСклад = ОсновнойСклад; // Булево

Особое внимание — сравнению с Неопределено и NULL. Значение Неопределено не равно ни Истине, ни Ложи; сравнение с ним выполняют оператором = Неопределено, а в запросах — через ЕСТЬ NULL. Если переменная может быть Неопределено, а вы используете её в логическом выражении, сначала приведите её к Булево явно или проверьте отдельно.

Булево в реквизитах объектов и формах

В конфигураторе реквизиту справочника, документа или регистра можно назначить тип Булево через палитру свойств. Такой реквизит на форме отображается как флажок (checkbox), в табличном документе и журнале — как отметка или текст «Да/Нет» в зависимости от настроек.

Типичные применения реквизитов типа Булево:

  • признак «Архивный» или «Не используется» у элемента справочника;
  • флаг «Согласовано» в документе согласования;
  • настройки пользователя, например «Показывать закрытые периоды»;
  • ресурсы регистров сведений для хранения признаков.

Для реквизита Булево можно задать значение по умолчанию — чаще всего Ложь. Учтите: у существующих элементов, созданных до добавления реквизита, значение будет Ложь, а не пустым. Если бизнес-логике нужно три состояния («да», «нет», «не задано»), одного Булево недостаточно — используйте перечисление или составной тип с Неопределено.

Булево в запросах

В языке запросов 1С логические значения записываются литералами ИСТИНА и ЛОЖЬ. Фильтрация по реквизиту типа Булево выглядит так:

ВЫБРАТЬ

Контрагенты.Ссылка

ИЗ

Справочник.Контрагенты КАК Контрагенты

ГДЕ

Контрагенты.Активен = ИСТИНА

Параметр запроса также может иметь тип Булево — он передаётся методом УстановитьПараметр("Флаг", Истина). Для вычисляемых логических полей в выборке используют конструкцию ВЫБОР КОГДА ... ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ.

Типичные ошибки при работе с Булево

Самая распространённая ошибка — избыточное сравнение: Если Флаг = Истина Тогда. Переменная Флаг уже является Булево, поэтому достаточно Если Флаг Тогда. Лишнее сравнение не ломает код, но засоряет его и выдаёт неопытность автора.

Вторая группа ошибок — ожидание неявных преобразований. Строка «Истина» не превратится в Булево при сравнении, число 1 тоже не равно Истине. Если данные приходят извне (из файла, веб-сервиса, JSON), преобразуйте их явно: например, Флаг = (ЗначениеИзФайла = "Да").

Типичные ошибки
01
Сравнение «Если Флаг = Истина Тогда» — избыточно, достаточно «Если Флаг Тогда»
02
Использование переменной со значением Неопределено в условии — вызывает ошибку исполнения
03
Сравнение строки «Истина» с Истиной — всегда Ложь, преобразование нужно делать явно
04
Ожидание третьего состояния от реквизита Булево — у него только два значения, для «не задано» нужен другой тип
05
Проверка NULL в запросе через «= ЛОЖЬ» вместо ЕСТЬ NULL — строки с NULL просто выпадают из выборки

Как проверить корректность логики

Для проверки значения переменной используйте функцию ТипЗнч(Переменная) = Тип("Булево") — она подтверждает, что переменная действительно логического типа, а не строка или число. В отладчике значения Булево отображаются как Истина/Ложь, что позволяет быстро отличить их от похожих строк.

При тестировании условий проверяйте обе ветки: и когда условие Истина, и когда Ложь. Для составных условий с И/ИЛИ полезно прогнать граничные комбинации — все операнды Ложь, все Истина, смешанные варианты.

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

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

Тип переменной через ТипЗнч
Норма

Возвращает тип Булево

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

Возвращает Строка или Число — нужно явное преобразование

Значение в отладчике
Норма

Отображается Истина или Ложь

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

Отображается Неопределено — условие вызовет ошибку

Поведение обеих веток условия
Норма

Код корректно работает при Истина и при Ложь

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

Одна из веток не отработана или падает

FAQ

Чем Булево отличается от числа 1 и 0 в 1С?

Это разные типы. Число 1 не равно Истине, а 0 не равно Ложи — неявного преобразования при сравнении нет. Если старая база хранит флаги числами, преобразуйте их явно: Флаг = (ЧисловоеЗначение = 1).

Можно ли присвоить реквизиту типа Булево значение Неопределено?

Для реквизита объекта с единственным типом Булево — нет, там всегда Истина или Ложь. Неопределено возможно только в переменных, параметрах и составных типах. Если нужно состояние «не задано», используйте перечисление с тремя значениями.

Как вывести значение Булево в виде «Да/Нет»?

Используйте функцию Формат с форматной строкой: Формат(Флаг, "БЛ=Нет; БИ=Да"). В табличных документах и формах форматную строку можно задать в свойствах элемента.

Работает ли сокращённое вычисление условий в запросах?

Нет, гарантированной сокращённой оценки в языке запросов нет. Порядок вычисления операндов определяет оптимизатор СУБД, поэтому в запросах нельзя строить логику, где первое условие «защищает» второе от ошибки.

Как проверить, что значение из JSON или файла — это Истина?

Сравните приведённое к строке значение с ожидаемыми вариантами: например, Флаг = (НРег(Значение) = "истина") ИЛИ (Значение = "1") ИЛИ (Значение = "Да"). Прямого автоматического преобразования строки в Булево встроенный язык не выполняет.

Итог

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

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