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

· 9 мин

Содержание

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

Всё ниже относится к платформе 8.3 с интерфейсом «Такси» и управляемым приложением. Правки вносятся в конфигурации в режиме Конфигуратора, то есть подходят для типовой конфигурации на поддержке только при включённой возможности изменения (а лучше — через расширение).

Как устроен командный интерфейс: что где живёт

Путаница начинается с того, что «командой» в 1С называют три разных вещи. Разберём их сразу.

Что этоГде создаётсяГде видна
Команда формыРедактор формы, вкладка «Команды»Только в этой форме
Общая командаДерево конфигурации, ветка «Общие → Общие команды»В командном интерфейсе подсистем, на панелях форм, в «Сервисе» — где укажет группа
Стандартная команда объектаСоздаётся платформой (например, «Создать», «Открыть список»)В командном интерфейсе подсистемы и на панелях навигации

Кнопка в командной панели — это только оболочка. Действие делает команда. Поэтому порядок работы всегда один: сначала команда и её обработчик, потом кнопка, которая на неё ссылается.

  • 🧩 Команда хранит заголовок, картинку, сочетание клавиш и имя процедуры-обработчика.
  • 🔘 Кнопка хранит только ссылку на команду и внешний вид.
  • 📦 Командная панель — контейнер, внутри которого лежат кнопки и группы.

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

Создание командной панели на форме шаг за шагом

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

1. Добавьте элемент «Командная панель»

  1. На вкладке «Элементы» выделите корень формы или группу, в которую хотите поместить панель.
  2. Нажмите кнопку добавления над деревом элементов и выберите «Командная панель».
  3. Задайте имя, например КоманднаяПанельДопДействия, и заголовок.

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

В основной панели с автозаполнением можно оставить автоматику и просто добавить в неё свои кнопки. Платформа не затрёт их при открытии формы.

2. Создайте команду формы

  1. Перейдите на вкладку «Команды» и добавьте новую команду.
  2. Заполните свойства: «Имя» (латиницей или кириллицей без пробелов), «Заголовок» (то, что увидит пользователь), «Подсказка» (текст при наведении).
  3. В свойстве «Действие» нажмите кнопку создания обработчика. Конфигуратор откроет модуль формы и создаст процедуру.
  4. При желании выберите «Картинку» и «Сочетание клавиш».

Заготовка обработчика выглядит так:

&НаКлиенте
Процедура ВыгрузитьВФайл(Команда)
	// здесь код действия
КонецПроцедуры

Директива &НаКлиенте означает, что процедура выполняется на клиенте. Если для действия нужна база данных, из неё вызывают серверную процедуру с директивой &НаСервере или &НаСервереБезКонтекста.

3. Перетащите команду в панель

Самый быстрый способ: на вкладке «Команды» выделите команду и перетащите её мышью в нужную панель на вкладке «Элементы». Конфигуратор создаст кнопку и сам заполнит свойство «Имя команды».

Руками то же самое делается так: правый щелчок по панели, «Добавить» → «Кнопка», затем в свойствах кнопки выберите «Имя команды» из списка.

Что настроить у кнопки:

  • 📝 Заголовок — по умолчанию берётся из команды, но его можно переопределить.
  • 🎯 Вид — обычная кнопка, кнопка командной панели или гиперссылка. В панели нужна «Кнопка командной панели».
  • ⭐ Кнопка по умолчанию — выделяется цветом и срабатывает по Enter; ставьте её только одной на форме.
  • 🗂 Расположение — кнопки можно собрать в подменю: добавьте в панель элемент «Группа — подменю» и положите кнопки в него.

4. Проверьте результат

Запустите 1С:Предприятие из Конфигуратора (клавиша F5) и откройте форму. Если кнопки нет, откройте окно «Настройка формы» (шестерёнка в форме) и проверьте, не скрыта ли панель на уровне пользовательской настройки.

Общая команда: кнопка сразу в нескольких местах

Если действие нужно на всех документах или во всём разделе, создавайте общую команду. В дереве конфигурации откройте «Общие» → «Общие команды» и добавьте новую.

Важные свойства:

  • Группа — определяет, где появится команда. Например, панель навигации форм, панель действий форм или командный интерфейс подсистемы.
  • Тип параметра команды — к каким объектам команда применима. Укажите ссылочные типы нужных документов или справочников, и она появится только в их формах.
  • Режим использования параметра — одиночный или множественный, то есть работает ли команда с одним элементом или с выделенными в списке.
  • Модуль команды — отдельный модуль, в котором лежит процедура ОбработкаКоманды.

