Как реализовать кнопку с фиксацией нажатого состояния в управляемых формах 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разбор причин проблемы

Прежде всего, проанализируем ситуацию, почему стандартная Пометка может не давать желаемого визуального эффекта. Основная причина часто кроется в расположении элемента. Если кнопка размещена в КоманднаяПанель, платформа берет управление её отображением на себя, следуя стандартам интерфейса «Такси». В таких условиях попытки принудительного изменения визуальных свойств (таких как цвет фона или рамки) могут игнорироваться или сбрасываться системой.

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

Решение 1: Использование штатной «Пометки»

Самым правильным и лаконичным способом, поддерживаемым платформой, является использование свойства Пометка. Оно доступно как для самой кнопки (через коллекцию Элементы), так и для привязанной к ней Команда.

Для реализации переключателя выполните следующие действия в модуле формы:

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

Пример программной реализации:


&НаКлиенте
Процедура МояКнопкаПриНажатии(Команда)
    Элементы.МояКнопка.Пометка = НЕ Элементы.МояКнопка.Пометка;
    
    Если Элементы.МояКнопка.Пометка Тогда
        // Действия при нажатии (включено)
    Иначе
        // Действия при отжатии (выключено)
    КонецЕсли;
КонецПроцедуры

Решение 2: Использование элемента «Флажок» (Тумблер)

Если интерфейсная задача подразумевает выбор режима «Включено/Выключено», наилучшим решением в современных интерфейсах будет использование элемента Флажок (CheckBox). Его можно настроить так, чтобы он выполнял роль тумблера, что является штатным и ожидаемым поведением для пользователей.

В свойствах элемента установите:

Решение 3: Программное изменение оформления

Если специфика дизайна требует именно «нажатой кнопки», а не просто пометки или флажка, можно использовать программное управление оформлением. Однако помните, что «угадывание» цвета — не самый надежный метод. Лучше использовать ЦветаСтиля.

Рассмотрим, как можно менять визуальные характеристики элемента:


&НаКлиенте
Процедура ПереключитьСостояние(Элемент)
    ТекущееСостояние = Элемент.ЦветФона;
    Если ТекущееСостояние = ЦветаСтиля.ФонКнопки Тогда
        Элемент.ЦветФона = ЦветаСтиля.ЦветФонаНажатойКнопки;
    Иначе
        Элемент.ЦветФона = ЦветаСтиля.ФонКнопки;
    КонецЕсли;
КонецПроцедуры

Важно: При использовании смены цвета фона учитывайте, что пользователь может менять темы оформления в 1С (светлую на темную и наоборот). Жестко прописанные цвета (например, через WebColors) могут сделать текст на кнопке нечитаемым. Всегда старайтесь использовать системные ЦветаСтиля, которые адаптируются под текущую тему платформы.

Итоговые рекомендации

  1. Проверьте, не находится ли ваша кнопка в КоманднаяПанель. Если да — перенесите её в обычную ГруппаФормы.
  2. Для индикации состояния используйте свойство Пометка — это штатный механизм, который корректно отображается в любом интерфейсе.
  3. В случае, если функционал подразумевает переключение настроек, замените кнопку на Флажок.
  4. Избегайте ручной раскраски элементов через ЦветФона, если есть возможность обойтись стандартными средствами 1С, так как это нарушает целостность оформления системы.
← На главную