Как программно изменить заголовок кнопки на управляемой форме в 1С?

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

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

Шаг 1: Подготовка команды в конфигураторе

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

  1. Откройте нужную форму в конфигураторе.
  2. В дереве элементов формы найдите интересующую вас команду. Обычно они располагаются на вкладке «Команды» -> «Команды формы».
  3. Выделите команду и откройте палитру ее свойств (обычно правым кликом мыши и выбором пункта «Свойства»).
  4. В свойствах команды найдите флажок Изменять представление и установите его.

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

Шаг 2: Программное изменение заголовка

После того как мы разрешили изменение представления, можно переходить к написанию кода. Важно понимать, что мы обращаемся не к самому объекту команды, а к элементу формы, который с ней связан, то есть к самой кнопке. Все элементы формы доступны через коллекцию Элементы — ускорить написание и отладку кода поможет инструментарий разработчика для управляемых форм.

Код для изменения заголовка предельно прост и должен выполняться на сервере.


// Код должен находиться в серверной процедуре или функции (&НаСервере)
Элементы.ИмяВашейКнопки.Заголовок = "Новый текст для кнопки";

Здесь ИмяВашейКнопки — это имя элемента типа «Кнопка» на форме. Как правило, при перетаскивании команды на форму имя кнопки создается автоматически и совпадает с именем самой команды. Вы всегда можете проверить и изменить его в дереве элементов формы.

Где и когда размещать код?

Выбор места для кода зависит от логики вашей задачи (подобно тому, как выполняется настройка списка). Рассмотрим самые распространенные сценарии.

1. При открытии формы. Если заголовок кнопки должен быть определен на основе данных объекта при открытии, идеальное место для кода — обработчик события ПриСозданииНаСервере.


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

    Если Объект.ЭтоНовый() Тогда
        Элементы.ЗаписатьДокумент.Заголовок = "Записать новый элемент";
    Иначе
        Элементы.ЗаписатьДокумент.Заголовок = "Сохранить изменения";
    КонецЕсли;

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

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


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

// Серверная процедура
&НаСервере
Процедура ОбновитьЗаголовокКнопкиНаСервере()
    
    Если Объект.СуммаДокумента > 100000 Тогда
        Элементы.СформироватьОтчет.Заголовок = "Сформировать VIP-отчет";
    Иначе
        Элементы.СформироватьОтчет.Заголовок = "Сформировать обычный отчет";
    КонецЕсли;
    
КонецПроцедуры

Особый случай: команда находится в подменю

Что делать, если нужная кнопка расположена не прямо на командной панели, а внутри подменю (например, меню «Заполнить» или «Печать»)? Принцип остается абсолютно тем же. Каждая кнопка, даже вложенная, является полноценным элементом формы со своим уникальным именем.

Чтобы найти правильное имя, просто раскройте соответствующую группу или подменю в дереве элементов формы в конфигураторе. Вы увидите все вложенные кнопки. После этого используйте найденное имя в коде:


// Например, если кнопка "ЗаполнитьПоНоменклатуре" находится в группе "ГруппаЗаполнение"
&НаСервере
Процедура УстановитьЗаголовокВложеннойКнопки()
    Элементы.ГруппаЗаполнениеЗаполнитьПоНоменклатуре.Заголовок = "Заполнить по остаткам";
КонецПроцедуры

Управление другими свойствами кнопки

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

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


&НаСервере
Процедура ОбновитьСостояниеКнопкиПроведения()
    
    Если Объект.Проведен Тогда
        Элементы.ПровестиДокумент.Заголовок = "Документ проведен";
        Элементы.ПровестиДокумент.Доступность = Ложь;
        Элементы.ПровестиДокумент.ЦветТекста = WebЦвета.ТемноЗеленый;
    Иначе
        Элементы.ПровестиДокумент.Заголовок = "Провести документ";
        Элементы.ПровестиДокумент.Доступность = Истина;
        Элементы.ПровестиДокумент.ЦветТекста = Стиль.ЦветОбычногоТекста; // Используем цвет из стиля
    КонецЕсли;

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

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

← На главную