В конфигурациях 1С:Предприятие булево поле (типа Булево) часто используется для хранения логических значений: Истина или Ложь. Однако его визуальное отображение в форме как флажка (checkbox) требует правильной настройки, иначе пользователи могут столкнуться с неудобствами при работе. Эта статья раскроет все нюансы — от создания булева реквизита до его интеграции в отчеты и обработки событий.

Особенность булева поля в том, что оно может не только хранить состояние "вкл/выкл", но и управлять видимостью других элементов формы, служить фильтром в запросах или триггером для бизнес-логики. Например, флажок ЭтоВИПКлиент в справочнике контрагентов может автоматически подставлять скидку 10% при формировании заказа. Но чтобы такая логика работала корректно, нужно понимать механизмы привязки данных и обработки событий в 1С 8.3.

Что такое булево поле в 1С и почему его отображают как флажок

Булево поле в — это реквизит с типом Булево, который принимает только два значения: Истина (true) или Ложь (false). В базе данных оно хранится как битовое значение, но для пользователя важно его визуальное представление. Флажок (checkbox) — самый интуитивно понятный способ отображения такого поля, так как:

  • 🔹 Наглядность: пользователь сразу видит состояние (галочка = включено, пусто = выключено).
  • 🔹 Компактность: занимает меньше места, чем выпадающий список с вариантами "Да/Нет".
  • 🔹 Удобство: изменение состояния одним кликом (в отличие от ручного ввода Истина/Ложь).

Однако не всегда булево поле по умолчанию отображается как флажок. Это зависит от:

  • 📌 Типа формы (управляемая или обычная).
  • 📌 Настроек элемента управления в конфигураторе.
  • 📌 Версии платформы1С 8.3.20+ появились дополнительные опции для управляемых форм).
📊 Как вы обычно используете булевы поля в 1С?
Для фильтрации данных
Как триггер бизнес-логики
Для управления видимостью элементов
Другое

Создание булева реквизита в конфигураторе: пошаговая инструкция

Чтобы добавить булево поле в справочник или документ, выполните следующие шаги:

  1. Откройте конфигуратор и перейдите в нужный объект (например, справочник Контрагенты).

  2. В дереве объектов выберите раздел Реквизиты и нажмите Добавить.

  3. Задайте имя реквизита (например, ЭтоПостоянныйКлиент) и выберите тип Булево.

  4. Сохраните конфигурацию (Ctrl+S) и обновите базу данных (Конфигурация → Обновить конфигурацию базы данных).

Теперь реквизит появится в форме объекта, но по умолчанию он может отображаться как текстовое поле с значениями Истина/Ложь. Чтобы преобразовать его в флажок:

Открыть форму объекта в конфигураторе|

Найти элемент управления для булева реквизита|

В свойствах элемента выбрать тип "Поле флажка"|

Установить галочку "Трехсостояний", если нужно значение "Неопределено"-->

В управляемых формах путь будет таким: Реквизиты формы → Добавить → Выбрать реквизит → В свойствах элемента указать "Тип: Поле флажка".

⚠️ Внимание: Если флажок не отображается после изменений, проверьте, что форма не заблокирована для редактирования (в свойствах формы должна стоять галочка Редактируемая).

Примеры использования булева поля как флажка в бизнес-логике

Булево поле может служить не только для хранения состояния, но и для автоматизации процессов. Рассмотрим типовые сценарии:

1. Управление видимостью элементов формы

Допустим, в документе ЗаказПокупателя есть флажок НужнаДоставка. При его установке должно появляться поле для ввода адреса. Реализуется это через событие ПриИзменении:

Процедура НужнаДоставкаПриИзменении(Элемент)

ЭлементыФормы.АдресДоставки.Видимость = НужнаДоставка;

КонецПроцедуры

2. Фильтрация данных в отчетах

В отчете ПродажиПоКлиентам можно добавить параметр ТолькоВИПКлиенты (булево) и использовать его в запросе:

ВЫБРАТЬ

Клиент,

СуммаПродаж

ИЗ

Документ.ЗаказПокупателя КАК Заказ

ГДЕ

Заказ.Клиент.ЭтоВИПКлиент = &ТолькоВИПКлиенты

3. Автоматическое заполнение документов

Флажок ПрименитьСкидку в документе РеализацияТоваров может триггерить перерасчет цены:

Процедура ПрименитьСкидкуПриИзменении(Элемент)

Если ПрименитьСкидку Тогда

ПерерасчетЦенСоСкидкой(10); // 10% скидка

Иначе

ПерерасчетЦенСоСкидкой(0);

КонецЕсли;

КонецПроцедуры

💡

Если булево поле используется как фильтр в динамическом списке, добавьте в запрос условие ГДЕ Поле IS NULL для учета неопределенных значений (если флажок трехсостояний).

Типовые ошибки при работе с булевыми полями и как их избежать

Даже опытные разработчики сталкиваются с проблемами при работе с булевыми полями. Вот наиболее распространенные ошибки и способы их решения:

Ошибка Причина Решение
Флажок не сохраняет состояние Реквизит не привязан к данным формы Проверьте свойство ПутьКДанным элемента управления
Значение всегда Ложь По умолчанию не установлено Истина В модуле объекта добавьте ПриСозданииНаСервере с инициализацией
Флажок не реагирует на клик Отсутствует обработчик события ПриИзменении Добавьте процедуру для элемента управления
В запросе не работает фильтр по булеву полю Неверный синтаксис (= Истина вместо = TRUE) Используйте ГДЕ Поле = &Параметр с передачей булева значения
⚠️ Внимание: В 1С 8.3.18 и ниже при работе с булевыми параметрами в запросах может возникать ошибка "Недопустимый тип параметра". В этом случае используйте конструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ &Параметр КАК Флаг.

