Цвет кнопки на управляемой форме 1С: от палитры свойств до программной смены

· 9 мин

Содержание

Цвет кнопки на управляемой форме задают три свойства: ЦветФона, ЦветТекста и цвет границы. Их меняют в палитре свойств элемента в Конфигураторе или кодом в модуле формы через коллекцию Элементы. Если кнопка должна менять цвет по ситуации (например, краснеть при просроченной задолженности), нужен код, а не палитра.

Всё ниже относится к платформе 8.3 с интерфейсом «Такси» и управляемым формам. Обычные формы и тонкий клиент старых версий ведут себя иначе, их здесь не разбираем.

Цвет кнопки задаёт разработчик конфигурации, а не пользователь. В режиме 1С:Предприятие пользовательские настройки формы цвет кнопок не меняют. Поэтому все способы ниже выполняются в Конфигураторе: либо в самой конфигурации, либо в расширении.

Какие свойства кнопки отвечают за внешний вид

У элемента формы «Кнопка» есть несколько свойств оформления. Их удобно держать в голове списком:

  • 🎨 Цвет фона — заливка кнопки;
  • ✍️ Цвет текста — цвет надписи на кнопке;
  • 🔲 Цвет границы — линия по периметру кнопки;
  • 🔤 Шрифт — начертание и размер надписи;
  • 🖼 Картинка и Отображение — значок вместо текста или вместе с ним.

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

Отдельная история — кнопка по умолчанию. Платформа сама выделяет её акцентным цветом стиля. Если вам нужна просто заметная главная кнопка формы, достаточно выставить свойство «Кнопка по умолчанию» и не красить вручную.

Способы задать цвет

Цвет в 1С можно назначить тремя путями:

СпособПримерКогда подходит
Цвет из стиляэлемент стиля из раздела «Общие → Элементы стиля»Кнопка должна подстраиваться под оформление всей конфигурации
Web-цветWebЦвета.КрасныйБыстро задать стандартный цвет из набора
Свой цвет RGBНовый Цвет(200, 30, 30)Нужен фирменный оттенок

Если конфигурацию будут показывать в разных оформлениях, берите цвета из стиля. Тогда кнопка не выбьется из общей палитры.

Как поменять цвет кнопки в палитре свойств Конфигуратора

Это способ для постоянного цвета, который не зависит от данных.

  1. Откройте объект с формой (документ, справочник, обработку) и запустите редактор нужной формы.
  2. На закладке «Элементы» выделите кнопку. Если она на самом деле команда формы, найдите её в дереве элементов, а не в списке команд.
  3. Откройте палитру свойств (клавиша F4 или правая кнопка → «Свойства»).
  4. Найдите свойства Цвет фона и Цвет текста. Нажмите кнопку выбора рядом со значением.
  5. Выберите цвет на закладках «Стиль», «Web» или «Системные». Свой оттенок собирают на закладке с палитрой.
  6. Сохраните форму и запустите конфигурацию в режиме отладки (F5), чтобы увидеть результат.

Если кнопка перестала быть похожей на кнопку после смены цвета фона, верните границу. Часто достаточно задать цвет границы чуть темнее фона.

Фон и текст выбирайте по контрасту. Белая надпись на светло-жёлтой заливке читается плохо, особенно на мониторе с невысокой яркостью. Хороший ориентир: надпись читается с расстояния вытянутой руки без наклона головы.

Программная смена цвета кнопки в модуле формы

Код нужен, когда цвет зависит от данных: статуса документа, остатка, наличия ошибки. Обращение идёт через коллекцию Элементы по имени кнопки.

&НаСервере
Процедура ОбновитьЦветКнопки()
	Если Объект.СуммаДокумента > 100000 Тогда
		Элементы.КнопкаПровести.ЦветФона = WebЦвета.ТемноКрасный;
		Элементы.КнопкаПровести.ЦветТекста = WebЦвета.Белый;
	Иначе
		Элементы.КнопкаПровести.ЦветФона = Новый Цвет;
		Элементы.КнопкаПровести.ЦветТекста = Новый Цвет;
	КонецЕсли;
