В современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), таких как «Комплексная автоматизация 2» (КА 2.4), «ERP Управление предприятием» или «Управление торговлей 11», механизм подключения внешних обработок унифицирован. Однако у разработчиков часто возникают трудности с тем, чтобы команда появилась в нужном месте интерфейса (например, в подменю «Заполнить») и корректно отрабатывала без ошибок доступа к методам. Рассмотрим подробно, как правильно реализовать этот механизм на примере загрузки данных из Excel в документ Заказ на перемещение.
Для того чтобы система «увидела» вашу обработку и поняла, куда её прикрепить, в модуле объекта внешней обработки необходимо создать экспортную функцию СведенияОВнешнейОбработке(). Именно здесь мы описываем назначение обработки, её вид и команды, которые будут доступны пользователю.
Проанализируем ключевые моменты настройки. Во-первых, важно правильно выбрать вид обработки. Для заполнения табличных частей или реквизитов существующего документа следует использовать ВидОбработкиЗаполнениеОбъекта(). Во-вторых, необходимо указать конкретный документ в качестве назначения.
Рассмотрим пример кода для модуля объекта:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.2");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказНаПеремещение");
ПараметрыРегистрации.Наименование = "Загрузка данных из Excel в Заказ на перемещение";
ПараметрыРегистрации.Версия = "1.1";
ПараметрыРегистрации.БезопасныйРежим = Ложь; // Важно для работы с Excel через COM или файловую систему
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Загрузить из Excel...";
НоваяКоманда.Идентификатор = "ЗагрузкаИзЭксель";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
Обратите внимание на параметр Использование. Если вы планируете открывать диалог выбора файла, необходимо использовать ВызовКлиентскогоМетода. Если же обработка должна сразу выполнить действия на сервере без участия пользователя, выбирайте ВызовСерверногоМетода.
Частая проблема, с которой сталкиваются программисты (ошибка Метод объекта не обнаружен (ВыполнитьКоманду)), заключается в том, что обработчик команды расположен не в том модуле или имеет неверную сигнатуру. Выясним причину: механизм БСП ищет экспортную процедуру ВыполнитьКоманду в зависимости от типа вызова.
ВызовКлиентскогоМетода — процедура должна быть в модуле формы обработки.ВызовСерверногоМетода — процедура должна быть в модуле объекта.Разберем пример реализации в модуле основной формы обработки (для клиентского вызова):
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
Если ИдентификаторКоманды = "ЗагрузкаИзЭксель" Тогда
// ОбъектыНазначения - это массив ссылок на документы, из которых вызвана обработка
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ДокументСсылка", ОбъектыНазначения[0]);
// Здесь можно вызвать диалог выбора файла или открыть саму форму обработки
ОткрытьФорму("ВнешняяОбработка.ИмяВашейОбработки.Форма.ФормаЗагрузки", ПараметрыВыполнения);
КонецЕсли;
КонецПроцедуры
Важно помнить, что ОбъектыНазначения — это всегда Массив, даже если кнопка нажата в одном конкретном документе. Для получения ссылки на документ используйте обращение по индексу [0].
Поскольку наша задача — заполнение данных из внешнего файла Excel, мы неизбежно столкнемся с ограничениями безопасности. Внешние обработки по умолчанию запускаются в безопасном режиме, который блокирует работу с внешними компонентами (COM-объектами) и файловой системой сервера.
Рассмотрим два пути решения ситуации:
СведенияОВнешнейОбработке это регулируется свойством ПараметрыРегистрации.БезопасныйРежим = Ложь;.ПоместитьФайл(), и затем передать адрес хранилища на сервер для чтения данных (например, через библиотеку LibXL или чтение XLSX как ZIP-архива), что позволит избежать использования тяжелых COM-объектов.Проанализируем ситуацию с отображением команды. После добавления обработки в справочник «Дополнительные отчеты и обработки» и указания документа-назначения, команда должна автоматически появиться в меню «Заполнить» в шапке документа Заказ на перемещение.
Если вам требуется, чтобы команда появилась непосредственно над табличной частью (например, в меню «Заполнить» командной панели списка товаров), в некоторых версиях КА/БСП это требует дополнительной настройки в коде или использования механизма Изменить форму на стороне пользователя. Однако стандартный вид ЗаполнениеОбъекта в 90% случаев выводит кнопку именно в общее меню заполнения формы документа, что является ожидаемым поведением для пользователя.
Подведем итог последовательности действий для успешного подключения:
СведенияОВнешнейОбработке с видом ЗаполнениеОбъекта.ВыполнитьКоманду.Еще - Установить стандартные настройки в форме документа.Файл - Открыть, но помните, что механизм БСП (параметры ОбъектыНазначения) работает только при запуске через справочник дополнительных обработок.Используя этот структурный подход, вы сможете быстро и без ошибок подключать любые инструменты автоматизации заполнения документов в среде 1С:Предприятие 8.3.