Оптимизация работы с булевыми полями в больших базах данных

В системах с высокой нагрузкой (например, в 1С:ERP или 1С:УТ 11) булевы поля могут влиять на производительность, особенно если они используются в:

  • 📊 Индексируемых запросах (фильтрация по флажку в большом справочнике).
  • 📈 Отчетах с группировкой (например, "Количество ВИП-клиентов по регионам").
  • 🔄 Регламентных заданиях (проверка флажков для массовой обработки).

Рекомендации по оптимизации:

  1. Индексируйте булевы поля, если они часто используются в фильтрах. В конфигураторе установите свойство Индексировать для реквизита.

  2. Избегайте избыточных флажков. Например, вместо ЭтоОптовыйКлиент и ЭтоРозничныйКлиент используйте одно поле ТипКлиента с перечислением.

  3. Кэшируйте результаты часто используемых запросов с булевыми фильтрами (например, через механизм ПланОбмена или РегистрСведений).

Как проверить, индексируется ли булево поле?

Откройте конфигуратор → найдите реквизит в объекте → в свойствах посмотрите параметр "Индексировать".

Если галочки нет, установите её и обновите базу данных. После этого проверьте план запроса в отладчике (F5) — индекс должен использоваться.

Расширенные возможности: трехсостояний флажок и кастомные обработчики

Стандартный флажок в имеет два состояния, но иногда требуется третье — Неопределено (null). Это актуально для:

  • 🔄 Фильтров в отчетах ("показать все/только да/только нет").
  • 📋 Массового редактирования (например, сброс флажков для группы элементов).
  • 🔍 Промежуточных состояний (например, "статус не проверен").

Чтобы включить трехсостояний режим:

  1. В свойствах элемента управления установите Трехсостояний = Истина.

  2. В коде проверяйте значение через ЗначениеЗаполнено():

    Если НЕ ЗначениеЗаполнено(ЭлементыФормы.Флажок.Значение) Тогда
    

    // Логика для неопределенного состояния

    КонецЕсли;

Для кастомных обработчиков (например, изменение цвета флажка при определенных условиях) используйте событие ПриОтображении:

Процедура ФлажокПриОтображении(Элемент, Оформление, СтандартнаяОбработка)

Если Клиент.ЭтоВИПКлиент Тогда

Оформление.ЦветФона = ВебЦвета.Золотой;

КонецЕсли;

КонецПроцедуры

💡

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

Интеграция булевых полей с внешними системами

При обмене данными (например, через REST API или 1С:Коннектор) булевы поля требуют особого внимания, так как их представление может отличаться:

Система Формат булева значения Пример преобразования в 1С
JSON true/false Значение = JSONПрочитать(СтрокаJSON).Флажок;
XML 1/0 или "true"/"false" Значение = (ЗначениеXML = "true");
SQL BIT (1/0) Значение = (ЗначениеИзSQL = 1);

Пример обработки булева поля в HTTP-сервисе:

Функция ПолучитьСтатусКлиента(Запрос)

Ответ = Новый Структура();

Ответ.Вставить("ЭтоВИП", Клиент.ЭтоВИПКлиент); // Автоматически преобразуется в true/false

Возврат Ответ;

КонецФункции

⚠️ Внимание: При обмене с 1С:Бухгалтерия 3.0 через УниверсальныйФормат булевы поля передаются как строки "Да"/"Нет". Используйте конструкцию Значение = (Строка = "Да") для преобразования.

FAQ: Частые вопросы о булевых полях в 1С

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

Используйте событие ПриСозданииНаСервере или ПередЗаписью в модуле объекта. Пример:

Процедура ПередЗаписью(Отказ)

Если СуммаДокумента > 10000 Тогда

ЭтоКрупныйЗаказ = Истина;

КонецЕсли;

КонецПроцедуры

Почему в отчете не работает фильтр по булеву полю, если оно не заполнено?

Скорее всего, в запросе не учтено NULL-значение. Добавьте условие:

ГДЕ (Поле = &Флаг ИЛИ (&Флаг = ЛОЖЬ И Поле IS NULL))
Можно ли использовать булево поле в регистре сведений?

Да, но учитывайте, что в регистрах сведения хранятся в разрезе измерений. Булево поле лучше добавлять как ресурс, если оно меняется со временем (например, СтатусАктивности для номенклатуры).

Как массово установить флажки для группы элементов?

Используйте обработку Для Каждого с отбором:

Выборка = Справочники.Контрагенты.Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.Регион = "Москва" Тогда

Выборка.Ссылка.ЭтоВИПКлиент = Истина;

Выборка.Ссылка.Записать();

КонецЕсли;

КонецЦикла;

Как отладить событие ПриИзменении для флажка?

Поставьте точку останова в коде обработчика и используйте Сообщить() для вывода текущего значения:

Процедура ФлажокПриИзменении(Элемент)

Сообщить("Текущее значение: " + Флажок);

// Ваш код

КонецПроцедуры

Также проверьте, что событие привязано именно к элементу управления, а не к реквизиту.