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