Цвет кнопки в управляемой форме 1С: от свойств до кода
Содержание
Цвет кнопки в 1С меняется в конфигураторе, в свойствах кнопки на управляемой форме: у неё есть цвет текста, цвет фона и цвет границы. Если цвет должен зависеть от данных, его назначают из кода при открытии формы или после изменения реквизита. Условное оформление для кнопок не работает так, как для полей и таблиц, и это главная причина путаницы.
Ниже порядок от простого к сложному: статичный цвет, цвет из кода, обходной путь через надпись, цвет ячеек в отчётах и особенности клиентов. Всё относится к платформе 8.3 и управляемым формам. Обычные формы остались в старых конфигурациях, и там кнопки красятся иначе.
Задать цвет кнопки в свойствах элемента формы
Правка делается в конфигураторе. Для типовой конфигурации сначала нужно подключить её к поддержке с возможностью изменения, иначе форму не отредактировать, а ваша правка будет потеряна или превратится в конфликт при обновлении.
Порядок действий:
- Откройте конфигурацию, найдите объект с нужной формой (документ, справочник, обработка) и откройте форму в редакторе.
- На закладке «Элементы» выделите кнопку. Если её нет в списке, найдите её в командной панели или в группе, куда вы её добавили.
- Откройте палитру свойств (клавиша
F4, если окно скрыто). - Найдите свойства цвета: цвет текста, цвет фона, цвет границы. Щёлкните по нужному и выберите цвет.
- Сохраните и запустите 1С:Предприятие в режиме отладки, чтобы увидеть результат.
Цвет выбирается тремя способами:
- 🎨 из палитры веб-цветов и системных цветов. Подходит для быстрой правки;
- 🧩 из элемента стиля. Лучше, когда цвет повторяется на десятках форм;
- 🔢 как произвольный цвет по трём компонентам RGB.
Если красите несколько кнопок одним цветом, заведите элемент стиля в ветке «Общие → Стили → Элементы стиля». Поменяете оттенок один раз, и он обновится везде. Это же защищает от ситуации, когда половина кнопок осталась «старого» красного.
Тип кнопки тоже влияет на результат. У обычной кнопки с рамкой фон и граница видны. У кнопки-гиперссылки фона нет, меняется только цвет текста. Если задали цвет фона, а он не виден, проверьте вид кнопки и то, где она стоит: в командной панели формы кнопки рисуются по стилю панели.
Менять цвет кнопки программно в зависимости от данных
Когда цвет зависит от состояния (документ проведён, сумма превысила лимит, выбран режим), свойства задают в процедуре на клиенте или на сервере. Элемент формы доступен через коллекцию Элементы.
&НаСервере
Процедура ОбновитьЦветКнопки()
Если Объект.СуммаДокумента > 100000 Тогда
Элементы.КнопкаСогласовать.ЦветФона = Новый Цвет(255, 200, 200);
Элементы.КнопкаСогласовать.ЦветТекста = Новый Цвет(160, 0, 0);
Иначе
Элементы.КнопкаСогласовать.ЦветФона = Новый Цвет;
Элементы.КнопкаСогласовать.ЦветТекста = Новый Цвет;
КонецЕсли;
КонецПроцедуры
Вызывайте её из ПриСозданииНаСервере и из обработчика изменения реквизита, который влияет на цвет. Если вызвать только при создании, после правки суммы кнопка останется прежнего цвета, пока форму не откроют заново.
Две вещи, на которых спотыкаются чаще всего:
- Пустой
Новый Цветбез параметров возвращает автоматический цвет. Это и есть способ «вернуть как было». Не пытайтесь запоминать прежний цвет в переменной, автоматический надёжнее. - Конструктор принимает три числа от 0 до 255: красный, зелёный, синий. Значение вне диапазона вызовет ошибку.
Откуда брать цвет
| Способ | Пример | Когда подходит |
|---|---|---|
| Три компонента | Новый Цвет(255, 200, 200) | Точный оттенок |
| Веб-цвет | WebЦвета.Красный | Быстро, понятное имя |
| Цвет стиля | ЦветаСтиля.… (выберите нужный в синтакс-помощнике) | Единая тема оформления |
Цвет стиля при смене стиля оформления подстроится сам, а жёсткий RGB останется прежним. Если у ваших пользователей разные стили (светлый и тёмный), жёсткий красный на тёмном фоне может читаться плохо.
Свойство цвета, назначенное из кода, живёт до закрытия формы. В базе оно не сохраняется. Это нормально: при следующем открытии процедура отработает снова.
Условное оформление и кнопки: что реально работает
Условное оформление формы настраивается в свойствах формы на закладке «Условное оформление». Оно красит поля ввода, колонки и строки табличных частей и динамических списков по условию. Для этого не нужно писать код: условие и оформление задаются в диалоге.
Кнопку этим механизмом красить не получится. Условное оформление работает с оформлением полей данных, а кнопка привязана к команде, а не к реквизиту. Если ваша задача звучит как «подсветить кнопку красным, когда долг больше нуля», возьмите код из предыдущего раздела. Если же цель шире, например «подсветить сумму долга», то оформление поля через условное оформление проще и надёжнее.
Практическое правило выбора:
- 🔘 цвет кнопки, не зависящий от данных, задаётся свойствами;
- 🔄 цвет кнопки, зависящий от данных, задаётся из кода;
- 📊 цвет значений, строк и колонок задаётся условным оформлением.
Иногда подсвечивают не кнопку, а то, что стоит рядом: добавляют справа от неё поле или надпись с текстом «Есть непогашенный долг», которую оформляют по условию. Пользователь всё равно видит сигнал, а кнопка остаётся стандартной.
Кнопка из надписи: когда нужен полностью свой вид
Если свойств кнопки не хватает (нужна скруглённая плашка, нестандартная рамка, цвет в состоянии нажатия), делают псевдокнопку на основе декорации-надписи.
- Добавьте на форму элемент «Декорация» вида «Надпись».
- Задайте текст, цвет текста, цвет фона и цвет границы, выберите шрифт.
- Включите гиперссылку у надписи, если нужно, чтобы по ней можно было щёлкнуть.
- В обработчике события «Нажатие» напишите вызов нужной процедуры.
Плюсы очевидны: свобода оформления и возможность менять цвет теми же свойствами. Минусы:
- ❌ такой элемент не участвует в командной панели и не получает горячих клавиш;
- ❌ пользователь с клавиатуры не доберётся до неё клавишей
Tab, как до обычной кнопки; - ❌ у надписи нет состояний «нажата» и «недоступна» с привычной анимацией.
Поэтому используйте её для декоративных элементов навигации, а для основных действий формы («Записать», «Провести», «Отправить») оставляйте настоящие кнопки.
Цвета в табличном документе и отчётах на СКД
В отчётах кнопок нет, но вопрос звучит так же: как покрасить. Здесь работают другие механизмы.
Табличный документ, формируемый кодом
Область ячеек получают через ТабДок.Область(…) и задают ей свойства оформления:
Область = ТабДок.Область(2, 1, 2, 4);
Область.ЦветФона = Новый Цвет(255, 245, 200);
Область.ЦветТекста = Новый Цвет(0, 0, 0);
Область.Шрифт = Новый Шрифт(, , Истина);
Здесь Область(2, 1, 2, 4) — это строка 2, колонки с 1 по 4. Проверьте индексы: нумерация с единицы, а не с нуля.
Отчёт на СКД
В схеме компоновки данных оформление задаётся двумя путями:
- в настройках отчёта, на закладке «Условное оформление»: выбираете поля, условие отбора и оформление (цвет фона, цвет текста, шрифт);
- в макете, если нужно оформление для всей группировки или всех ячеек определённого поля.
Типичный пример: подсветить строку, где остаток отрицательный. Условие: поле «Остаток» меньше нуля, оформление: красный цвет текста. Такое условное оформление пользователь может настроить и сам в режиме редактирования настроек, если вы разрешили.
Если в отчёте оформление применилось не ко всем строкам, проверьте, на каком уровне группировки вы добавили условие. Оформление, заданное для детальных записей, не красит итоговые строки, и наоборот.
Тонкий клиент, веб-клиент, мобильное приложение
Цвета из свойств кнопки и из кода поддерживаются в тонком клиенте и в веб-клиенте. Но отрисовка не совпадает до пикселя: на веб-клиенте граница и скругления определяются браузером, на тонком клиенте их рисует платформа.
Что стоит проверить перед выдачей в работу:
- 🖥 откройте форму в тонком клиенте под тем стилем оформления, который реально используется у пользователей;
- 🌐 откройте её в веб-клиенте в том браузере, которым пользуются на предприятии;
- 📱 если форма попадает в мобильный клиент, не рассчитывайте, что ваш RGB-оттенок будет выглядеть так же. Мобильная платформа применяет собственный стиль, и часть настроек может игнорироваться.
Для основной части пользователей достаточно двух проверок: тонкий клиент и веб-клиент. Если в одном цвет не виден, значит, вы выбрали оттенок, близкий к цвету фона формы, или у кнопки такой вид, при котором фон не рисуется.
Мини-кейс: кнопка «Отправить на согласование» меняет цвет по статусу
Задача: у документа есть реквизит «Статус согласования». Пока документ не отправлен, кнопка нейтральная. После отправки она становится жёлтой, после отказа красной, после согласования зелёной.
Решение в три шага:
- Добавьте в модуль формы процедуру, которая по значению статуса выбирает цвет фона и текста и назначает их кнопке.
- Вызовите её из
ПриСозданииНаСервере, чтобы при открытии документа кнопка сразу была правильной. - Вызовите её же из обработчика, который меняет статус, чтобы цвет обновился без переоткрытия формы.
Так вы держите всю логику цвета в одном месте. Если завтра заказчик попросит добавить статус «На доработке», правится одна процедура, а не пять обработчиков.
Не кодируйте смысл только цветом. Часть пользователей плохо различает красный и зелёный. Добавьте к цвету текст на кнопке или рядом с ней: «Отказано», «Согласовано».
Ещё одно практическое замечание про сочетание цветов. Светлый фон кнопки и тёмный текст читаются лучше, чем насыщенная заливка с белым текстом, особенно на мониторах с низким контрастом. Если цвет нужен как сигнал внимания, достаточно изменить цвет границы и текста, а фон оставить стандартным: форма не превратится в разноцветную мозаику, и важная кнопка всё равно будет заметна.
Почему цвет не меняется: проверка по симптомам
ПриСозданииНаСервере. Если свойство меняется на клиенте, а процедура помечена &НаСервере, изменение элемента всё равно попадёт на форму после возврата, но только если вы не потеряли контекст вызова.Что делать с типовой конфигурацией
Правка форм типовых конфигураций (БП, ЗУП, УТ) в основной конфигурации усложняет обновления: каждый релиз придётся сравнивать и объединять. Расширение конфигурации решает вопрос чище. В расширении вы подключаете нужную форму, добавляете обработчик ПриСозданииНаСервере и задаёте цвет в нём. Расширения появились в платформе 8.3.6, поэтому для старых платформ путь иной.
После загрузки расширения не забудьте обновить конфигурацию базы данных, иначе изменения в рабочей базе не появятся.
Частые вопросы
Можно ли покрасить кнопку одним действием сразу на всех формах?
Как вернуть кнопку к цвету по умолчанию?
Новый Цвет: пустой конструктор даёт автоматический цвет.