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

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

Булево в 1С: как сделать флажок на форме и в таблицах

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

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

Причина почти всегда в настройках вида поля формы, типе данных реквизита или особенностях контейнера — обычной формы, табличной части, динамического списка или отчёта на СКД. В каждом из этих мест флажок настраивается по-разному, и способ, работающий на форме элемента справочника, может не сработать в таблице значений на управляемой форме.

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

Как платформа 1С отображает тип Булево по умолчанию

Когда вы добавляете реквизит с типом «Булево» в справочник, документ или регистр сведений и перетаскиваете его на управляемую форму, платформа сама выбирает вид отображения. В большинстве случаев это «Поле флажка» — квадратный элемент, который пользователь отмечает щелчком мыши. Заголовок реквизита выводится рядом с флажком справа.

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

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

Флажок на форме элемента: настройка через конфигуратор

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

Если поле отображается как поле ввода, смените вид вручную: правый клик по элементу формы → «Свойства» → свойство «Вид» → «Поле флажка». После этого на форме появится флажок. Обратите внимание на свойство «ПоложениеЗаголовка» — для флажков заголовок обычно располагают справа, что соответствует стандартам интерфейса.

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

Как включить флажок на форме
  1. 1
    Откройте форму объекта в конфигураторе и найдите элемент, связанный с булевым реквизитом.
  2. 2
    В палитре свойств установите «Вид» = «Поле флажка».
  3. 3
    Проверьте «ПоложениеЗаголовка» — для флажка обычно «Право».
  4. 4
    Обновите конфигурацию базы данных и откройте форму в режиме предприятия.
  5. 5
    Убедитесь, что флажок ставится, снимается и значение сохраняется после записи объекта.

Флажок в табличной части и таблице значений

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

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

МассивТипов = Новый Массив;

МассивТипов.Добавить(Тип("Булево"));

ОписаниеБулево = Новый ОписаниеТипов(МассивТипов);

ТаблицаФормы.Добавить(Новый РеквизитФормы("Пометка", ОписаниеБулево, "ТаблицаФормы", "Пометка"));

НовыйЭлемент = Элементы.Добавить("ТаблицаФормыПометка", Тип("ПолеФормы"), Элементы.ТаблицаФормы);

НовыйЭлемент.ПутьКДанным = "ТаблицаФормы.Пометка";

НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;

Для колонок-флажков в таблицах полезно свойство «РежимРедактирования» = «Непосредственно» (в свойствах всей таблицы). Тогда щелчок по флажку сразу меняет значение без перевода строки в режим редактирования — это стандартное поведение, которого ждут пользователи, например, при массовой пометке строк.

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

bsl
&НаКлиенте
Процедура УстановитьВсеПометки(Команда)
	Для Каждого Строка Из Объект.Товары Цикл
		Строка.Пометка = Истина;
	КонецЦикла;
КонецПроцедуры

Флажок в динамическом списке и отчёте СКД

В динамических списках (списки справочников, документов, произвольные запросы) булево поле показывается флажком, если тип поля в запросе — строго Булево. Типичная проблема: в запросе используется конструкция ВЫБОР, возвращающая Истина/Ложь и ещё какое-то значение другого типа — тогда поле становится составным и флажок превращается в текст. Приведите все ветки ВЫБОР к булеву типу, и флажок вернётся.

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

В отчётах на СКД булево поле выводится как «Да/Нет» или флажок — в зависимости от настроек. Чтобы получить флажок, откройте в схеме компоновки вкладку «Наборы данных», для нужного поля задайте оформление: «Параметры вывода» → «Оформление» → «Формат» не требуется, достаточно чтобы тип был Булево. Для красивого отображения «Да/Нет» вместо флажка используйте параметр «Формат» со значением вида «БЛ=Нет; БИ=Да».

Обработка изменения флажка и связь с другими элементами

Флажок редко живёт сам по себе: обычно от него зависит видимость или доступность других полей. Классический пример — флажок «Использовать скидку» включает поле процента скидки. Реализуется это через событие «ПриИзменении» и установку свойств элементов формы:

&НаКлиенте

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

Элементы.ПроцентСкидки.Доступность = Объект.ИспользоватьСкидку;

Если НЕ Объект.ИспользоватьСкидку Тогда

Объект.ПроцентСкидки = 0;

КонецЕсли;

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

Два правила, которые спасают от ошибок. Первое: при снятии флажка очищайте связанные данные (как в примере выше), иначе в объекте останутся «осиротевшие» значения, которые попадут в отчёты и проведение. Второе: начальное состояние доступности задавайте не только в свойствах формы, но и в обработчике «ПриОткрытии» или «ПриЧтенииНаСервере» — иначе при открытии существующего объекта поля могут быть доступны, хотя флажок снят.

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

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

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

Вторая группа ошибок — логические. Сравнение булева значения с числом или строкой («Если Признак = 1 Тогда») без предварительного приведения типов даёт неожиданные результаты, особенно в запросах. В запросах булево поле сравнивайте с ИСТИНА/ЛОЖЬ, а не с 1 и 0.

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

Типичные ошибки
01
Составной тип реквизита вместо чистого Булево — вместо флажка показывается поле ввода или появляется третье состояние.
02
Реквизит формы вместо реквизита объекта — значение флажка не сохраняется в базе.
03
Сравнение булева поля с 1 или 0 в запросе — условие не срабатывает, отбор пустой.
04
Доступность связанных полей задана только в свойствах формы — при открытии существующего объекта состояние неверное.
05
Изменение типовой конфигурации напрямую вместо расширения — конфликты при обновлении.

Проверка результата и границы самостоятельной работы

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

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

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

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

Отображение на форме
Норма

Квадратный флажок с заголовком справа, переключается щелчком

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

Поле ввода со списком «Да/Нет» или серый недоступный элемент

Сохранение значения
Норма

После записи и повторного открытия состояние флажка сохранилось

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

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

Состояние флажка
Норма

Два состояния: установлен / снят

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

Третье неопределённое состояние — признак составного типа данных

Связанные поля
Норма

Доступность меняется сразу при переключении и верна при открытии объекта

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

Поля доступны при снятом флажке после открытия существующего объекта

Итог

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

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

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

Почему вместо флажка отображается поле ввода «Да/Нет»?

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

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

Да, если тип данных допускает неопределённое значение (например, составной тип или поле отбора). Для обычного реквизита объекта третье состояние не нужно и появляется только из-за ошибки в типе. Если трёхсостояний флажок нужен осознанно — например, «не выбрано / да / нет» — используйте числовой реквизит со списком выбора вместо булева.

Как программно установить или прочитать значение флажка?

Флажок связан с реквизитом, поэтому работайте с данными, а не с элементом формы: Объект.ИспользоватьСкидку = Истина; чтение — Если Объект.ИспользоватьСкидку Тогда. Изменение реквизита автоматически отражается на форме, менять свойства самого элемента для установки значения не требуется.

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

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

Как вывести в отчёте «Да/Нет» вместо флажка?

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

Флажок ставится, но после записи документа сбрасывается. Что не так?

Элемент формы связан с реквизитом формы, а не с реквизитом объекта — значение живёт только в памяти формы. Откройте свойства элемента и проверьте «ПутьКДанным»: он должен указывать на реквизит объекта (например, Объект.Пометка). Если реквизита в объекте нет — добавьте его в метаданные.