Добавляем флажок (реквизит Булево) в конфигурацию 1С
Содержание
Флажок в 1С — это элемент формы, за которым стоит реквизит типа Булево: он хранит одно из двух значений, Истина или Ложь. Чтобы флажок появился в карточке справочника или документа, в Конфигураторе добавляют реквизит типа Булево, а затем перетаскивают его на форму. Отдельного «поля флажка» как типа данных не существует — вид «Поле флажка» задаётся уже элементу формы.
Ниже — весь путь от метаданных до печатной формы: как создать реквизит, вывести его на форму элемента, отработать нажатие в коде, вывести значение в отчёт и в макет на печать. Пути приведены для платформы 8.3 с интерфейсом «Такси».
Тип Булево: что хранит флажок
Булево — примитивный тип с двумя значениями: Истина (галочка стоит) и Ложь (галочки нет). Третьего состояния у реквизита нет: даже если на форме флажок выглядит «пустым», в базе лежит Ложь, а не Неопределено.
Из этого следуют два практических момента:
- 🔸 Значение по умолчанию. У нового реквизита Булево при создании записи будет
Ложь. Если нужно, чтобы галочка стояла изначально, задайте значение заполнения (см. ниже) или установите его в обработчике заполнения. - 🔸 Отбор и сравнение. В запросах и отборах Булево сравнивают напрямую:
Отбор.Проведён = Истина. Писать= Истинане обязательно — условиеГДЕ Проведёнсамо по себе отбирает истинные значения.
Если по смыслу нужны три состояния (например, «да / нет / не задано»), Булево не подойдёт — возьмите перечисление с тремя значениями. Флажок рисует только «да» и «нет».
Добавляем реквизит Булево в Конфигураторе
Это основной шаг — без реквизита в метаданных флажку негде хранить значение. Порядок действий одинаков для справочника, документа, регистра сведений и других объектов.
- Откройте конфигурацию на редактирование (
Конфигурация → Открыть конфигурацию). - В дереве метаданных найдите нужный объект, например
Справочники → Контрагенты. - Раскройте ветку объекта, выделите узел
Реквизиты, вызовите контекстное меню и выберитеДобавить. - В палитре свойств задайте:
- Имя — латиницей без пробелов, например
ПостоянныйКлиент. По имени обращаются из кода. - Синоним — как реквизит подпишется в интерфейсе: «Постоянный клиент».
- Тип — выберите
Булево.
- Имя — латиницей без пробелов, например
- При необходимости задайте Значение заполнения =
Истина, если галочка должна стоять у новых элементов по умолчанию.
После этого сохраните конфигурацию и обновите конфигурацию базы данных: Конфигурация → Обновить конфигурацию базы данных (горячая клавиша F7). Без обновления конфигурации базы данных новый реквизит не появится ни в базе, ни на форме — это самая частая причина, по которой «флажок не создаётся».
Обновление структуры базы требует монопольного доступа: платформа попросит завершить сеансы других пользователей. В рабочей базе планируйте такое изменение на время, когда в ней никто не работает.
Если вы дорабатываете типовую конфигурацию (БП 3.0, ЗУП 3.1, УТ 11), менять её напрямую нежелательно — это осложнит обновления. Для добавления реквизита используйте расширение конфигурации (появились в платформе 8.3.6): создайте расширение, заимствуйте в него объект и добавьте реквизит уже в расширении.
Выводим флажок на форму элемента
Сам по себе реквизит на форме не появляется — на управляемой форме его нужно добавить вручную.
- В дереве метаданных раскройте объект и откройте его форму:
Формы → ФормаЭлемента(у документа —ФормаДокумента). - В левом верхнем окне редактора формы перейдите на вкладку
Реквизиты. Основной реквизит формы (например,Объект) содержит все реквизиты объекта. - Раскройте
Объект, найдите свой реквизит и перетащите его мышью в дерево элементов формы (левое нижнее окно).
Платформа сама создаст элемент формы и подберёт вид по типу данных: для Булево это Поле флажка с подписью-синонимом. Проверить и сменить вид можно в свойствах элемента, параметр Вид — доступны варианты:
| Вид элемента | Как выглядит | Когда применять |
|---|---|---|
| Поле флажка | Квадрат с галочкой + подпись | Обычный случай |
| Тумблер | Переключатель вкл/выкл | Акцент на «включено/выключено» |
| Поле картинки | Своя картинка для «да» и «нет» | Нестандартное оформление списка |
Положение подписи относительно квадрата регулируется свойством Положение заголовка (слева, сверху, нет заголовка). Несколько флажков удобно собрать в группу формы с заголовком «Признаки» — так они визуально отделяются от остальных полей и выстраиваются в столбец.
Полезно помнить: системные Булево-реквизиты в 1С уже есть у каждого объекта — это ПометкаУдаления у справочников и документов и Проведён у документов. Пользовательский флажок создаётся ровно так же, как они, и ведёт себя идентично: хранит Истина/Ложь и выводится на форму полем флажка.
Чтобы флажок появился не только в карточке, но и в списке, его добавляют в форму списка: откройте Форма списка, найдите реквизит в составе Список и перетащите в колонки.
Реагируем на флажок в коде
Часто флажок не просто хранит значение, а управляет логикой: открывает поля, меняет доступность кнопок, подставляет данные. Для этого используют обработчик события.
Самый ходовой обработчик — ПриИзменении у элемента формы. Он срабатывает, когда пользователь ставит или снимает галочку. Создают его так: выделите поле флажка на форме, в свойствах найдите событие ПриИзменении и нажмите значок лупы — платформа создаст процедуру.
&НаКлиенте
Процедура ПостоянныйКлиентПриИзменении(Элемент)
// Делаем поле «Размер скидки» доступным только для постоянных клиентов
Элементы.РазмерСкидки.Доступность = Объект.ПостоянныйКлиент;
Если НЕ Объект.ПостоянныйКлиент Тогда
Объект.РазмерСкидки = 0;
КонецЕсли;
КонецПроцедуры
Чтобы доступность выставлялась не только при клике, но и при открытии уже заполненной карточки, ту же логику дублируют в обработчике формы ПриСозданииНаСервере или выносят в отдельную процедуру и вызывают из обоих мест:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьДоступностьСкидки();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьСкидки(Форма)
Форма.Элементы.РазмерСкидки.Доступность = Форма.Объект.ПостоянныйКлиент;
КонецПроцедуры
Скрываем поля по флажку без кода
Если задача сводится к «поставил галочку — появилось поле, снял — исчезло», писать обработчик не обязательно. Эту связь задают условным оформлением формы — платформа применит его автоматически и при открытии карточки, и при каждом изменении флажка.
- В редакторе формы откройте
Условное оформление(команда в верхней командной панели окна элементов формы). - Добавьте новый элемент условного оформления.
- В поле Оформляемые поля укажите элемент, который прячем, — например
РазмерСкидки. - В поле Условие задайте:
ПостоянныйКлиентРавноЛожь. - В поле Оформление выставьте свойство
Видимость=Нет.
Теперь поле «Размер скидки» будет скрыто, пока флажок снят, и само появится, когда пользователь его поставит. Тем же способом меняют цвет, доступность и текст — без единой строки кода.
Условное оформление и обработчик ПриИзменении решают похожие задачи. Простое скрытие и подсветку делайте оформлением — его видно в настройках, его проще сопровождать. Код оставьте для логики, которую оформлением не выразить: подстановка значений, обращение к базе, пересчёты.
Значение по умолчанию и заполнение флажка
У нового элемента Булево всегда Ложь. Есть три способа заранее поставить галочку:
- Значение заполнения в свойствах реквизита —
Истина. Простейший случай: галочка стоит у всех новых элементов безусловно. - Обработка заполнения объекта — когда начальное значение зависит от данных. Например, у контрагента-юрлица галочку ставим, у физлица нет:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
ПостоянныйКлиент = (ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо);
КонецПроцедуры
- Групповая установка для уже существующих элементов — через обработку «Групповое изменение реквизитов» в режиме «1С:Предприятие» (
НСИ и администрированиеилиАдминистрирование, в зависимости от конфигурации) либо собственной обработкой, которая перебирает элементы и пишетИстина.
Массовое изменение реквизита в рабочей базе меняет данные необратимо. Перед запуском групповой обработки на большом справочнике сделайте резервную копию базы.
Как прочитать и установить значение из кода
К флажку обращаются по имени реквизита. В форме элемента значение лежит в Объект:
Если Объект.ПостоянныйКлиент Тогда
Сообщить("Клиент постоянный");
КонецЕсли;
Объект.ПостоянныйКлиент = Истина; // поставить галочку программно
Чтобы менять флажок у строк в форме списка, берут текущие данные списка. Для группового изменения выделенных строк перебирают их и записывают значение через объект:
&НаСервере
Процедура УстановитьФлажокВыделенным(МассивСсылок)
Для Каждого Ссылка Из МассивСсылок Цикл
Объект = Ссылка.ПолучитьОбъект();
Объект.ПостоянныйКлиент = Истина;
Объект.Записать();
КонецЦикла;
КонецПроцедуры
Запись в цикле меняет элементы в базе напрямую. На большом списке это долго и необратимо — делайте такое только осознанно и с резервной копией.
Флажок в отчётах и на печати
В отчётах и запросах
В запросе Булево — обычное поле. Для отбора «только с галочкой» достаточно условия без явного сравнения:
ВЫБРАТЬ
Контрагенты.Наименование,
Контрагенты.ПостоянныйКлиент
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.ПостоянныйКлиент
В системе компоновки данных (СКД) поле Булево можно вывести как есть (покажется «Да» / «Нет»), поставить по нему отбор или использовать в условном оформлении ячеек. Отдельной настройки для флажка не требуется.
Если реквизит добавлен в форму динамического списка, пользователь сам отфильтрует записи по флажку: правой кнопкой по колонке — команда настройки списка, в отборе значение Истина или Ложь. Отбор по Булево удобно вынести в быстрые настройки списка, чтобы переключать его одним кликом без захода в полную настройку.
В печатной форме (макете)
В макете на печать картинку-галочку обычно не выводят — показывают текст. Значение Булево подставляют в параметр области макета, а текст «Да»/«Нет» формируют в коде:
Если Выборка.ПостоянныйКлиент Тогда
ОбластьСтроки.Параметры.СтатусКлиента = "Да";
Иначе
ОбластьСтроки.Параметры.СтатусКлиента = "Нет";
КонецЕсли;
Если печатная форма принадлежит типовой конфигурации, редактировать её напрямую не нужно — макет меняют через расширение конфигурации, заимствуя исходный макет. Так доработка не слетит при обновлении.
Частые ошибки при создании флажка
Короткий разбор того, что реально ломается на практике.
Частые вопросы
Чем отличается реквизит объекта от реквизита формы?
Как сделать, чтобы у новых элементов галочка стояла по умолчанию?
Истина. Если значение зависит от условий, установите его в обработчике объекта «ОбработкаЗаполнения».Можно ли добавить флажок без изменения конфигурации?
Почему условие в запросе `ГДЕ Проведён` работает без `= Истина`?
ГДЕ Проведён отбирает строки, где значение равно Истина. Для обратного условия пишут ГДЕ НЕ Проведён.