Добавляем свою кнопку в командную панель формы 1С
Содержание
В 1С 8.3 с интерфейсом «Такси» классических панелей инструментов нет. Их заменила командная панель формы, а кнопка в ней — это элемент формы, привязанный к команде. Добавить кнопку можно четырьмя способами: в Конфигураторе, через расширение, в режиме Предприятие без программирования и из кода.
Какой выбрать, зависит от задачи. Нужна кнопка только вам — хватит настройки формы пользователем. Нужна всем и навсегда — Конфигуратор или расширение. Кнопка должна появляться по условию — только код.
Сначала решите, что должна делать кнопка
Кнопка сама ничего не умеет. Она запускает команду, а команда вызывает либо процедуру в модуле формы, либо уже существующую команду конфигурации (например, открыть отчёт или обработку).
Перед работой ответьте на три вопроса:
- 📌 Куда нажимать. В какой форме нужна кнопка: списка, документа, элемента справочника.
- 📌 Что запускать. Своя процедура, открытие готового отчёта, печать, заполнение.
- 📌 Для кого. Для всех пользователей, для одной роли или лично для себя.
Проверьте, не добавлена ли такая команда уже. У многих форм в командной панели есть кнопка «Ещё» с длинным списком команд. Часть из них скрыта по умолчанию и включается за минуту без разработки (об этом в разделе про настройку формы пользователем).
Если конфигурация типовая и на поддержке, правка формы в Конфигураторе потребует снять объект с поддержки. Потом при каждом обновлении придётся сравнивать и объединять изменения. Для типовых конфигураций надёжнее расширение.
| Способ | Когда подходит | Риски |
|---|---|---|
| Конфигуратор | Своя нетиповая конфигурация, доработка без поддержки | Объект уходит с поддержки, сложнее обновления |
| Расширение | Типовая конфигурация, нужна кнопка для всех | Нужен Конфигуратор и права разработчика |
| Настройка формы | Кнопка нужна лично вам, кода нет | Только из набора готовых команд |
| Программно | Кнопка зависит от условий | Нужен код и аккуратность с обработчиками |
Как добавить кнопку в Конфигураторе
Это базовый путь для своей конфигурации. Откройте Конфигуратор, найдите нужный объект в дереве конфигурации, раскройте ветку «Формы» и откройте форму двойным щелчком.
Шаг 1. Создайте команду формы
- В редакторе формы перейдите на вкладку «Команды».
- Нажмите зелёный плюс, чтобы добавить команду.
- В палитре свойств задайте имя (латиницей или кириллицей без пробелов, например
ЗаполнитьПоШаблону) и заголовок — подпись для пользователя. - В поле «Действие» нажмите на лупу и выберите «Создать на клиенте». Платформа создаст пустую процедуру в модуле формы.
Заголовок можно менять в любой момент. Имя лучше продумать сразу: на него ссылаются обработчик и код.
Шаг 2. Перетащите команду на форму
- Перейдите на вкладку «Элементы».
- Найдите в дереве элементов группу «Командная панель» (у большинства форм она есть) или создайте новую: правый щелчок на форме → «Добавить» → «Командная панель».
- Перетащите команду с вкладки «Команды» на командную панель либо выберите элемент, нажмите «Добавить» и укажите команду.
Появится кнопка с заголовком команды. Если нужна иконка, найдите в свойствах команды поле «Картинка» и выберите её из библиотеки стандартных картинок. Для быстрой проверки достаточно подписи.
Шаг 3. Напишите обработчик
Платформа уже создала заготовку в модуле формы. Допустим, кнопка должна показывать сообщение:
&НаКлиенте
Процедура ЗаполнитьПоШаблону(Команда)
ПоказатьОповещениеПользователя("Готово", , "Шаблон применён");
КонецПроцедуры
Если действие требует обращения к базе, вызывайте серверную процедуру с директивой &НаСервере. Клиентский код не может читать и писать данные напрямую.
Шаг 4. Проверьте результат
Запустите 1С:Предприятие через меню Конфигуратора «Отладка → Начать отладку» (или клавишей F5). Откройте форму и нажмите кнопку. Если кнопки не видно, смотрите раздел про видимость ниже.
💡 Хотите, чтобы кнопка выглядела как основная, с цветом? У кнопки есть свойство, отвечающее за выделение «кнопкой по умолчанию» на формах-диалогах. Для командных панелей списков оно обычно не нужно.
Расширение конфигурации: кнопка в типовой форме без снятия с поддержки
Расширения появились в платформе 8.3.6. Они позволяют изменить форму типового объекта, не трогая саму конфигурацию. Обновления поставщика при этом ставятся как обычно.
Порядок такой:
- В Конфигураторе откройте меню «Конфигурация → Расширения конфигурации
» и создайте новое расширение (задайте имя и префикс, например
МоёРасш_). - Откройте расширение. В дереве найдите нужный объект и заимствуйте его: правый щелчок → «Добавить в расширение».
- Раскройте форму в заимствованном объекте и тоже заимствуйте её. Откроется редактор формы расширения.
- Добавьте команду и кнопку так же, как в предыдущем разделе. Имя команды лучше начать с префикса расширения, чтобы не пересечься с типовыми.
- Обработчик расширения пишется в модуле формы расширения. Типовые процедуры можно перехватывать директивами
&После,&Перед,&Вместо. - Нажмите «Обновить конфигурацию
базы данных» (клавиша
F7). Загрузка самого расширения и обновление структуры — отдельные шаги: без второго изменения не вступят в силу.
Расширение подключается к конкретной базе. Обновление структуры базы лучше делать, когда пользователи вышли из программы: их сеансы оборвутся. Перед загрузкой сохраните копию базы.
Расширение хорошо тем, что его можно выгрузить в файл .cfe и поставить в другую базу: разработчику достаточно один раз сделать кнопку, остальные получают готовый файл.
Личная настройка: добавляем кнопку в режиме Предприятие
Программировать не придётся. Подходит, если нужно вывести на панель уже существующую команду, которая по умолчанию лежит в меню «Ещё».
- Откройте нужный список или документ в режиме Предприятие.
- Нажмите «Ещё» в командной панели → «Изменить форму…». Если пункта нет, в разделе «Настройки» (иконка шестерёнки) ищите команды настройки внешнего вида.
- В открывшемся окне вы увидите дерево элементов формы. На вкладке с командами выберите нужную и добавьте её в командную панель (кнопка «Добавить» либо перетаскивание).
- Поменяйте порядок стрелками, при необходимости скройте лишнее снятием галочки у элемента.
- Нажмите «ОК».
Настройка сохраняется для вашего пользователя и не затрагивает остальных. Если запутались, в том же окне есть команда возврата стандартных настроек.
🔹 Отдельная возможность — настройка командного интерфейса раздела: «Главное меню → Настройки → Настройка панели разделов » и аналогичные пункты. Они меняют верхнее меню, а не командную панель формы.
Ограничение этого способа: добавить можно только те команды, которые разработчик заложил в форму. Свою процедуру так не подключить, для этого нужны Конфигуратор или расширение.
Видимость кнопки и права доступа
Кнопка есть в форме, а пользователь её не видит. Проверьте, что именно скрывает её.
- 🔸 Права роли. Если команда запускает объект, на который у пользователя нет права «Просмотр» (например, отчёт или обработку), кнопка не отобразится или будет недоступна. Откройте роль в Конфигураторе и проверьте права на этот объект.
- 🔸 Свойство «Видимость». В палитре свойств кнопки и команды снимите ошибочно отключённую видимость.
- 🔸 Функциональные опции. Если команда привязана к функциональной опции, отключение опции в программе убирает кнопку. Включается в разделе «Администрирование» соответствующей конфигурации.
- 🔸 Пользовательская настройка формы. Кто-то мог скрыть кнопку через «Изменить форму». Верните стандартные настройки.
Чтобы кнопка была видна только определённой группе, можно:
- Создать отдельную роль и дать ей право на объект, который запускает команда.
- Либо управлять видимостью из кода с проверкой
РольДоступна("ИмяРоли")при открытии формы.
Скрытая кнопка — не защита. Если в команде вызывается серверная процедура, проверяйте права и на сервере. Иначе пользователь обойдёт скрытие другим путём.
Программное добавление кнопки из кода
Иногда кнопка нужна не всегда: например, только для документов определённого вида. Тогда её создают динамически в процедуре ПриСозданииНаСервере формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если НЕ РольДоступна("Бухгалтер") Тогда
Возврат;
КонецЕсли;
Команда = Команды.Добавить("ЗаполнитьПоШаблону");
Команда.Заголовок = "Заполнить по шаблону";
Команда.Действие = "Подключаемый_ЗаполнитьПоШаблону";
Кнопка = Элементы.Добавить("КнопкаЗаполнитьПоШаблону", Тип("КнопкаФормы"), Элементы.ФормаКоманднаяПанель);
Кнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
Кнопка.ИмяКоманды = "ЗаполнитьПоШаблону";
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЗаполнитьПоШаблону(Команда)
ПоказатьОповещениеПользователя("Готово", , "Шаблон применён");
КонецПроцедуры
Что важно в этом примере:
- ✅ Команда создаётся до кнопки, а кнопка ссылается на неё по имени в
ИмяКоманды. - ✅ Обработчик должен существовать в модуле формы как процедура с директивой
&НаКлиенте. Принято давать таким процедурам префиксПодключаемый_. - ✅ Родителем указывается существующая группа. Имя группы смотрите в дереве элементов формы: у типовых форм командная панель называется по-разному, в зависимости от объекта.
- ✅ Динамически созданные элементы не сохраняются между открытиями формы: код выполняется при каждом создании.
Нужна кнопка, которая запускает не вашу процедуру, а открывает форму? В обработчике используйте ОткрытьФорму("Справочник.Номенклатура.ФормаСписка") — имя формы подставьте своё.
Менять порядок кнопок в коде можно через Элементы.Переместить(Кнопка, Родитель, ПередЭлементом). Если сомневаетесь в параметрах, откройте синтаксис-помощник Конфигуратора и найдите метод в разделе «Элементы формы».
Если кнопка не появилась или не работает
Разберите по симптомам.
Кнопка есть, нажатие ничего не делает. Откройте свойства команды и проверьте поле «Действие»: оно должно содержать имя процедуры. Затем убедитесь, что процедура есть в модуле формы и у неё правильная директива. Пустая процедура тоже «ничего не делает» — поставьте в неё показ сообщения для проверки.
Ошибка «Процедура или функция не обнаружена». Имя обработчика в команде и в модуле не совпадает. Частая причина: переименовали процедуру, а свойство команды не поправили. Либо процедура объявлена без &НаКлиенте.
Кнопка пропала после обновления. Для правки в Конфигураторе типовой формы это ожидаемо: поставщик мог пересоздать форму, и ваши изменения не объединились. Для расширений такого нет, поэтому в типовой конфигурации лучше сразу делать расширение.
Кнопка есть у вас и нет у коллеги. Смотрите роли, личные настройки формы и функциональные опции из раздела выше.
Кнопка есть в Конфигураторе, но не в программе. Вы не применили изменения: запустите отладку заново или обновите конфигурацию базы данных. Для расширения проверьте, что оно подключено и не отключено в списке расширений.