- 1 С использованием Native API
- 2 С использованием технологии COM
Итак, приступим, от простого к сложному:[spoiler]
Выдержка из ИТС
При работе компоненты на сервере, вызов ПодключитьВнешнююКомпоненту() необходимо выполнять каждый раз перед созданием экземпляра внешней компоненты, т. к. в общем случае неизвестно, на каком сервере будет исполняться вызов (это может быть Windows, Linux, 32-разрядная или 64-разрядная ОС). |
1. Допустим ВК у нас расположена в определенном каталоге на диске :
// подключаем компонент Попытка ПодключитьВнешнююКомпоненту("D:\MIKO_phone_IP.dll", "Comp", ТипВнешнейКомпоненты.Native); // Создаем объект компонента, обратите внимание на использование // конструкции «Новый ()» ОбъектКомпоненты = Новый("AddIn.Comp.MIKO_phone_IP"); Компонент.Host= "sip.host.com"; Компонент.Port = "5038"; Комопнент.LogIn(); Исключение Сообщить("Исключение при инициализации"); КонецПопытки; |
Возможно использование в "Толстом Клиенте (обычное приложение)";
Это самый простой пример работы с компонентой Native. Следует обратить внимание на то, что компонент этого типа не требует регистрацию в системе, что значительно упрощает администрирование.
2. Рассмотренный выше пример совсем не жизненный. Чаще всего компонент располагают в макете. Макет должен содержать zip архив c файлами компонента и файлом MANIFEST.xml
Пример файла манифеста:
<?xml version="1.0" encoding="UTF-8"?> <bundle xmlns="http://v8.1c.ru/8.2/addin/bundle"> <component os="Windows" path="MIKO_phone_IP.dll" type="native" arch="i386"/> <component os="Windows" path="1CEAdnWebFF.xpi" type="plugin" object="@vendor.ru/ClassService;1" arch="i386" client="Firefox" clientVersion="5.*"/> </bundle> |
- MIKO_phone_IP.dll (компонент native)
- MANIFEST.xml
- 1CEAdnWebFF.xpi (zip архив - расширение для Mozilla FF, содержит компонент native)
Пример работы для толстого клиента (обычное приложение)
ПутьКМакету = "Обработка.МИКО_ПанельТелефонии.Макет.AddInWindows32"; Если ПодключитьВнешнююКомпоненту(ПутьКМакету,"Component") Тогда Компонент = Новый ("AddIn.Component.MIKO_phone_IP"); КонецЕсли; |
3. При работе в тонком и web клиенте обязательно использования метода УстановитьВнешнююКомпоненту().
Цитата с ИТС:
В момент установки внешние компоненты устанавливаются в каталог %APPDATA%\1C\1Cv82\ExtCompT. Каталог установки внешних компонент не считается кешем и не очищается при вызове «1С:Предприятия» с ключом командной строки ClearCache. Использование метода УстановитьВнешнююКомпоненту() для тонкого клиента является обязательным. |
%APPDATA%\1C\1Cv82\ExtCompT - каталог установки компонентов для Толстого, Тонкого клиентов.
%APPDATA%\Roaming\Mozilla\Extensions - каталог (в моем случае) расширений для Mozilla FF/
При использовании метода УстановитьВнешнююКомпоненту(), в зависимости от используемого клиента, в соответствующий каталог будут распакованы расширения.
Пример процедуры установки внешнего компонента:
&НаКлиенте // Процедура должна вызываться лишь один раз Процедура УстановитьКомпонент(Команда) Попытка УстановитьВнешнююКомпоненту(АдресАрхиваКомпонента); Исключение Сообщить("Не удалось устанвить внешнюю компоненту."); КонецПопытки; КонецПроцедуры |
УстановитьВнешнююКомпоненту - метод должен вызываться лишь при первичной установке компонента и в случае, когда необходимо обновить установленную версию компонента.
В случае тонкого и толстого клиента:
Достаточно повторно выполнить операцию установки внешней компоненты с помощью метода УстановитьВнешнююКомпоненту().
В случае web клиента для обновления компонента:
- Необходимо удалить плагин через механизм работы с дополнениями веб-браузера (Mozilla FF)
- Воспользоваться методом УстановитьВнешнююКомпоненту
Для подключения ВК можно использовать следующую процедуру:
&НаКлиенте Процедура Инициализаровать(Команда) Попытка ПодключитьВнешнююКомпоненту("ОбщийМакет.MIKO_phone_IP","Comp" ,ТипВнешнейКомпоненты.Native); Компонент = Новый ("AddIn.Comp.MIKO_phone_IP"); Исключение Сообщить("Исключение при инициализации..."); КонецПопытки; КонецПроцедуры |
Если компонент не был установлен, то будет вызвано исключение.
2. бывают случаи, когда компонент необходимо установить из временного хранилища (файл получен со стороннего источника, внешняя обработка), в этом случае необходимо первым параметров в методы ПодключитьВнешнююКомпоненту и УстановитьВнешнююКомпоненту адрес архива во временном хранилище. Ниже приведу возможный пример работы:
&НаКлиенте Перем АдресАрхиваКомпонента; &НаКлиенте Перем Компонент; &НаКлиенте Процедура ПриОткрытии(Отказ) // адрес, содержит строку (навигационную ссылку на двоичные данные zip архива во // временном хранилище) АдресАрхиваКомпонента = ПолучитьАдресАрхиваВоВременномХранилище(); КонецПроцедуры // ПриОткрытии() &НаСервере // методы ПодключитьВнешнююКомпоненту,УстановитьВнешнююКомпоненту, могут принимать в // качестве первого параметра строку в формате "навигационная ссылка" // (URL к внешней компоненте, упакованной в ZIP-архив, в формате, аналогичном // ПолучитьНавигационнуюСсылку). Функция ПолучитьАдресАрхиваВоВременномХранилище() ОбъектОбработки = РеквизитФормыВЗначение("ОбработкаОбъект"); СсылкаНаАрхив = ПоместитьВоВременноеХранилище(ОбъектОбработки.ПолучитьМакет("MIKO_phone_IP"), Новый УникальныйИдентификатор); Возврат СсылкаНаАрхив; КонецФункции // ПолучитьАдресАрхиваВоВременномХранилище() &НаКлиенте // Процедура должна вызываться лишь один раз, в случае, если компонент еще не установлен // или нуждается в обновлении Процедура УстановитьКомпонент(Команда) Попытка УстановитьВнешнююКомпоненту(АдресАрхиваКомпонента); Исключение Сообщить("Не удалось устанвить внешнюю компоненту."); КонецПопытки; КонецПроцедуры // УстановитьКомпонент() &НаКлиенте // основная процедура инициализации комопнента Процедура Инициализаровать(Команда) Попытка ПодключитьВнешнююКомпоненту(АдресАрхиваКомпонента,"Comp" ,ТипВнешнейКомпоненты.Native); Компонент = Новый ("AddIn.Comp.MIKO_phone_IP"); Исключение Сообщить("Исключение при инициализации. Возможно компонент еще не был установлен."); КонецПопытки; КонецПроцедуры |
Рекомендую ознакомиться с материалами на сайте ИТС:
1. ИТС: Документация: Глава 31. Внешние Компоненты
2. ИТС: Технология создания внешних компонент.