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

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

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

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

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

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

Ниже разобран полный цикл работ: от создания расширения до проверки результата, с типичными ошибками и ограничениями механизма. Материал ориентирован на конфигурации в режиме управляемого приложения (Управление торговлей, ERP, Бухгалтерия предприятия и аналогичные), где расширения форм поддерживаются в полном объёме.

Подготовка: когда расширение подходит, а когда нет

Расширение — правильный выбор, если нужно добавить кнопку на форму типового объекта и при этом сохранить конфигурацию на полной поддержке. Механизм доступен начиная с платформы 8.3.6, а заимствование и изменение форм стабильно работает на платформах 8.3.11 и новее. Если база работает на старой платформе, сначала проверьте версию технологической платформы в разделе «О программе».

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

Маршрут решения

Как выбрать действие

Нужно добавить кнопку на типовую форму без снятия конфигурации с поддержкиИспользуйте расширение с заимствованием формы
Форма создаётся полностью программно в коде модуляДобавляйте кнопку программно в обработчике ПриСозданииНаСервере заимствованной формы
Требуется изменить структуру данных или добавить реквизит объектаИспользуйте механизм дополнительных реквизитов либо заимствование объекта в расширение
База работает в режиме обычного приложенияРасширения форм не работают — потребуется доработка основной конфигурации

Создание расширения конфигурации

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

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

После создания расширение появится в дереве конфигурации как отдельная ветка. Все дальнейшие действия выполняются именно в этой ветке, а не в основной конфигурации.

Заимствование формы и добавление кнопки

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

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

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

Порядок действий
  1. 1
    Создайте расширение: Конфигурация → Расширения конфигурации → Создать, задайте имя и префикс
  2. 2
    Найдите нужную форму объекта в основной конфигурации и добавьте её в расширение через контекстное меню
  3. 3
    В заимствованной форме создайте собственную команду с префиксом расширения
  4. 4
    Создайте обработчик команды в модуле формы (клиентский и при необходимости серверный)
  5. 5
    Перетащите команду в дерево элементов формы — появится кнопка
  6. 6
    Обновите конфигурацию базы данных (F7) и подключите расширение в режиме предприятия
  7. 7
    Откройте форму и проверьте, что кнопка видна и обработчик срабатывает

Написание обработчика команды

Обработчик команды формы по умолчанию создаётся в клиентском контексте. Если логика требует обращения к данным базы — запросов, записи объектов, вызова серверных процедур — добавьте серверный вызов. Типовой шаблон выглядит так: клиентская процедура с директивой &НаКлиенте вызывает серверную процедуру с директивой &НаСервере, где выполняется основная работа.

Пример простого обработчика, который выводит предупреждение пользователю:

&НаКлиенте

Процедура Расш1_ЗаполнитьПоДанным(Команда)

Расш1_ЗаполнитьПоДаннымНаСервере();

ПоказатьПредупреждение(, "Заполнение выполнено");

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

&НаСервере

Процедура Расш1_ЗаполнитьПоДаннымНаСервере()

// Здесь код работы с данными объекта

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

Учитывайте, что в заимствованной форме доступны все данные и реквизиты типовой формы: можно обращаться к Объект, Элементы, ЭтаФорма так же, как в модуле основной конфигурации. Если нужно переопределить поведение типового обработчика, используйте аннотации &После, &Перед или &Вместо — но для собственной кнопки это обычно не требуется.

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

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

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

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

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

Видимость кнопки на форме
Норма

Кнопка отображается в заданном месте и доступна для нажатия

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

Кнопки нет — расширение неактивно, форма заимствована не та или изменена типовая структура

Работа обработчика
Норма

При нажатии выполняется задуманное действие без сообщений об ошибках

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

Ошибка выполнения или тишина — проверьте привязку команды к кнопке и код обработчика

Обновление конфигурации
Норма

После обновления типового релиза расширение подключается и кнопка работает

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

Расширение отключилось с ошибкой применимости — нужно обновить заимствованную форму

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

Кнопка доступна всем пользователям с нужной ролью

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

У части пользователей кнопки нет — проверьте ограничения доступа к расширению

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

Самая частая проблема — расширение перестаёт применяться после обновления конфигурации. Это происходит, когда в новом релизе изменилась заимствованная форма: платформа не может объединить версии. Решение — открыть расширение в конфигураторе, обновить заимствованную форму до актуальной версии и заново добавить свою кнопку. Поэтому чем меньше изменений внесено в заимствованную форму, тем проще сопровождение.

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

Типичные ошибки
01
Команда создана, но не перетащена в дерево элементов — кнопка физически отсутствует на форме
02
Отсутствует префикс у имени команды — конфликт имён при подключении второго расширения
03
Весь код написан в клиентском контексте — обращение к базе данных вызывает ошибку
04
Безопасный режим не отключён — обработчик не может обратиться к файлам или внешним сервисам
05
Заимствовано слишком много элементов формы — расширение ломается при каждом обновлении релиза
06
Расширение не добавлено в список активных в режиме предприятия — пользователи не видят изменений

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

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

Да. Заимствуйте форму списка соответствующего объекта и добавьте команду в её командную панель. В обработчике текущий выделенный документ доступен через Элементы.Список.ТекущиеДанные, что позволяет выполнять действия над выбранной строкой списка.

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

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

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

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

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

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

Можно ли через расширение изменить действие существующей типовой кнопки?

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

Работают ли расширения в файловой базе и на сервере 1С одинаково?

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

Итог

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

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