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