Разработка и Конфигурация · 8 мин
Тип Булево в 1С: что это и как с ним работать
Тип Булево в 1С — это логический тип со значениями Истина и Ложь. Разбираем синтаксис, операции сравнения, типичные ошибки и примеры кода.
Тип Булево (Boolean) в 1С — это встроенный примитивный тип данных, который может принимать только два значения: Истина (True) или Ложь (False). Он используется для хранения логических состояний: включён или выключен флаг, прошёл документ проверку или нет, есть ли у контрагента задолженность.
Несмотря на простоту, именно с Булево связано много ошибок начинающих разработчиков: сравнение строки «Да» с Истиной, неправильная работа с Неопределено, лишние конструкции Если ... = Истина Тогда. Понимание того, как платформа хранит, сравнивает и преобразует логические значения, избавляет от целого класса трудноуловимых дефектов.
Ниже разобраны синтаксис объявления, логические операции, сравнение с другими типами, применение в реквизитах объектов и запросах, а также типичные ошибки и способы их избежать.
Что такое тип Булево и какие значения он принимает
Булево — один из примитивных типов встроенного языка 1С наряду с Число, Строка и Дата. Значений ровно два: Истина и Ложь. В англоязычном синтаксисе они записываются как True и False — оба варианта работают в конфигураторе независимо от варианта встроенного языка.
Пример объявления переменной:
ФлагАктивен = Истина;
Проведен = Ложь;
Важно понимать, что Булево — это не число и не строка. Значение Истина не равно числу 1 и строке «Истина». Платформа не выполняет неявного преобразования Булево в другие типы при сравнении, поэтому выражение 1 = Истина вернёт Ложь, а не Истину.
Логические операции: И, ИЛИ, НЕ
Над значениями Булево определены три базовые логические операции, которые используются в условиях:
И(And) — результат Истина, только если оба операнда Истина;ИЛИ(Or) — результат Истина, если хотя бы один операнд Истина;НЕ(Not) — инверсия значения: НЕ Истина даёт Ложь.
Пример составного условия:
Если Контрагент.Активен И НЕ Контрагент.ЕстьДолг Тогда
// можно отгружать товар
КонецЕсли;
Платформа вычисляет условия слева направо с сокращённой оценкой: если в выражении А И Б первый операнд Ложь, второй уже не вычисляется. Это удобно для безопасных проверок: сначала проверяют, что переменная заполнена, и только потом обращаются к её свойствам. Но полагаться на это стоит аккуратно — в запросах логика сокращённого вычисления не гарантируется.
Результат = (Сумма > 0) И (НЕ Отказ);Как получить Булево: операции сравнения
Чаще всего значения Булево не присваиваются напрямую, а возникают как результат сравнения. Операторы =, <>, >, <, >=, <= всегда возвращают именно Булево:
ЕстьОстаток = ОстатокТовара > 0; // Булево
Совпадает = ТекущийСклад = ОсновнойСклад; // Булево
Особое внимание — сравнению с Неопределено и NULL. Значение Неопределено не равно ни Истине, ни Ложи; сравнение с ним выполняют оператором = Неопределено, а в запросах — через ЕСТЬ NULL. Если переменная может быть Неопределено, а вы используете её в логическом выражении, сначала приведите её к Булево явно или проверьте отдельно.
Булево в реквизитах объектов и формах
В конфигураторе реквизиту справочника, документа или регистра можно назначить тип Булево через палитру свойств. Такой реквизит на форме отображается как флажок (checkbox), в табличном документе и журнале — как отметка или текст «Да/Нет» в зависимости от настроек.
Типичные применения реквизитов типа Булево:
- признак «Архивный» или «Не используется» у элемента справочника;
- флаг «Согласовано» в документе согласования;
- настройки пользователя, например «Показывать закрытые периоды»;
- ресурсы регистров сведений для хранения признаков.
Для реквизита Булево можно задать значение по умолчанию — чаще всего Ложь. Учтите: у существующих элементов, созданных до добавления реквизита, значение будет Ложь, а не пустым. Если бизнес-логике нужно три состояния («да», «нет», «не задано»), одного Булево недостаточно — используйте перечисление или составной тип с Неопределено.
Булево в запросах
В языке запросов 1С логические значения записываются литералами ИСТИНА и ЛОЖЬ. Фильтрация по реквизиту типа Булево выглядит так:
ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.Активен = ИСТИНА
Параметр запроса также может иметь тип Булево — он передаётся методом УстановитьПараметр("Флаг", Истина). Для вычисляемых логических полей в выборке используют конструкцию ВЫБОР КОГДА ... ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ.
Типичные ошибки при работе с Булево
Самая распространённая ошибка — избыточное сравнение: Если Флаг = Истина Тогда. Переменная Флаг уже является Булево, поэтому достаточно Если Флаг Тогда. Лишнее сравнение не ломает код, но засоряет его и выдаёт неопытность автора.
Вторая группа ошибок — ожидание неявных преобразований. Строка «Истина» не превратится в Булево при сравнении, число 1 тоже не равно Истине. Если данные приходят извне (из файла, веб-сервиса, JSON), преобразуйте их явно: например, Флаг = (ЗначениеИзФайла = "Да").
Как проверить корректность логики
Для проверки значения переменной используйте функцию ТипЗнч(Переменная) = Тип("Булево") — она подтверждает, что переменная действительно логического типа, а не строка или число. В отладчике значения Булево отображаются как Истина/Ложь, что позволяет быстро отличить их от похожих строк.
При тестировании условий проверяйте обе ветки: и когда условие Истина, и когда Ложь. Для составных условий с И/ИЛИ полезно прогнать граничные комбинации — все операнды Ложь, все Истина, смешанные варианты.
Как проверить результат
Возвращает тип Булево
Возвращает Строка или Число — нужно явное преобразование
Отображается Истина или Ложь
Отображается Неопределено — условие вызовет ошибку
Код корректно работает при Истина и при Ложь
Одна из веток не отработана или падает
FAQ
Чем Булево отличается от числа 1 и 0 в 1С?
Это разные типы. Число 1 не равно Истине, а 0 не равно Ложи — неявного преобразования при сравнении нет. Если старая база хранит флаги числами, преобразуйте их явно: Флаг = (ЧисловоеЗначение = 1).
Можно ли присвоить реквизиту типа Булево значение Неопределено?
Для реквизита объекта с единственным типом Булево — нет, там всегда Истина или Ложь. Неопределено возможно только в переменных, параметрах и составных типах. Если нужно состояние «не задано», используйте перечисление с тремя значениями.
Как вывести значение Булево в виде «Да/Нет»?
Используйте функцию Формат с форматной строкой: Формат(Флаг, "БЛ=Нет; БИ=Да"). В табличных документах и формах форматную строку можно задать в свойствах элемента.
Работает ли сокращённое вычисление условий в запросах?
Нет, гарантированной сокращённой оценки в языке запросов нет. Порядок вычисления операндов определяет оптимизатор СУБД, поэтому в запросах нельзя строить логику, где первое условие «защищает» второе от ошибки.
Как проверить, что значение из JSON или файла — это Истина?
Сравните приведённое к строке значение с ожидаемыми вариантами: например, Флаг = (НРег(Значение) = "истина") ИЛИ (Значение = "1") ИЛИ (Значение = "Да"). Прямого автоматического преобразования строки в Булево встроенный язык не выполняет.
Что важно запомнить
Булево в 1С — логический тип со значениями Истина и Ложь. Используйте его для флагов и условий, сравнивайте напрямую без «= Истина», следите за Неопределено и NULL, а данные из внешних источников преобразуйте явно.