Использование
Далее привожу в сравнении идентичные синтаксически конструкции для COMСоединение ЭмуляторCOMСоединения.
Но прежде - "установка соединения":
// COMСоединение
v8 = Новый COMObject("V83.COMConnector");
ДругаяБаза = v8.Connect(СтрокаСоединения);
|
// ЭмуляторCOMСоединения
ЭтаБаза = ВнешниеОбработки.Создать(Путь_к_обработке\ЭмуляторCOMСоединения.epf);
|
Либо объект обработки создается иным способом (из справочника внешних обработок, включением обработки в конфигурацию).
Работа с менеджерами объектов:
// COMСоединение
Ссылка =
ДругаяБаза.Справочники.Номенклатура.НайтиПоНаименованию(Товар);
ВнОбработка =
ДругаяБаза.ВнешниеОбработки.Создать(Путь_к_некоторой_обработке);
|
// ЭмуляторCOMСоединения
Ссылка =
ЭтаБаза.Справочники.Номенклатура.НайтиПоНаименованию(Товар);
ВнОбработка =
ЭтаБаза.ВнешниеОбработки.Создать(Путь_к_некоторой_обработке);
|
Создание новых объектов встроенных типов (Запрос и т.п.):
// COMСоединение
Запрос = ДругаяБаза.NewObject("Запрос");
Запрос.Текст = "
|Выбрать
| Курс КАК Курс
|Из
| РегистрСведений.КурсыВалют.СрезПоследних(&НаДату,
| Валюта = &Валюта)
|";
Запрос.УстановитьПараметр("НаДату", НаДату);
Запрос.УстановитьПараметр("Валюта",
ДругаяБаза.Справочники.Валюты.НайтиПоНаименованию(Валюта));
Выборка = Запрос.Выполнить().Выбрать();
|
// ЭмуляторCOMСоединения
Запрос = ЭтаБаза.NewObject("Запрос");
Запрос.Текст = "
|Выбрать
| Курс КАК Курс
|Из
| РегистрСведений.КурсыВалют.СрезПоследних(&НаДату,
| Валюта = &Валюта)
|";
Запрос.УстановитьПараметр("НаДату", НаДату);
Запрос.УстановитьПараметр("Валюта",
ЭтаБаза.Справочники.Валюты.НайтиПоНаименованию(Валюта));
Выборка = Запрос.Выполнить().Выбрать();
|
Как можно увидеть, конструкции полностью идентичны.
Ограничения
- Невозможно вызывать методы глобального контекста/глобальных модулей, такие как XMLСтрока
- Можно вызывать методы неглобальных общих модулей (в 8.3), только если изменить слегка саму обработку (см. секреты)
Секреты
- Для получения экспортных переменных обработки, имеющих те же названия, что и встроенные переменные глобального контекста, использованы реквизиты обработки с типом "Произвольный"
- "Переопределение" функции NewObject COM-объекта возможно лишь потому, что нет одноименного метода глобального контекста. Он называется Новый/New
- Обращение к методам неглобальных общих модулей возможно, если создать одноименный реквизит обработки и инициализировать его в модуле обарботки.
Заключение
Т.к. XMLСтрока - это, пожалуй, одна из немногих функций глобального контекста, которую приходится использовать при COM-соединении, то пришлось вынести ее в общий модуль с другим именем (XMLСтрока_). Код имеющегося инструмена, к сожалению, пришлось слегка изменить.
P.s. данный вопрос уже поднимался здесь: http://www.forum.mista.ru/topic.php?id=590517
Данный "эмулятор" является частичным решением