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

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

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

Что такое булево значение в 1С, как работает тип Булево в запросах, условиях и реквизитах. Примеры кода, типичные ошибки и проверка результатов.

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

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

Особенность 1С в том, что булево используется на трёх уровнях: во встроенном языке (модуль формы, общий модуль), в языке запросов и в свойствах объектов конфигурации (реквизиты, флажки на формах). Правила работы на каждом уровне немного отличаются, и их смешение — частый источник ошибок.

Как объявить и задать булево значение во встроенном языке

Литералы булевого типа пишутся без кавычек: Истина и Ложь. В английском синтаксисе используются True и False. Язык регистронезависим, поэтому «истина» и «Истина» эквивалентны, но стандарт оформления кода требует писать с заглавной буквы.

Типичные способы получения булева значения — прямое присваивание, результат сравнения и вызов функции-проверки:

ПризнакАктивности = Истина;

ДокументПроведен = (Документ.Проведен = Истина);

ЕстьОшибки = Не ПроверитьЗаполнение();

Обратите внимание: результат любой операции сравнения (=, <>, >, <) — это уже булево значение. Поэтому конструкция Если (А = Истина) = Истина Тогда избыточна: достаточно Если А Тогда.

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

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

Если Контрагент.ЭтоЮрЛицо И Контрагент.ИНН <> "" Тогда

// оба условия выполнены

КонецЕсли;

Если Не ЗначениеЗаполнено(Склад) Тогда

Сообщить("Склад не указан");

КонецЕсли;

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

Булево в условиях и циклах

Оператор Если ... Тогда ... Иначе ... КонецЕсли ожидает именно булево выражение. То же относится к циклу Пока: он выполняется, пока условие истинно.

Счетчик = 0;

Пока Счетчик < 10 Цикл

Счетчик = Счетчик + 1;

КонецЦикла;

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

Типичные ошибки
01
Сравнение с Истиной в лоб: 'Если Флаг = Истина Тогда' — избыточно, достаточно 'Если Флаг Тогда'.
02
Присваивание строки 'Истина' вместо литерала Истина — строка не является булевым значением, условие может вести себя неожиданно.
03
Использование Не к небулеву выражению без приведения — например, 'Не Количество' вызовет ошибку или неочевидный результат.
04
Путаница между Ложь и Неопределено: это разные значения разных типов, сравнение их даст Ложь, но не равенство типов.

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

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

ВЫБРАТЬ Номенклатура.Ссылка

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

ГДЕ Номенклатура.Услуга = ИСТИНА

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

Булевы реквизиты и флажки на форме

В конфигураторе реквизиту справочника, документа или обработки можно назначить тип «Булево». На управляемой форме такой реквизит по умолчанию отображается как флажок: установлен — Истина, снят — Ложь. Значение по умолчанию для нового объекта — Ложь.

Типичные применения: признак «Услуга» в номенклатуре, «Не использовать» в договорах, «Отправлено» в документе обмена. Программно значение читается и меняется обычным присваиванием: Объект.Архивный = Истина;. После изменения реквизита объекта в памяти не забудьте вызвать Объект.Записать(), иначе изменение не сохранится в базе.

Порядок действий: добавить булев реквизит
  1. 1
    Откройте конфигуратор и найдите нужный объект (справочник, документ).
  2. 2
    Добавьте реквизит, укажите тип Булево и понятное имя, например 'ТребуетСогласования'.
  3. 3
    Обновите конфигурацию базы данных (F7), приняв реструктуризацию.
  4. 4
    Добавьте реквизит на форму объекта — платформа отобразит его как флажок.
  5. 5
    Проверьте: создайте элемент, установите флажок, запишите и переоткройте — значение должно сохраниться.

Преобразование типов и сравнение с другими значениями

Явной функции приведения к Булево, аналогичной Число() или Строка(), во встроенном языке нет. Число 0 не превращается в Ложь автоматически — попытка использовать число или строку в условии приведёт к ошибке «Несоответствие типов». Если нужно получить булево из числа, пишите сравнение явно: Флаг = (Количество > 0);.

При выгрузке в XML/JSON булево сериализуется как true/false, при обмене с внешними системами иногда приходится обрабатывать строковые «true», «1», «Да» — для этого пишут функцию-конвертер, явно сопоставляющую входные варианты с Истиной и Ложью.

bsl
Функция СтрокаВБулево(ЗначениеСтроки)
    Значение = НРег(СокрЛП(ЗначениеСтроки));
    Если Значение = "истина" Или Значение = "true" Или Значение = "1" Или Значение = "да" Тогда
        Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;
КонецФункции

Как проверить корректность работы с булевыми значениями

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

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

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

Тип переменной в отладчике
Норма

Отображается 'Булево', значение Истина или Ложь

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

Строка, Число или Неопределено там, где ожидалась логика

Флажок на форме после записи
Норма

Состояние сохраняется после закрытия и повторного открытия

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

Флажок сбрасывается — объект не записан или реквизит не привязан

Условие в запросе
Норма

Выборка содержит только нужные строки, NULL обработан

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

Строки с NULL теряются или попадают лишние записи

Часто задаваемые вопросы

Чем Ложь отличается от Неопределено в 1С?

Ложь — это значение булева типа, а Неопределено — специальное значение «отсутствует», применяемое, например, к необъявленным параметрам. Сравнение Ложь = Неопределено даёт Ложь. Проверять реквизит на заполненность лучше функцией ЗначениеЗаполнено(), а не сравнением с Ложью.

Можно ли использовать число 1 и 0 вместо Истина и Ложь?

Нет, язык 1С строго типизирован в условиях: оператор Если требует именно булево выражение. Число в условии вызовет ошибку несоответствия типов. Используйте сравнение вида Количество > 0.

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

Оператором НЕ: Флаг = Не Флаг;. Это стандартный способ переключения флажка программно, например при обработке нажатия кнопки «Выбрать всё / снять всё».

Почему условие в запросе с булевым полем не возвращает строки?

Наиболее вероятная причина — значения NULL в поле после соединения таблиц. Сравнение NULL = ИСТИНА не является истинным. Оберните поле в ЕСТЬNULL(Поле, ЛОЖЬ) или добавьте явную проверку ЕСТЬ NULL.

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

По умолчанию — Ложь. Если бизнес-логика требует Истину по умолчанию, установите значение в обработчике ПриСозданииНаСервере формы или в ОбработкаЗаполнения модуля объекта.

Итог

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

Булево в 1С — логический тип со значениями Истина и Ложь, используемый в условиях, запросах и реквизитах-флажках. Пишите условия без избыточных сравнений с Истиной, обрабатывайте NULL в запросах через ЕСТЬNULL и не путайте Ложь с Неопределено или числом 0.