Жёлтая кнопка на управляемой форме 1С: свойства, код и ограничения

· 9 мин

Содержание

Жёлтую кнопку в 1С делают двумя путями: задают цвет фона в свойствах кнопки в конфигураторе (постоянный цвет) или меняют ЦветФона из кода в нужный момент (цвет зависит от состояния). Условное оформление формы здесь не поможет: оно красит поля и колонки таблиц, но не кнопки.

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

Что нужно знать до начала

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

Вот что полезно держать в голове:

  • 🎨 У кнопки управляемой формы три цветовых свойства: цвет текста, цвет фона и цвет рамки.
  • 🧩 Цвет задают значением типа Цвет. Его берут из трёх источников: палитры, WebЦвета или стиля конфигурации.
  • ⚙️ Менять свойства кнопки можно и в конфигураторе, и в коде формы. Конфигуратор даёт постоянное значение, код — динамическое.
  • 🖥️ Конфигурация, у которой стоит режим совместимости ниже 8.3.x, и старые платформы могут вести себя иначе. Проверяйте на своей версии.

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

Способ 1. Свойства кнопки в конфигураторе

Это самый простой вариант, если кнопка должна быть жёлтой всегда.

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

В палитре жёлтый подбирают двумя способами. Либо берут именованный цвет из вкладки Web (он называется «Жёлтый»), либо задают нужный оттенок вручную. Чистый жёлтый (255, 255, 0) на белом фоне выглядит резко и плохо читается. Спокойнее смотрятся оттенки вроде (255, 223, 22) или светло-жёлтый (255, 235, 130).

Какой жёлтый выбрать

ВариантКак выглядитКогда подходит
Именованный Web-цвет «Жёлтый»Яркий, режет глазКогда кнопку надо сделать максимально заметной
Тёплый жёлтый, например (255, 223, 22)Тоньше, ближе к акцентам интерфейсаОсновное действие на форме
Светло-жёлтый, например (255, 235, 130)Мягкая подсветкаВторичные кнопки и подсказки
Цвет из стиля конфигурацииМеняется вместе со стилемКогда оформление должно быть едино для всей программы

Не красьте жёлтым больше одной-двух кнопок на форме. Если подсвечено всё, внимание не привлекает ничего.

Способ 2. Кнопка по умолчанию: жёлтая без настройки цвета

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

Особенности:

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

Если вы одновременно задали кнопке свой ЦветФона и сделали её кнопкой по умолчанию, ориентируйтесь на то, что покажет проверка в клиенте. Явно заданный цвет и акцент стиля могут конфликтовать, а результат зависит от версии платформы.

Подходит, когда нужен «брендовый» акцент, а не конкретный оттенок. Если цвет должен быть именно такой, переходите к программной настройке.

Способ 3. Как менять цвет кнопки из кода

Динамическая подсветка нужна, когда цвет зависит от данных: есть непроведённые документы, остаток ниже нормы, заполнены не все реквизиты. Условное оформление кнопки не касается, поэтому свойство ставят вручную.

Минимальный пример, который красит кнопку по нажатию команды:

&НаКлиенте
Процедура ПодсветитьКнопку(Команда)
	Элементы.ОтправитьОтчет.ЦветФона = WebЦвета.Желтый;
	Элементы.ОтправитьОтчет.ЦветТекста = WebЦвета.Черный;
КонецПроцедуры

Здесь ОтправитьОтчет — имя элемента формы, а не имя команды. Если элемент называется иначе, подставьте своё. Имя элемента видно в дереве формы и в палитре свойств.

Чаще цвет определяют при открытии формы, на сервере:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

КонецПроцедуры

Тот же приём работает на клиенте в обработчике события элемента или реквизита. Например, если пользователь изменил поле и надо сразу показать, что документ требует действия:

&НаКлиенте
Процедура СуммаПриИзменении(Элемент)

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

КонецПроцедуры

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

Откуда брать значение цвета

Вариантов три, и все они возвращают значение типа Цвет:

  • Новый Цвет(255, 223, 22) — три числа от 0 до 255 (красный, зелёный, синий). Точный контроль оттенка.
  • WebЦвета.Желтый — именованный цвет. Короткая запись, но оттенок один.
  • ЦветаСтиля. и далее нужный элемент стиля — цвет из стиля конфигурации. Выбирайте этот вариант, если оформление должно меняться вместе со стилем.

Имена элементов стиля подсказывает автодополнение в конфигураторе: после точки появится список. Не угадывайте имя по памяти, ошибка в имени сломает форму при открытии.

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

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

Многие ищут решение именно здесь, поэтому остановимся подробнее. Условное оформление формы работает с полями ввода, колонками и ячейками таблиц, группами и надписями. Кнопки, команды и командные панели в списке оформляемых элементов не участвуют. То есть правило «если сумма больше 100 000, то жёлтый фон» привяжется к полю суммы, но не к кнопке «Согласовать».

