Как программно изменить текст на кнопке командной панели в обычных формах 1С?

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

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

Различие между обычной кнопкой и кнопкой командной панели

Проанализируем структуру объектов. В обычных формах (толстый клиент) отдельно стоящая кнопка на форме представляет собой элемент управления Кнопка, у которого за отображаемый текст отвечает свойство Заголовок.

Элементы командной панели устроены иначе. Сама панель содержит коллекцию кнопок типа КнопкаКоманднойПанели. У данного объекта отсутствует свойство Заголовок, а для задания надписи используется свойство Текст.

Посмотрим на базовый синтаксис изменения текста кнопки:


// Изменение текста кнопки в командной панели
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.кнОк.Текст = "Продолжить";

// Для сравнения: изменение надписи у отдельно стоящей кнопки формы
ЭлементыФормы.кнОбновитьКартинку.Заголовок = "Обновить картинку";

Почему текст кнопки может не меняться: основные причины

Если код отрабатывает без синтаксических ошибок, но визуально надпись на панели не изменяется, проверим следующие факторы:

  1. Режим отображения кнопки. У объекта КнопкаКоманднойПанели есть свойство Отображение. Если для него установлено значение РежимОтображенияКнопкиКоманднойПанели.Картинка, кнопка выводит только значок, игнорируя текст. Чтобы надпись появилась, установим значение Авто, Надпись или КартинкаИНадпись.
  2. Влияние автозаполнения и стандартных действий. Если у командной панели включено свойство Автозаполнение или кнопка связана со стандартным действием формы/таблицы, платформа может автоматически восстанавливать исходное наименование при обновлении состояния формы.
  3. Переопределение в других событиях. Изменение текста может моментально перезаписываться в обработчиках ПриПовторномОткрытии, ОбработкаВнешнегоСобытия или ОбновлениеОтображения.

Динамическое изменение текста и действия кнопки

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


КнопкаСостояния = ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ПеревестиВСостояние;
КнопкаСостояния.Доступность = Истина;
КнопкаСостояния.Действие = Новый Действие("ПеревестиВСостояниеПодписан");
КнопкаСостояния.Текст = "Подписать документ";

В модуле формы обязательно должна присутствовать процедура-обработчик с соответствующим именем:


Процедура ПеревестиВСостояниеПодписан(Кнопка)
    // Логика обработки нажатия
КонецПроцедуры

Как скрыть кнопку командной панели при отсутствии свойства «Видимость»

Обратим внимание на важную особенность: объект КнопкаКоманднойПанели в обычных формах не имеет свойства Видимость. Сделать кнопку недоступной можно с помощью свойства Доступность = Ложь. Если же кнопку требуется полностью скрыть с панели, применяется динамическое удаление и добавление кнопки в коллекцию.

  1. Для скрытия кнопки: вызываем метод Кнопки.Удалить(Кнопка).
  2. Для обратного отображения: создаем кнопку заново методами Кнопки.Вставить(...) или Кнопки.Добавить(...), задавая тип ТипКнопкиКоманднойПанели.Действие, имя, текст и обработчик.

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

← На главную