Как добавить внешнюю обработку заполнения в меню «Заполнить» документа в 1С:Комплексная автоматизация 2

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

В современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), таких как «Комплексная автоматизация 2» (КА 2.4), «ERP Управление предприятием» или «Управление торговлей 11», механизм подключения внешних обработок унифицирован. Однако у разработчиков часто возникают трудности с тем, чтобы команда появилась в нужном месте интерфейса (например, в подменю «Заполнить») и корректно отрабатывала без ошибок доступа к методам. Рассмотрим подробно, как правильно реализовать этот механизм на примере загрузки данных из Excel в документ Заказ на перемещение.

Шаг 1. Регистрация обработки в системе (Модуль объекта)

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

Проанализируем ключевые моменты настройки. Во-первых, важно правильно выбрать вид обработки. Для заполнения табличных частей или реквизитов существующего документа следует использовать ВидОбработкиЗаполнениеОбъекта(). Во-вторых, необходимо указать конкретный документ в качестве назначения.

Рассмотрим пример кода для модуля объекта:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.2");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
    ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказНаПеремещение");
    ПараметрыРегистрации.Наименование = "Загрузка данных из Excel в Заказ на перемещение";
    ПараметрыРегистрации.Версия = "1.1";
    ПараметрыРегистрации.БезопасныйРежим = Ложь; // Важно для работы с Excel через COM или файловую систему
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Загрузить из Excel...";
    НоваяКоманда.Идентификатор = "ЗагрузкаИзЭксель";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

Обратите внимание на параметр Использование. Если вы планируете открывать диалог выбора файла, необходимо использовать ВызовКлиентскогоМетода. Если же обработка должна сразу выполнить действия на сервере без участия пользователя, выбирайте ВызовСерверногоМетода.

Шаг 2. Реализация обработчика команды и исправление ошибки «Метод объекта не обнаружен»

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

  1. Если выбран ВызовКлиентскогоМетода — процедура должна быть в модуле формы обработки.
  2. Если выбран ВызовСерверногоМетода — процедура должна быть в модуле объекта.

Разберем пример реализации в модуле основной формы обработки (для клиентского вызова):


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    
    Если ИдентификаторКоманды = "ЗагрузкаИзЭксель" Тогда
        // ОбъектыНазначения - это массив ссылок на документы, из которых вызвана обработка
        ПараметрыВыполнения = Новый Структура;
        ПараметрыВыполнения.Вставить("ДокументСсылка", ОбъектыНазначения[0]);
        
        // Здесь можно вызвать диалог выбора файла или открыть саму форму обработки
        ОткрытьФорму("ВнешняяОбработка.ИмяВашейОбработки.Форма.ФормаЗагрузки", ПараметрыВыполнения);
    КонецЕсли;
    
КонецПроцедуры

Важно помнить, что ОбъектыНазначения — это всегда Массив, даже если кнопка нажата в одном конкретном документе. Для получения ссылки на документ используйте обращение по индексу [0].

Шаг 3. Особенности работы с Excel и безопасным режимом

Поскольку наша задача — заполнение данных из внешнего файла Excel, мы неизбежно столкнемся с ограничениями безопасности. Внешние обработки по умолчанию запускаются в безопасном режиме, который блокирует работу с внешними компонентами (COM-объектами) и файловой системой сервера.

Рассмотрим два пути решения ситуации:

  1. Отключение безопасного режима: При регистрации обработки в справочнике «Дополнительные отчеты и обработки» в интерфейсе программы установите режим защиты в значение «Небезопасный режим». В коде функции СведенияОВнешнейОбработке это регулируется свойством ПараметрыРегистрации.БезопасныйРежим = Ложь;.
  2. Использование временного хранилища: Правильный с точки зрения архитектуры подход — выбрать файл на клиенте, поместить его во временное хранилище с помощью ПоместитьФайл(), и затем передать адрес хранилища на сервер для чтения данных (например, через библиотеку LibXL или чтение XLSX как ZIP-архива), что позволит избежать использования тяжелых COM-объектов.

Шаг 4. Размещение в интерфейсе (меню «Заполнить»)

Проанализируем ситуацию с отображением команды. После добавления обработки в справочник «Дополнительные отчеты и обработки» и указания документа-назначения, команда должна автоматически появиться в меню «Заполнить» в шапке документа Заказ на перемещение.

Если вам требуется, чтобы команда появилась непосредственно над табличной частью (например, в меню «Заполнить» командной панели списка товаров), в некоторых версиях КА/БСП это требует дополнительной настройки в коде или использования механизма Изменить форму на стороне пользователя. Однако стандартный вид ЗаполнениеОбъекта в 90% случаев выводит кнопку именно в общее меню заполнения формы документа, что является ожидаемым поведением для пользователя.

Итоги и рекомендации

Подведем итог последовательности действий для успешного подключения:

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

← На главную