1С. Программное добавление кнопки с обработчиком

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

Задача

Программно добавить на командную панель кнопку с выполнением произвольного кода по ее нажатию.

Реализация

Для наглядности создадим новую обработку с «Пустой» формой. Её внешний вид будет следующим

Программное добавление кнопки с обработчиком

В обработчике события формы ПриСозданииНаСервере() добавим код генерации команды и кнопки

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
    // Создадим команду
    Команда		= ЭтаФорма.Команды.Добавить("МояКоманда");
    Команда.Действие	= "ОбработчикМоейКоманды";

    // Создадим кнопку и привяжем к ней команду
    Кнопка		= ЭтаФорма.Элементы.Добавить("ВыполнитьМоюКоманду", Тип("КнопкаФормы"), ЭтаФорма.Элементы.ФормаКоманднаяПанель);
    Кнопка.Заголовок	= "Выполнить мою команду";
    Кнопка.ИмяКоманды	= "МояКоманда";
	
КонецПроцедуры

И создадим обработчик нашей команды

&НаКлиенте
Процедура ОбработчикМоейКоманды(Команда)
	
    // Наш произвольный код для выполнения
	
КонецПроцедуры

В итоге на форме появится кнопка выполняющая наш обработчик. Выглядеть все это будет как добавленная кнопка в конфигураторе

Программное добавление кнопки с обработчиком

Так же кнопки формы имеют свойство КнопкаПоУмолчанию, если присвоить значение Истина

Кнопка.КнопкаПоУмолчанию = Истина;

тогда кнопка будет выделена цветом и шрифтом

Так же можно почитать 1С. Программное добавление и удаление реквизитов формы

Комментарии 2

  • Алексей 17.12.2019 в 18:20 Cсылка

    а как код то добавить чтобы выполнялся?
    или код нужно заранее на форму поместить, тогда нет смысла добавлять программно команду, если код всеравно нужно помещать заранее на конкретную форму.

    • Guesto 22.12.2019 в 13:15 Cсылка

      Алексей, доброго времени суток! Хороший вопрос!

      Все верно, код обработчика придется добавить в модуль формы.

      А теперь давайте посмотрим не только на разработку, но и на сопровождение и дальнейшее обновление доработанной конфигурации.

      Если добавить команду «руками», то при обновлении дважды измененной формы команда будет потеряна. Ведь, модули формы мы можем сравнить, а формы нет.

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

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

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

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

  • Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *