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

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

Что означает тип Булево в 1С и как его использовать

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

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

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

Несмотря на простоту, с Булево связано немало ошибок у начинающих разработчиков: путаница между значением Истина и строкой «Истина», неправильное сравнение в запросах, некорректная работа с NULL в соединениях таблиц. Ниже разобраны практические сценарии: создание реквизита, использование в коде и запросах, типичные ошибки и способы их проверки.

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

Тип Булево хранит логическое значение — результат проверки какого-либо условия. Во встроенном языке 1С значения обозначаются ключевыми словами Истина и Ложь (в английском варианте синтаксиса — True и False). Это примитивный тип: значение не имеет внутренней структуры и занимает минимум места в базе данных.

Типичные места применения Булево в типовых конфигурациях:

  • реквизиты справочников и документов — «Архив», «Не использовать в продажах», «Основной договор»;
  • функциональные опции — переключатели, включающие или отключающие целые блоки функциональности;
  • параметры процедур и функций — например, признак «ВыводитьСообщения»;
  • результаты проверок — функция возвращает Истина, если операция выполнена успешно;
  • условия в циклах и ветвлениях Если...Тогда.

Как создать реквизит типа Булево в конфигураторе

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

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

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

Работа с Булево во встроенном языке

В коде значение задаётся напрямую или вычисляется выражением. Любая операция сравнения возвращает Булево: Результат = (Сумма > 1000); присвоит переменной Истина, если условие выполняется. Логические операторы И, ИЛИ, НЕ комбинируют несколько условий в одно.

Пример типового фрагмента кода:

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

Если ДокументПроведен И СуммаДокумента > 0 Тогда

Сообщить("Документ готов к обработке");

КонецЕсли;

// Преобразование в Булево

Флаг = Булево(1); // Истина

Флаг = Булево(0); // Ложь

Обратите внимание на функцию Булево(): она преобразует число в логическое значение, где 0 — это Ложь, а любое другое число — Истина. Но прямое сравнение Булево с числом (Если Флаг = 1 Тогда) не сработает так, как ожидает новичок, — типы различаются, и результат сравнения будет Ложь.

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

В языке запросов Булево используется в условиях ГДЕ, в конструкции ВЫБОР КОГДА...ТОГДА и при фильтрации виртуальных таблиц. Логические константы в запросе записываются как ИСТИНА и ЛОЖЬ:

ВЫБРАТЬ

Товары.Ссылка,

Товары.ВАрхиве

ИЗ

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

ГДЕ

Товары.ВАрхиве = ЛОЖЬ

Особая ситуация возникает при левых соединениях: если запись в присоединяемой таблице отсутствует, булево поле примет значение NULL, а не Ложь. Сравнение NULL = ЛОЖЬ не выполняется, поэтому строка отфильтруется неожиданным образом. Безопасная конструкция — обернуть поле в ЕСТЬNULL(Поле, ЛОЖЬ) или проверять через ЕСТЬ NULL.

Сравнение Булево с альтернативными способами хранения флага

Иногда разработчики сомневаются: хранить признак как Булево, число (0/1) или строку («Да»/«Нет»). Выбор влияет на удобство запросов, производительность и понятность кода.

ВариантПлюсыМинусы
БулевоКорректные сравнения, флажок на форме автоматически, компактное хранениеТолько два состояния, нельзя добавить третий вариант
Число (0/1)Легко расширить до нескольких состоянийНеочевидный смысл значений, лишние преобразования, нет флажка на форме
Строка («Да»/«Нет»)Читается человеком при выгрузкеОшибки регистра и пробелов, избыточный размер, медленные сравнения
ПеречислениеНесколько понятных состояний («Новый/В работе/Закрыт»)Избыточно для простого флага

Если признак строго двоичный — выбирайте Булево. Если в будущем возможны дополнительные состояния (например, «Не проверено / Проверено / Отклонено»), сразу закладывайте перечисление: миграция данных с Булево на перечисление потребует отдельной обработки и остановки работы пользователей на время конвертации.

