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