Глава 34. Внешние компоненты
страницаГлава 34. Внешние компоненты
«1С:Предприятие» является расширяемой системой. Для расширения функциональных возможностей используются внешние компоненты.
В системе используются две технологии создания внешних компонент:
● с использованием Native API,
● с использованием технологии COM.
Это позволяет создавать внешние компоненты для ОС семейства Windows и ОС семейства Linux, а также для веб-клиента, работающего в веб-браузерах Microsoft Internet Explorer, а также Mozilla Firefox, Google Chrome и Safari.
Внешние компоненты, предназначенные для работы в среде веб-клиента, должны быть упакованы в ZIP-архив особой структуры. Такой файл можно использовать также на сервере «1С:Предприятия» и в других клиентах.
При работе с компонентами, написанными с использованием Native API, следует придерживаться следующей схемы работы:
● В интерфейсе реализуется команда, которая вызывает установку внешней компоненты на компьютер пользователя (метод глобального контекста УстановитьВнешнююКомпоненту()). Данная операция обязательная для работы в тонком и веб-клиентах.
● Компонента подключается с помощью метода ПодключитьВнешнююКомпоненту(). При этом следует помнить, что попытка подключить неустановленную компоненту приведет к ошибке.
● Подключенная компонента используется согласно предоставленному программному интерфейсу.
совет. Не следует объединять в один программный код установку и подключение внешней компоненты. Установка считается однократным событием, и повторная установка вызовет интерактивное исключение.
Если используется компонента, упакованная в ZIP-архив, то для указания параметров внешней компоненты (имя устанавливаемого файла, тип, архитектура, используемый веб-браузера) служит специальный файл-манифест, формируемый разработчиком компоненты.
Получаемые из конфигурации или информационной базы внешние компоненты сохраняются после получения и используются при последующем подключении без повторного получения (компонента, используемая на сервере, сохраняется только на время работы рабочего процесса сервера).
Примечание. Подключение внешних компонент, выполненных по технологии СОМ, с помощью методов ЗагрузитьВнешнююКомпоненту(), ПодключитьВнешнююКомпоненту(), а также регистрация объектов компоненты выполняются «для пользователя». Если регистрация «для пользователя» завершилась неудачно, то предпринимается попытка выполнить регистрацию «для компьютера».
Если внешняя компонента подключается с помощью метода ПодключитьВнешнююКомпоненту(), то формирование параметра в операторе Новый() (имени создаваемого типа) выполняется из следующих частей:
● Текст Addin.;
● Имя, указанное в качестве параметра Имя метода ПодключитьВнешнююКомпоненту();
● Имя объекта, реализованного во внешней компоненте.
Если во внешней компоненте реализован объект Таймер и подключение внешней компоненты выполняется следующим образом: ПодключитьВнешнююКомпоненту(НавСсылка, "MyName");, то для создания объекта из внешней компоненты, следует указать следующий идентификатор: Новый("Addin.MyName.Таймер").
34.1. Особенности работы в тонком и толстом клиентах
При работе в толстом и тонком клиентах можно использовать как внешние компоненты, разработанные по технологии COM, так и внешние компоненты, разработанные по технологии Native API (как отдельными файлами на диске, так и в ZIP-архивах особого вида).
Для обновления компоненты достаточно повторно выполнить операцию установки внешней компоненты с помощью метода УстановитьВнешнююКомпоненту().
В момент установки внешние компоненты устанавливаются в каталог %APPDATA%\1C\1Cv8\ExtCompT. Каталог установки внешних компонент не считается кешем и не очищается при вызове «1С:Предприятия» с ключом командной строки ClearCache. Использование метода УстановитьВнешнююКомпоненту() для тонкого клиента является обязательным.
34.2. Особенности работы в веб-клиенте
При работе в веб-клиенте можно использовать компоненты, разработанные по технологии Native API или COM и упакованные в ZIP-архив особого вида. Компоненты, разработанные по технологии COM, можно использовать только в том случае, если веб-клиент работает в ОС семейства Windows. При установке файла внешней компоненты будет запрошено разрешение пользователя на установку расширения.
Особенности настройки веб-браузеров для работы с внешними компонентами см. здесь.
Каждая внешняя компонента устанавливается в виде отдельного расширения веб-браузера. Такое расширение представляет собой установочный пакет, подготовленный специальным образом для конкретного вида браузеров. Внешние компоненты устанавливаются:
● для веб-браузера Microsoft Internet Explorer – в каталог %``ALLUSERSPROFILE%\``Application Data\1``C\1``CEWebExt (%``ALLUSERSPROFILE%\1``C\1``CEWebExt для ОС Windows Vista и выше);
● для веб-браузера Mozilla Firefox – в каталог профиля текущего пользователя веб-браузера (создается веб-браузером);
● для веб-браузера Google Chrome – в каталог профиля текущего пользователя веб-браузера (создается веб-браузером);
● для веб-браузера Safari – определяется разработчиком внешней компоненты.
Возможно удаление внешних компонент:
● для веб-браузера Microsoft Internet Explorer – через механизм установки/удаления программ панели управления;
● для веб-браузера Mozilla Firefox – через механизм работы с дополнениями веб-браузера;
● для веб-браузера Google Chrome – через механизм работы с плагинами веб-браузера (переход по ссылке chrome://plugins);
● для веб-браузера Safari – стандартным способом.
ВНИМАНИЕ! Подключение внешних компонент из файла на диске для веб-клиента в целях безопасности не поддерживается.
Также следует помнить, что работа с COM-объектами доступна только в веб-браузере Microsoft Internet Explorer и ОС Windows. Также отсутствует поддержка типа COMSafeArray и возможность совершать вызовы методов COM-объектов, которые работают со значениями данного типа.
Для обновления компоненты необходимо выполнить одну из следующих операций:
● удалить компоненту, как указано выше, и заново выполнить установку с помощью метода УстановитьВнешнююКомпоненту();
● изменить имя объекта компоненты в исходном тексте компоненты и в файле манифеста (при этом имя файла с компонентой может не меняться) и заново выполнить установку с помощью метода УстановитьВнешнююКомпоненту().
При использовании внешних компонент в конфигурации следует придерживаться определенных правил и рекомендаций. Выполнение этих правил необходимо для того, чтобы внешние компоненты устанавливались без проблем на всех поддерживаемых веб-браузерах.
● Исключить использование конструкций вида:
Если Не ПодключитьВнешнююКомпоненту() Тогда УстановитьВнешнююКомпоненту() КонецЕсли;
● Установка внешней компоненты или расширений платформы (расширение работы с файлами, расширение работы с криптографией) должна быть интерактивной. Пользователь прикладного решения должен самостоятельно принять решение об установке. В диалоге установки должно быть сказано, для чего нужна компонента и что не будет работать, если ее не устанавливать.
● Рекомендуется интегрировать установку внешней компоненты в процесс выполнения прикладного действия. Например:
1. Пользователь воспользовался командой Отправить отчет.
2. Для этого прикладному решению необходимо, чтобы была установлена какая-либо внешняя компонента.
3. Прикладное решение проверяет, установлена или нет внешняя компонента.
4. Если внешняя компонента не установлена, пользователю отображается диалоговое окно, содержащую информацию о том, что для отправки отчета нужно установить компоненту и две кнопки: для установки внешней компоненты и для продолжения отправки отчета.
5. Затем пользователь последовательно выполняет два интерактивных действия:
1. Установку внешней компоненты;
2. Продолжение отправки отчета.
● В прикладном решении должны быть реализованы инструменты для установки пользователем внешних компонент и расширений платформы в любой момент работы. Действия по установке внешних компонент и расширений платформы не обязательно должны выполняться в процессе выполнения какого-либо действия.
34.3. Особенности работы на сервере
При работе на сервере «1С:Предприятия» допустимо использовать только компоненты, разработанные по технологии Native API, которые могут быть как отдельными файлами, так и упакованными в специальные ZIP-архивы.
Для подключения внешней компоненты используется метод ПодключитьВнешнююКомпоненту() (без использования метода УстановитьВнешнююКомпоненту(), который недоступен на сервере).
При работе на сервере желательно выполнять подключение внешней компоненты непосредственно перед ее использованием. Кроме того, компоненты, используемые на сервере, должны поддерживать все архитектуры и платформы. Это связано с тем, что в общем случае серверный код может исполняться на разных рабочих процессах (в разные моменты времени), которые могут исполняться на разных компьютерах. При этом компьютеры могут быть как разной архитектуры, так и функционировать под управлением различных операционных систем.
Файл внешней компоненты сохраняется рабочим процессом до своего перезапуска, поэтому повторное подключение внешней компоненты (до перезапуска рабочего процесса или переключения исполнения на другой рабочий процесс) происходит быстрее, чем первое подключение.
34.4. Асинхронная работа с внешней компонентой
Использование внешних компонент в асинхронном режиме имеет ряд особенностей:
1. Подключение внешней компоненты выполняется с помощью асинхронного метода НачатьПодключениеВнешнейКомпоненты().
2. Для обращения к свойствам внешней компоненты следует использовать асинхронные методы НачатьУстановку<ИмяСвойства>() и НачатьПолучение<ИмяСвойства>().
3. Вместо обращения к методу компоненты следует использовать асинхронные методы НачатьВызов<ИмяМетода>().
Методы Начать…() автоматически добавляются платформой к существующим свойствам и методам внешней компоненты. Саму внешнюю компоненту не требуется отдельно перерабатывать для поддержки работы в асинхронном режиме, однако необходимо выполнить перекомпиляцию существующей внешней компоненты для поддержки асинхронной работы.
Для метода НачатьВызов…() первым параметров следует указывать описание оповещения, а остальные параметры соответствуют набору параметров оригинального метода внешней компоненты.
При использовании веб-браузера Google Chrome поддерживается только асинхронное подключение и использование внешних компонент, в том время как для других веб-браузеров допустимо использование как синхронного, так и асинхронного способа работы. Это определяется свойством конфигурации Режим использования синхронных вызовов расширений платформы и внешних компонент (см. здесь).
34.5. Примеры работы с внешней компонентой
34.5.1. Технология Native API
Внешние компоненты, выполненные по технологии Native API, можно подключать не только в клиентских приложениях, но и на сервере приложений «1С:Предприятия».
При работе компоненты на сервере вызов ПодключитьВнешнююКомпоненту() необходимо выполнять каждый раз перед созданием экземпляра внешней компоненты, т. к. в общем случае неизвестно, на каком сервере будет исполняться вызов (это может быть Windows, Linux, 32-разрядная или 64-разрядная ОС).
34.5.1.1. Установка внешней компоненты на клиента
УстановитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканераШтрихкодов");
34.5.1.2. Загрузка из файла на диске
Файл внешней компоненты должен находиться на компьютере пользователя и быть доступен в пути поиска (переменная окружения PATH) операционной системы.
СисИнфо = Новый СистемнаяИнформация; Если СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда ПодключитьВнешнююКомпоненту("AddInCPP.dll", "MyName", ТипВнешнейКомпоненты.Native); ИначеЕсли СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда ПодключитьВнешнююКомпоненту("AddInCPP64.dll", "MyName", ТипВнешнейКомпоненты.Native); ИначеЕсли СисИнфо.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда ПодключитьВнешнююКомпоненту("libAddInCPP.so", "MyName", ТипВнешнейКомпоненты.Native); Иначе ПодключитьВнешнююКомпоненту("libAddInCPP64.so", "MyName", ТипВнешнейКомпоненты.Native); КонецЕсли; ОбъектКомпоненты = Новый("AddIn.MyName.ComponentExtension");
Примечание. Следует обратить внимание на формирование параметра в команде Новый.
34.5.1.3. Загрузка компоненты из макета
СисИнфо = Новый СистемнаяИнформация; Если СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда ПодключитьВнешнююКомпоненту("Обработка.Компонента.Макет.AddInWindows32", "MyName", ТипВнешнейКомпоненты.Native); ИначеЕсли СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда ПодключитьВнешнююКомпоненту("Обработка.Компонента.Макет.AddInWindows64", "MyName", ТипВнешнейКомпоненты.Native); ИначеЕсли СисИнфо.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда ПодключитьВнешнююКомпоненту("Обработка.Компонента.Макет.AddInLinux32", "MyName", ТипВнешнейКомпоненты.Native); Иначе ПодключитьВнешнююКомпоненту("Обработка.Компонента.Макет.AddInLinux64", "MyName", ТипВнешнейКомпоненты.Native); КонецЕсли; ОбъектКомпоненты = Новый("AddIn.MyName.ComponentExtension");
Примечание. Следует обратить внимание на формирование параметра в команде Новый.
34.5.1.4. Загрузка из информационной базы
В информационной базе должен быть справочник ВнешниеКомпоненты и реквизиты для указанных названий с типом ХранилищеЗначения с файлами внешних компонент.
Перем Ссылка; СисИнфо = Новый СистемнаяИнформация; Если СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда Ссылка = ПолучитьНавигационнуюСсылку(Справочники.ВнешниеКомпоненты.НайтиПоКоду("000000001"), "КомпонентаWindows32"); ИначеЕсли СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда Ссылка = ПолучитьНавигационнуюСсылку(Справочники.ВнешниеКомпоненты.НайтиПоКоду("000000001"), "КомпонентаWindows64"); ИначеЕсли СисИнфо.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда Ссылка = ПолучитьНавигационнуюСсылку(Справочники.ВнешниеКомпоненты.НайтиПоКоду("000000001"), "КомпонентаLinux32"); Иначе Ссылка = ПолучитьНавигационнуюСсылку(Справочники.ВнешниеКомпоненты.НайтиПоКоду("000000001"), "КомпонентаLinux64"); КонецЕсли; ПодключитьВнешнююКомпоненту(Ссылка, "MyName", ТипВнешнейКомпоненты.Native); ОбъектКомпоненты = Новый("AddIn.MyName.ComponentExtension");
Примечание. Следует обратить внимание на формирование параметра в команде Новый.
В рассмотренных примерах работы с внешними компонентами по технологии Native API также можно подключать внешние компоненты, реализованные с использованием технологии COM только для ОС Windows.
34.5.1.5. Подключить компоненту из ZIP-архива
В конфигурации должен быть общий макет с именем ДрайверСканераШтрихКодов с типом ДвоичныеДанные. В макете находится ZIP-архив особой структуры, в котором содержатся внешние компоненты для всех поддерживаемых операционных систем, браузеров и архитектур процессоров.
ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканераШтрихкодов", "Сканер"); Компонента = Новый("AddIn.Сканер.BarcodeReader");
Примечание. Следует обратить внимание на формирование параметра в команде Новый.
34.5.2. COM-технология
34.5.2.1. Загрузить внешнюю компоненту
ЗагрузитьВнешнююКомпоненту("MyComponent.dll"); Компонента = Новый("AddIn.ComponentExtension");
34.5.2.2. Подключить внешнюю компоненту
ПодключитьВнешнююКомпоненту("AddIn.MyObject"); Компонента = Новый("AddIn.ComponentExtension");
Примечание. Команда ЗагрузитьВнешнююКомпоненту() используется для совместимости с предыдущими версиями «1С:Предприятия».