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