Добавляем свою кнопку в командную панель формы 1С

· 9 мин

Содержание

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

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

Сначала решите, что должна делать кнопка

Кнопка сама ничего не умеет. Она запускает команду, а команда вызывает либо процедуру в модуле формы, либо уже существующую команду конфигурации (например, открыть отчёт или обработку).

Перед работой ответьте на три вопроса:

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

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

Если конфигурация типовая и на поддержке, правка формы в Конфигураторе потребует снять объект с поддержки. Потом при каждом обновлении придётся сравнивать и объединять изменения. Для типовых конфигураций надёжнее расширение.

СпособКогда подходитРиски
КонфигураторСвоя нетиповая конфигурация, доработка без поддержкиОбъект уходит с поддержки, сложнее обновления
РасширениеТиповая конфигурация, нужна кнопка для всехНужен Конфигуратор и права разработчика
Настройка формыКнопка нужна лично вам, кода нетТолько из набора готовых команд
ПрограммноКнопка зависит от условийНужен код и аккуратность с обработчиками

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

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

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

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

Заголовок можно менять в любой момент. Имя лучше продумать сразу: на него ссылаются обработчик и код.

Шаг 2. Перетащите команду на форму

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

Появится кнопка с заголовком команды. Если нужна иконка, найдите в свойствах команды поле «Картинка» и выберите её из библиотеки стандартных картинок. Для быстрой проверки достаточно подписи.

Шаг 3. Напишите обработчик

Платформа уже создала заготовку в модуле формы. Допустим, кнопка должна показывать сообщение:

&НаКлиенте
Процедура ЗаполнитьПоШаблону(Команда)
	ПоказатьОповещениеПользователя("Готово", , "Шаблон применён");
КонецПроцедуры

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

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

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

💡 Хотите, чтобы кнопка выглядела как основная, с цветом? У кнопки есть свойство, отвечающее за выделение «кнопкой по умолчанию» на формах-диалогах. Для командных панелей списков оно обычно не нужно.

Расширение конфигурации: кнопка в типовой форме без снятия с поддержки

Расширения появились в платформе 8.3.6. Они позволяют изменить форму типового объекта, не трогая саму конфигурацию. Обновления поставщика при этом ставятся как обычно.

Порядок такой:

  1. В Конфигураторе откройте меню «Конфигурация → Расширения конфигурации » и создайте новое расширение (задайте имя и префикс, например МоёРасш_).
  2. Откройте расширение. В дереве найдите нужный объект и заимствуйте его: правый щелчок → «Добавить в расширение».
  3. Раскройте форму в заимствованном объекте и тоже заимствуйте её. Откроется редактор формы расширения.
  4. Добавьте команду и кнопку так же, как в предыдущем разделе. Имя команды лучше начать с префикса расширения, чтобы не пересечься с типовыми.
  5. Обработчик расширения пишется в модуле формы расширения. Типовые процедуры можно перехватывать директивами &После, &Перед, &Вместо.
  6. Нажмите «Обновить конфигурацию базы данных» (клавиша F7). Загрузка самого расширения и обновление структуры — отдельные шаги: без второго изменения не вступят в силу.

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

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

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

Программировать не придётся. Подходит, если нужно вывести на панель уже существующую команду, которая по умолчанию лежит в меню «Ещё».

  1. Откройте нужный список или документ в режиме Предприятие.
  2. Нажмите «Ещё» в командной панели → «Изменить форму…». Если пункта нет, в разделе «Настройки» (иконка шестерёнки) ищите команды настройки внешнего вида.
  3. В открывшемся окне вы увидите дерево элементов формы. На вкладке с командами выберите нужную и добавьте её в командную панель (кнопка «Добавить» либо перетаскивание).
  4. Поменяйте порядок стрелками, при необходимости скройте лишнее снятием галочки у элемента.
  5. Нажмите «ОК».

Настройка сохраняется для вашего пользователя и не затрагивает остальных. Если запутались, в том же окне есть команда возврата стандартных настроек.

🔹 Отдельная возможность — настройка командного интерфейса раздела: «Главное меню → Настройки → Настройка панели разделов » и аналогичные пункты. Они меняют верхнее меню, а не командную панель формы.

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

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

