Создаём переключатель-тумблер на управляемой форме 1С

· 9 мин

Содержание

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

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

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

Реквизит типа Булево — основа переключателя

Тумблер отображает значение одного логического реквизита: включён — Истина, выключен — Ложь. Поэтому начинаем с реквизита.

Где его создавать — зависит от задачи:

  • 🗂️ Реквизит объекта (справочника, документа) — если состояние нужно хранить в базе. Например, флаг Активность у элемента справочника «Контрагенты».
  • 📝 Реквизит формы — если переключатель управляет только поведением формы и в базу не пишется. Например, «Показывать архивные записи» в списке.

Создание реквизита объекта:

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

Реквизит формы добавляется на закладке Реквизиты самой формы — тип тот же, Булево.

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

Выводим поле на форму и включаем вид «Тумблер»

Теперь реквизит нужно показать на форме именно как переключатель, а не как обычную галочку.

  1. Откройте форму объекта (или создайте новую, если у объекта форм ещё нет).
  2. На закладке редактора формы найдите реквизит в правом верхнем списке и перетащите его в дерево элементов формы слева. Появится элемент типа Поле.
  3. Выделите это поле, откройте палитру свойств (F4 или команда Свойства).
  4. У поля типа Булево свойство Вид по умолчанию — Поле флажка. Оставляем его.
  5. Ниже найдите свойство ВидФлажка. Варианты: Авто, Флажок, Тумблер. Выберите Тумблер.

После этого на форме галочка превратится в переключатель-ползунок. Если свойства ВидФлажка в палитре нет — у вас устаревшая версия платформы: вид «Тумблер» доступен в актуальных релизах 8.3.

Пара свойств, которые стоит настроить рядом:

СвойствоЗачем
ЗаголовокПодпись рядом с тумблером. Можно оставить синоним реквизита.
ПоложениеЗаголовкаСлева, справа, сверху — как встанет подпись относительно ползунка.
ТолькоПросмотрЕсли тумблер должен показывать состояние, но не меняться пользователем.

Не путайте ВидФлажка (как рисуется) и тип реквизита (что хранится). Вид — это оформление поля, тип — это Булево в метаданных. Поменяете тип на строку — тумблер пропадёт.

Обработчик ПриИзменении: реакция на переключение

Сам по себе тумблер только меняет значение реквизита. Чтобы при переключении что-то происходило — прятался блок полей, менялась доступность кнопки, пересчитывались данные — нужен обработчик события ПриИзменении.

Как его добавить:

  1. Выделите поле-тумблер на форме.
  2. В палитре свойств перейдите на закладку событий (значок с молнией).
  3. Напротив события ПриИзменении нажмите лупу — платформа создаст процедуру в модуле формы.

Простой пример — по тумблеру Активность показываем или прячем группу с реквизитами:

&НаКлиенте
Процедура АктивностьПриИзменении(Элемент)
    Элементы.ГруппаНастройки.Видимость = Объект.Активность;
КонецПроцедуры

Здесь Объект.Активность — значение реквизита объекта, ГруппаНастройки — имя группы на форме. Видимость меняется мгновенно, без записи элемента.

Если тумблер управляет данными на сервере (например, надо перечитать выборку), часть кода выносим в серверный метод:

&НаКлиенте
Процедура ПоказыватьАрхивныеПриИзменении(Элемент)
    ОбновитьСписокНаСервере();
КонецПроцедуры

&НаСервере
Процедура ОбновитьСписокНаСервере()
    Если ПоказыватьАрхивные Тогда
        Список.Отбор.Элементы.Очистить();
    Иначе
        УстановитьОтборПоАрхиву();
    КонецЕсли;
КонецПроцедуры

Держите в клиентском обработчике только то, что реально требует клиента (видимость, доступность, сообщения). Любую работу с данными — в серверную процедуру с директивой &НаСервере, иначе получите лишние вызовы сервера или ошибку доступа к данным.

Типичная задача — заблокировать поля, пока тумблер выключен:

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

Чтобы форма открывалась уже в правильном виде, тот же код продублируйте в ПриСозданииНаСервере (один раз выставить видимость/доступность по текущему значению реквизита).

Когда тумблер управляет сразу несколькими элементами, не плодите строки — соберите изменения в одном месте и вызывайте общий метод и из ПриИзменении, и при создании формы:

&НаКлиенте
Процедура РасширенныйРежимПриИзменении(Элемент)
    НастроитьВидимостьЭлементов();
КонецПроцедуры

&НаКлиенте
Процедура НастроитьВидимостьЭлементов()
    Режим = Объект.РасширенныйРежим;
    Элементы.ГруппаДополнительно.Видимость = Режим;
    Элементы.КомментарийВнутренний.Видимость = Режим;
    Элементы.СуммаКорректировки.Доступность = Режим;
КонецПроцедуры

Такой метод легко переиспользовать: достаточно вызвать НастроитьВидимостьЭлементов() в ПриСозданииНаСервере (через &НаКлиенте вызов из ПриОткрытии или перенеся установку на сервер), и форма откроется в согласованном виде независимо от того, как было сохранено состояние тумблера.

