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

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

Как сделать булево в 1С: тип Булево в коде, реквизитах и на форме

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

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

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

Все примеры применимы к платформе 1С:Предприятие 8.3 в управляемом приложении. В обычном приложении действия в конфигураторе аналогичны, отличается только внешний вид форм.

Что такое тип Булево и где он применяется

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

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

Если признак может иметь третье состояние («неизвестно», «не заполнено»), булево не подходит — используйте перечисление или составной тип с Неопределено. Это частая проектная ошибка: позже требуется различать «нет» и «не указано», а булев реквизит уже заполнен в тысячах объектов.

Как объявить и использовать булево в коде

Во встроенном языке булево значение создаётся литералами Истина и Ложь без кавычек. Переменные в 1С не типизируются явно, достаточно присвоения:

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

Если ПризнакАктивен Тогда

Сообщить("Объект активен");

КонецЕсли;

Для проверки на Ложь используйте оператор НЕ или явное сравнение. Оба варианта корректны, но «НЕ Признак» читается лучше:

Если НЕ ПризнакАктивен Тогда

// объект не активен

КонецЕсли;

Булево значение часто получается как результат сравнения или функции. Сравнение само возвращает Булево, поэтому конструкция вида «Если (А = Б) = Истина Тогда» избыточна — достаточно «Если А = Б Тогда».

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

Чтобы хранить булево значение в базе данных, нужно добавить реквизит объекту конфигурации. Действия выполняются в конфигураторе и требуют прав на изменение конфигурации. Для типовой конфигурации на поддержке предпочтительнее использовать расширение, чтобы не снимать объекты с поддержки.

Порядок действий
  1. 1
    Откройте конфигуратор и найдите нужный объект (справочник, документ) в дереве конфигурации.
  2. 2
    Раскройте объект, щёлкните правой кнопкой по ветке «Реквизиты» и выберите «Добавить».
  3. 3
    Задайте имя реквизита, например «Архивный», без пробелов и спецсимволов.
  4. 4
    В свойстве «Тип» нажмите кнопку выбора и отметьте тип Булево.
  5. 5
    При необходимости задайте синоним — он будет показан пользователю как подпись флажка.
  6. 6
    Обновите конфигурацию базы данных (F7) и согласитесь с реструктуризацией.

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

В регистрах сведений булев реквизит добавляется как ресурс (если признак хранится) или как измерение (если по нему строится отбор и уникальность записей). В регистрах накопления булев ресурс бесполезен для суммирования — там признак обычно добавляют как реквизит регистра.

Как вывести флажок на управляемую форму

Реквизит типа Булево на управляемой форме автоматически отображается как флажок. Достаточно перетащить реквизит из панели «Реквизиты» в дерево элементов формы — платформа сама выберет вид «Поле флажка».

Полезные свойства флажка настраиваются в палитре свойств элемента формы. «Вид флажка» может быть обычным флажком или выключателем (тумблером). Свойство «ПоложениеЗаголовка» определяет, где стоит подпись — слева или справа от флажка; для компактных форм часто ставят заголовок справа.

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

Если флажок управляет видимостью группы элементов, старайтесь обойтись функциональными опциями или условным оформлением формы. Это убирает код из обработчиков и не требует серверных вызовов при каждом клике.
ПЗ
Практическое замечание

Булево в запросах и условиях

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

ВЫБРАТЬ

Контрагенты.Ссылка

ИЗ

Справочник.Контрагенты КАК Контрагенты

ГДЕ

НЕ Контрагенты.Архивный

В условии можно писать само поле без сравнения с ИСТИНА — запрос «ГДЕ Контрагенты.Архивный» корректен и читается лучше. Для отбора по Ложь используйте «ГДЕ НЕ Контрагенты.Архивный».

При передаче булева значения в параметр запроса никаких преобразований не нужно: Запрос.УстановитьПараметр("Признак", Истина). А вот при обмене данными через JSON, XML или веб-сервисы булево превращается в true/false или 0/1, и на стороне приёма требуется явное обратное преобразование — это частый источник ошибок интеграции.

Типичные ошибки при работе с булевым типом

Самая распространённая ошибка — сравнение булева значения с числом или строкой. Конструкция «Если Признак = 1 Тогда» может формально сработать из-за неявных преобразований в некоторых контекстах, но это непереносимый и хрупкий код. Всегда сравнивайте с Истина и Ложь.

Вторая группа ошибок — ожидание третьего состояния. Незаполненный булев реквизит равен Ложь, а не «ничему». Если бизнес-логика требует отличать «не указано» от «нет», тип выбран неверно и реквизит нужно перепроектировать, пока данных мало.

Типичные ошибки
01
Сравнение с числом или строкой вместо Истина/Ложь — код работает нестабильно и ломается при переносе.
02
Использование Булево, когда нужно третье состояние «не указано» — приходится переделывать реквизит и мигрировать данные.
03
Двойное отрицание вида «НЕ НЕ Признак» — затрудняет чтение и провоцирует логические ошибки.
04
Серверный вызов в событии ПриИзменении флажка ради простого скрытия элемента — лишняя нагрузка и задержки в интерфейсе.
05
Изменение типа существующего реквизита на Булево без анализа данных — реструктуризация может очистить или исказить значения.

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

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

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

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

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

Флажок на форме
Норма

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

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

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

Значение в коде
Норма

ТипЗнч возвращает Булево, сравнение с Истина/Ложь работает

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

Значение строкового или числового типа — где-то выполнено неверное присвоение

Отбор в запросе
Норма

Условие ГДЕ НЕ Реквизит отбирает ожидаемые записи

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

Отбор пуст или возвращает всё — проверьте имя поля и логику отрицания

Итог

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

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

Частые вопросы

Чем Булево отличается от числа 0 и 1 в 1С?

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

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

Ложь. Это относится и к новым реквизитам у существующих объектов после реструктуризации, и к новым объектам. Если нужно значение Истина по умолчанию, установите его в обработчике ПриСозданииНаСервере или ПриЗаписи, либо выполните массовое заполнение обработкой.

Как сделать флажок с тремя состояниями?

Тип Булево третьего состояния не поддерживает. Используйте перечисление с вариантами «Да/Нет/Не указано» или числовой реквизит с полем вида «Поле переключателя». На форме такое поле отображается как переключатель или список выбора, а не флажок.

Как передать булево значение через JSON в 1С?

При записи JSON значения Истина/Ложь сериализуются в true/false автоматически. При чтении JSON методом ПрочитатьJSON с параметром ПрочитатьВСоответствие значения true/false преобразуются обратно в Булево платформой без дополнительного кода.

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

Да, через расширение конфигурации: создайте расширение, заимствуйте нужный объект и добавьте в него реквизит типа Булево. Реквизит будет храниться вместе с объектом и переживёт обновления типовой конфигурации, если поставщик не изменит сам объект конфликтным образом.

Почему условие «Если Признак = "Истина"» не работает?

Потому что «Истина» в кавычках — строка, а строка никогда не равна булеву значению. Уберите кавычки: «Если Признак = Истина Тогда», а ещё лучше — просто «Если Признак Тогда».