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

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

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

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

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

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

В этой статье разберём, как объявляется булево в 1С, какие операции с ним допустимы, где тип применяется в конфигурации, чем он отличается от похожих значений и как проверить корректность логики на практике.

Что представляет собой тип «Булево» в 1С

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

Объявление и присваивание выглядит так:

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

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

РезультатПроверки = (СуммаДокумента > 0); // результат сравнения — тоже булево

Важно понимать: любое логическое выражение в 1С (сравнение, проверка условия, вызов функции-проверки) возвращает именно булево. Поэтому тип встречается не только там, где разработчик явно объявил переменную, но и буквально в каждой конструкции Если ... Тогда.

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

Самое частое применение — реквизиты объектов конфигурации. В справочниках, документах, регистрах и планах обмена можно создать реквизит с типом «Булево», и на форме он отобразится как флажок. Типичные примеры: «Не использовать» в справочнике контрагентов, «Проведен» как системное свойство документа, «Активность» у записи регистра сведений.

Вторая область — системные свойства объектов. У документа есть булевы свойства Проведен и ПометкаУдаления, у записи регистра — Активность. Проверка этих свойств — стандартный приём в обработчиках проведения и заполнения:

Если ДокументОбъект.Проведен Тогда

// документ уже проведён, действуем иначе

КонецЕсли;

Третья область — параметры и возвращаемые значения функций. Функции-проверки принято называть так, чтобы имя читалось как вопрос: ЭтоПолноправныйПользователь(), ЗначениеЗаполнено(), ЭтоГруппа. Такая функция должна возвращать строго Истина или Ложь — это упрощает чтение кода и исключает неоднозначность.

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

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

Если КонтрагентЗаполнен И Не ЕстьОшибки Тогда

ПровестиДокумент();

КонецЕсли;

Если ЭтоЮрЛицо Или ЭтоИП Тогда

ПоказатьРеквизиты();

КонецЕсли;

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

Если (Сумма > Лимит) Или (ЕстьСогласование И Сумма > 0) Тогда

// ...

КонецЕсли;

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

Частая ошибка новичков — сравнение булева со строкой или числом. Конструкция Если Флаг = "Истина" Тогда не сработает, потому что строка «Истина» — это не булево значение. Аналогично Флаг = 1 не является корректной проверкой булева, хотя при явном преобразовании число 1 может трактоваться как Истина.

Отдельная ловушка — Неопределено и NULL в запросах. Необъявленная переменная содержит Неопределено, а не Ложь. В запросах поле булевого типа, для которого нет значения, может вернуть NULL, и сравнение NULL = Истина не даст ни Истина, ни Ложь — такая запись просто не попадёт в выборку. Поэтому в запросах к булевым полям применяют ЕСТЬ NULL или функцию ЕСТЬNULL(Поле, Ложь).

Для явного преобразования строки в булево используется конструкция Булево("Истина"), однако она примет только строго определённые значения. Надёжнее не хранить булевы данные в строковых реквизитах вообще — это источник ошибок при обмене и отчётности.

Как правильно проверять булево: типовые приёмы

Главное правило: булево проверяется напрямую, без сравнения с Истина. Конструкция Если Флаг = Истина Тогда технически работает, но считается избыточной и усложняет чтение. Правильно:

Если Флаг Тогда

// действие при истинном значении

КонецЕсли;

Если Не Флаг Тогда

// действие при ложном значении

КонецЕсли;

Для возврата результата из функции не нужен полный блок «Если... Иначе». Выражение уже булево, поэтому его можно вернуть сразу:

// Избыточно:

Если Сумма > 0 Тогда

Возврат Истина;

Иначе

Возврат Ложь;

КонецЕсли;

// Правильно:

Возврат Сумма > 0;

В запросах булево поле сравнивают с литералами ИСТИНА и ЛОЖЬ или передают параметром: ГДЕТаблица.Активность = &Активность. Параметр при этом должен быть именно булевым, а не строкой.

Типичные ошибки
01
Сравнение Флаг = "Истина" со строкой — условие никогда не выполнится, логика молча не работает
02
Проверка Флаг = Истина вместо прямой проверки Если Флаг Тогда — избыточный код, хуже читаемость
03
Смешение Неопределено и Ложь — необъявленная переменная не равна Ложь, проверка ведёт себя неожиданно
04
Игнорирование NULL в запросах — записи с пустым булевым полем выпадают из выборки
05
Возврат строки «Да»/«Нет» из функции-проверки вместо Истина/Ложь — ломает все вызовы с логическими операторами

Булево на форме и в отчётах

На управляемой форме реквизит типа «Булево» отображается как флажок. Если флажок связан с реквизитом объекта, его значение сохраняется вместе с записью объекта — отдельной обработки не требуется. Для реквизита формы (не сохраняемого в базе) булево используют как переключатель видимости элементов: в обработчике ПриИзменении устанавливают Элементы.ГруппаДетали.Видимость = ФлагПоказатьДетали;.

В СКД (системе компоновки данных) булево поле можно выводить в отчёт и использовать в отборах. Пользователь в настройках отчёта увидит значения «Да»/«Нет» или Истина/Ложь в зависимости от оформления поля. Если нужно красивое представление, для поля задают форматную строку, например БЛ=Нет; БИ=Да.

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

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

Условие в коде
Норма

Если Флаг Тогда — срабатывает при значении Истина

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

Условие никогда не выполняется — вероятно сравнение со строкой или Неопределено

Запрос с булевым полем
Норма

Все записи с Истина и Ложь попадают в выборку

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

Часть записей теряется — поле содержит NULL, нужен ЕСТЬNULL

Функция-проверка
Норма

Возвращает строго Истина или Ложь во всех ветках

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

В какой-то ветке возврата нет — результат Неопределено

Практический порядок работы с булевым реквизитом

Типовая задача — добавить в справочник или документ флаг и использовать его в логике. Последовательность действий стандартная и безопасна для существующих данных, если соблюдать порядок.

Порядок действий
  1. 1
    В конфигураторе добавьте реквизит объекта с типом Булево и осмысленным именем (например, НеИспользовать)
  2. 2
    Установите значение по умолчанию — для новых объектов оно будет Ложь, если не задано иное
  3. 3
    Разместите реквизит на форме объекта как флажок и проверьте доступность
  4. 4
    В модуле объекта или формы добавьте логику: Если НеИспользовать Тогда ... с прямой проверкой
  5. 5
    Обновите конфигурацию базы данных и проверьте на копии, что существующие записи получили значение Ложь
  6. 6
    Проверьте отчёты и запросы, где задействовано поле, — при необходимости добавьте ЕСТЬNULL

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

Итог

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

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

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

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

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

Можно ли преобразовать строку «Истина» в булево?

Да, через конструктор Булево("Истина") — он вернёт Истина. Но допустимы только строго определённые строковые представления, и при неподходящем значении будет ошибка. Надёжнее изначально хранить данные в реквизите типа Булево, а не в строке.

Почему запрос с условием по булеву полю не возвращает часть записей?

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

Нужно ли писать «Если Флаг = Истина Тогда»?

Нет, это избыточно. Флаг уже является булевым значением, поэтому достаточно «Если Флаг Тогда». Для обратной проверки используйте «Если Не Флаг Тогда». Такой код короче и легче читается.

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

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

Можно ли использовать булево в отборах динамического списка и СКД?

Да. Булево поле доступно в отборах динамических списков, в настройках СКД и в параметрах запросов. В отборе значение сравнивается с Истина/Ложь напрямую, параметр в запрос следует передавать именно булевого типа, а не строкой.