Как изменить цвет или выделить кнопку внешней обработки на управляемой форме 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке внешних обработок заполнения табличных частей (ТЧ) часто возникает задача визуально выделить команду на форме документа. Яркая кнопка помогает пользователям быстрее ориентироваться и безошибочно находить нужный инструмент автоматизации. Однако при работе с управляемыми формами в интерфейсе «Такси» разработчики сталкиваются с жесткими платформенными ограничениями. В рамках этой статьи мы подробно разберем, почему стандартные методы изменения цвета кнопок в меню не работают, и рассмотрим практические, корректные способы решения этой задачи с использованием Библиотеки Стандартных Подсистем (БСП).

Технические ограничения платформы 1С: почему нельзя просто покрасить кнопку в меню

Прежде чем перейти к решениям, разберем важный технический нюанс. У элементов управляемой формы типа «Кнопка» действительно существуют свойства ЦветФона, ЦветТекста и ЦветРамки. Но если кнопка создается стандартными механизмами БСП и помещается в командную панель формы (например, в подменю «Заполнить» или «Еще»), платформа 1С полностью игнорирует заданные цвета оформления. Это системное поведение интерфейса «Такси», направленное на поддержание единого визуального стиля конфигурации.

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

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

Вариант 1. Использование свойства «Важность» (для выделения брендовым цветом)

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

Для реализации этого метода нам необходимо использовать тип команды ЗаполнениеФормы (доступно в БСП версии 2.1.6 и выше). Этот тип команды позволяет выполнять код в контексте сервера формы и предоставляет прямой доступ к самой форме документа через параметры выполнения.

Проанализируем пример настройки такой команды в модуле объекта внешней обработки:


Функция СведенияОВнешнейОбработке() Экспорт
    Назначения = Новый Массив;
    Назначения.Добавить("Документ.ПринятиеКУчетуОС"); // Указываем целевой документ
    
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Назначение", Назначения);
    ПараметрыРегистрации.Вставить("Наименование", "Заполнение ТЧ ОС (Выделенная)");
    ПараметрыРегистрации.Вставить("Версия", "1.1");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    
    Команды = ПолучитьТаблицуКоманд();
    // Обратите внимание: тип команды указываем как "ЗаполнениеФормы"
    ДобавитьКоманду(Команды, "Заполнить ТЧ ОС", "ЗаполнитьДокумент", "ЗаполнениеФормы", Ложь);
    
    ПараметрыРегистрации.Вставить("Команды", Команды);
    Возврат ПараметрыРегистрации;
КонецФункции

После регистрации команды управление передается в метод ВыполнитьКоманду в модуле объекта обработки. Здесь мы получаем доступ к форме документа через переданные параметры и программно управляем свойствами кнопки:


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт
    Если ИдентификаторКоманды = "ЗаполнитьДокумент" Тогда
        // Получаем контекст управляемой формы документа
        ТекущаяФорма = ПараметрыВыполнения.ЭтаФорма;
        
        // Перебираем элементы формы, чтобы найти созданную БСП кнопку
        ИмяКнопкиБСП = "";
        Для Каждого Элемент Из ТекущаяФорма.Элементы Цикл
            // Ищем кнопку, имя которой содержит идентификатор нашей команды
            Если Найти(Элемент.Имя, "ЗаполнитьДокумент") > 0 И ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
                ИмяКнопкиБСП = Элемент.Имя;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        // Если кнопка найдена, меняем ее важность на главную
        Если ЗначениеЗаполнено(ИмяКнопкиБСП) Тогда
            ТекущаяФорма.Элементы[ИмяКнопкиБСП].Важность = ВажностьКнопки.Главная;
        КонецЕсли;
        
        // Далее выполняем основной алгоритм заполнения табличной части...
    КонецЕсли;
КонецПроцедуры

Вариант 2. Программный перенос кнопки на саму форму (полное управление цветом)

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