Что делать:

  • Хотите подсветить поле? Используйте условное оформление: это его задача.
  • Нужна именно кнопка? Меняйте ЦветФона из кода, как показано выше.
  • Нужен сигнал без кода? Добавьте рядом надпись или поле, которое условное оформление покрасит, а кнопку оставьте как есть.

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

Несколько кнопок и общая процедура

Когда подсвечивать нужно не одну кнопку, а несколько, не дублируйте код. Вынесите смену цвета в отдельную процедуру и вызывайте её из всех нужных мест:

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПодсветку(Кнопка, Включить)

	Если Включить Тогда
		Кнопка.ЦветФона = Новый Цвет(255, 223, 22);
		Кнопка.ЦветТекста = WebЦвета.Черный;
	Иначе
		Кнопка.ЦветФона = Новый Цвет;
		Кнопка.ЦветТекста = Новый Цвет;
	КонецЕсли;

КонецПроцедуры

Вызов выглядит так: УстановитьПодсветку(Элементы.КнопкаСогласовать, Объект.СуммаДокумента > 100000);. Один вызов покрывает обе ветки условия, и вы не забудете сбросить цвет.

Что даёт такой подход:

  • 🔁 Оттенок жёлтого лежит в одном месте. Захотите сделать его теплее, поправите одну строку.
  • 🧪 Логику проще проверять: процедуру не надо искать по всей форме.
  • 🧱 Вызов из ПриСозданииНаСервере и из обработчиков событий выглядит одинаково.

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

Как проверить результат

Перед выкладкой пройдите короткий список:

  1. Откройте форму в тонком клиенте и в веб-клиенте: цвет кнопки одинаково заметен.
  2. Выполните условие в обе стороны: кнопка желтеет и возвращается к обычному виду.
  3. Откройте форму от имени пользователя с ограниченными правами: код с обращением к Элементы работает независимо от ролей, но проверка не помешает.
  4. Убедитесь, что текст на кнопке читается: тёмный на жёлтом, без серых оттенков.

Тонкий клиент, веб-клиент и мобильное приложение

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

Что проверять:

  1. Оба клиента. Откройте форму в тонком клиенте и в браузере. Разницу в оттенке и в обводке заметно сразу.
  2. Тёмная и светлая тема браузера. Яркий жёлтый на тёмном фоне может выглядеть слишком контрастно. Текст кнопки при этом задавайте явно.
  3. Масштаб и разрешение. Рамка кнопки при масштабе экрана 125% или 150% иногда выглядит тоньше, чем в 100%. Это нормально.
  4. Мобильное приложение. Мобильная платформа применяет оформление по своим правилам. Не рассчитывайте, что кнопка выглядит так же, как на компьютере, и проверяйте на устройстве.

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

Что может пойти не так

Разберём типичные причины, почему кнопка не стала жёлтой:

  • ❌ Обычная форма. Если форма не управляемая, свойства цвета у кнопки нет. Решение — перевести форму на управляемую, а не искать скрытую настройку.
  • ❌ Кнопка в командной панели. Кнопки командной панели платформа оформляет по стилю командных панелей, и собственный цвет они принимают не всегда. Вынесите кнопку в отдельную группу формы: у обычной кнопки внутри группы свойства работают без оговорок.
  • ❌ Не то имя элемента. В коде нужно писать имя элемента формы, а не команды. Если имена совпадают случайно, всё в порядке; если нет, получите ошибку «Поле объекта не обнаружено».
  • ❌ Цвет не сбрасывается. Вы задали цвет в одном условии и не предусмотрели обратное. Добавьте ветку Иначе, где возвращаете Новый Цвет.
  • ❌ Свойство задано в конфигураторе и перезаписано в коде. Код всегда побеждает: если в ПриСозданииНаСервере стоит другой цвет, настройка из палитры не увидится.
  • ❌ Старый кэш клиента. После правки формы в тонком клиенте иногда остаётся прежний вид. Закройте программу и откройте снова, а в веб-клиенте обновите страницу.

Прежде чем чистить кэш клиента или перезапускать рабочие процессы сервера, предупредите пользователей: их сеансы оборвутся. Для проверки цвета достаточно перезапустить свой клиент.

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

Можно ли покрасить кнопку в обычной форме?
Нет. У кнопки обычной формы нет свойства цвета фона. Переведите форму на управляемую.
Работает ли цвет кнопки, заданный в конфигураторе, для всех пользователей?
Да. Это свойство элемента формы, настройки пользователя на него не влияют.
Как вернуть кнопке стандартный вид из кода?
Присвойте ЦветФона значение Новый Цвет. Пустой цвет вернёт оформление по умолчанию.
Чем отличается жёлтая кнопка по умолчанию от кнопки с жёлтым фоном?
Кнопку по умолчанию красит стиль и она реагирует на Enter. Фон кнопки вы задаёте сами, а на клавиатурное поведение он не влияет.
Где посмотреть доступные цвета стиля?
В конфигураторе: в дереве конфигурации откройте раздел «Общие» → «Стили». В коде элементы стиля подсказывает автодополнение после ЦветаСтиля..