При переходе с обычных форм на управляемые многие разработчики сталкиваются с вопросом реализации кнопок, которые должны «запоминать» свое состояние: при первом нажатии кнопка остается нажатой (визуально выделенной), а при повторном — возвращается в исходное положение. В обычных формах за это отвечало свойство Пометка, однако в управляемых формах логика работы элементов интерфейса существенно отличается.
Прежде всего, проанализируем ситуацию, почему стандартная Пометка может не давать желаемого визуального эффекта. Основная причина часто кроется в расположении элемента. Если кнопка размещена в КоманднаяПанель, платформа берет управление её отображением на себя, следуя стандартам интерфейса «Такси». В таких условиях попытки принудительного изменения визуальных свойств (таких как цвет фона или рамки) могут игнорироваться или сбрасываться системой.
Чтобы убедиться, что проблема именно в этом, проверьте структуру формы: кнопка должна находиться в ГруппаФормы или другом контейнере вне командной панели, чтобы вы могли полноценно управлять её оформлением.
Самым правильным и лаконичным способом, поддерживаемым платформой, является использование свойства Пометка. Оно доступно как для самой кнопки (через коллекцию Элементы), так и для привязанной к ней Команда.
Для реализации переключателя выполните следующие действия в модуле формы:
Пример программной реализации:
&НаКлиенте
Процедура МояКнопкаПриНажатии(Команда)
Элементы.МояКнопка.Пометка = НЕ Элементы.МояКнопка.Пометка;
Если Элементы.МояКнопка.Пометка Тогда
// Действия при нажатии (включено)
Иначе
// Действия при отжатии (выключено)
КонецЕсли;
КонецПроцедуры
Если интерфейсная задача подразумевает выбор режима «Включено/Выключено», наилучшим решением в современных интерфейсах будет использование элемента Флажок (CheckBox). Его можно настроить так, чтобы он выполнял роль тумблера, что является штатным и ожидаемым поведением для пользователей.
В свойствах элемента установите:
Переключатель или Флажок.Если специфика дизайна требует именно «нажатой кнопки», а не просто пометки или флажка, можно использовать программное управление оформлением. Однако помните, что «угадывание» цвета — не самый надежный метод. Лучше использовать ЦветаСтиля.
Рассмотрим, как можно менять визуальные характеристики элемента:
&НаКлиенте
Процедура ПереключитьСостояние(Элемент)
ТекущееСостояние = Элемент.ЦветФона;
Если ТекущееСостояние = ЦветаСтиля.ФонКнопки Тогда
Элемент.ЦветФона = ЦветаСтиля.ЦветФонаНажатойКнопки;
Иначе
Элемент.ЦветФона = ЦветаСтиля.ФонКнопки;
КонецЕсли;
КонецПроцедуры
Важно: При использовании смены цвета фона учитывайте, что пользователь может менять темы оформления в 1С (светлую на темную и наоборот). Жестко прописанные цвета (например, через WebColors) могут сделать текст на кнопке нечитаемым. Всегда старайтесь использовать системные ЦветаСтиля, которые адаптируются под текущую тему платформы.
КоманднаяПанель. Если да — перенесите её в обычную ГруппаФормы.Пометка — это штатный механизм, который корректно отображается в любом интерфейсе.Флажок.ЦветФона, если есть возможность обойтись стандартными средствами 1С, так как это нарушает целостность оформления системы.