При разработке интерфейсов в обычном приложении 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда необходимо динамически изменить надпись или логику работы кнопки на командной панели. Однако обращение к кнопкам командной панели отличается от работы с обычными элементами управления на форме. Разберем по шагам, как правильно управлять текстом и поведением кнопок командной панели, а также выясним причины, по которым изменения могут не отображаться.
Проанализируем структуру объектов. В обычных формах (толстый клиент) отдельно стоящая кнопка на форме представляет собой элемент управления Кнопка, у которого за отображаемый текст отвечает свойство Заголовок.
Элементы командной панели устроены иначе. Сама панель содержит коллекцию кнопок типа КнопкаКоманднойПанели. У данного объекта отсутствует свойство Заголовок, а для задания надписи используется свойство Текст.
Посмотрим на базовый синтаксис изменения текста кнопки:
// Изменение текста кнопки в командной панели
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.кнОк.Текст = "Продолжить";
// Для сравнения: изменение надписи у отдельно стоящей кнопки формы
ЭлементыФормы.кнОбновитьКартинку.Заголовок = "Обновить картинку";
Если код отрабатывает без синтаксических ошибок, но визуально надпись на панели не изменяется, проверим следующие факторы:
КнопкаКоманднойПанели есть свойство Отображение. Если для него установлено значение РежимОтображенияКнопкиКоманднойПанели.Картинка, кнопка выводит только значок, игнорируя текст. Чтобы надпись появилась, установим значение Авто, Надпись или КартинкаИНадпись.Автозаполнение или кнопка связана со стандартным действием формы/таблицы, платформа может автоматически восстанавливать исходное наименование при обновлении состояния формы.ПриПовторномОткрытии, ОбработкаВнешнегоСобытия или ОбновлениеОтображения.Рассмотрим практический сценарий, когда в зависимости от бизнес-логики необходимо изменить не только текст кнопки, но и вызываемую процедуру обработки нажатия. Для этого обратимся к свойствам Текст, Доступность и Действие.
КнопкаСостояния = ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ПеревестиВСостояние;
КнопкаСостояния.Доступность = Истина;
КнопкаСостояния.Действие = Новый Действие("ПеревестиВСостояниеПодписан");
КнопкаСостояния.Текст = "Подписать документ";
В модуле формы обязательно должна присутствовать процедура-обработчик с соответствующим именем:
Процедура ПеревестиВСостояниеПодписан(Кнопка)
// Логика обработки нажатия
КонецПроцедуры
Обратим внимание на важную особенность: объект КнопкаКоманднойПанели в обычных формах не имеет свойства Видимость. Сделать кнопку недоступной можно с помощью свойства Доступность = Ложь. Если же кнопку требуется полностью скрыть с панели, применяется динамическое удаление и добавление кнопки в коллекцию.
Кнопки.Удалить(Кнопка).Кнопки.Вставить(...) или Кнопки.Добавить(...), задавая тип ТипКнопкиКоманднойПанели.Действие, имя, текст и обработчик.Чтобы состояние элементов интерфейса всегда оставалось актуальным, логику обновления текста и доступности кнопок командной панели рекомендуется выносить в отдельную процедуру и вызывать её в том числе из обработчика события формы ОбновлениеОтображения().