Обработчик общей команды выглядит так:

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

ПараметрКоманды — это объект (или массив объектов), из формы которого вызвана команда. Через ПараметрыВыполненияКоманды.Источник вы получаете форму-источник.

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

Общая команда не видна, пока её не добавили в состав хотя бы одной подсистемы либо не указали группу, привязанную к формам. Это самая частая причина «команда создана, а кнопки нет».

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

Показывать кнопку всем подряд обычно не нужно. Управлять видимостью можно на трёх уровнях, и они складываются.

Роли. У команды (и общей, и в метаданных) есть право «Просмотр». В ролях на вкладке «Права» найдите «Общие команды» и снимите право у ролей, которым кнопка не нужна. Пользователь без права команду не увидит, даже если кнопка лежит на форме.

Функциональные опции. В свойствах команды есть список «Функциональные опции». Если опция выключена, команда пропадает из интерфейса целиком. Это правильный способ скрывать функции, которые включены не у всех клиентов конфигурации.

Код формы. Для динамических условий меняйте свойства элемента при открытии формы:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Элементы.ВыгрузитьВФайл.Видимость = Пользователи.РолиДоступны("ВыгрузкаДанных");
	Элементы.ПровестиИЗакрыть.Доступность = Не Объект.ПометкаУдаления;
КонецПроцедуры

Здесь Видимость убирает кнопку с формы, а Доступность оставляет её серой и нажать нельзя. Обращение идёт по имени элемента, а не команды, поэтому имя кнопки на форме и имя команды стоит различать.

СпособКогда использоватьОграничение
Право ролиКнопка нужна не всем сотрудникамМеняется через профили доступа, не через код
Функциональная опцияФункция включается настройкой базыОпцию нужно предварительно создать
Код ВидимостьУсловие зависит от данных документаРаботает, пока открыта форма

Скрытие кнопки — не защита. Если процедура на сервере изменяет данные, проверяйте права внутри неё. Скрытая кнопка не мешает вызвать код другим путём.

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

Иногда состав кнопок зависит от данных: например, для каждого склада своя команда. Тогда панель наполняют из кода при создании формы. Последовательность всегда одна: команда, затем кнопка, затем связь.

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

	НоваяКоманда = Команды.Добавить("ПечатьСпецификации");
	НоваяКоманда.Заголовок = "Печать спецификации";
	НоваяКоманда.Действие = "Подключаемый_ПечатьСпецификации";

	НоваяКнопка = Элементы.Добавить("КнопкаПечатьСпецификации",
		Тип("КнопкаФормы"), Элементы.КоманднаяПанельДопДействия);
	НоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
	НоваяКнопка.ИмяКоманды = "ПечатьСпецификации";

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

&НаКлиенте
Процедура Подключаемый_ПечатьСпецификации(Команда)
	// действие кнопки
КонецПроцедуры

Три момента, на которых спотыкаются чаще всего:

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

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

Что делать, если командная панель работает не так

Типовые сбои и проверки. Выполняйте их по порядку: сверху вниз от простого к сложному.

Диагностика: выберите симптом

После любых изменений метаданных запустите проверку: «Конфигурация» → «Проверка конфигурации». Она находит битые ссылки на команды и несуществующие обработчики до того, как их найдёт пользователь.

Частые ошибки при создании панели

  • 🧱 Бизнес-логика в обработчике клиента. Всё, что читает или пишет данные, выносите в серверную процедуру. Клиентский обработчик только вызывает её.
  • 🔁 Две кнопки на одну команду без нужды. Если команда одна, достаточно одной кнопки; для вариантов внешнего вида заведите подменю.
  • 🔤 Одинаковые имена команды и элемента. Платформа разрешает, но в коде вы будете путаться, к чему обращаетесь: Команды.Имя или Элементы.Имя.
  • 🧩 Правка типового модуля напрямую. При обновлении конфигурации такие правки придётся переносить вручную. Расширение конфигурации (платформа 8.3.6 и новее) избавляет от этой работы.
  • 📏 Слишком много кнопок. Больше 5-6 в одну строку панель не вмещает: остальные уходят под значок «Ещё». Прячьте редкие действия в подменю.
Перед передачей формы пользователям
Выполнено: 0 / 5

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

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