Командная панель формы в 1С: добавляем кнопки и команды в конфигураторе
Содержание
Командная панель в 1С — это строка с кнопками над содержимым управляемой формы. Её создают в конфигураторе двумя способами: добавляют на форму элемент «Командная панель» и кладут в него кнопки, привязанные к командам формы. Либо заводят общую команду в метаданных, и платформа сама выводит её в нужные места интерфейса.
Всё ниже относится к платформе 8.3 с интерфейсом «Такси» и управляемым приложением. Правки вносятся в конфигурации в режиме Конфигуратора, то есть подходят для типовой конфигурации на поддержке только при включённой возможности изменения (а лучше — через расширение).
Как устроен командный интерфейс: что где живёт
Путаница начинается с того, что «командой» в 1С называют три разных вещи. Разберём их сразу.
| Что это | Где создаётся | Где видна |
|---|---|---|
| Команда формы | Редактор формы, вкладка «Команды» | Только в этой форме |
| Общая команда | Дерево конфигурации, ветка «Общие → Общие команды» | В командном интерфейсе подсистем, на панелях форм, в «Сервисе» — где укажет группа |
| Стандартная команда объекта | Создаётся платформой (например, «Создать», «Открыть список») | В командном интерфейсе подсистемы и на панелях навигации |
Кнопка в командной панели — это только оболочка. Действие делает команда. Поэтому порядок работы всегда один: сначала команда и её обработчик, потом кнопка, которая на неё ссылается.
- 🧩 Команда хранит заголовок, картинку, сочетание клавиш и имя процедуры-обработчика.
- 🔘 Кнопка хранит только ссылку на команду и внешний вид.
- 📦 Командная панель — контейнер, внутри которого лежат кнопки и группы.
Если нужна кнопка в панели одной формы, берите команду формы. Если одно действие требуется на нескольких формах разных объектов, делайте общую команду.
Создание командной панели на форме шаг за шагом
Откройте нужную форму в Конфигураторе: в дереве конфигурации найдите объект, ветку «Формы», двойной щелчок по форме. Откроется редактор с вкладками «Элементы», «Реквизиты», «Команды» и «Командный интерфейс».
1. Добавьте элемент «Командная панель»
- На вкладке «Элементы» выделите корень формы или группу, в которую хотите поместить панель.
- Нажмите кнопку добавления над деревом элементов и выберите «Командная панель».
- Задайте имя, например
КоманднаяПанельДопДействия, и заголовок.
У большинства форм основная панель уже есть: она создаётся с включённым автозаполнением. Это значит, что платформа сама кладёт в неё стандартные команды формы. Если вам нужна своя панель, у которой состав кнопок задаёте вы, отключите у неё свойство «Автозаполнение».
В основной панели с автозаполнением можно оставить автоматику и просто добавить в неё свои кнопки. Платформа не затрёт их при открытии формы.
2. Создайте команду формы
- Перейдите на вкладку «Команды» и добавьте новую команду.
- Заполните свойства: «Имя» (латиницей или кириллицей без пробелов), «Заголовок» (то, что увидит пользователь), «Подсказка» (текст при наведении).
- В свойстве «Действие» нажмите кнопку создания обработчика. Конфигуратор откроет модуль формы и создаст процедуру.
- При желании выберите «Картинку» и «Сочетание клавиш».
Заготовка обработчика выглядит так:
&НаКлиенте
Процедура ВыгрузитьВФайл(Команда)
// здесь код действия
КонецПроцедуры
Директива &НаКлиенте означает, что процедура выполняется на клиенте. Если для действия нужна база данных, из неё вызывают серверную процедуру с директивой &НаСервере или &НаСервереБезКонтекста.
3. Перетащите команду в панель
Самый быстрый способ: на вкладке «Команды» выделите команду и перетащите её мышью в нужную панель на вкладке «Элементы». Конфигуратор создаст кнопку и сам заполнит свойство «Имя команды».
Руками то же самое делается так: правый щелчок по панели, «Добавить» → «Кнопка», затем в свойствах кнопки выберите «Имя команды» из списка.
Что настроить у кнопки:
- 📝 Заголовок — по умолчанию берётся из команды, но его можно переопределить.
- 🎯 Вид — обычная кнопка, кнопка командной панели или гиперссылка. В панели нужна «Кнопка командной панели».
- ⭐ Кнопка по умолчанию — выделяется цветом и срабатывает по Enter; ставьте её только одной на форме.
- 🗂 Расположение — кнопки можно собрать в подменю: добавьте в панель элемент «Группа — подменю» и положите кнопки в него.
4. Проверьте результат
Запустите 1С:Предприятие из Конфигуратора (клавиша F5) и откройте форму. Если кнопки нет, откройте окно «Настройка формы» (шестерёнка в форме) и проверьте, не скрыта ли панель на уровне пользовательской настройки.
Общая команда: кнопка сразу в нескольких местах
Если действие нужно на всех документах или во всём разделе, создавайте общую команду. В дереве конфигурации откройте «Общие» → «Общие команды» и добавьте новую.
Важные свойства:
- Группа — определяет, где появится команда. Например, панель навигации форм, панель действий форм или командный интерфейс подсистемы.
- Тип параметра команды — к каким объектам команда применима. Укажите ссылочные типы нужных документов или справочников, и она появится только в их формах.
- Режим использования параметра — одиночный или множественный, то есть работает ли команда с одним элементом или с выделенными в списке.
- Модуль команды — отдельный модуль, в котором лежит процедура
ОбработкаКоманды.
Обработчик общей команды выглядит так:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокумента",
Новый Структура("Ключ", ПараметрКоманды),
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры
ПараметрКоманды — это объект (или массив объектов), из формы которого вызвана команда. Через ПараметрыВыполненияКоманды.Источник вы получаете форму-источник.
После создания команды включите её в командный интерфейс подсистемы: в карточке подсистемы нажмите «Командный интерфейс» и поставьте галочку «Видимость» напротив команды. Без этого общая команда в разделе не появится.
Общая команда не видна, пока её не добавили в состав хотя бы одной подсистемы либо не указали группу, привязанную к формам. Это самая частая причина «команда создана, а кнопки нет».
Видимость и права доступа к командам
Показывать кнопку всем подряд обычно не нужно. Управлять видимостью можно на трёх уровнях, и они складываются.
Роли. У команды (и общей, и в метаданных) есть право «Просмотр». В ролях на вкладке «Права» найдите «Общие команды» и снимите право у ролей, которым кнопка не нужна. Пользователь без права команду не увидит, даже если кнопка лежит на форме.
Функциональные опции. В свойствах команды есть список «Функциональные опции». Если опция выключена, команда пропадает из интерфейса целиком. Это правильный способ скрывать функции, которые включены не у всех клиентов конфигурации.
Код формы. Для динамических условий меняйте свойства элемента при открытии формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.ВыгрузитьВФайл.Видимость = Пользователи.РолиДоступны("ВыгрузкаДанных");
Элементы.ПровестиИЗакрыть.Доступность = Не Объект.ПометкаУдаления;
КонецПроцедуры
Здесь Видимость убирает кнопку с формы, а Доступность оставляет её серой и нажать нельзя. Обращение идёт по имени элемента, а не команды, поэтому имя кнопки на форме и имя команды стоит различать.
| Способ | Когда использовать | Ограничение |
|---|---|---|
| Право роли | Кнопка нужна не всем сотрудникам | Меняется через профили доступа, не через код |
| Функциональная опция | Функция включается настройкой базы | Опцию нужно предварительно создать |
Код Видимость | Условие зависит от данных документа | Работает, пока открыта форма |
Скрытие кнопки — не защита. Если процедура на сервере изменяет данные, проверяйте права внутри неё. Скрытая кнопка не мешает вызвать код другим путём.
Как добавить кнопку в панель программно
Иногда состав кнопок зависит от данных: например, для каждого склада своя команда. Тогда панель наполняют из кода при создании формы. Последовательность всегда одна: команда, затем кнопка, затем связь.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НоваяКоманда = Команды.Добавить("ПечатьСпецификации");
НоваяКоманда.Заголовок = "Печать спецификации";
НоваяКоманда.Действие = "Подключаемый_ПечатьСпецификации";
НоваяКнопка = Элементы.Добавить("КнопкаПечатьСпецификации",
Тип("КнопкаФормы"), Элементы.КоманднаяПанельДопДействия);
НоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
НоваяКнопка.ИмяКоманды = "ПечатьСпецификации";
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПечатьСпецификации(Команда)
// действие кнопки
КонецПроцедуры
Три момента, на которых спотыкаются чаще всего:
- В
Действиезаписывается строка с именем процедуры модуля формы, а не сама процедура. Если процедуры с таким именем нет, форма откроется, а при нажатии появится ошибка. - Обработчик должен быть клиентским и принимать один параметр — команду.
- Родитель кнопки — элемент формы, уже существующий к моменту вызова. Поэтому панель создают заранее в редакторе, а программно только добавляют кнопки.
Принято называть такие процедуры с префиксом Подключаемый_: это показывает, что на них нет явных ссылок из конфигурации, и другому разработчику не придёт в голову их удалить как неиспользуемые.
Что делать, если командная панель работает не так
Типовые сбои и проверки. Выполняйте их по порядку: сверху вниз от простого к сложному.
&НаКлиенте обязана существовать. Если процедуру переименовали вручную, свойство надо поправить.Доступность у элемента в коде формы и условия на вкладке «Элементы». Также убедитесь, что у команды не задан параметр, которого в этой форме нет: кнопка команды с обязательным параметром объекта неактивна, пока он не выбран.После любых изменений метаданных запустите проверку: «Конфигурация» → «Проверка конфигурации». Она находит битые ссылки на команды и несуществующие обработчики до того, как их найдёт пользователь.
Частые ошибки при создании панели
- 🧱 Бизнес-логика в обработчике клиента. Всё, что читает или пишет данные, выносите в серверную процедуру. Клиентский обработчик только вызывает её.
- 🔁 Две кнопки на одну команду без нужды. Если команда одна, достаточно одной кнопки; для вариантов внешнего вида заведите подменю.
- 🔤 Одинаковые имена команды и элемента. Платформа разрешает, но в коде вы будете путаться, к чему обращаетесь:
Команды.ИмяилиЭлементы.Имя. - 🧩 Правка типового модуля напрямую. При обновлении конфигурации такие правки придётся переносить вручную. Расширение конфигурации (платформа 8.3.6 и новее) избавляет от этой работы.
- 📏 Слишком много кнопок. Больше 5-6 в одну строку панель не вмещает: остальные уходят под значок «Ещё». Прячьте редкие действия в подменю.
Частые вопросы
Чем командная панель отличается от панели навигации формы?
Можно ли поменять командную панель в обычной (неуправляемой) форме?
Как добавить свою кнопку в типовую форму, не меняя конфигурацию?
Почему кнопка из программного кода пропадает при пересоздании формы?
Элементы.Добавить, живут, пока открыта форма. Следующее открытие запускает ПриСозданииНаСервере заново, и код должен выполниться снова. Сохранять такие элементы не нужно.