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