Команда
Команда — это объект конфигурации, с помощью которого разработчик может описывать действия, предназначенные для выполнения пользователем.
Существуют общие команды — команды, которые не имеют объектной специфики или служат для выполнения действий с объектами, которые не используют стандартные команды.

Также команды могут существовать и у отдельных объектов конфигурации. Они служат для выполнения операций, связанных именно с этим объектом.

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

Действия, выполняемые командой, описываются на встроенном языке в модуле команды.


Авторы: В.А. Ажеронок, А.В. Островерх, М.Г. Радченко, Е.Ю. Хрусталева
1С 8.3 Как добавить команду на форму программно
В 1С добавить команду на форму можно двумя способами, используя графический интерфейс либо программно. Кстати, программно можно добавить все что угодно. На всех курсах по 1С программированию рассказывают про первый вариант так как он очень простой, а вот второй использую уже профессионалы своего дела. В результате новички испытывают в некотором роде шок, когда на форме видят какие-то элементы, например, те же команды, но открыв форму в конфигураторе видят их отсутствие. Информации по этому поводу достаточно много в интернете, вот и я решил немного рассказать и показать как это делается.
Программное добавление команд
Для примера я создам простой документ «Поступление» в котором будет только два стандартных реквизита это «Номер» и «Дата» а также три стандартные команды «Провести и закрыть», «Записать» и «Провести». В качестве примера давайте добавим еще одну команду на форму программно, которая например, будет выводить нам какое то сообщение.

Для этого в конфигураторе создаем обработчик события «При создании на сервере». Если кто не знает как его создать то для этого выделяем всю форму одинарным кликом, после чего в открывшемся меню справа ищем раздел «События» и напротив «При создании на сервере» нажимаем на значок лупы.

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

Сохраняем и проверяем что получилось, в результате Вы должны увидеть кнопку «Показать сообщение», после нажатия на которую должно отобразиться само сообщение.

Можно изменить внешний вид кнопки сделать её например ссылкой для этого в коде в процедуре на сервере меняем «ОбычнаяКнопка» на «Гиперссылка».
КнопкаФормы.Вид = ВидКнопкиФормы.Гиперссылка; // Вот тут

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

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

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

Так же кнопки формы имеют свойство КнопкаПоУмолчанию, если присвоить значение Истина
Кнопка.КнопкаПоУмолчанию = Истина;
тогда кнопка будет выделена цветом и шрифтом

Понравилась статья? Поделиться с друзьями:
Комментарии: 2
Алексей 17.12.2019
а как код то добавить чтобы выполнялся?
или код нужно заранее на форму поместить, тогда нет смысла добавлять программно команду, если код всеравно нужно помещать заранее на конкретную форму.
Guesto (автор) 22.12.2019
Алексей, доброго времени суток! Хороший вопрос! Все верно, код обработчика придется добавить в модуль формы. А теперь давайте посмотрим не только на разработку, но и на сопровождение и дальнейшее обновление доработанной конфигурации. Если добавить команду «руками», то при обновлении дважды измененной формы команда будет потеряна. Ведь, модули формы мы можем сравнить, а формы нет. Если команду добавить программно в модуле формы или соответствующем модуле БСП, а обработчик в модуле формы. При этом выделив все свои процедуры префиксом и поместив их в отдельную область, то мы получим ситуацию, когда все наши изменения можно легко увидеть в сравнении модулей. Не придется держать чек-лист со списком команд/реквизитов/элементов для ручного добавления и перепроверки после обновления. И тут мы приходим к правилу — формы «руками» не правятся вообще. Все «ручные» изменения выявляются на этапе ревью, вносивший такие изменения бурно порицается. Обдумав данный механизм, просится к добавлению:
1. Автотест с открытием форм и исполнением программного изменения;
2. Корректная обработка ситуаций, когда программное изменение не получилось. С соответствующим выводом на этапе тестирования. Не долго думая пишем придуманное выше и наслаждаемся результатом.