К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как добавить кнопку на форму 1С через расширение

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

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

Процесс состоит из четырёх этапов: заимствование формы в расширение, добавление команды и элемента кнопки, написание обработчика на клиенте и (при необходимости) на сервере, проверка работы под целевым пользователем. Всё делается в конфигураторе, без внешних инструментов.

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

Когда расширение — правильный способ добавить кнопку

Расширение подходит, если конфигурация типовая и стоит на поддержке: прямое изменение формы снимет объект с поддержки и усложнит обновления. Расширение хранится отдельно, накладывается «поверх» конфигурации и не мешает штатному обновлению.

Есть и альтернативы. Если нужна разовая операция без интерфейса — достаточно внешней обработки. Если кнопка должна появиться у всех документов сразу — рассмотрите общую команду или механизм дополнительных отчетов и обработок (БСП), который умеет выводить кнопки на формах без программирования расширений.

Сравнение вариантов

Расширение конфигурации

Полный контроль над формой и кодом; подходит для точечной доработки конкретной формы. Требует навыков конфигурирования.

Дополнительные отчеты и обработки (БСП)

Кнопка добавляется настройкой, без изменения форм; подходит для печати, заполнения, создания связанных объектов. Доступно только в конфигурациях на БСП.

Прямая доработка конфигурации

Только если конфигурация уже собственная или изменений очень много. Усложняет обновления типовых решений.

Подготовка: создаём расширение и заимствуем форму

Откройте конфигуратор под пользователем с правами администратора. В меню выберите «Конфигурация» → «Расширения конфигурации» и создайте новое расширение. Задайте понятное имя (например, «ДоработкиДокументов»), префикс для добавляемых объектов (например, «Расш1_») — префикс обязателен, чтобы имена не конфликтовали с будущими объектами поставщика.

Теперь найдите в дереве конфигурации нужный объект (например, документ «РеализацияТоваровУслуг»), раскройте его формы, щёлкните правой кнопкой по форме документа и выберите «Добавить в расширение». Форма появится в дереве расширения со значком заимствования.

Откройте заимствованную форму двойным щелчком. Вы увидите её дерево элементов в режиме расширения: изменять можно добавленные элементы и ряд свойств заимствованных, удалять штатные элементы нельзя — можно только управлять их видимостью.

Добавляем команду и кнопку на форму

В редакторе заимствованной формы перейдите на вкладку «Команды» → «Команды формы» и добавьте новую команду, например «Расш1_ПечатьАкта». Задайте заголовок — именно он будет отображаться на кнопке. При необходимости укажите картинку и подсказку.

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

Если кнопку нужно спрятать в подменю «Ещё», добавьте её в соответствующую группу командной панели. Для вывода рядом со штатными кнопками командной панели просто разместите её там — порядок можно менять перетаскиванием в дереве элементов.

Порядок действий
  1. 1
    Создайте расширение, задайте имя и префикс
  2. 2
    Заимствуйте нужную форму объекта в расширение
  3. 3
    Добавьте команду формы с заголовком
  4. 4
    Добавьте кнопку в нужную группу и привяжите к команде
  5. 5
    Создайте обработчик команды в модуле формы
  6. 6
    Обновите конфигурацию базы данных (F7) и перезапустите сеанс
  7. 7
    Проверьте кнопку под целевым пользователем

Пишем обработчик команды

Выделите команду и в палитре свойств нажмите «лупу» у события «Действие» — конфигуратор создаст шаблон обработчика в модуле формы расширения. Клиентский обработчик выглядит так:

&НаКлиенте

Процедура Расш1_ПечатьАкта(Команда)

Если Объект.Ссылка.Пустая() Тогда

ПоказатьПредупреждение(, "Сначала запишите документ");

Возврат;

КонецЕсли;

Расш1_ПечатьАктаНаСервере();

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

&НаСервере

Процедура Расш1_ПечатьАктаНаСервере()

// серверная логика: запрос данных, формирование табличного документа

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

Держите разделение: на клиенте — проверки, вопросы пользователю, открытие форм; на сервере — запросы к данным, проведение, формирование печатных форм. Вызов сервера из клиентского обработчика делайте через процедуру с директивой &НаСервере.

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

bsl
&После("ПриОткрытии")
Процедура Расш1_ПриОткрытии(Отказ)
    // код выполнится после штатного обработчика
