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