К статье
Практический материал

Разработка и Конфигурация · 11 мин

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

Как добавить кнопку в командную панель формы в 1С: создание команды, настройка кнопки в конфигураторе, программное добавление, обработчики событий и типичные ошибки.

Командная панель формы в 1С — это стандартная область в верхней части окна, где размещаются кнопки «Записать», «Провести», «Печать» и другие действия. Когда типовых кнопок не хватает, разработчик может добавить свою: например, кнопку для запуска обработки, быстрого заполнения табличной части или вызова внешнего отчёта. Механизм одинаков для управляемых форм в конфигурациях на платформе 1С:Предприятие 8.3.

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

Важно понимать связку элементов: кнопка на форме — это только «лицо». Реальное действие выполняет команда, а код команды располагается в модуле формы в обработчике с директивой &НаКлиенте или &НаСервере. Если создать кнопку без команды и обработчика, нажатие ни к чему не приведёт.

Где находится командная панель и как она устроена

Командная панель — это элемент формы типа «Группа» с видом «Командная панель». У каждой формы есть стандартная командная панель, которая создаётся автоматически и наполняется стандартными командами объекта: записать, провести, перечитать и другими. Кроме неё, командные панели есть у табличных частей и динамических списков — у них свои наборы кнопок.

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

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

Как добавить кнопку через конфигуратор: пошагово

Откройте конфигуратор, найдите нужный объект (документ, справочник, обработку) и откройте его основную форму двойным щелчком. Редактор формы разделён на несколько вкладок внизу: «Форма», «Модуль», «Команды» и другие. Работа ведётся на вкладке «Форма» и в панели команд.

Сначала создайте команду. В правой части редактора откройте вкладку «Команды», выберите группу «Команды формы» и нажмите «Добавить». Задайте имя команды, например «ЗаполнитьПоУмолчанию», и синоним — он будет виден пользователю на кнопке. Затем нажмите кнопку с лупой в поле «Действие», чтобы платформа автоматически создала заготовку обработчика в модуле формы.

Теперь выведите кнопку на форму. Перетащите созданную команду мышью из панели команд в дерево элементов формы, поместив её внутрь элемента «КоманднаяПанель». Платформа создаст кнопку с типом «Кнопка формы», у которой свойство «ИмяКоманды» уже заполнено. Сохраните конфигурацию и обновите базу (F7), затем откройте форму в режиме предприятия и проверьте результат.

Порядок действий в конфигураторе
  1. 1
    Откройте форму объекта в конфигураторе
  2. 2
    На вкладке «Команды» добавьте новую команду формы и задайте имя и синоним
  3. 3
    Через свойство «Действие» создайте обработчик команды в модуле формы
  4. 4
    Перетащите команду в дерево элементов внутрь командной панели
  5. 5
    Напишите код обработчика, сохраните конфигурацию и обновите базу
  6. 6
    Откройте форму в режиме 1С:Предприятие и проверьте работу кнопки

Как написать обработчик команды

Обработчик команды — это процедура в модуле формы, имя которой совпадает с именем команды. Если действие выполняется на клиенте (открыть диалог, показать вопрос, запустить обработку), используется директива &НаКлиенте. Если нужно обратиться к данным базы — записать объект, выполнить запрос — потребуется серверный вызов.

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

bsl
&НаКлиенте
Процедура ЗаполнитьПоУмолчанию(Команда)
	ЗаполнитьПоУмолчаниюНаСервере();
	ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПоУмолчаниюНаСервере()
	Объект.Комментарий = "Заполнено автоматически";
КонецПроцедуры

Если кнопка меняет данные объекта, не забудьте про модифицированность формы: после серверного изменения реквизитов пользователь должен видеть актуальные значения. Для этого либо меняйте данные через реквизит формы «Объект», либо вызывайте обновление отображения. Иначе на экране останутся старые значения, хотя в данных они уже изменились.

Программное добавление кнопки в командную панель

Программный способ применяют, когда кнопка должна появляться динамически: по роли пользователя, по виду операции, при расширении формы без изменения типовой конфигурации. Команда и кнопка создаются в обработчике ПриСозданииНаСервере через коллекции ЭтаФорма.Команды и ЭтаФорма.Элементы.

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

