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

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

Задача

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

Реализация

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Понравилась статья? Поделиться с друзьями:
Комментарии: 2
  1. Алексей

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

    1. Guesto (автор)

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

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

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

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

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

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

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

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

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: