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

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

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

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

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

Пример небольшой и врятли даст ответы нв все вопросы по программной модификации форм. Он лишь может подсказать общий принцип.
Читайте также
Когда количество изменений на предприятии превышает критический уровень в сторону необновляемых конфигураций — 1С предлагает создание управляемого приложения
Настройка отчета на СКД без кодирования
Возможность отбора по подстроке реквизитов
Разработки

Как свернуть все активные окна
Обработка — Как сворачивать активные окна

Табло для управляемого приложения, тонкий клиент
Обработка — табло управляемого приложения

«Аудиторский след» (история изменений) документов и справочников для любой конфигурации обычного приложения 8.x
«Модуль для фиксации изменений в документах и справочников»
Еще от автора
- Передача данных между управляемыми формами
- Фиксируем колонку в отчете на СКД
- Создаем бизнес-процесс в несколько шагов
- Если у Вас нет феноменальной памяти