Для кнопок, размещенных непосредственно на форме (а не в командных панелях), платформа 1С корректно применяет установленные разработчиком цвета. Рассмотрим по шагам, как это реализовать в процедуре выполнения команды:


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт
    Если ИдентификаторКоманды = "ЗаполнитьДокумент" Тогда
        ТекущаяФорма = ПараметрыВыполнения.ЭтаФорма;
        
        // 1. Находим и скрываем стандартную кнопку БСП в подменю
        Для Каждого Элемент Из ТекущаяФорма.Элементы Цикл
            Если Найти(Элемент.Имя, "ЗаполнитьДокумент") > 0 И ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
                Элемент.Видимость = Ложь; // Скрываем из стандартного меню
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        // 2. Проверяем, не была ли уже создана наша кастомная кнопка ранее
        ИмяНовойКнопки = "Кнопка_ЯркоеЗаполнениеТЧ";
        Если ТекущаяФорма.Элементы.Найти(ИмяНовойКнопки) = Неопределено Тогда
            
            // Находим группу формы над табличной частью (например, командную панель ТЧ)
            // Имя группы зависит от конфигурации, обычно это "ОсновныеСредстваКоманднаяПанель"
            ГруппаРодитель = ТекущаяФорма.Элементы.Найти("ОсновныеСредстваКоманднаяПанель");
            
            Если ГруппаРодитель <> Неопределено Тогда
                // Создаем новую кнопку формы
                НоваяКнопка = ТекущаяФорма.Элементы.Добавить(ИмяНовойКнопки, Тип("КнопкаФормы"), ГруппаРодитель);
                НоваяКнопка.Заголовок = "Заполнить ТЧ ОС (Быстро)";
                
                // Привязываем новую кнопку к имени команды БСП
                НоваяКнопка.ИмяКоманды = "ОбщаяКоманда_ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта"; 
                
                // Задаем произвольный яркий цвет фона и белый цвет текста
                НоваяКнопка.ЦветФона = Новый Цвет(34, 139, 34); // Лесной зеленый (Forest Green)
                НоваяКнопка.ЦветТекста = WebЦвета.Белый;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

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

Вариант 3. Использование графических маркеров (иконок)

Зачастую хорошей альтернативой полной перекраске кнопки является добавление к ней яркой иконки (картинки). Кнопка с цветной пиктограммой в стандартном текстовом меню «Заполнить» мгновенно привлекает внимание.

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


Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    
    // В качестве модификатора можно передать имя стандартной картинки из библиотеки 1С
    // Например, добавим яркую зеленую стрелку или знак предупреждения
    НоваяКоманда.Модификатор = "Картинка=БиблиотекаКартинок.ВыполнитьВыгрузкуДанных"; 
КонецПроцедуры

Платформа автоматически подгрузит указанную картинку из встроенной библиотеки и отобразит ее слева от текста названия вашей внешней обработки в меню документа. Для быстрого просмотра и подбора системных пиктограмм в режиме «1С:Предприятие» подойдёт обработка для выбора картинки из библиотеки картинок.

Вариант 4. Визуальное выделение текста с помощью нумерации и спецсимволов

Рассмотрим простейший, но крайне эффективный организационный прием, который не требует написания сложного программного кода управления элементами формы. Если в меню «Заполнить» присутствует много различных обработок, ваша команда может затеряться.

Чтобы поднять команду в самый верх списка и сделать ее заметной, используйте префиксную нумерацию и спецсимволы прямо в наименовании представления команды:


// Пример добавления спецсимволов "звездочка" или числовых индексов в представлении команды:
ДобавитьКоманду(Команды, "★ 1. Заполнение ТЧ ОС", "ЗаполнитДокумент", "ВызовКлиентскогоМетода", Ложь);

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

Резюме и рекомендации

Мы подробно проанализировали особенности работы с элементами управляемых форм 1С. Подведем итоги:

  1. Прямое изменение свойств ЦветФона и ЦветТекста для стандартных кнопок БСП в командных панелях не поддерживается платформой.
  2. Для легкого и безопасного выделения используйте свойство кнопки Важность со значением ВажностьКнопки.Главная.
  3. Для полного контроля над визуальным стилем скрывайте стандартную кнопку командной панели БСП и программно создавайте новую кнопку на плоскости формы.
  4. Используйте яркие пиктограммы из стандартной библиотеки картинок и текстовые префиксы для быстрого привлечения внимания пользователей.
← На главную