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