Как добавить кнопку на форму 1С с помощью внешней обработки без изменения конфигурации?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Механизм дополнительных отчетов и обработок (БСП)

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

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


Функция СведенияОВнешнейОбработке() Экспорт

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

    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд,
                    "Создать новый документ", // Представление кнопки
                    "СоздатьНовыйДок",        // Идентификатор
                    "ВызовКлиентскогоМетода", // Использование
                    Истина);                  // Показывать оповещение

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;

КонецФункции

В данном примере мы используем вид СозданиеСвязанныхОбъектов. Это приведет к тому, что кнопка автоматически появится в меню «Создать на основании» формы документа РеализацияТоваровУслуг.

Типы использования команд

Проанализируем параметр Использование в таблице команд. От него зависит поведение системы при нажатии на кнопку:

  1. ВызовКлиентскогоМетода: Используется, если необходимо открыть форму нового объекта или выполнить интерактивное действие. В этом случае в модуле формы обработки должна быть процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения).
  2. ВызовСерверногоМетода: Позволяет выполнить код на стороне сервера без открытия интерфейса. Это удобно для фоновой обработки данных или автоматического создания документов. Логика пишется в модуле объекта обработки в процедуре ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения).
  3. ЗаполнениеФормы: Применяется для изменения данных в уже открытой форме текущего объекта.

Реализация логики создания документа

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


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

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

Здесь используется стандартный метод Заполнить(), который вызывает обработчик ОбработкаЗаполнения в модуле целевого документа. Это наиболее правильный способ создания «на основании».

Особенности отладки внешних обработок

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

Во-первых, при работе в клиент-серверном варианте путь c:\МояОбработка.epf должен быть доступен серверу 1С, а не только вашему локальному компьютеру. Во-вторых, для упрощения отладки рекомендуется использовать следующий прием:

  1. В модуле объекта обработки создайте вспомогательную процедуру, которая имитирует заполнение структуры параметров БСП.
  2. Открывайте обработку через Файл -> Открыть в режиме «1С:Предприятие».
  3. В модуле формы обработки добавьте кнопку «Отладить», которая будет вызывать основную логику модуля объекта, передавая туда тестовую ссылку на документ.

Также важно помнить про Безопасный режим. Если при регистрации указано БезопасныйРежим = Истина, обработка будет ограничена в правах: она не сможет работать с файловой системой, внешними COM-объектами и некоторыми методами метаданных. Для полноценной работы с объектами конфигурации обычно устанавливают Ложь.

Использование расширений как альтернатива

Рассмотрим ситуацию, когда стандартного меню БСП недостаточно. Если вам нужно поместить кнопку в произвольное место формы (например, рядом с полем «Контрагент» или в конкретную командную панель), на помощь приходят Расширения конфигурации.

Алгоритм действий в расширении:

  1. Добавляем нужный документ в расширение.
  2. Заимствуем форму документа в расширение.
  3. Создаем новую команду в расширении.
  4. Перетаскиваем команду на форму в нужное место.
  5. В модуле формы расширения прописываем обработчик команды (процедуру &НаКлиенте).

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

Итоги

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

← На главную