Добавляем флажок (реквизит Булево) в конфигурацию 1С

· 9 мин

Содержание

Флажок в 1С — это элемент формы, за которым стоит реквизит типа Булево: он хранит одно из двух значений, Истина или Ложь. Чтобы флажок появился в карточке справочника или документа, в Конфигураторе добавляют реквизит типа Булево, а затем перетаскивают его на форму. Отдельного «поля флажка» как типа данных не существует — вид «Поле флажка» задаётся уже элементу формы.

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

Тип Булево: что хранит флажок

Булево — примитивный тип с двумя значениями: Истина (галочка стоит) и Ложь (галочки нет). Третьего состояния у реквизита нет: даже если на форме флажок выглядит «пустым», в базе лежит Ложь, а не Неопределено.

Из этого следуют два практических момента:

  • 🔸 Значение по умолчанию. У нового реквизита Булево при создании записи будет Ложь. Если нужно, чтобы галочка стояла изначально, задайте значение заполнения (см. ниже) или установите его в обработчике заполнения.
  • 🔸 Отбор и сравнение. В запросах и отборах Булево сравнивают напрямую: Отбор.Проведён = Истина. Писать = Истина не обязательно — условие ГДЕ Проведён само по себе отбирает истинные значения.

Если по смыслу нужны три состояния (например, «да / нет / не задано»), Булево не подойдёт — возьмите перечисление с тремя значениями. Флажок рисует только «да» и «нет».

Добавляем реквизит Булево в Конфигураторе

Это основной шаг — без реквизита в метаданных флажку негде хранить значение. Порядок действий одинаков для справочника, документа, регистра сведений и других объектов.

  1. Откройте конфигурацию на редактирование (Конфигурация → Открыть конфигурацию).
  2. В дереве метаданных найдите нужный объект, например Справочники → Контрагенты.
  3. Раскройте ветку объекта, выделите узел Реквизиты, вызовите контекстное меню и выберите Добавить.
  4. В палитре свойств задайте:
    • Имя — латиницей без пробелов, например ПостоянныйКлиент. По имени обращаются из кода.
    • Синоним — как реквизит подпишется в интерфейсе: «Постоянный клиент».
    • Тип — выберите Булево.
  5. При необходимости задайте Значение заполнения = Истина, если галочка должна стоять у новых элементов по умолчанию.

После этого сохраните конфигурацию и обновите конфигурацию базы данных: Конфигурация → Обновить конфигурацию базы данных (горячая клавиша F7). Без обновления конфигурации базы данных новый реквизит не появится ни в базе, ни на форме — это самая частая причина, по которой «флажок не создаётся».

Обновление структуры базы требует монопольного доступа: платформа попросит завершить сеансы других пользователей. В рабочей базе планируйте такое изменение на время, когда в ней никто не работает.

Если вы дорабатываете типовую конфигурацию (БП 3.0, ЗУП 3.1, УТ 11), менять её напрямую нежелательно — это осложнит обновления. Для добавления реквизита используйте расширение конфигурации (появились в платформе 8.3.6): создайте расширение, заимствуйте в него объект и добавьте реквизит уже в расширении.

Выводим флажок на форму элемента

Сам по себе реквизит на форме не появляется — на управляемой форме его нужно добавить вручную.

  1. В дереве метаданных раскройте объект и откройте его форму: Формы → ФормаЭлемента (у документа — ФормаДокумента).
  2. В левом верхнем окне редактора формы перейдите на вкладку Реквизиты. Основной реквизит формы (например, Объект) содержит все реквизиты объекта.
  3. Раскройте Объект, найдите свой реквизит и перетащите его мышью в дерево элементов формы (левое нижнее окно).

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

Вид элементаКак выглядитКогда применять
Поле флажкаКвадрат с галочкой + подписьОбычный случай
ТумблерПереключатель вкл/выклАкцент на «включено/выключено»
Поле картинкиСвоя картинка для «да» и «нет»Нестандартное оформление списка

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

Полезно помнить: системные Булево-реквизиты в 1С уже есть у каждого объекта — это ПометкаУдаления у справочников и документов и Проведён у документов. Пользовательский флажок создаётся ровно так же, как они, и ведёт себя идентично: хранит Истина/Ложь и выводится на форму полем флажка.

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

Флажок добавлен правильно, если:
Выполнено: 0 / 6

Реагируем на флажок в коде

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

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

&НаКлиенте
Процедура ПостоянныйКлиентПриИзменении(Элемент)
    // Делаем поле «Размер скидки» доступным только для постоянных клиентов
    Элементы.РазмерСкидки.Доступность = Объект.ПостоянныйКлиент;
    Если НЕ Объект.ПостоянныйКлиент Тогда
        Объект.РазмерСкидки = 0;
    КонецЕсли;
КонецПроцедуры

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    УстановитьДоступностьСкидки();
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьСкидки(Форма)
    Форма.Элементы.РазмерСкидки.Доступность = Форма.Объект.ПостоянныйКлиент;
КонецПроцедуры

