Как вызвать экспортную процедуру внешней обработки через COM-соединение в 1С?

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

При интеграции двух информационных баз 1С часто возникает необходимость удаленного вызова готовой бизнес-логики без изменения типовой конфигурации. Удобным решением является хранение алгоритмов во внешней обработке в справочнике дополнительных отчетов и обработок (БСП) с последующим обращением к ее экспортным методам через V83.COMConnector.

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

Вариант 1. Использование штатных функций БСП

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

  1. Устанавливаем COM-соединение с удаленной базой с помощью объекта V83.COMConnector.
  2. Находим ссылку на нужную внешнюю обработку в справочнике ДополнительныеОтчетыИОбработки (например, по реквизиту ИмяОбъекта или Наименование).
  3. Получаем экземпляр объекта обработки с помощью функции ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки().
  4. Вызываем требуемую экспортную процедуру или функцию модуля объекта.

Посмотрим на практический пример кода:


// Инициализируем COM-соединение
COMСоединитель = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "Srvr=""Server1C"";Ref=""TargetBase"";Usr=""IntegrationUser"";Pwd=""SecretPassword"";";

Попытка
    БазаCOM = COMСоединитель.Connect(ПараметрыПодключения);
Исключение
    ВызватьИсключение "Не удалось подключиться к информационной базе: " + ОписаниеОшибки();
КонецПопытки;

// Находим внешнюю обработку в справочнике БСП
СсылкаНаОбработку = БазаCOM.Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", "ИмпортИзТдАгентскаяСхема");

Если Не БазаCOM.ЗначениеЗаполнено(СсылкаНаОбработку) Тогда
    ВызватьИсключение "Внешняя обработка не найдена в удаленной базе!";
КонецЕсли;

// Получаем объект обработки через функцию БСП
ОбъектОбработки = БазаCOM.ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(СсылкаНаОбработку);

// Вызываем экспортную процедуру модуля объекта внешней обработки
ОбъектОбработки.ЭкспортнаяПроцМодуляВнешОбр("Тест");

Вариант 2. Подключение обработки штатными средствами платформы

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

Разберем по шагам последовательность действий:

  1. Получаем навигационную ссылку на реквизит с двоичными данными обработки (хранилище значений).
  2. Подключаем обработку во временный контекст с помощью метода ВнешниеОбработки.Подключить().
  3. Создаем экземпляр обработки через ВнешниеОбработки.Создать() по возвращенному системному имени.
  4. Обращаемся к методам объекта обработки.

Рассмотрим пример кода:


// Получаем навигационную ссылку на двоичные данные обработки
НавСсылка = БазаCOM.ПолучитьНавигационнуюСсылку(СсылкаНаОбработку, "ХранилищеОбработки");

// Регистрируем обработку в сеансе (безопасный режим отключен для примера)
ИмяПодключеннойОбработки = БазаCOM.ВнешниеОбработки.Подключить(НавСсылка, , Ложь);

// Создаем объект обработки и вызываем экспортный метод
ОбъектОбработки = БазаCOM.ВнешниеОбработки.Создать(ИмяПодключеннойОбработки);
Результат = ОбъектОбработки.ЭкспортнаяФункцияМодуля("Параметр1");

Ключевые особенности и требования к контексту

При использовании COM-соединения важно учитывать следующие системные ограничения платформы «1С:Предприятие»:

  1. Контекст «Внешнее соединение»: Код в сеансе COM выполняется в специализированном контексте. Общие модули, методы которых вызываются удаленно, обязательно должны иметь установленный флаг «Внешнее соединение» в свойствах модуля в дереве метаданных.
  2. Отсутствие клиентского окружения: В модуле объекта внешней обработки запрещено использование директивы &НаКлиенте, а также любых интерактивных методов (Предупреждение, Вопрос, ОткрытьФорму), иначе платформа сгенерирует исключение.
  3. Права доступа: Пользователь, под которым выполняется авторизация через COM, должен иметь назначенную роль с включенным правом «Внешнее соединение».
  4. Защита от опасных действий: При вызове ВнешниеОбработки.Подключить() система может потребовать интерактивного подтверждения. Чтобы избежать ошибки в фоновом режиме, у пользователя интеграции в свойствах учетной записи должен быть отключен флаг «Защита от опасных действий».
  5. Безопасный режим: Если обработка подключается в безопасном режиме, для нее будут недоступны привилегированные операции, работа с внешними компонентами и локальными файлами сервера.
← На главную