Как программно создать кнопку в 1С на обычных и управляемых формах?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки конфигураций или внешних обработок в 1С нередко возникает задача динамического формирования интерфейса. Программное создание элементов управления может понадобиться при построении универсальных отчетов, динамических мастеров настроек или интеграционных механизмов. Разберем детально, как решить задачу добавления кнопки программным способом для двух архитектурных концепций платформы 1С: обычных и управляемых форм.

Программное создание кнопки в обычных формах

Проанализируем сначала механизм работы с обычными (толстыми) формами. Здесь каждый визуальный элемент добавляется непосредственно в коллекцию ЭлементыФормы, а событие связывается с процедурой с помощью специального объекта Действие.

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

Разберем по шагам создание кнопки и связывание ее с обработчиком события нажатия:

  1. Определяем действие, передавая в конструктор строковое имя процедуры-обработчика, которая уже присутствует в модуле формы.
  2. Создаем новый элемент через метод ЭлементыФормы.Добавить() с типом Кнопка.
  3. Задаем заголовок, размеры и позиционирование кнопки.
  4. Назначаем обработчик с помощью метода УстановитьДействие().

Посмотрим на готовый пример кода для модуля обычной формы:


// Создание действия для события нажатия
ОбработкаНажатия = Новый Действие("СформироватьОбработка");

// Добавление кнопки в коллекцию элементов формы
НовКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), "КнопкаСформировать");
НовКнопка.Заголовок = "Сформировать";
НовКнопка.Высота = 25;
НовКнопка.Ширина = 100;
НовКнопка.Лево = 10;
НовКнопка.Верх = 10;

// Связывание события нажатия с действием
НовКнопка.УстановитьДействие("Нажатие", ОбработкаНажатия);

// Процедура-обработчик должна существовать в модуле
Процедура СформироватьОбработка(Элемент)
    Сообщить("Кнопка успешно нажата: " + ТекущаяДата());
КонецПроцедуры

Программное создание кнопки в управляемых формах

В управляемом интерфейсе логика построения формы принципиально иная. Визуальная кнопка не может существовать сама по себе: она обязательно должна быть связана с командой (или стандартной командой формы). Никаких реквизитов формы для создания кнопки заводить не требуется. При этом вся модификация интерфейса выполняется исключительно в серверном контексте, например, в обработчике ПриСозданииНаСервере.

Разберем последовательность действий для управляемой формы:

  1. Создание команды формы: добавляем команду в коллекцию Команды, задаем ее имя, заголовок и указываем строковое имя клиентской процедуры-обработчика в свойстве Действие.
  2. Создание элемента интерфейса: добавляем кнопку в коллекцию Элементы, указывая тип КнопкаФормы и родительскую группу (например, командную панель).
  3. Связывание кнопки с командой: свойству кнопки ИмяКоманды присваиваем точное имя созданной команды.

Рассмотрим пример кода в модуле управляемой формы:


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

&НаКлиенте
Процедура Подключаемый_ВыполнитьДействие(Команда)
    ПоказатьОповещениеПользователя("Действие выполнено успешно!");
КонецПроцедуры

Ограничения и рекомендации по разработке

Выясним важные тонкости и правила стандартов разработки фирмы 1С, которые уберегут от трудноуловимых ошибок:

  1. Невозможность генерации кода «на лету»: процедура-обработчик команды или действия обязательно должна присутствовать в модуле формы на этапе конфигурирования. Динамически сформировать исполняемый код процедуры в памяти во время работы программы платформа не позволяет.
  2. Именование обработчиков: для динамически подключаемых процедур рекомендуется использовать префикс Подключаемый_. Это правило стандарта разработки 1С, позволяющее другим программистам сразу понимать, что процедура не имеет явной жесткой привязки в редакторе формы конфигуратора.
  3. Контекст вызовов: создание элементов и команд в управляемых формах возможно только на сервере. Попытка вызвать метод Добавить() для коллекций Элементы или Команды в процедуре с директивой &НаКлиенте приведет к аварийному завершению с ошибкой. При этом сама процедура-обработчик команды должна быть объявлена на клиенте и принимать параметр Команда.
  4. Альтернативный подход: если состав кнопок известен заранее, гораздо надежнее расположить элементы на форме статически в конфигураторе и управлять их свойствами Видимость и Доступность в зависимости от условий. Это упрощает отладку, тестирование интерфейса и поддержку конфигурации.
← На главную