В конфигурациях 1С:Предприятие булево поле (типа Булево) часто используется для хранения логических значений: Истина или Ложь. Однако его визуальное отображение в форме как флажка (checkbox) требует правильной настройки, иначе пользователи могут столкнуться с неудобствами при работе. Эта статья раскроет все нюансы — от создания булева реквизита до его интеграции в отчеты и обработки событий.
Особенность булева поля в том, что оно может не только хранить состояние "вкл/выкл", но и управлять видимостью других элементов формы, служить фильтром в запросах или триггером для бизнес-логики. Например, флажок ЭтоВИПКлиент в справочнике контрагентов может автоматически подставлять скидку 10% при формировании заказа. Но чтобы такая логика работала корректно, нужно понимать механизмы привязки данных и обработки событий в 1С 8.3.
Что такое булево поле в 1С и почему его отображают как флажок
Булево поле в 1С — это реквизит с типом Булево, который принимает только два значения: Истина (true) или Ложь (false). В базе данных оно хранится как битовое значение, но для пользователя важно его визуальное представление. Флажок (checkbox) — самый интуитивно понятный способ отображения такого поля, так как:
- 🔹 Наглядность: пользователь сразу видит состояние (галочка = включено, пусто = выключено).
- 🔹 Компактность: занимает меньше места, чем выпадающий список с вариантами "Да/Нет".
- 🔹 Удобство: изменение состояния одним кликом (в отличие от ручного ввода
Истина/Ложь).
Однако не всегда булево поле по умолчанию отображается как флажок. Это зависит от:
- 📌 Типа формы (управляемая или обычная).
- 📌 Настроек элемента управления в конфигураторе.
- 📌 Версии платформы (в 1С 8.3.20+ появились дополнительные опции для управляемых форм).
Создание булева реквизита в конфигураторе: пошаговая инструкция
Чтобы добавить булево поле в справочник или документ, выполните следующие шаги:
Откройте конфигуратор и перейдите в нужный объект (например, справочник
Контрагенты).В дереве объектов выберите раздел
Реквизитыи нажмитеДобавить.Задайте имя реквизита (например,
ЭтоПостоянныйКлиент) и выберите тип Булево.Сохраните конфигурацию (
Ctrl+S) и обновите базу данных (Конфигурация → Обновить конфигурацию базы данных).
Теперь реквизит появится в форме объекта, но по умолчанию он может отображаться как текстовое поле с значениями Истина/Ложь. Чтобы преобразовать его в флажок:
Открыть форму объекта в конфигураторе|
Найти элемент управления для булева реквизита|
В свойствах элемента выбрать тип "Поле флажка"|
Установить галочку "Трехсостояний", если нужно значение "Неопределено"-->
В управляемых формах путь будет таким: Реквизиты формы → Добавить → Выбрать реквизит → В свойствах элемента указать "Тип: Поле флажка".
⚠️ Внимание: Если флажок не отображается после изменений, проверьте, что форма не заблокирована для редактирования (в свойствах формы должна стоять галочка Редактируемая).
Примеры использования булева поля как флажка в бизнес-логике
Булево поле может служить не только для хранения состояния, но и для автоматизации процессов. Рассмотрим типовые сценарии:
1. Управление видимостью элементов формы
Допустим, в документе ЗаказПокупателя есть флажок НужнаДоставка. При его установке должно появляться поле для ввода адреса. Реализуется это через событие ПриИзменении:
Процедура НужнаДоставкаПриИзменении(Элемент)
ЭлементыФормы.АдресДоставки.Видимость = НужнаДоставка;
КонецПроцедуры
2. Фильтрация данных в отчетах
В отчете ПродажиПоКлиентам можно добавить параметр ТолькоВИПКлиенты (булево) и использовать его в запросе:
ВЫБРАТЬ
Клиент,
СуммаПродаж
ИЗ
Документ.ЗаказПокупателя КАК Заказ
ГДЕ
Заказ.Клиент.ЭтоВИПКлиент = &ТолькоВИПКлиенты
3. Автоматическое заполнение документов
Флажок ПрименитьСкидку в документе РеализацияТоваров может триггерить перерасчет цены:
Процедура ПрименитьСкидкуПриИзменении(Элемент)
Если ПрименитьСкидку Тогда
ПерерасчетЦенСоСкидкой(10); // 10% скидка
Иначе
ПерерасчетЦенСоСкидкой(0);
КонецЕсли;
КонецПроцедуры
Если булево поле используется как фильтр в динамическом списке, добавьте в запрос условие ГДЕ Поле IS NULL для учета неопределенных значений (если флажок трехсостояний).
Типовые ошибки при работе с булевыми полями и как их избежать
Даже опытные разработчики сталкиваются с проблемами при работе с булевыми полями. Вот наиболее распространенные ошибки и способы их решения:
| Ошибка | Причина | Решение |
|---|---|---|
| Флажок не сохраняет состояние | Реквизит не привязан к данным формы | Проверьте свойство ПутьКДанным элемента управления |
Значение всегда Ложь |
По умолчанию не установлено Истина |
В модуле объекта добавьте ПриСозданииНаСервере с инициализацией |
| Флажок не реагирует на клик | Отсутствует обработчик события ПриИзменении |
Добавьте процедуру для элемента управления |
| В запросе не работает фильтр по булеву полю | Неверный синтаксис (= Истина вместо = TRUE) |
Используйте ГДЕ Поле = &Параметр с передачей булева значения |
⚠️ Внимание: В 1С 8.3.18 и ниже при работе с булевыми параметрами в запросах может возникать ошибка "Недопустимый тип параметра". В этом случае используйте конструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ &Параметр КАК Флаг.
Оптимизация работы с булевыми полями в больших базах данных
В системах с высокой нагрузкой (например, в 1С:ERP или 1С:УТ 11) булевы поля могут влиять на производительность, особенно если они используются в:
- 📊 Индексируемых запросах (фильтрация по флажку в большом справочнике).
- 📈 Отчетах с группировкой (например, "Количество ВИП-клиентов по регионам").
- 🔄 Регламентных заданиях (проверка флажков для массовой обработки).
Рекомендации по оптимизации:
Индексируйте булевы поля, если они часто используются в фильтрах. В конфигураторе установите свойство
Индексироватьдля реквизита.Избегайте избыточных флажков. Например, вместо
ЭтоОптовыйКлиентиЭтоРозничныйКлиентиспользуйте одно полеТипКлиентас перечислением.Кэшируйте результаты часто используемых запросов с булевыми фильтрами (например, через механизм
ПланОбменаилиРегистрСведений).
Как проверить, индексируется ли булево поле?
Откройте конфигуратор → найдите реквизит в объекте → в свойствах посмотрите параметр "Индексировать".
Если галочки нет, установите её и обновите базу данных. После этого проверьте план запроса в отладчике (F5) — индекс должен использоваться.
Расширенные возможности: трехсостояний флажок и кастомные обработчики
Стандартный флажок в 1С имеет два состояния, но иногда требуется третье — Неопределено (null). Это актуально для:
- 🔄 Фильтров в отчетах ("показать все/только да/только нет").
- 📋 Массового редактирования (например, сброс флажков для группы элементов).
- 🔍 Промежуточных состояний (например, "статус не проверен").
Чтобы включить трехсостояний режим:
В свойствах элемента управления установите
Трехсостояний = Истина.В коде проверяйте значение через
ЗначениеЗаполнено():Если НЕ ЗначениеЗаполнено(ЭлементыФормы.Флажок.Значение) Тогда// Логика для неопределенного состояния
КонецЕсли;
Для кастомных обработчиков (например, изменение цвета флажка при определенных условиях) используйте событие ПриОтображении:
Процедура ФлажокПриОтображении(Элемент, Оформление, СтандартнаяОбработка)
Если Клиент.ЭтоВИПКлиент Тогда
Оформление.ЦветФона = ВебЦвета.Золотой;
КонецЕсли;
КонецПроцедуры
Трехсостояний флажок полезен для фильтров, но может усложнить логику. Всегда документируйте, что означает состояние "Неопределено" в вашей конфигурации.
Интеграция булевых полей с внешними системами
При обмене данными (например, через 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))
Можно ли использовать булево поле в регистре сведений?
Да, но учитывайте, что в регистрах сведения хранятся в разрезе измерений. Булево поле лучше добавлять как ресурс, если оно меняется со временем (например, СтатусАктивности для номенклатуры).
Как массово установить флажки для группы элементов?
Используйте обработку Для Каждого с отбором:
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Регион = "Москва" Тогда
Выборка.Ссылка.ЭтоВИПКлиент = Истина;
Выборка.Ссылка.Записать();
КонецЕсли;
КонецЦикла;
Как отладить событие ПриИзменении для флажка?
Поставьте точку останова в коде обработчика и используйте Сообщить() для вывода текущего значения:
Процедура ФлажокПриИзменении(Элемент)
Сообщить("Текущее значение: " + Флажок);
// Ваш код
КонецПроцедуры
Также проверьте, что событие привязано именно к элементу управления, а не к реквизиту.