Создаём переключатель-тумблер на управляемой форме 1С
Содержание
Тумблер в 1С — это обычное поле типа Булево, у которого в свойствах формы включён вид флажка «Тумблер». Весь путь: добавить реквизит
Булево → вывести его на форму → в свойствах поля задать ВидФлажка = Тумблер. Переключение состояния ловим в обработчике ПриИзменении.
Важный момент сразу: тумблер работает только с типом Булево. Ни строка, ни число, ни тем более ХранилищеЗначения в переключатель не превращаются — у них просто нет свойства «вид флажка». Если видите, что тумблер не включается, первым делом проверьте тип реквизита.
Ниже — как сделать переключатель на управляемой форме платформы 8.3 (интерфейс «Такси»), как привязать к нему логику, раскрасить через условное оформление и не споткнуться на обычных формах.
Реквизит типа Булево — основа переключателя
Тумблер отображает значение одного логического реквизита: включён — Истина, выключен — Ложь. Поэтому начинаем с реквизита.
Где его создавать — зависит от задачи:
- 🗂️ Реквизит объекта (справочника, документа) — если состояние нужно хранить в базе. Например, флаг
Активностьу элемента справочника «Контрагенты». - 📝 Реквизит формы — если переключатель управляет только поведением формы и в базу не пишется. Например, «Показывать архивные записи» в списке.
Создание реквизита объекта:
- Откройте конфигуратор, найдите нужный объект в дереве метаданных.
- Раскройте ветку
Реквизиты, через контекстное меню —Добавить. - Задайте имя латиницей без пробелов, например
Активность, и синоним для пользователя — «Активность». - В поле
ТипвыберитеБулево. - При необходимости задайте значение по умолчанию в модуле объекта (обработчик
ПриСозданииНаСервереилиОбработкаЗаполнения).
Реквизит формы добавляется на закладке Реквизиты самой формы — тип тот же, Булево.
Для флага-состояния сразу продумайте значение по умолчанию. Пустой (невыбранный) Булево в 1С равен Ложь, так что новый элемент справочника по умолчанию будет «выключен». Если логичнее обратное — задайте Истина при заполнении.
Выводим поле на форму и включаем вид «Тумблер»
Теперь реквизит нужно показать на форме именно как переключатель, а не как обычную галочку.
- Откройте форму объекта (или создайте новую, если у объекта форм ещё нет).
- На закладке редактора формы найдите реквизит в правом верхнем списке и перетащите его в дерево элементов формы слева. Появится элемент типа
Поле. - Выделите это поле, откройте палитру свойств (
F4или командаСвойства). - У поля типа
БулевосвойствоВидпо умолчанию —Поле флажка. Оставляем его. - Ниже найдите свойство
ВидФлажка. Варианты:Авто,Флажок,Тумблер. ВыберитеТумблер.
После этого на форме галочка превратится в переключатель-ползунок. Если свойства ВидФлажка в палитре нет — у вас устаревшая версия платформы: вид «Тумблер» доступен в актуальных релизах 8.3.
Пара свойств, которые стоит настроить рядом:
| Свойство | Зачем |
|---|---|
Заголовок | Подпись рядом с тумблером. Можно оставить синоним реквизита. |
ПоложениеЗаголовка | Слева, справа, сверху — как встанет подпись относительно ползунка. |
ТолькоПросмотр | Если тумблер должен показывать состояние, но не меняться пользователем. |
Не путайте ВидФлажка (как рисуется) и тип реквизита (что хранится). Вид — это оформление поля, тип — это Булево в метаданных. Поменяете тип на строку — тумблер пропадёт.
Обработчик ПриИзменении: реакция на переключение
Сам по себе тумблер только меняет значение реквизита. Чтобы при переключении что-то происходило — прятался блок полей, менялась доступность кнопки, пересчитывались данные — нужен обработчик события ПриИзменении.
Как его добавить:
- Выделите поле-тумблер на форме.
- В палитре свойств перейдите на закладку событий (значок с молнией).
- Напротив события
ПриИзменениинажмите лупу — платформа создаст процедуру в модуле формы.
Простой пример — по тумблеру Активность показываем или прячем группу с реквизитами:
&НаКлиенте
Процедура АктивностьПриИзменении(Элемент)
Элементы.ГруппаНастройки.Видимость = Объект.Активность;
КонецПроцедуры
Здесь Объект.Активность — значение реквизита объекта, ГруппаНастройки — имя группы на форме. Видимость меняется мгновенно, без записи элемента.
Если тумблер управляет данными на сервере (например, надо перечитать выборку), часть кода выносим в серверный метод:
&НаКлиенте
Процедура ПоказыватьАрхивныеПриИзменении(Элемент)
ОбновитьСписокНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОбновитьСписокНаСервере()
Если ПоказыватьАрхивные Тогда
Список.Отбор.Элементы.Очистить();
Иначе
УстановитьОтборПоАрхиву();
КонецЕсли;
КонецПроцедуры
Держите в клиентском обработчике только то, что реально требует клиента (видимость, доступность, сообщения). Любую работу с данными — в серверную процедуру с директивой &НаСервере, иначе получите лишние вызовы сервера или ошибку доступа к данным.
Типичная задача — заблокировать поля, пока тумблер выключен:
&НаКлиенте
Процедура ИспользоватьЛимитПриИзменении(Элемент)
Элементы.СуммаЛимита.Доступность = Объект.ИспользоватьЛимит;
КонецПроцедуры
Чтобы форма открывалась уже в правильном виде, тот же код продублируйте в ПриСозданииНаСервере (один раз выставить видимость/доступность по текущему значению реквизита).
Когда тумблер управляет сразу несколькими элементами, не плодите строки — соберите изменения в одном месте и вызывайте общий метод и из ПриИзменении, и при создании формы:
&НаКлиенте
Процедура РасширенныйРежимПриИзменении(Элемент)
НастроитьВидимостьЭлементов();
КонецПроцедуры
&НаКлиенте
Процедура НастроитьВидимостьЭлементов()
Режим = Объект.РасширенныйРежим;
Элементы.ГруппаДополнительно.Видимость = Режим;
Элементы.КомментарийВнутренний.Видимость = Режим;
Элементы.СуммаКорректировки.Доступность = Режим;
КонецПроцедуры
Такой метод легко переиспользовать: достаточно вызвать НастроитьВидимостьЭлементов() в ПриСозданииНаСервере (через &НаКлиенте вызов из ПриОткрытии или перенеся установку на сервер), и форма откроется в согласованном виде независимо от того, как было сохранено состояние тумблера.
Тумблер как фильтр списка: рабочий пример
Разберём частую задачу целиком: на форме списка справочника стоит тумблер «Только активные», и при его включении список показывает только элементы с установленным флагом Активность.
Что нужно подготовить:
- Реквизит формы
ТолькоАктивныетипаБулево. - Поле-тумблер для него в командной панели формы (
ВидФлажка = Тумблер). - Обработчик
ПриИзмененииу этого поля.
Код обработчика и серверного метода:
&НаКлиенте
Процедура ТолькоАктивныеПриИзменении(Элемент)
УстановитьОтборСписка();
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборСписка()
Отбор = Список.Отбор;
Отбор.Элементы.Очистить();
Если ТолькоАктивные Тогда
НовыйОтбор = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Активность");
НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовыйОтбор.ПравоеЗначение = Истина;
НовыйОтбор.Использование = Истина;
КонецЕсли;
КонецПроцедуры
Здесь Список — основной реквизит формы списка (динамический список). Мы очищаем прежний отбор и, когда тумблер включён, добавляем условие «Активность равно Истина». Выключили тумблер — отбор снят, виден весь справочник.
Чтобы при открытии формы отбор соответствовал начальному положению тумблера, вызовите УстановитьОтборСписка() в обработчике ПриСозданииНаСервере. Так пользователь сразу увидит правильный список, а не полный.
Для разовой фильтрации по полю списка отбор можно было бы задать и в самом динамическом списке через Настройки. Но тумблер даёт пользователю управление: он сам решает, когда сузить выборку, а когда вернуть полную.
Условное оформление вместо ручной раскраски
Иногда нужно не прятать элементы, а менять их вид в зависимости от тумблера: подсветить строку, сделать текст серым у выключенных записей. Для этого есть условное оформление — его считает платформа, писать код не нужно.
Где настроить для списка или таблицы:
- Откройте форму со списком (или табличной частью).
- В списке реквизитов формы найдите узел
Условное оформлениеи откройте его двойным кликом. - Добавьте элемент оформления.
- В колонке
Оформлениезадайте, что меняем:ЦветТекста,ЦветФона,Шрифт. - В колонке
Условиезадайте правило: полеАктивность→Равно→Ложь. - В колонке
Оформляемые поляукажите, к каким колонкам применить (или оставьте пусто — применится ко всей строке).
Результат: выключенные по тумблеру записи сразу видны визуально. При смене значения оформление пересчитывается само — обработчик для этого не нужен.
Условное оформление удобно и для одиночного поля на форме, не только для списка. Например, сделать подпись тумблера жирной и цветной, когда он включён: в оформлении задайте Шрифт и ЦветТекста, в условии — реквизит Активность равно Истина, в оформляемых полях укажите само поле-тумблер. Пользователь получает дополнительный визуальный сигнал «режим включён» без единой строки кода.
Несколько правил оформления можно сложить списком — платформа применяет их по очереди сверху вниз, поэтому более частные условия ставьте выше общих.
Условное оформление удобнее ручного кода: оно переживает перерисовку списка, работает при прокрутке и не требует отслеживать каждое изменение. Код в ПриИзменении оставляйте для действий (видимость групп, расчёты), а чистое оформление отдавайте условному оформлению.
Тумблер на управляемой и на обычной форме
Вид флажка «Тумблер» — свойство управляемых форм. На обычных формах (режим совместимости со старым интерфейсом) такого варианта отображения Булево нет: там поле рисуется только классической галочкой.
Где разместить тумблер на управляемой форме, тоже зависит от роли:
- в командной панели формы — для режимов отображения («Только активные», «Показывать архив»), чтобы переключатель был всегда под рукой;
- в теле формы, рядом с полями, — для реквизитов самого объекта, когда флаг относится к данным (например, «Учитывать в расчёте»).
Что делать, если проект пока на обычных формах:
- Переключиться на управляемые формы объекта, если конфигурация это допускает, — тогда тумблер доступен штатно.
- Либо оставить обычный флажок: функционально он равен тумблеру, отличается только внешним видом.
- Эмуляция «ползунка» картинками в обычной форме — трудоёмко и ломается при обновлениях, браться за это ради косметики не стоит.
Ещё различие по месту размещения на управляемой форме:
| Где тумблер | Особенность |
|---|---|
| На основной форме | Обработчик ПриИзменении работает как описано выше. |
| В строке таблицы | Переключатель рисуется в ячейке; ПриИзменении срабатывает для текущей строки — берите данные через Элементы.ТаблКоллекция.ТекущиеДанные. |
| На форме отчёта/обработки | Реквизит формы типа Булево, логика та же, но данные пишутся не в базу, а в поля формы. |
Отладка и проверка результата
Перед тем как отдавать форму пользователям, проверьте переключатель в режиме отладки.
- Запустите
1С:Предприятиеиз конфигуратора (Отладка → Начать отладку, клавишаF5). - Откройте форму с тумблером.
- Поставьте точку останова (
F9) на строке внутри обработчикаПриИзменении. - Переключите тумблер — отладчик должен остановиться на вашей строке. Если не останавливается, обработчик не привязан к событию: вернитесь в конфигуратор и проверьте закладку событий поля.
- В окне
Таблопосмотрите текущее значение реквизита (Объект.Активность) — оно должно меняться наИстина/Ложьсинхронно с ползунком.
Что проверить обязательно:
Частые ошибки при создании тумблера
Короткий разбор того, что чаще всего мешает тумблеру заработать.
- ❌ Поле осталось галочкой. Не выбрано
ВидФлажка = Тумблерили оно переопределено наАвто— проверьте свойство у конкретного поля, а не у реквизита. - ❌ Обработчик не срабатывает. Процедура есть в модуле, но не привязана к событию
ПриИзмененииполя. Привязка задаётся на закладке событий в палитре свойств. - ❌ Форма открывается в неверном состоянии. Видимость групп выставляется только в
ПриИзменении, а при открытии — нет. Продублируйте установку вПриСозданииНаСервере. - ❌ Ошибка «обращение к серверу из клиентской процедуры». В клиентском обработчике идёт работа с данными. Вынесите её в метод с
&НаСервере.
Частые вопросы
Чем тумблер отличается от обычного флажка?
Булево. Отличается только внешний вид: тумблер рисуется как ползунок-переключатель, флажок — как квадратик с галочкой. Выбор задаётся свойством ВидФлажка.Можно ли сделать тумблер с тремя положениями?
Булево, а у него только два значения. Для трёх и более вариантов используйте переключатель (Группа кнопок) или список значений, а не вид флажка.Почему в свойствах поля нет варианта «Тумблер»?
Как сделать тумблер только для чтения?
ТолькоПросмотр в Истина — ползунок будет показывать состояние, но пользователь не сможет его переключить.Тумблер в строке табличной части переключается, но данные не меняются — почему?
Элементы.ИмяТаблицы.ТекущиеДанные и работайте с её полями.