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

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

Что значит булево в 1С и как с ним работать

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

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

Когда вы видите в коде конструкцию Если Проведен Тогда ... КонецЕсли;, то переменная Проведен — это и есть булево значение. Когда в карточке товара стоит галочка «Архивный» — это булев реквизит справочника. Понимание этого типа необходимо даже тем, кто не пишет код: без него сложно настраивать отборы, отчёты и права доступа.

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

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

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

Объявить булеву переменную просто:

ЭтоАрхивныйТовар = Истина;

ДокументПроведен = Ложь;

Булево значение часто получается как результат сравнения. Выражение Сумма > 1000 возвращает Истина, если условие выполняется, и Ложь в противном случае. То же касается проверок на равенство, вхождения в список и вызовов функций, возвращающих логический результат, например ЗначениеЗаполнено().

Где булево встречается в конфигурации

Булев тип назначается реквизитам справочников, документов, регистров и других объектов, когда нужно хранить факт «включено/выключено». Типичные примеры: «Не используется» у номенклатуры, «Оплачен» у заказа, «Завершен» у задачи. В пользовательском интерфейсе такой реквизит отображается как флажок (галочка).

Булевы значения широко применяются в настройках функциональности. Функциональные опции типа Булево позволяют включать и отключать целые блоки программы: например, ведение складского учёта или расчёт зарплаты. Константы с типом Булево хранят глобальные переключатели конфигурации.

В ролях и правах доступа булевы признаки определяют, разрешено ли пользователю действие. В отчётах на СКД булевы поля участвуют в отборах: пользователь может вывести только «активные» или только «архивные» элементы, выбрав значение Истина или Ложь.

Логические операции с булевыми значениями

С булевыми значениями работают три основных логических оператора: И, ИЛИ и НЕ. Оператор И возвращает Истина, только если оба условия истинны. Оператор ИЛИ возвращает Истина, если истинно хотя бы одно условие. Оператор НЕ переворачивает значение: НЕ Истина даёт Ложь.

Если Товар.Активен И НЕ Товар.Архивный Тогда

// товар доступен для продажи

КонецЕсли;

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

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

В языке запросов булевы поля выбираются напрямую, а в условиях сравниваются со значением ИСТИНА или ЛОЖЬ. Например:

ВЫБРАТЬ

Номенклатура.Ссылка

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

Номенклатура.Архивный = ЛОЖЬ

Передавать булево значение параметром тоже можно: в консоли запросов или из кода через Запрос.УстановитьПараметр("Флаг", Истина). При этом тип параметра определится автоматически.

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

1c
Если ТипЗнч(Значение) = Тип("Булево") Тогда
    Сообщить("Это логическое значение");
КонецЕсли;

Булево на формах и в интерфейсе пользователя

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

Через свойства формы можно настроить поведение флажка: заголовок, положение, доступность. Программно значение читается и устанавливается обращением к реквизиту: Объект.Согласован = Истина;. Изменение флажка пользователем можно перехватить в событии ПриИзменении и выполнить связанные действия — например, заблокировать остальные поля.

Преобразование типов и типичные ошибки

Булево можно получить из других типов через функцию Булево(): число 0 преобразуется в Ложь, любое другое число — в Истина; пустая строка — в Ложь. Однако полагаться на неявные преобразования не стоит: код становится неочевидным, а в запросах и СКД поведение отличается.

Обратное преобразование — через Число(Истина) получится 1, Строка(Ложь) вернёт строку «Ложь». При обмене данными с внешними системами (JSON, XML, веб-сервисы) булево корректно сериализуется в true/false, но при ручном разборе строк проверяйте, что именно пришло: «Истина», «True», «1» или «Да».

Типичные ошибки
01
Написать Если Флаг = Истина Тогда — избыточно: достаточно Если Флаг Тогда, а сравнение затрудняет чтение
02
Сравнивать булево со строкой "Истина" — типы разные, условие никогда не выполнится
03
Хранить флаг как число 0/1 вместо типа Булево — пользователи не увидят привычный флажок, а отборы станут неудобными
04
Забыть, что логическое выражение вычисляется полностью, и получить ошибку при обращении к свойству Неопределено
05
Использовать НЕ без скобок в сложных условиях — приоритет операторов меняет смысл проверки

Как проверить и отладить булево значение

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

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

Порядок действий при отладке условия
  1. 1
    Поставьте точку останова на строке с условием Если
  2. 2
    В табло выражений добавьте каждый операнд условия по отдельности
  3. 3
    Проверьте тип каждого значения через ТипЗнч()
  4. 4
    Убедитесь, что нет Неопределено или строк вместо булева
  5. 5
    При необходимости разбейте сложное условие на вложенные Если

Частые вопросы о булевом типе в 1С

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

Это разные типы данных. Булево хранит логический смысл и отображается в интерфейсе как флажок, а число — как поле ввода. Сравнение булева с числом напрямую не работает: Истина не равно 1 без явного преобразования через Число() или Булево().

Может ли булево значение быть пустым?

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

Как в запросе отобрать только записи с флагом Истина?

Добавьте в секцию ГДЕ условие вида Таблица.ИмяФлага = ИСТИНА. Ключевые слова ИСТИНА и ЛОЖЬ в языке запросов пишутся без кавычек. Альтернатива — передать значение параметром: Таблица.ИмяФлага = &Флаг.

Нужно ли писать «= Истина» в условии Если?

Нет, это избыточно. Условие Если Флаг Тогда полностью равнозначно Если Флаг = Истина Тогда, но короче и читается лучше. Сравнение с Истиной оправдано только когда проверяемое выражение может вернуть не булево, а другой тип, и требуется строгое совпадение.

Как инвертировать булево значение?

Оператором НЕ: Флаг = НЕ Флаг;. Это переключит Истина на Ложь и наоборот. В сложных условиях с НЕ используйте скобки, чтобы явно задать порядок вычисления: НЕ (А И Б) отличается от НЕ А И Б.

Как булево передаётся при обмене через JSON?

Стандартные средства сериализации 1С преобразуют Истина в true и Ложь в false. При ручном формировании строк проверяйте формат: внешняя система может ожидать true/false, 1/0 или «Да»/«Нет», и несовпадение формата приведёт к ошибкам загрузки на той стороне.

Итог

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

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