КонецПроцедуры

Новый Цвет без параметров возвращает «автоматический» цвет, то есть сбрасывает переопределение и кнопка снова берёт цвет из стиля. Это самый чистый способ вернуть исходный вид.

Где вызывать процедуру:

  • в обработчике ПриСозданииНаСервере, если цвет определяется данными при открытии формы;
  • в ПриЧтенииНаСервере, чтобы цвет обновлялся после перечитывания объекта;
  • в обработчике изменения реквизита, если цвет должен реагировать на ввод;
  • в обработчике нужной команды, если цвет меняется по нажатию.

Имя КнопкаПровести в примере условное. Берите имя из палитры свойств своей кнопки, оно показано в поле «Имя». Опечатка в имени даёт ошибку «Поле объекта не обнаружено» уже в работающей форме.

Цвет при каждом открытии и при изменениях

Самая частая схема из двух процедур: одна считает цвет, вторую вызывают из нужных мест.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ОбновитьЦветКнопки();
КонецПроцедуры

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

Вызов серверной процедуры из клиентской работает, если у неё директива &НаСервере. Но каждый такой вызов — обращение к серверу. Если условие простое и данные уже на клиенте, сделайте клиентскую версию процедуры (&НаКлиенте) и не гоняйте запрос ради смены цвета.

Почему условное оформление кнопку не красит

Условное оформление форм рассчитано на поля, колонки таблиц и динамические списки: оно меняет цвет, шрифт и видимость значений по условию. В списке оформляемых объектов кнопок обычно нет, поэтому «подсветить кнопку по условию» через эту подсистему не получится.

Зато оно хорошо работает рядом с кнопкой. Типовой приём:

  • красить не кнопку, а поле с суммой или статусом, которое стоит рядом;
  • для самой кнопки использовать код из предыдущего раздела;
  • в таблице значений красить строку условным оформлением, а кнопку «Обработать строки» оставить нейтральной.

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

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

Цвет кнопки в типовой конфигурации: расширения и БСП

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

Расширения появились в платформе 8.3.6. Порядок работы такой:

  1. В Конфигураторе создайте расширение (меню «Конфигурация → Расширения конфигурации »).
  2. Добавьте в расширение нужную форму через «Заимствовать объекты». Расширение получит копию формы с возможностью менять свойства элементов.
  3. В палитре свойств кнопки в расширении переопределите цвет, либо перехватите процедуру ПриСозданииНаСервере аннотацией &После и задайте цвет кодом.
  4. Загрузите расширение в информационную базу: сохранение расширения и «Обновить конфигурацию базы данных» — это отдельные шаги.
&После("ПриСозданииНаСервере")
Процедура МоёРасширение_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Элементы.КнопкаЗаполнить.ЦветФона = WebЦвета.ТемноЗелёный;
КонецПроцедуры

Кнопку из типовой формы можно перекрасить так же, как и свою. Но есть нюанс: в формах БСП часть кнопок создаётся программно при открытии формы (подключаемые команды, печать, отчёты). Такие кнопки в палитре свойств расширения вы не найдёте. Менять их цвет нужно в коде после создания, причём название элемента придётся смотреть в самом коде модуля.

Не правьте модули БСП на месте. Следующее обновление библиотеки затрёт правки, а при сложном «склеивании» ошибка в одном месте остановит обновление всей базы.

Расширение, которое только перекрашивает кнопку, — лёгкий случай. Но проверьте его: после выхода нового релиза типовой конфигурации форма могла измениться, и заимствованный элемент перестанет совпадать с исходным. Платформа сообщит об этом при обновлении расширения.

Цвет по нескольким состояниям: статус, шрифт, значок

