Цвет кнопки на управляемой форме 1С: от палитры свойств до программной смены
Содержание
Цвет кнопки на управляемой форме задают три свойства: ЦветФона, ЦветТекста и цвет границы. Их меняют в палитре свойств элемента в Конфигураторе или кодом в модуле формы через коллекцию Элементы. Если кнопка должна менять цвет по ситуации (например, краснеть при просроченной задолженности), нужен код, а не палитра.
Всё ниже относится к платформе 8.3 с интерфейсом «Такси» и управляемым формам. Обычные формы и тонкий клиент старых версий ведут себя иначе, их здесь не разбираем.
Цвет кнопки задаёт разработчик конфигурации, а не пользователь. В режиме 1С:Предприятие пользовательские настройки формы цвет кнопок не меняют. Поэтому все способы ниже выполняются в Конфигураторе: либо в самой конфигурации, либо в расширении.
Какие свойства кнопки отвечают за внешний вид
У элемента формы «Кнопка» есть несколько свойств оформления. Их удобно держать в голове списком:
- 🎨 Цвет фона — заливка кнопки;
- ✍️ Цвет текста — цвет надписи на кнопке;
- 🔲 Цвет границы — линия по периметру кнопки;
- 🔤 Шрифт — начертание и размер надписи;
- 🖼 Картинка и Отображение — значок вместо текста или вместе с ним.
Точный набор свойств зависит от вида кнопки и её места на форме. Кнопка в командной панели и кнопка, стоящая на форме сама по себе, оформляются по-разному: в командной панели заливка и граница могут не отрисоваться, хотя свойство задано. Если цвет «не берётся», сначала проверьте, где стоит кнопка.
Отдельная история — кнопка по умолчанию. Платформа сама выделяет её акцентным цветом стиля. Если вам нужна просто заметная главная кнопка формы, достаточно выставить свойство «Кнопка по умолчанию» и не красить вручную.
Способы задать цвет
Цвет в 1С можно назначить тремя путями:
| Способ | Пример | Когда подходит |
|---|---|---|
| Цвет из стиля | элемент стиля из раздела «Общие → Элементы стиля» | Кнопка должна подстраиваться под оформление всей конфигурации |
| Web-цвет | WebЦвета.Красный | Быстро задать стандартный цвет из набора |
| Свой цвет RGB | Новый Цвет(200, 30, 30) | Нужен фирменный оттенок |
Если конфигурацию будут показывать в разных оформлениях, берите цвета из стиля. Тогда кнопка не выбьется из общей палитры.
Как поменять цвет кнопки в палитре свойств Конфигуратора
Это способ для постоянного цвета, который не зависит от данных.
- Откройте объект с формой (документ, справочник, обработку) и запустите редактор нужной формы.
- На закладке «Элементы» выделите кнопку. Если она на самом деле команда формы, найдите её в дереве элементов, а не в списке команд.
- Откройте палитру свойств (клавиша
F4или правая кнопка → «Свойства»). - Найдите свойства
Цвет фонаиЦвет текста. Нажмите кнопку выбора рядом со значением. - Выберите цвет на закладках «Стиль», «Web» или «Системные». Свой оттенок собирают на закладке с палитрой.
- Сохраните форму и запустите конфигурацию в режиме отладки (
F5), чтобы увидеть результат.
Если кнопка перестала быть похожей на кнопку после смены цвета фона, верните границу. Часто достаточно задать цвет границы чуть темнее фона.
Фон и текст выбирайте по контрасту. Белая надпись на светло-жёлтой заливке читается плохо, особенно на мониторе с невысокой яркостью. Хороший ориентир: надпись читается с расстояния вытянутой руки без наклона головы.
Программная смена цвета кнопки в модуле формы
Код нужен, когда цвет зависит от данных: статуса документа, остатка, наличия ошибки. Обращение идёт через коллекцию Элементы по имени кнопки.
&НаСервере
Процедура ОбновитьЦветКнопки()
Если Объект.СуммаДокумента > 100000 Тогда
Элементы.КнопкаПровести.ЦветФона = WebЦвета.ТемноКрасный;
Элементы.КнопкаПровести.ЦветТекста = WebЦвета.Белый;
Иначе
Элементы.КнопкаПровести.ЦветФона = Новый Цвет;
Элементы.КнопкаПровести.ЦветТекста = Новый Цвет;
КонецЕсли;
КонецПроцедуры
Новый Цвет без параметров возвращает «автоматический» цвет, то есть сбрасывает переопределение и кнопка снова берёт цвет из стиля. Это самый чистый способ вернуть исходный вид.
Где вызывать процедуру:
- в обработчике
ПриСозданииНаСервере, если цвет определяется данными при открытии формы; - в
ПриЧтенииНаСервере, чтобы цвет обновлялся после перечитывания объекта; - в обработчике изменения реквизита, если цвет должен реагировать на ввод;
- в обработчике нужной команды, если цвет меняется по нажатию.
Имя КнопкаПровести в примере условное. Берите имя из палитры свойств своей кнопки, оно показано в поле «Имя». Опечатка в имени даёт ошибку «Поле объекта не обнаружено» уже в работающей форме.
Цвет при каждом открытии и при изменениях
Самая частая схема из двух процедур: одна считает цвет, вторую вызывают из нужных мест.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОбновитьЦветКнопки();
КонецПроцедуры
&НаКлиенте
Процедура СуммаДокументаПриИзменении(Элемент)
ОбновитьЦветКнопки();
КонецПроцедуры
Вызов серверной процедуры из клиентской работает, если у неё директива &НаСервере. Но каждый такой вызов — обращение к серверу. Если условие простое и данные уже на клиенте, сделайте клиентскую версию процедуры (&НаКлиенте) и не гоняйте запрос ради смены цвета.
Почему условное оформление кнопку не красит
Условное оформление форм рассчитано на поля, колонки таблиц и динамические списки: оно меняет цвет, шрифт и видимость значений по условию. В списке оформляемых объектов кнопок обычно нет, поэтому «подсветить кнопку по условию» через эту подсистему не получится.
Зато оно хорошо работает рядом с кнопкой. Типовой приём:
- красить не кнопку, а поле с суммой или статусом, которое стоит рядом;
- для самой кнопки использовать код из предыдущего раздела;
- в таблице значений красить строку условным оформлением, а кнопку «Обработать строки» оставить нейтральной.
В динамическом списке (например, списке документов) условное оформление настраивают в самом списке: свойство «Условное оформление» в палитре свойств таблицы формы. Для кнопки оно не помощник, но для строки с проблемным документом идеально подходит.
Если нужна «пульсирующая» или мигающая кнопка, платформа этого не умеет. Меняйте цвет по таймеру через ПодключитьОбработчикОжидания, но не злоупотребляйте: постоянная перерисовка раздражает и забирает ресурсы клиента.
Цвет кнопки в типовой конфигурации: расширения и БСП
Типовые конфигурации (Бухгалтерия предприятия, ЗУП, Управление торговлей) стоят на поддержке. Править их формы напрямую нельзя без снятия с поддержки: каждое обновление придётся «склеивать» вручную. Правильный путь — расширение конфигурации .
Расширения появились в платформе 8.3.6. Порядок работы такой:
- В Конфигураторе создайте расширение (меню «Конфигурация → Расширения конфигурации »).
- Добавьте в расширение нужную форму через «Заимствовать объекты». Расширение получит копию формы с возможностью менять свойства элементов.
- В палитре свойств кнопки в расширении переопределите цвет, либо перехватите процедуру
ПриСозданииНаСервереаннотацией&Послеи задайте цвет кодом. - Загрузите расширение в информационную базу: сохранение расширения и «Обновить конфигурацию базы данных» — это отдельные шаги.
&После("ПриСозданииНаСервере")
Процедура МоёРасширение_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.КнопкаЗаполнить.ЦветФона = WebЦвета.ТемноЗелёный;
КонецПроцедуры
Кнопку из типовой формы можно перекрасить так же, как и свою. Но есть нюанс: в формах БСП часть кнопок создаётся программно при открытии формы (подключаемые команды, печать, отчёты). Такие кнопки в палитре свойств расширения вы не найдёте. Менять их цвет нужно в коде после создания, причём название элемента придётся смотреть в самом коде модуля.
Не правьте модули БСП на месте. Следующее обновление библиотеки затрёт правки, а при сложном «склеивании» ошибка в одном месте остановит обновление всей базы.
Расширение, которое только перекрашивает кнопку, — лёгкий случай. Но проверьте его: после выхода нового релиза типовой конфигурации форма могла измениться, и заимствованный элемент перестанет совпадать с исходным. Платформа сообщит об этом при обновлении расширения.
Цвет по нескольким состояниям: статус, шрифт, значок
Когда состояний больше двух, цепочка Если … ИначеЕсли быстро разрастается. Удобнее вынести соответствие «статус → цвет» в одну процедуру и вызывать её из всех мест.
&НаСервере
Процедура УстановитьВидКнопки(Статус)
Если Статус = "Черновик" Тогда
Цвет = WebЦвета.СветлоСерый;
ИначеЕсли Статус = "НаСогласовании" Тогда
Цвет = WebЦвета.Золотой;
ИначеЕсли Статус = "Согласован" Тогда
Цвет = WebЦвета.ТемноЗелёный;
Иначе
Цвет = Новый Цвет;
КонецЕсли;
Элементы.КнопкаОтправить.ЦветФона = Цвет;
КонецПроцедуры
Статусы в примере условные: подставьте значения своего перечисления или реквизита. Названия web-цветов проверяйте в списке на закладке «Web» окна выбора цвета, а не по памяти: часть названий пишется слитно, часть через букву «ё».
Вместе с цветом можно менять и остальное оформление:
- шрифт:
Элементы.КнопкаОтправить.Шрифт = Новый Шрифт(, , Истина);делает надпись полужирной (первые два параметра пропущены, чтобы сохранить базовый шрифт и размер); - значок: свойство «Картинка» берёт изображение из общих картинок конфигурации, так состояние читается и без цвета;
- заголовок:
Элементы.КнопкаОтправить.Заголовок— можно сменить текст надписи вместе с цветом, если состояние важное.
После назначения цвета не пересчитывайте его на каждый чих. Если процедура вызывается в обработчике, который срабатывает при каждом нажатии клавиши в поле, вынесите вызов в событие окончания ввода (ПриИзменении): так форма не будет лишний раз перерисовываться.
Как не испортить интерфейс: советы по оформлению
Цвет на кнопке — это сигнал. Чем больше цветных кнопок, тем слабее каждый отдельный сигнал.
- 🎯 Выделяйте цветом одну главную кнопку на форме, остальные оставляйте стандартными.
- 🚦 Придерживайтесь привычной семантики: зелёный — подтверждение, красный — удаление или риск, серый — второстепенное.
- 👁 Не полагайтесь только на цвет: часть пользователей плохо различает красное и зелёное. Дублируйте смысл надписью или значком.
- 🧩 Один смысл — один цвет по всей конфигурации. Иначе пользователи начнут промахиваться.
- 🖥 Проверяйте кнопку в обоих клиентах: тонком и веб-клиенте. Отрисовка может немного отличаться.
Если в организации несколько баз на разных платформах, красьте кнопки цветами стиля. Тогда при смене стиля оформления (например, на тёмный) кнопки подстроятся сами, а жёстко заданный WebЦвета.Белый останется белым на белом.
Типичные ошибки и способы их устранения
Здесь собраны симптомы, которые приходят чаще всего.
ПриСозданииНаСервере или в обработчике реквизита. Затем проверьте, не стоит ли кнопка в командной панели: там заливка может не отображаться. Попробуйте перенести кнопку на форму как отдельный элемент.Элементы ищите именно элемент типа «Кнопка формы». Проверьте также точность имени.Доступность и Видимость и обработчик, который их меняет. Недоступная кнопка выглядит серой независимо от цвета фона.Ещё одна ловушка: цвет, заданный через Новый Цвет(r, g, b), не получает значения «автоматический» при сбросе. Чтобы вернуть кнопке вид по умолчанию, присвойте Новый Цвет без параметров, а не белый или чёрный.
Частые вопросы
Можно ли изменить цвет кнопки без доступа к Конфигуратору?
Как вернуть исходный цвет кнопки из кода?
Элементы.Кнопка.ЦветФона = Новый Цвет;. Кнопка снова возьмёт значение из стиля.Работает ли цвет кнопки в веб-клиенте?
Можно ли покрасить кнопку командной панели?
Как задать цвет по шестнадцатеричному коду, например `#C81E1E`?
Новый Цвет(200, 30, 30).