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