Сравнение вариантов

Булево

Подходит для строгих признаков «да/нет»: архив, активность, согласие. Ограничение — нельзя добавить третье состояние без переделки.

Перечисление

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

Число 0/1

Оправдано редко — например, при интеграции с внешней системой, передающей числа. Внутри 1С создаёт лишнюю путаницу.

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

Большинство проблем с логическим типом возникает не из-за самого типа, а из-за невнимательности при сравнениях и обмене данными. Разберём частые сценарии.

Сравнение с числом или строкой

Конструкция Если Флаг = 1 Тогда молча возвращает Ложь, даже когда Флаг равен Истина. Ошибка не выдаёт исключение, поэтому её трудно найти: код просто не выполняется. Правильно — Если Флаг = Истина Тогда или просто Если Флаг Тогда.

Значение по умолчанию у нового реквизита

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

Обмен данными и внешние источники

При загрузке из Excel, CSV или веб-сервисов булево значение часто приходит как текст «true», «1», «Да». Перед записью в реквизит такие значения нужно явно интерпретировать, иначе в базе окажется строка вместо логического типа, и отборы перестанут работать.

Типичные ошибки
01
Сравнение Булево с числом 1 — условие никогда не выполняется, ошибка не выдаётся и находится только тестированием
02
Игнорирование NULL в запросах с левым соединением — часть записей пропадает из результата без видимой причины
03
Хранение флага строкой «Да/Нет» — отборы и сортировки работают непредсказуемо из-за регистра и пробелов
04
Забытая обработка первоначального заполнения — старые документы получают Ложь там, где нужна Истина

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

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

Для программной проверки используйте функцию ТипЗнч(): она покажет, действительно ли переменная содержит Булево, а не строку или число. В отладчике (F5) тип значения отображается рядом со значением переменной — это быстрый способ найти несоответствие типов в сложных выражениях.

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

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

Тип значения переменной
Норма

ТипЗнч() возвращает «Булево», флажок на форме работает

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

Тип «Строка» или «Число» — сравнения с Истина дают Ложь

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

Записи делятся на две ожидаемые группы

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

Часть записей пропадает — вероятно, NULL из соединения

Старые данные после добавления реквизита
Норма

Значения соответствуют задуманной логике по умолчанию

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

Все старые записи содержат Ложь, хотя нужна Истина

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

Итог

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

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

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

Можно ли сравнивать Булево напрямую, без «= Истина»?

Да, и это рекомендуемый стиль. Конструкция Если Флаг Тогда полностью эквивалентна Если Флаг = Истина Тогда, но короче и читается легче. Для проверки на Ложь используйте Если НЕ Флаг Тогда.

Чем Булево отличается от Неопределено и NULL?

Булево — конкретный тип с двумя значениями. Неопределено — специальное значение «ничего не присвоено» во встроенном языке, а NULL — признак отсутствия данных в запросе. Это три разных сущности: сравнивать их между собой напрямую нельзя, для каждой есть свои функции проверки.

Как вывести флажок Булево в отчёт на СКД?

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

Почему в форме списка флажок отображается серым или недоступным?

Чаще всего поле связано с реквизитом, доступным только для чтения, либо на форме стоит ограничение через функциональные опции или права ролей. Проверьте свойство «ТолькоПросмотр» элемента формы и права текущего пользователя на изменение объекта.

Как массово установить значение Истина для существующих записей?

Напишите обработку: запросом выберите объекты с Ложь, в цикле получите каждый объект методом ПолучитьОбъект(), присвойте Истина и вызовите Записать(). Перед запуском сделайте резервную копию и сначала выполните обработку на тестовой базе, сверив количество изменённых записей с выборкой.

Передаётся ли Булево корректно через веб-сервисы и JSON?

В JSON логические значения передаются как true/false и корректно преобразуются при чтении стандартными средствами 1С. Проблемы возникают, когда внешняя система шлёт строки «true»/«false» в кавычках — тогда требуется ручное преобразование перед записью в реквизит типа Булево.