Обратите внимание на два момента. Во-первых, обработчик команды при программном создании должен существовать в модуле формы заранее — платформа не создаст его автоматически. Во-вторых, родителем кнопки указывается именно командная панель формы: ЭтаФорма.КоманднаяПанель. Если указать другого родителя или не указать его вовсе, кнопка попадёт не туда или вызовет ошибку.

Как настроить внешний вид и положение кнопки

После добавления кнопки полезно настроить её представление. Свойство «Заголовок» определяет текст на кнопке, «Картинка» — значок из библиотеки картинок конфигурации, «Отображение» — показывать ли картинку, текст или оба варианта. Для важных действий принято выводить и картинку, и текст, для второстепенных достаточно текста.

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

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

Способы добавления кнопки

Интерактивно в конфигураторе

Подходит для постоянных кнопок. Наглядно, платформа сама создаёт обработчик. Ограничение: требует изменения конфигурации и её обновления.

Программно в модуле формы

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

Через расширение конфигурации

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

Типичные ошибки и их устранение

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

Вторая типичная ошибка — нажатие кнопки ничего не делает. Обычно это значит, что у кнопки не заполнено свойство «ИмяКоманды», команда не имеет действия, либо обработчик в модуле формы назван иначе, чем указано в свойстве «Действие». Платформа в таких случаях может молча игнорировать нажатие.

Типичные ошибки
01
Кнопка создана, но свойство ИмяКоманды не заполнено — нажатие не вызывает обработчик
02
Обработчик написан с директивой &НаСервере, но пытается открыть диалог или показать вопрос — на сервере это невозможно
03
Кнопка добавлена в командную панель табличной части вместо командной панели формы — её не видно в шапке
04
В программном коде обработчик команды не создан в модуле — возникает ошибка при открытии формы
05
Забыли обновить конфигурацию базы данных (F7) — в режиме предприятия форма открывается старой версии

Проверка результата и добавление кнопки через расширение

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

Контрольные точки

Как проверить результат

Видимость кнопки
Норма

Кнопка отображается в командной панели или в подменю «Ещё»

Тревожный признак

Кнопки нет ни в панели, ни в подменю — проверяйте свойство Видимость и родителя

Работа обработчика
Норма

Нажатие выполняет действие, данные на форме обновляются

Тревожный признак

Нажатие игнорируется или возникает ошибка — проверяйте ИмяКоманды и имя процедуры

Открытие формы
Норма

Форма открывается без сообщений об ошибках

Тревожный признак

Ошибка при создании формы — чаще всего проблема в программном добавлении кнопки

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

Итог

Что важно запомнить

Кнопка в командной панели — это связка из трёх частей: элемента «Кнопка формы», команды формы и обработчика в модуле. Простые кнопки добавляйте перетаскиванием команды в конфигураторе, динамические — программно в ПриСозданииНаСервере, доработку типовых форм выполняйте через расширение.

Частые вопросы

Кнопка добавилась, но попала в подменю «Ещё». Как вывести её в панель?

Установите у кнопки свойство «ПоложениеВКоманднойПанели» в значение «В командной панели». Если свойство оставить в режиме «Авто», платформа сама решает, показывать кнопку или прятать её в подменю, исходя из важности действия.

Можно ли добавить кнопку в командную панель табличной части?

Да. У табличной части есть собственная командная панель — в дереве элементов она находится внутри элемента таблицы. Перетащите команду именно туда, и кнопка появится над таблицей. В обработчике доступны выбранные строки через Элементы.ИмяТаблицы.ТекущиеДанные.

Почему при нажатии кнопки ничего не происходит и нет ошибки?

Проверьте три вещи: заполнено ли у кнопки свойство «ИмяКоманды», указано ли у команды действие, совпадает ли имя процедуры в модуле формы с указанным в свойстве «Действие». Несовпадение имён платформа не всегда сигнализирует явной ошибкой.

Как скрыть кнопку для части пользователей?

В обработчике ПриСозданииНаСервере проверьте роль или функциональную опцию пользователя и установите Элементы.ИмяКнопки.Видимость = Ложь. Учтите, что скрытие кнопки не заменяет контроль прав: серверный обработчик должен сам проверять допустимость операции.

Можно ли добавить кнопку без изменения типовой конфигурации?

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

Чем кнопка командной панели отличается от обычной кнопки на форме?

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