официальный партнёр 1С по деловому софту
Закрыть
Логин:
Пароль:
Забыли свой пароль?
  Войти
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
 
8(495)229-30-42

Работа с внешними компонентами Native

Эта статья посвящена работе с внешними компонентами, а именно: их подключению. На данный момент для расширения возможностей 1С Предприятия используются две технологии внешних компонент:
  • 1 С использованием Native API
  • 2 С использованием технологии COM
В этой статье я решил осветить работу с компонентами Native API.
Итак, приступим, от  простого к сложному:[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. ИТС: Технология создания внешних компонент.