Когда состояний больше двух, цепочка Если … ИначеЕсли быстро разрастается. Удобнее вынести соответствие «статус → цвет» в одну процедуру и вызывать её из всех мест.

&НаСервере
Процедура УстановитьВидКнопки(Статус)
	Если Статус = "Черновик" Тогда
		Цвет = WebЦвета.СветлоСерый;
	ИначеЕсли Статус = "НаСогласовании" Тогда
		Цвет = WebЦвета.Золотой;
	ИначеЕсли Статус = "Согласован" Тогда
		Цвет = WebЦвета.ТемноЗелёный;
	Иначе
		Цвет = Новый Цвет;
	КонецЕсли;
	Элементы.КнопкаОтправить.ЦветФона = Цвет;
КонецПроцедуры

Статусы в примере условные: подставьте значения своего перечисления или реквизита. Названия web-цветов проверяйте в списке на закладке «Web» окна выбора цвета, а не по памяти: часть названий пишется слитно, часть через букву «ё».

Вместе с цветом можно менять и остальное оформление:

  • шрифт: Элементы.КнопкаОтправить.Шрифт = Новый Шрифт(, , Истина); делает надпись полужирной (первые два параметра пропущены, чтобы сохранить базовый шрифт и размер);
  • значок: свойство «Картинка» берёт изображение из общих картинок конфигурации, так состояние читается и без цвета;
  • заголовок: Элементы.КнопкаОтправить.Заголовок — можно сменить текст надписи вместе с цветом, если состояние важное.

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

Как не испортить интерфейс: советы по оформлению

Цвет на кнопке — это сигнал. Чем больше цветных кнопок, тем слабее каждый отдельный сигнал.

  • 🎯 Выделяйте цветом одну главную кнопку на форме, остальные оставляйте стандартными.
  • 🚦 Придерживайтесь привычной семантики: зелёный — подтверждение, красный — удаление или риск, серый — второстепенное.
  • 👁 Не полагайтесь только на цвет: часть пользователей плохо различает красное и зелёное. Дублируйте смысл надписью или значком.
  • 🧩 Один смысл — один цвет по всей конфигурации. Иначе пользователи начнут промахиваться.
  • 🖥 Проверяйте кнопку в обоих клиентах: тонком и веб-клиенте. Отрисовка может немного отличаться.

Если в организации несколько баз на разных платформах, красьте кнопки цветами стиля. Тогда при смене стиля оформления (например, на тёмный) кнопки подстроятся сами, а жёстко заданный WebЦвета.Белый останется белым на белом.

Типичные ошибки и способы их устранения

Здесь собраны симптомы, которые приходят чаще всего.

Диагностика: выберите симптом

Ещё одна ловушка: цвет, заданный через Новый Цвет(r, g, b), не получает значения «автоматический» при сбросе. Чтобы вернуть кнопке вид по умолчанию, присвойте Новый Цвет без параметров, а не белый или чёрный.

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

Можно ли изменить цвет кнопки без доступа к Конфигуратору?
Нет. Цвет кнопки хранится в конфигурации. Пользователь в режиме 1С:Предприятие может менять расположение и состав команд, но не заливку и цвет текста.
Как вернуть исходный цвет кнопки из кода?
Присвойте свойству пустой цвет: Элементы.Кнопка.ЦветФона = Новый Цвет;. Кнопка снова возьмёт значение из стиля.
Работает ли цвет кнопки в веб-клиенте?
Свойства цвета поддерживаются в тонком и веб-клиенте, но отрисовка может немного отличаться. После настройки проверьте оба.
Можно ли покрасить кнопку командной панели?
Свойство задать можно, но заливка в командной панели может не показываться. Для яркого акцента вынесите кнопку из панели на форму.
Как задать цвет по шестнадцатеричному коду, например `#C81E1E`?
Переведите компоненты в десятичные числа и передайте в конструктор: Новый Цвет(200, 30, 30).