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

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

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

Основной принцип: связка «Команда + Кнопка»

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

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

  1. Создать объект команды в коллекции команд формы (ЭтаФорма.Команды).
  2. Настроить команду: задать ей заголовок, подсказку и, самое главное, имя клиентской процедуры, которая будет выполняться при ее вызове.
  3. Создать элемент формы типа «Кнопка» в коллекции элементов формы (ЭтаФорма.Элементы).
  4. Связать кнопку с командой, указав у кнопки имя ранее созданной команды.
  5. Разместить кнопку в нужном месте, например, на командной панели, указав родительский элемент.

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

Пошаговое решение с примером кода

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

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

Шаг 1: Создание и настройка команды

Сначала в коллекции команд формы создадим новый объект. Для этого используем метод Добавить().


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Создаем саму команду и задаем ей уникальное имя
    НоваяКоманда = ЭтаФорма.Команды.Добавить("ВыполнитьПроверку");

    // Указываем, какую КЛИЕНТСКУЮ процедуру будет вызывать команда
    // Важно: процедура-обработчик должна находиться на клиенте
    НоваяКоманда.Действие = "ОбработчикКомандыПроверки";

    // Настраиваем представление команды (то, что увидит пользователь)
    НоваяКоманда.Заголовок = "Выполнить проверку";
    НоваяКоманда.Подсказка = "Запустить дополнительную проверку данных на форме";

    // Можно также задать стандартную картинку
    НоваяКоманда.Картинка = БиблиотекаКартинок.Выполнить;

КонецПроцедуры

Важный момент: свойство Действие должно содержать имя экспортной процедуры с директивой компиляции &НаКлиенте. Именно эта процедура будет вызвана при нажатии на кнопку.

Шаг 2: Создание элемента формы (кнопки) и его размещение

Теперь, когда у нас есть команда, создадим для нее визуальное представление — кнопку. Для этого используем метод ЭтаФорма.Элементы.Добавить(). У этого метода есть три важных параметра:

Чтобы разместить кнопку на главной командной панели, нужно указать ее в качестве родителя. Имя командной панели можно посмотреть в конфигураторе в дереве элементов формы или использовать специальный редактор форм в режиме предприятия для анализа структуры открытой формы. Часто она называется КоманднаяПанель, ГруппаФормыКоманды или ОсновнаяКоманднаяПанель.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // ... (код создания команды из Шага 1) ...

    // Создаем элемент формы - кнопку, и помещаем ее на командную панель.
    // Имя "КоманднаяПанель" нужно проверить в дереве элементов вашей формы!
    РодительскаяГруппа = ЭтаФорма.Элементы.КоманднаяПанель;
    НоваяКнопка = ЭтаФорма.Элементы.Добавить("КнопкаПроверки", Тип("КнопкаФормы"), РодительскаяГруппа);

    // Связываем кнопку с ранее созданной командой по имени
    НоваяКнопка.ИмяКоманды = "ВыполнитьПроверку";

    // Настраиваем вид кнопки
    НоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
    НоваяКнопка.Отображение = ОтображениеКнопки.КартинкаИТекст; // Показывать и иконку, и текст

КонецПроцедуры

Шаг 3: Создание клиентского обработчика

Последний шаг — создать в модуле формы клиентскую процедуру, имя которой мы указали в свойстве Действие нашей команды.


&НаКлиенте
// Процедура должна быть экспортной, чтобы форма могла ее "увидеть"
Процедура ОбработчикКомандыПроверки(Команда)

    Сообщить("Запущена процедура проверки данных!");
    // Здесь размещается код, который должен выполняться по нажатию на кнопку.
    // Например, вызов серверной функции для проверки.

КонецПроцедуры

Полный листинг кода

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // 1. Создаем саму команду
    НоваяКоманда = ЭтаФорма.Команды.Добавить("ВыполнитьПроверку");

    // 2. Указываем, какую клиентскую процедуру будет вызывать команда
    НоваяКоманда.Действие = "ОбработчикКомандыПроверки";

    // 3. Настраиваем представление команды
    НоваяКоманда.Заголовок = "Выполнить проверку";
    НоваяКоманда.Подсказка = "Запустить дополнительную проверку данных";
    НоваяКоманда.Картинка = БиблиотекаКартинок.Выполнить;

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

    // 5. Связываем кнопку с ранее созданной командой
    НоваяКнопка.ИмяКоманды = "ВыполнитьПроверку";

    // 6. Настраиваем вид и отображение кнопки
    НоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
    НоваяКнопка.Отображение = ОтображениеКнопки.КартинкаИТекст;

КонецПроцедуры

&НаКлиенте
Процедура ОбработчикКомандыПроверки(Команда)
    Сообщить("Запущена процедура проверки данных!");
    // Ваш полезный код здесь
КонецПроцедуры

Важные моменты и частые ошибки

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

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

← На главную