Кнопка есть в форме, а пользователь её не видит. Проверьте, что именно скрывает её.

  • 🔸 Права роли. Если команда запускает объект, на который у пользователя нет права «Просмотр» (например, отчёт или обработку), кнопка не отобразится или будет недоступна. Откройте роль в Конфигураторе и проверьте права на этот объект.
  • 🔸 Свойство «Видимость». В палитре свойств кнопки и команды снимите ошибочно отключённую видимость.
  • 🔸 Функциональные опции. Если команда привязана к функциональной опции, отключение опции в программе убирает кнопку. Включается в разделе «Администрирование» соответствующей конфигурации.
  • 🔸 Пользовательская настройка формы. Кто-то мог скрыть кнопку через «Изменить форму». Верните стандартные настройки.

Чтобы кнопка была видна только определённой группе, можно:

  1. Создать отдельную роль и дать ей право на объект, который запускает команда.
  2. Либо управлять видимостью из кода с проверкой РольДоступна("ИмяРоли") при открытии формы.

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

Программное добавление кнопки из кода

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

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

	Если НЕ РольДоступна("Бухгалтер") Тогда
		Возврат;
	КонецЕсли;

	Команда = Команды.Добавить("ЗаполнитьПоШаблону");
	Команда.Заголовок = "Заполнить по шаблону";
	Команда.Действие = "Подключаемый_ЗаполнитьПоШаблону";

	Кнопка = Элементы.Добавить("КнопкаЗаполнитьПоШаблону", Тип("КнопкаФормы"), Элементы.ФормаКоманднаяПанель);
	Кнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
	Кнопка.ИмяКоманды = "ЗаполнитьПоШаблону";

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

&НаКлиенте
Процедура Подключаемый_ЗаполнитьПоШаблону(Команда)
	ПоказатьОповещениеПользователя("Готово", , "Шаблон применён");
КонецПроцедуры

Что важно в этом примере:

  • ✅ Команда создаётся до кнопки, а кнопка ссылается на неё по имени в ИмяКоманды.
  • ✅ Обработчик должен существовать в модуле формы как процедура с директивой &НаКлиенте. Принято давать таким процедурам префикс Подключаемый_.
  • ✅ Родителем указывается существующая группа. Имя группы смотрите в дереве элементов формы: у типовых форм командная панель называется по-разному, в зависимости от объекта.
  • ✅ Динамически созданные элементы не сохраняются между открытиями формы: код выполняется при каждом создании.

Нужна кнопка, которая запускает не вашу процедуру, а открывает форму? В обработчике используйте ОткрытьФорму("Справочник.Номенклатура.ФормаСписка") — имя формы подставьте своё.

Менять порядок кнопок в коде можно через Элементы.Переместить(Кнопка, Родитель, ПередЭлементом). Если сомневаетесь в параметрах, откройте синтаксис-помощник Конфигуратора и найдите метод в разделе «Элементы формы».

Если кнопка не появилась или не работает

Разберите по симптомам.

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

Ошибка «Процедура или функция не обнаружена». Имя обработчика в команде и в модуле не совпадает. Частая причина: переименовали процедуру, а свойство команды не поправили. Либо процедура объявлена без &НаКлиенте.

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

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

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

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

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

Можно ли вернуть старые панели инструментов, как в 1С 8.2?
Нет. В управляемом интерфейсе их заменила командная панель формы. Функции те же, внешний вид и принцип настройки другие.
Как поместить кнопку в меню «Ещё», а не на панель?
В Конфигураторе перенесите кнопку в группу «Ещё» командной панели или создайте группу с видом «Подменю». Через «Изменить форму» то же делается перетаскиванием.
Можно ли добавить кнопку в обычную (неуправляемую) форму?
В обычных формах панель инструментов настраивается отдельно, но такие формы остались только в старых конфигурациях. Для новых разработок используйте управляемые формы.
Что будет с кнопкой при обновлении конфигурации?
Кнопка в расширении сохранится: расширение живёт отдельно от типовой конфигурации. После крупного обновления откройте форму и проверьте, что кнопка на месте и обработчик работает. Если поставщик переименовал элемент, к которому вы привязались, поправьте родителя кнопки.
Как задать горячую клавишу для кнопки?
У команды есть свойство «Сочетание клавиш». Задайте комбинацию, и она будет запускать то же действие, что и нажатие кнопки.