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