Скрываем поля по флажку без кода

Если задача сводится к «поставил галочку — появилось поле, снял — исчезло», писать обработчик не обязательно. Эту связь задают условным оформлением формы — платформа применит его автоматически и при открытии карточки, и при каждом изменении флажка.

  1. В редакторе формы откройте Условное оформление (команда в верхней командной панели окна элементов формы).
  2. Добавьте новый элемент условного оформления.
  3. В поле Оформляемые поля укажите элемент, который прячем, — например РазмерСкидки.
  4. В поле Условие задайте: ПостоянныйКлиент Равно Ложь.
  5. В поле Оформление выставьте свойство Видимость = Нет.

Теперь поле «Размер скидки» будет скрыто, пока флажок снят, и само появится, когда пользователь его поставит. Тем же способом меняют цвет, доступность и текст — без единой строки кода.

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

Значение по умолчанию и заполнение флажка

У нового элемента Булево всегда Ложь. Есть три способа заранее поставить галочку:

  • Значение заполнения в свойствах реквизита — Истина. Простейший случай: галочка стоит у всех новых элементов безусловно.
  • Обработка заполнения объекта — когда начальное значение зависит от данных. Например, у контрагента-юрлица галочку ставим, у физлица нет:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    ПостоянныйКлиент = (ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо);
КонецПроцедуры
  • Групповая установка для уже существующих элементов — через обработку «Групповое изменение реквизитов» в режиме «1С:Предприятие» (НСИ и администрирование или Администрирование, в зависимости от конфигурации) либо собственной обработкой, которая перебирает элементы и пишет Истина.

Массовое изменение реквизита в рабочей базе меняет данные необратимо. Перед запуском групповой обработки на большом справочнике сделайте резервную копию базы.

Как прочитать и установить значение из кода

К флажку обращаются по имени реквизита. В форме элемента значение лежит в Объект:

Если Объект.ПостоянныйКлиент Тогда
    Сообщить("Клиент постоянный");
КонецЕсли;

Объект.ПостоянныйКлиент = Истина; // поставить галочку программно

Чтобы менять флажок у строк в форме списка, берут текущие данные списка. Для группового изменения выделенных строк перебирают их и записывают значение через объект:

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

Запись в цикле меняет элементы в базе напрямую. На большом списке это долго и необратимо — делайте такое только осознанно и с резервной копией.

Флажок в отчётах и на печати

В отчётах и запросах

В запросе Булево — обычное поле. Для отбора «только с галочкой» достаточно условия без явного сравнения:

ВЫБРАТЬ
    Контрагенты.Наименование,
    Контрагенты.ПостоянныйКлиент
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    Контрагенты.ПостоянныйКлиент

В системе компоновки данных (СКД) поле Булево можно вывести как есть (покажется «Да» / «Нет»), поставить по нему отбор или использовать в условном оформлении ячеек. Отдельной настройки для флажка не требуется.

Если реквизит добавлен в форму динамического списка, пользователь сам отфильтрует записи по флажку: правой кнопкой по колонке — команда настройки списка, в отборе значение Истина или Ложь. Отбор по Булево удобно вынести в быстрые настройки списка, чтобы переключать его одним кликом без захода в полную настройку.

В печатной форме (макете)

В макете на печать картинку-галочку обычно не выводят — показывают текст. Значение Булево подставляют в параметр области макета, а текст «Да»/«Нет» формируют в коде:

Если Выборка.ПостоянныйКлиент Тогда
    ОбластьСтроки.Параметры.СтатусКлиента = "Да";
Иначе
    ОбластьСтроки.Параметры.СтатусКлиента = "Нет";
КонецЕсли;

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

Частые ошибки при создании флажка

Короткий разбор того, что реально ломается на практике.

Диагностика: выберите симптом

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

Чем отличается реквизит объекта от реквизита формы?
Реквизит объекта хранится в базе и доступен во всех формах и запросах. Реквизит формы живёт только пока открыта форма и в базу не пишется. Флажок, значение которого нужно сохранять, делают реквизитом объекта; временный флажок «только на этот сеанс работы с формой» — реквизитом формы.
Как сделать, чтобы у новых элементов галочка стояла по умолчанию?
В свойствах реквизита задайте «Значение заполнения» = Истина. Если значение зависит от условий, установите его в обработчике объекта «ОбработкаЗаполнения».
Можно ли добавить флажок без изменения конфигурации?
Да, через расширение конфигурации: создаёте расширение, заимствуете объект и добавляете реквизит уже в нём. Типовая конфигурация при этом остаётся на поддержке и штатно обновляется.
Почему условие в запросе `ГДЕ Проведён` работает без `= Истина`?
Поле типа Булево само является логическим выражением. ГДЕ Проведён отбирает строки, где значение равно Истина. Для обратного условия пишут ГДЕ НЕ Проведён.
Как показать флажок в колонке списка, а не только в карточке?
Откройте форму списка, найдите реквизит в составе основного реквизита «Список» и перетащите его в дерево элементов — появится колонка с флажком.