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

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

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

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

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

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

Выбор подхода зависит от конфигурации. Если в системе встроена БСП (УТ 11, ERP, Бухгалтерия 3.0, ЗУП 3.1 и подобные), правильный путь — регистрация обработки через подсистему дополнительных отчетов и обработок. Если конфигурация самописная или механизм БСП отсутствует, кнопку добавляют программно в модуле формы.

Какой способ добавления кнопки выбрать

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

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

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

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

В конфигурации есть подсистема «Дополнительные отчеты и обработки»Регистрируйте обработку через этот механизм — кнопка появится в меню формы автоматически
Конфигурация самописная или БСП отсутствуетДобавляйте кнопку программно в модуле формы через Элементы.Добавить
Нужна кнопка в командной панели табличной частиИспользуйте программное добавление с указанием родительской группы командной панели

Создание внешней обработки с командой

Откройте конфигуратор и создайте новую внешнюю обработку через меню «Файл — Новый — Внешняя обработка». Задайте имя, например «ЗаполнениеПоШаблону». Если кнопка должна выполнять действие на клиенте без открытия отдельной формы, основную форму обработки можно не создавать — вся логика разместится в модуле объекта.

Для работы через БСП ключевой элемент — экспортная функция СведенияОВнешнейОбработке в модуле объекта. Она описывает вид обработки, версию, безопасный режим и таблицу команд. Каждая команда в этой таблице и станет кнопкой (пунктом меню) на форме целевого объекта.

bsl
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = Новый Структура;
	ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
	ПараметрыРегистрации.Вставить("Назначение", Новый Массив);
	ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
	ПараметрыРегистрации.Вставить("Наименование", "Заполнить по шаблону");
	ПараметрыРегистрации.Вставить("Версия", "1.0");
	ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
	ПараметрыРегистрации.Вставить("Информация", "Заполнение табличной части по шаблону");
	Команды = Новый ТаблицаЗначений;
	Команды.Колонки.Добавить("Представление");
	Команды.Колонки.Добавить("Идентификатор");
	Команды.Колонки.Добавить("Использование");
	Команды.Колонки.Добавить("ПоказыватьОповещение");
	Команды.Колонки.Добавить("Модификатор");
	Команда = Команды.Добавить();
	Команда.Представление = "Заполнить по шаблону";
	Команда.Идентификатор = "ЗаполнитьПоШаблону";
	Команда.Использование = "ВызовСерверногоМетода";
	Команда.ПоказыватьОповещение = Истина;
	ПараметрыРегистрации.Вставить("Команды", Команды);
	Возврат ПараметрыРегистрации;
КонецФункции

Обратите внимание на поле «Использование». Значение «ВызовСерверногоМетода» означает, что при нажатии кнопки будет вызвана процедура ВыполнитьКоманду в модуле объекта обработки на сервере. Значение «ВызовКлиентскогоМетода» перенаправляет вызов в модуль формы обработки — это нужно, когда требуется интерактив: открыть диалог, задать вопрос пользователю.

Обработка команды: что происходит при нажатии кнопки

При нажатии кнопки подсистема БСП вызывает процедуру ВыполнитьКоманду, передавая идентификатор команды и массив объектов, для которых она запущена. Для вида «ЗаполнениеОбъекта» в параметрах приходит структура с ссылкой на объект и, при необходимости, идентификаторы дополнительных данных.

bsl
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения = Неопределено) Экспорт
	Если ИдентификаторКоманды = "ЗаполнитьПоШаблону" Тогда
		Для Каждого СсылкаНаОбъект Из ОбъектыНазначения Цикл
			ОбъектДанных = СсылкаНаОбъект.ПолучитьОбъект();
			// Логика заполнения табличной части
			ОбъектДанных.Записать();
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

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

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

Если механизм БСП недоступен, кнопку добавляют вручную в модуле формы. Логика стандартная: сначала создаётся команда формы, затем элемент «КнопкаФормы», привязанный к этой команде и размещённый в нужной группе. Код размещают в обработчике ПриСозданииНаСервере.

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	НоваяКоманда = Команды.Добавить("ЗаполнитьПоШаблону");
	НоваяКоманда.Действие = "Подключаемый_ЗаполнитьПоШаблону";
	НоваяКоманда.Заголовок = "Заполнить по шаблону";
	НоваяКнопка = Элементы.Добавить("КнопкаЗаполнитьПоШаблону", Тип("КнопкаФормы"), Элементы.КоманднаяПанель);
	НоваяКнопка.ИмяКоманды = "ЗаполнитьПоШаблону";
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЗаполнитьПоШаблону(Команда)
	// Клиентская логика или вызов серверной процедуры
КонецПроцедуры

Третий параметр метода Элементы.Добавить — родительская группа. Чтобы положить кнопку в командную панель табличной части, укажите, например, Элементы.Товары.КоманднаяПанель. Если родитель не указан, кнопка попадёт в корень формы и может оказаться невидимой или разрушить компоновку.

Имя процедуры-обработчика должно совпадать со свойством Действие команды, а сама процедура обязана существовать в модуле формы с директивой &НаКлиенте (или &НаСервере, если действие не требует контекста клиента и форма это допускает). Несовпадение имени — самая частая причина ошибки «Процедура не обнаружена» при нажатии.

Подключение обработки в конфигурации

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

Порядок подключения
  1. 1
    Создайте внешнюю обработку с функцией СведенияОВнешнейОбработке и таблицей команд
  2. 2
    Сохраните файл с расширением .epf
  3. 3
    В режиме предприятия откройте «Дополнительные отчеты и обработки» и загрузите файл
  4. 4
    Проверьте размещение обработки в нужных объектах и права доступа
  5. 5
    Откройте форму целевого документа и найдите кнопку в меню «Дополнительные обработки»
  6. 6
    Нажмите кнопку и убедитесь, что команда выполняется без ошибок

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

Проверка результата и типичные проблемы

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

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

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

Кнопка видна на форме
Норма

Кнопка присутствует в меню «Дополнительные обработки» или на командной панели

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

Кнопки нет — проверьте размещение, права и функциональную опцию

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

Команда выполняется, объект изменяется или открывается ожидаемый диалог

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

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

Сохранение объекта после выполнения
Норма

Документ записывается без конфликта версий

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

Конфликт версий — объект менялся параллельно в форме и в обработке

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

Ограничения и меры безопасности

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

Учитывайте и технические ограничения. В безопасном режиме (параметр БезопасныйРежим = Истина) обработке запрещены операции с файловой системой сервера, COM-объекты и внешние компоненты. Если логике нужны такие возможности, безопасный режим придётся отключить — а это повышает требования к доверию к коду. В модели сервиса (SaaS) небезопасные обработки обычно запрещены полностью.

Итог

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

В конфигурациях с БСП кнопку добавляют через регистрацию внешней обработки с функцией СведенияОВнешнейОбработке и таблицей команд. Без БСП кнопку создают программно: Команды.Добавить плюс Элементы.Добавить с указанием родительской группы. Проверяйте результат под правами реального пользователя и тестируйте обработку на копии базы.

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

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

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

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

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

Как разместить кнопку не в меню, а прямо на командной панели формы?

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

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

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

Кнопка есть, но при нажатии возникает ошибка «Процедура или функция не обнаружена». Что проверить?

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

Работает ли внешняя обработка в веб-клиенте?

Обработки, зарегистрированные через БСП и работающие серверными методами, как правило, выполняются в веб-клиенте. Клиентские методы с интерактивными диалогами и работа с файловой системой могут быть недоступны или потребовать расширения работы с файлами в браузере.