Тумблер как фильтр списка: рабочий пример

Разберём частую задачу целиком: на форме списка справочника стоит тумблер «Только активные», и при его включении список показывает только элементы с установленным флагом Активность.

Что нужно подготовить:

  1. Реквизит формы ТолькоАктивные типа Булево.
  2. Поле-тумблер для него в командной панели формы (ВидФлажка = Тумблер).
  3. Обработчик ПриИзменении у этого поля.

Код обработчика и серверного метода:

&НаКлиенте
Процедура ТолькоАктивныеПриИзменении(Элемент)
    УстановитьОтборСписка();
КонецПроцедуры

&НаСервере
Процедура УстановитьОтборСписка()
    Отбор = Список.Отбор;
    Отбор.Элементы.Очистить();

    Если ТолькоАктивные Тогда
        НовыйОтбор = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Активность");
        НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        НовыйОтбор.ПравоеЗначение = Истина;
        НовыйОтбор.Использование = Истина;
    КонецЕсли;
КонецПроцедуры

Здесь Список — основной реквизит формы списка (динамический список). Мы очищаем прежний отбор и, когда тумблер включён, добавляем условие «Активность равно Истина». Выключили тумблер — отбор снят, виден весь справочник.

Чтобы при открытии формы отбор соответствовал начальному положению тумблера, вызовите УстановитьОтборСписка() в обработчике ПриСозданииНаСервере. Так пользователь сразу увидит правильный список, а не полный.

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

Условное оформление вместо ручной раскраски

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

Где настроить для списка или таблицы:

  1. Откройте форму со списком (или табличной частью).
  2. В списке реквизитов формы найдите узел Условное оформление и откройте его двойным кликом.
  3. Добавьте элемент оформления.
  4. В колонке Оформление задайте, что меняем: ЦветТекста, ЦветФона, Шрифт.
  5. В колонке Условие задайте правило: поле Активность → Равно → Ложь.
  6. В колонке Оформляемые поля укажите, к каким колонкам применить (или оставьте пусто — применится ко всей строке).

Результат: выключенные по тумблеру записи сразу видны визуально. При смене значения оформление пересчитывается само — обработчик для этого не нужен.

Условное оформление удобно и для одиночного поля на форме, не только для списка. Например, сделать подпись тумблера жирной и цветной, когда он включён: в оформлении задайте Шрифт и ЦветТекста, в условии — реквизит Активность равно Истина, в оформляемых полях укажите само поле-тумблер. Пользователь получает дополнительный визуальный сигнал «режим включён» без единой строки кода.

Несколько правил оформления можно сложить списком — платформа применяет их по очереди сверху вниз, поэтому более частные условия ставьте выше общих.

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

Тумблер на управляемой и на обычной форме

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

Где разместить тумблер на управляемой форме, тоже зависит от роли:

  • в командной панели формы — для режимов отображения («Только активные», «Показывать архив»), чтобы переключатель был всегда под рукой;
  • в теле формы, рядом с полями, — для реквизитов самого объекта, когда флаг относится к данным (например, «Учитывать в расчёте»).

Что делать, если проект пока на обычных формах:

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

Ещё различие по месту размещения на управляемой форме:

Где тумблерОсобенность
На основной формеОбработчик ПриИзменении работает как описано выше.
В строке таблицыПереключатель рисуется в ячейке; ПриИзменении срабатывает для текущей строки — берите данные через Элементы.ТаблКоллекция.ТекущиеДанные.
На форме отчёта/обработкиРеквизит формы типа Булево, логика та же, но данные пишутся не в базу, а в поля формы.

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

Перед тем как отдавать форму пользователям, проверьте переключатель в режиме отладки.

  1. Запустите 1С:Предприятие из конфигуратора (Отладка → Начать отладку, клавиша F5).
  2. Откройте форму с тумблером.
  3. Поставьте точку останова (F9) на строке внутри обработчика ПриИзменении.
  4. Переключите тумблер — отладчик должен остановиться на вашей строке. Если не останавливается, обработчик не привязан к событию: вернитесь в конфигуратор и проверьте закладку событий поля.
  5. В окне Табло посмотрите текущее значение реквизита (Объект.Активность) — оно должно меняться на Истина/Ложь синхронно с ползунком.

Что проверить обязательно:

Проверка тумблера перед сдачей
Выполнено: 0 / 6

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

Короткий разбор того, что чаще всего мешает тумблеру заработать.

  • ❌ Поле осталось галочкой. Не выбрано ВидФлажка = Тумблер или оно переопределено на Авто — проверьте свойство у конкретного поля, а не у реквизита.
  • ❌ Обработчик не срабатывает. Процедура есть в модуле, но не привязана к событию ПриИзменении поля. Привязка задаётся на закладке событий в палитре свойств.
  • ❌ Форма открывается в неверном состоянии. Видимость групп выставляется только в ПриИзменении, а при открытии — нет. Продублируйте установку в ПриСозданииНаСервере.
  • ❌ Ошибка «обращение к серверу из клиентской процедуры». В клиентском обработчике идёт работа с данными. Вынесите её в метод с &НаСервере.

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

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