КонецПроцедуры

Применение расширения и проверка результата

После сохранения расширения обновите конфигурацию базы данных (F7). Закройте и заново откройте сеанс 1С:Предприятия — расширения форм применяются при открытии формы, поэтому уже открытые окна кнопку не покажут.

Откройте форму документа: кнопка должна появиться в выбранной группе с заданным заголовком. Нажмите её и убедитесь, что обработчик выполняется без ошибок. Проверьте работу под пользователем с ограниченными правами: если обработчик обращается к объектам, на которые у пользователя нет прав, кнопка будет выдавать ошибку доступа.

Контрольные точки

Как проверить результат

Кнопка на форме
Норма

Отображается в нужной группе с заданным заголовком

Тревожный признак

Кнопки нет — проверьте, что расширение активно и сеанс перезапущен

Нажатие кнопки
Норма

Обработчик выполняется, результат соответствует ожиданию

Тревожный признак

Ошибка «Процедура не обнаружена» — имя обработчика не совпадает или нет директивы компиляции

Права пользователя
Норма

Работает под обычным пользователем

Тревожный признак

Нарушение прав доступа — ограничьте обращения к данным или добавьте привилегированный вызов

Типичные ошибки и ограничения

Самая частая причина «кнопка не появилась» — расширение не подключено или отключено в списке расширений, либо сеанс не перезапущен. Вторая — кнопка добавлена в форму списка, а проверяется форма документа (это разные формы, заимствовать нужно именно ту, которую открывает пользователь).

Ошибка «Процедура или функция с указанным именем не определена» означает, что обработчик создан не в модуле формы расширения, а в модуле основной конфигурации, или имя процедуры не совпадает с именем, указанным в событии команды.

Помните об ограничениях: в расширении нельзя изменять роль, критерии отбора и ряд свойств объектов; нельзя удалять штатные реквизиты формы; обработчики с директивой &Вместо полностью подменяют штатный код и ломаются при его изменении поставщиком — используйте их только при крайней необходимости.

Типичные ошибки
01
Заимствована не та форма (список вместо документа) — кнопка не видна там, где её ждут
02
Кнопка без привязки к команде — при нажатии ничего не происходит
03
Обработчик без директивы &НаКлиенте/&НаСервере — ошибка компиляции модуля
04
Нет префикса у добавленных объектов — конфликт имён при обновлении конфигурации
05
Не проверена работа под пользователем без админских прав — ошибки доступа в эксплуатации

Обновление конфигурации и сопровождение расширения

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

Храните исходник расширения в файле .cfe (выгрузка через список расширений) — это позволит быстро перенести доработку между базами и восстановить её при случайном удалении.

Итог

Что важно запомнить

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

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

Можно ли добавить кнопку на форму списка, а не документа?

Да. Заимствуйте в расширение форму списка нужного объекта и добавьте команду и кнопку по той же схеме. Учтите, что в обработчике формы списка нет объекта «Объект» — текущую строку получайте через Элементы.Список.ТекущиеДанные или ТекущаяСтрока.

Почему кнопка видна администратору, но не видна пользователю?

Чаще всего у пользователя нет права на расширение или расширение подключено с ограничением по ролям. Проверьте список расширений в режиме предприятия («Все функции» → «Расширения конфигурации») и убедитесь, что расширение активно и доступно. Также проверьте, не скрыта ли кнопка функциональными опциями.

Как вызвать штатный обработчик кнопки и добавить свой код?

Заимствуйте обработчик штатной команды с аннотацией &После или &Перед — тогда ваш код выполнится вместе со штатным. Аннотацию &Вместо используйте только если штатное поведение нужно полностью заменить.

Можно ли добавить кнопку программно, без изменения формы в конфигураторе?

Да, в обработчике ПриСозданииНаСервере заимствованной формы можно создать команду и кнопку кодом через Команды.Добавить() и Элементы.Добавить(). Это удобно, когда кнопка должна появляться по условию, но усложняет сопровождение.

Что будет с расширением при обновлении конфигурации?

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

Можно ли одной кнопкой открыть внешнюю обработку?

Да. В клиентском обработчике команды вызовите открытие внешней обработки через ФайловаяСистема или механизм дополнительных отчетов и обработок БСП. Если конфигурация на БСП, проще подключить обработку штатно — кнопка появится без расширения.