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