XMLTsdMagazinVasilek/CommonModules/ВнешниеКомпонентыБПОКлиент/Ext/Module.bsl

872 lines
60 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
#Область ПодключениеВнешнихКомпонент
// Параметры для вызова процедуры ВнешниеКомпонентыКлиент.ПодключитьКомпоненту.
//
// Возвращаемое значение:
// Структура:
// * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте.
// * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать компоненту.
// * ПредложитьЗагрузить - Булево - (по умолчанию Истина) предлагать загрузить компоненту с сайта ИТС.
// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать.
// * ИдентификаторыСозданияОбъектов - Массив из Строка - массив строк идентификаторов создания экземпляров модуля объекта,
// используется только для компонент, у которых есть несколько идентификаторов создания объектов,
// при задании параметр Идентификатор будет использоваться только для определения компоненты.
// * Изолированно - Булево, Неопределено - (по умолчанию Неопределено) если Истина, компонента будет подключена
// изолированно, в этом случае внешняя компонента загружается в отдельный процесс операционной системы;
// Ложь - в этом случае внешняя компонента будет выполняться в том же процессе операционной системы,
// который выполняет код встроенного языка; Неопределено - поддерживается поведение платформы по умолчанию:
// изолированно - если компонентой поддерживается только этот режим, не изолированно - в остальных случаях.
// См. https://its.1c.ru/db/v83doc#bookmark:dev:TI000001866
//
// Пример:
//
// ПараметрыПодключения = ВнешниеКомпонентыКлиент.ПараметрыПодключения();
// ПараметрыПодключения.ТекстПояснения =
// НСтр("ru = 'Для использования сканера штрихкодов требуется
// |внешняя компонента ""1С:Сканеры штрихкода (NativeApi)"".'");
//
Функция ПараметрыПодключения() Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
Параметры = МодульВнешниеКомпонентыКлиент.ПараметрыПодключения();
// Конец Вызов БСП
Иначе
Параметры = ПараметрыПодключенияБПО();
КонецЕсли;
Возврат Параметры;
КонецФункции
// Подключает компоненту, выполненную по технологии Native API или COM на клиентском компьютере.
// Для веб-клиента предлагается диалог, подсказывающий пользователю действия по установке.
// Выполняет проверку возможности исполнения компоненты на текущем клиенте пользователя.
//
// Параметры:
// Идентификатор - Строка - идентификатор объекта внешней компоненты.
// Версия - Строка - версия компоненты.
// ПараметрыПодключения - см. ПараметрыПодключения.
//
// Возвращаемое значение:
// Структура - см. РезультатПодключения.
//
Асинх Функция ПодключитьКомпонентуАсинх(Идентификатор, Версия = Неопределено, ПараметрыПодключения = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
Возврат Ждать МодульВнешниеКомпонентыКлиент.ПодключитьКомпонентуАсинх(Идентификатор, Версия, ПараметрыПодключения);
// Конец Вызов БСП
Иначе
РезультатВыполнения = Новый Структура();
РезультатВыполнения.Вставить("Подключено", Ложь);
РезультатВыполнения.Вставить("ОписаниеОшибки", НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'"));
Возврат РезультатВыполнения;
КонецЕсли;
КонецФункции
// Подключает компоненту, выполненную по технологии Native API или COM на клиентском компьютере.
// Для веб-клиента предлагается диалог, подсказывающий пользователю действия по установке.
// Выполняет проверку возможности исполнения компоненты на текущем клиенте пользователя.
//
// Параметры:
// Оповещение - ОписаниеОповещения - описание оповещения о подключении со следующими параметрами:
// * Результат - см. РезультатПодключения.
// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения.
// Идентификатор - Строка - идентификатор объекта внешней компоненты.
// Версия - Строка - версия компоненты.
// ПараметрыПодключения - см. ВнешниеКомпонентыБПОКлиент.ПараметрыПодключения.
//
Процедура ПодключитьКомпоненту(Оповещение, Идентификатор, Версия = Неопределено, ПараметрыПодключения = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
МодульВнешниеКомпонентыКлиент.ПодключитьКомпоненту(Оповещение, Идентификатор, Версия, ПараметрыПодключения);
// Конец Вызов БСП
Иначе
РезультатВыполнения = Новый Структура();
РезультатВыполнения.Вставить("Подключено", Ложь);
РезультатВыполнения.Вставить("ОписаниеОшибки", НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'"));
Если Оповещение<>Неопределено Тогда
ВыполнитьОбработкуОповещения(Оповещение, РезультатВыполнения)
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Подключает компоненту, выполненную по технологии COM, из реестра Windows в асинхронном режиме.
// (не рекомендуется, для обратной совместимости с компонентами 1С 7.7).
//
// Параметры:
// Идентификатор - Строка - идентификатор объекта внешней компоненты.
// ИдентификаторСозданияОбъекта - Строка - идентификатор создания экземпляра модуля объекта
// (только для компонент, у которых идентификатор создания объекта отличается от ProgID).
//
// Возвращаемое значение:
// см. РезультатПодключения.
//
Асинх Функция ПодключитьКомпонентуИзРеестраWindowsАсинх(Идентификатор, ИдентификаторСозданияОбъекта = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
Возврат МодульВнешниеКомпонентыКлиент.ПодключитьКомпонентуИзРеестраWindowsАсинх(Идентификатор, ИдентификаторСозданияОбъекта);
// Конец Вызов БСП
Иначе
РезультатПодключения = РезультатПодключения();
Попытка
РезультатПодключения.Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх("AddIn." + Идентификатор);
Исключение
РезультатПодключения.Подключено = Ложь;
КонецПопытки;
Если РезультатПодключения.Подключено Тогда
Если ИдентификаторСозданияОбъекта = Неопределено Тогда
ИдентификаторСозданияОбъекта = Идентификатор;
КонецЕсли;
Попытка
ПодключаемыйМодуль = Новый("AddIn." + ИдентификаторСозданияОбъекта);
Если ПодключаемыйМодуль = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'");
КонецЕсли;
РезультатПодключения.ПодключаемыйМодуль = ПодключаемыйМодуль;
Исключение
РезультатПодключения.Подключено = Ложь;
КонецПопытки;
КонецЕсли;
Если Не РезультатПодключения.Подключено Тогда
РезультатПодключения.ОписаниеОшибки = СтрШаблон(
НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте
|по причине:
|%2'"),
Идентификатор,
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецЕсли;
Возврат РезультатПодключения;
КонецЕсли;
КонецФункции
// Подключает компоненту, выполненную по технологии COM, из реестра Windows в асинхронном режиме.
// (не рекомендуется, для обратной совместимости с компонентами 1С 7.7).
//
// Параметры:
// Оповещение - ОписаниеОповещения - описание оповещения о подключении со следующими параметрами:
// * Результат - см. РезультатПодключения
// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения.
// Идентификатор - Строка - идентификатор объекта внешней компоненты.
// ИдентификаторСозданияОбъекта - Строка - идентификатор создания экземпляра модуля объекта
// (только для компонент, у которых идентификатор создания объекта отличается от ProgID).
//
Процедура ПодключитьКомпонентуИзРеестраWindows(Оповещение, Идентификатор, ИдентификаторСозданияОбъекта = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
МодульВнешниеКомпонентыКлиент.ПодключитьКомпонентуИзРеестраWindows(Оповещение, Идентификатор, ИдентификаторСозданияОбъекта);
// Конец Вызов БСП
Иначе
Контекст = Новый Структура;
Контекст.Вставить("Оповещение" , Оповещение);
Контекст.Вставить("Идентификатор" , Идентификатор);
Контекст.Вставить("ИдентификаторСозданияОбъекта", ИдентификаторСозданияОбъекта);
Оповещение = Новый ОписаниеОповещения("ПодключитьКомпонентуИзРеестраWindowsЗавершение", ЭтотОбъект, Контекст);
НачатьПодключениеВнешнейКомпоненты(Оповещение, "AddIn." + Идентификатор);
КонецЕсли;
КонецПроцедуры
// Подключает компоненту, выполненную по технологии Native API и COM, в асинхронном режиме, через механизм ожидания.
// Компонента должна храниться в макете конфигурации в виде ZIP-архива.
//
// Параметры:
// Идентификатор - Строка - идентификатор объекта внешней компоненты.
// ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты.
// ПараметрыПодключения - Структура
// - Неопределено - см. функцию ПараметрыПодключения.
//
// Возвращаемое значение:
// см. РезультатПодключения.
//
Асинх Функция ПодключитьКомпонентуИзМакетаАсинх(Идентификатор, ПолноеИмяМакета, ПараметрыПодключения = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульОбщегоНазначенияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиент");
Возврат Ждать МодульОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакетаАсинх(Идентификатор, ПолноеИмяМакета, ПараметрыПодключения);
// Конец Вызов БСП
Иначе
Если ПараметрыПодключения = Неопределено Тогда
ПараметрыПодключения = ПараметрыПодключенияБПО();
КонецЕсли;
РезультатПодключения = РезультатПодключения();
Если ПустаяСтрока(Идентификатор) Тогда
РезультатПодключения.ОписаниеОшибки = НСтр("ru = 'Идентификатор компоненты не указан.'");
Иначе
СимволическоеИмя = СтрЗаменить(Идентификатор, ".", "_");
Попытка
#Если МобильноеПриложениеКлиент ИЛИ МобильныйКлиент Тогда
РезультатПодключения.Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх(ПолноеИмяМакета, СимволическоеИмя);
#Иначе
РезультатПодключения.Подключено = Ждать ПодключитьВнешнююКомпонентуАсинх(ПолноеИмяМакета, СимволическоеИмя,,
ТипПодключенияКомпоненты(ПараметрыПодключения.Изолированно));
#КонецЕсли
Исключение
РезультатПодключения.Подключено = Ложь;
КонецПопытки;
Если РезультатПодключения.Подключено Тогда
Попытка
ProgID = "AddIn." + СимволическоеИмя + "." + Идентификатор;
РезультатПодключения.ПодключаемыйМодуль = Новый (ProgID);
Исключение
РезультатПодключения.Подключено = Ложь;
КонецПопытки;
КонецЕсли;
Если Не РезультатПодключения.Подключено Тогда
РезультатПодключения.ОписаниеОшибки = СтрШаблон(
НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на клиенте
|%2
|по причине:
|%3'"),
Идентификатор,
ПолноеИмяМакета,
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецЕсли;
Возврат РезультатПодключения;
КонецЕсли;
КонецЕсли;
КонецФункции
// Подключает компоненту, выполненную по технологии Native API и COM, в асинхронном режиме.
// Компонента должна храниться в макете конфигурации в виде ZIP-архива.
//
// Параметры:
// ОповещениеПриПодключении - ОписаниеОповещения - описание оповещения о подключении со следующими параметрами:
// * Результат - см. РезультатПодключения.
// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения.
// Идентификатор - Строка - идентификатор объекта внешней компоненты.
// ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты.
// ПараметрыПодключения - Структура
// - Неопределено - см. функцию ПараметрыПодключения.
Процедура ПодключитьКомпонентуИзМакета(ОповещениеПриПодключении, Идентификатор, ПолноеИмяМакета, ПараметрыПодключения = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульОбщегоНазначенияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиент");
МодульОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакета(ОповещениеПриПодключении, Идентификатор, ПолноеИмяМакета, ПараметрыПодключения);
// Конец Вызов БСП
Иначе
Результат = РезультатПодключения();
Если ПустаяСтрока(Идентификатор) Тогда
Результат.ОписаниеОшибки = НСтр("ru = 'Идентификатор компоненты не указан.'");
ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, Результат);
Иначе
Контекст = Новый Структура();
Контекст.Вставить("Идентификатор", Идентификатор);
Контекст.Вставить("Оповещение", ОповещениеПриПодключении);
Оповещение = Новый ОписаниеОповещения("ПодключитьКомпонентуИзМакетаЗавершение", ЭтотОбъект, Контекст);
НачатьПодключениеВнешнейКомпоненты(Оповещение, ПолноеИмяМакета, СтрЗаменить(Идентификатор, ".", "_"));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область УстановкаВнешнихКомпонент
// Структура параметров для процедуры ВнешниеКомпонентыКлиент.УстановитьКомпоненту.
//
// Возвращаемое значение:
// Структура:
// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать.
// * ПредложитьЗагрузить - Булево - предложить загрузить компоненту с сайта ИТС
// * ПредложитьУстановить - Булево - (по умолчанию Ложь) предлагать устанавливать компоненту.
//
// Пример:
//
// ПараметрыУстановки = ВнешниеКомпонентыКлиент.ПараметрыУстановки();
// ПараметрыУстановки.ТекстПояснения =
// НСтр("ru = 'Для использования сканера штрихкодов требуется
// |внешняя компонента ""1С:Сканеры штрихкода (NativeApi)"".'");
//
Функция ПараметрыУстановки() Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
Параметры = МодульВнешниеКомпонентыКлиент.ПараметрыУстановки();
// Конец Вызов БСП
Иначе
Параметры = ПараметрыУстановкиБПО();
КонецЕсли;
Возврат Параметры;
КонецФункции
// Устанавливает компоненту, выполненную по технологии Native API и COM асинхронном режиме.
// Выполняет проверку возможности исполнения компоненты на текущем клиенте пользователя.
//
// Параметры:
// Идентификатор - Строка - идентификатор объекта внешней компоненты.
// Версия - Строка - версия компоненты.
// ПараметрыУстановки - см. ПараметрыУстановки.
//
// Возвращаемое значение:
// см. РезультатУстановки.
//
Асинх Функция УстановитьКомпонентуАсинх(Идентификатор, Версия = Неопределено, ПараметрыУстановки = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
РезультатУстановки = Ждать МодульВнешниеКомпонентыКлиент.УстановитьКомпонентуАсинх(Идентификатор, Версия,
ПараметрыУстановки);
// Конец Вызов БСП
Иначе
РезультатУстановки = РезультатУстановки();
РезультатУстановки.Установлено = Ложь;
РезультатУстановки.ОписаниеОшибки = НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'");
КонецЕсли;
Возврат РезультатУстановки;
КонецФункции
// Устанавливает компоненту, выполненную по технологии Native API и COM асинхронном режиме.
// Выполняет проверку возможности исполнения компоненты на текущем клиенте пользователя.
//
// Параметры:
// Оповещение - ОписаниеОповещения - описание оповещения об установке внешней компоненты:
// * Результат - см. РезультатУстановки.
// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения.
// Идентификатор - Строка - идентификатор объекта внешней компоненты.
// Версия - Строка - версия компоненты.
// ПараметрыУстановки - см. ПараметрыУстановки.
//
Процедура УстановитьКомпоненту(Оповещение, Идентификатор, Версия = Неопределено, ПараметрыУстановки = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
МодульВнешниеКомпонентыКлиент.УстановитьКомпоненту(Оповещение, Идентификатор, Версия, ПараметрыУстановки);
// Конец Вызов БСП
Иначе
РезультатУстановки = РезультатУстановки();
РезультатУстановки.Установлено = Ложь;
РезультатУстановки.ОписаниеОшибки = НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'");
Если Оповещение <> Неопределено Тогда
ВыполнитьОбработкуОповещения(Оповещение, РезультатУстановки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Устанавливает компоненту, выполненную по технологии Native API и COM асинхронном режиме.
// Компонента должна храниться в макете конфигурации в виде ZIP-архива.
//
// Параметры:
// ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты.
// ПараметрыУстановки - Структура
// - Неопределено - см. функцию ПараметрыУстановки.
//
// Возвращаемое значение:
// см. РезультатУстановки.
//
Асинх Функция УстановитьКомпонентуИзМакетаАсинх(ПолноеИмяМакета, ПараметрыУстановки = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульОбщегоНазначенияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиент");
РезультатУстановки = Ждать МодульОбщегоНазначенияКлиент.УстановитьКомпонентуИзМакетаАсинх(ПолноеИмяМакета, ПараметрыУстановки);
// Конец Вызов БСП
Иначе
Если ПараметрыУстановки <> Неопределено Тогда
ПоказатьПредупреждение(Неопределено, ПараметрыУстановки.ТекстПояснения);
КонецЕсли;
РезультатУстановки = РезультатУстановки();
Попытка
Ждать УстановитьВнешнююКомпонентуАсинх(ПолноеИмяМакета);
РезультатУстановки.Установлено = Истина;
Исключение
РезультатУстановки.Установлено = Ложь;
РезультатУстановки.ОписаниеОшибки = СтрШаблон(
НСтр("ru = 'Не удалось установить внешнюю компоненту ""%1"" на клиенте
|по причине:
|%2'"),
ПолноеИмяМакета,
ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЕсли;
Возврат РезультатУстановки;
КонецФункции
// Устанавливает компоненту, выполненную по технологии Native API и COM асинхронном режиме.
// Компонента должна храниться в макете конфигурации в виде ZIP-архива.
//
// Параметры:
// ОповещениеЗавершения - ОписаниеОповещения - описание оповещения об установке внешней компоненты:
// * Результат - см. РезультатУстановки.
// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения.
// ПолноеИмяМакета - Строка - полное имя макета, используемое как местоположение компоненты.
// ПараметрыУстановки - Структура
// - Неопределено - см. функцию ПараметрыУстановки.
//
Процедура УстановитьКомпонентуИзМакета(ОповещениеЗавершения, ПолноеИмяМакета, ПараметрыУстановки = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульОбщегоНазначенияКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиент");
МодульОбщегоНазначенияКлиент.УстановитьКомпонентуИзМакета(ОповещениеЗавершения, ПолноеИмяМакета, ПараметрыУстановки);
// Конец Вызов БСП
Иначе
Если ПараметрыУстановки <> Неопределено Тогда
//ПоказатьПредупреждение(Неопределено, ПараметрыУстановки.ТекстПояснения);
КонецЕсли;
Контекст = Новый Структура();
Контекст.Вставить("ПолноеИмяМакета", ПолноеИмяМакета);
Контекст.Вставить("Оповещение", ОповещениеЗавершения);
Оповещение = Новый ОписаниеОповещения("УстановитьКомпонентуИзМакетаЗавершение", ЭтотОбъект, Контекст);
НачатьУстановкуВнешнейКомпоненты(Оповещение, ПолноеИмяМакета);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ЗагрузкаВнешнихКомпонент
// Возвращает структуру параметров для описания правил поиска дополнительной информации в составе внешней компоненты,
// см. процедуру ЗагрузитьКомпонентуИзФайла.
//
// Возвращаемое значение:
// Структура:
// * ИмяФайлаXML - Строка - (необязательный) имя файла в составе компоненты, из которого будет извлечена информация.
// * ВыражениеXPath - Строка - (необязательный) XPath путь до информации в файле.
//
// Пример:
//
// ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыПоискаДополнительнойИнформации();
// ПараметрыЗагрузки.ИмяФайлаXML = "INFO.XML";
// ПараметрыЗагрузки.ВыражениеXPath = "//drivers/component/@type";
//
Функция ПараметрыПоискаДополнительнойИнформации() Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
Параметры = МодульВнешниеКомпонентыКлиент.ПараметрыПоискаДополнительнойИнформации();
// Конец Вызов БСП
Иначе
Параметры = Новый Структура;
Параметры.Вставить("ИмяФайлаXML", "");
Параметры.Вставить("ВыражениеXPath", "");
КонецЕсли;
Возврат Параметры;
КонецФункции
// Структура параметров для процедуру ВнешниеКомпонентыКлиент.ЗагрузитьКомпонентуИзФайла.
//
// Возвращаемое значение:
// Структура:
// * Идентификатор - Строка -(необязательный) идентификатор объекта внешней компоненты.
// * Версия - Строка - (необязательный) версия компоненты.
// * ПараметрыПоискаДополнительнойИнформации - Соответствие из КлючИЗначение - (необязательный) параметры:
// ** Ключ - Строка - идентификатор дополнительной запрошенной информации.
// ** Значение - см. ПараметрыПоискаДополнительнойИнформации.
// Пример:
//
// ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыЗагрузки();
// ПараметрыЗагрузки.Идентификатор = "InputDevice";
// ПараметрыЗагрузки.Версия = "8.1.7.10";
//
Функция ПараметрыЗагрузки() Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
Параметры = МодульВнешниеКомпонентыКлиент.ПараметрыЗагрузки();
// Конец Вызов БСП
Иначе
Параметры = Новый Структура;
Параметры.Вставить("Идентификатор", "");
Параметры.Вставить("Версия", "");
Параметры.Вставить("ПараметрыПоискаДополнительнойИнформации", Новый Соответствие);
КонецЕсли;
Возврат Параметры;
КонецФункции
// Загружает файл компоненты в справочник внешних компонент в асинхронном режиме.
//
// Параметры:
// Оповещение - ОписаниеОповещения - описание оповещения об установке внешней компоненты:
// * Результат - Структура - результат загрузки компоненты:
// ** Загружена - Булево - признак загрузки.
// ** Идентификатор - Строка - идентификатор объекта внешней компоненты.
// ** Версия - Строка - версия загруженной компоненты.
// ** Наименование - Строка - наименование загруженной компоненты.
// ** ДополнительнаяИнформация - Соответствие из КлючИЗначение - дополнительная информация о компоненте,
// если не запрашивалась - пустое соответствие:
// *** Ключ - см. ПараметрыПоискаДополнительнойИнформации.
// *** Значение - см. ПараметрыПоискаДополнительнойИнформации.
// * ДополнительныеПараметры - Структура - значение, которое было указано при создании объекта ОписаниеОповещения.
// ПараметрыЗагрузки - см. ПараметрыЗагрузки.
//
// Пример:
//
// ПараметрыЗагрузки = ВнешниеКомпонентыКлиент.ПараметрыЗагрузки();
// ПараметрыЗагрузки.Идентификатор = "InputDevice";
// ПараметрыЗагрузки.Версия = "8.1.7.10";
//
// Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуИзФайлаПослеЗагрузкиКомпоненты", ЭтотОбъект);
//
// ВнешниеКомпонентыКлиент.ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки);
//
// &НаКлиенте
// Процедура ЗагрузитьКомпонентуИзФайлаПослеЗагрузкиКомпоненты(Результат, ДополнительныеПараметры) Экспорт
//
// Если Результат.Загружено Тогда
// Идентификатор = Результат.Идентификатор;
// Версия = Результат.Версия;
// КонецЕсли;
//
// КонецПроцедуры
//
Процедура ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки = Неопределено) Экспорт
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
// Вызов БСП
МодульВнешниеКомпонентыКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ВнешниеКомпонентыКлиент");
МодульВнешниеКомпонентыКлиент.ЗагрузитьКомпонентуИзФайла(Оповещение, ПараметрыЗагрузки);
// Конец Вызов БСП
Иначе
РезультатВыполнения = Новый Структура();
РезультатВыполнения.Вставить("Загружена", Ложь);
РезультатВыполнения.Вставить("ОписаниеОшибки", НСтр("ru='Функциональность доступна только при использовании подсистемы БСП.'"));
ВыполнитьОбработкуОповещения(Оповещение, РезультатВыполнения);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
// Продолжение процедуры ПодключитьКомпонентуИзРеестраWindows.
//
// Параметры:
// Подключено - Булево
// Контекст - Структура:
// * Оповещение - ОписаниеОповещения
// * Идентификатор - Строка
// * ИдентификаторыСозданияОбъектов - Массив
Процедура ПодключитьКомпонентуИзРеестраWindowsЗавершение(Подключено, Контекст) Экспорт
Результат = РезультатПодключения();
ИдентификаторСозданияОбъекта = ?(
Контекст.ИдентификаторСозданияОбъекта = Неопределено,
Контекст.Идентификатор,
Контекст.ИдентификаторСозданияОбъекта);
Если Подключено Тогда
Попытка
ПодключаемыйМодуль = Новый("AddIn." + ИдентификаторСозданияОбъекта);
Если ПодключаемыйМодуль = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'");
КонецЕсли;
Результат.Подключено = Истина;
Результат.ПодключаемыйМодуль = ПодключаемыйМодуль;
Исключение
Результат.ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Иначе
Результат.ОписаниеОшибки = СтрШаблон(
НСтр("ru='Не удалось подключить внешнюю компоненту %1 на клиенте'"),
ИдентификаторСозданияОбъекта);
КонецЕсли;
Если Контекст.Оповещение<>Неопределено Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат);
КонецЕсли;
КонецПроцедуры
Процедура ПодключитьКомпонентуИзМакетаЗавершение(Подключено, Контекст) Экспорт
Результат = РезультатПодключения();
Если Подключено Тогда
Попытка
ProgID = "AddIn." + СтрЗаменить(Контекст.Идентификатор, ".", "_") + "." + Контекст.Идентификатор;
Результат.ПодключаемыйМодуль = Новый (ProgID);
Результат.Подключено = Истина;
Исключение
Результат.ОписаниеОшибки = ОписаниеОшибки();
КонецПопытки;
КонецЕсли;
Если Контекст.Оповещение<>Неопределено Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат);
КонецЕсли;
КонецПроцедуры
Процедура УстановитьКомпонентуИзМакетаЗавершение(Контекст) Экспорт
Результат = РезультатУстановки();
Результат.Установлено = Истина;
Если Контекст.Оповещение <> Неопределено Тогда
ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат);
КонецЕсли;
КонецПроцедуры
#Если Не ВебКлиент Тогда
// Выполняет переустановку компонент из переданного массива макетов рекурсивно
//
// Параметры:
// ИменаМакетовДляПереустановки - Массив из Строка
//
Процедура ПереустановитьКомпоненты(ИменаМакетовДляПереустановки) Экспорт
Контекст = Новый Структура();
Контекст.Вставить("МакетыДляПереустановки", Новый Массив);
Для Каждого ИмяМакетаДрайвера Из ИменаМакетовДляПереустановки Цикл
Контекст.МакетыДляПереустановки.Добавить(ИмяМакетаДрайвера);
КонецЦикла;
// Начать рекурсивную установку компонентов из макетов
Результат = РезультатУстановки();
Результат.Установлено = Истина;
ОповещениеУстановки = Новый ОписаниеОповещения("УстановитьКомпонентуИзМакетаРекурсивно", ЭтотОбъект, Контекст);
ВыполнитьОбработкуОповещения(ОповещениеУстановки, Результат)
КонецПроцедуры
// Выполняет рекурсивно установку компоненты
//
// Параметры:
// Результат - Структура - результат установки компоненты:
// * Установлено - Булево - признак установки.
// * ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка.
// Контекст - Структура:
// * МакетыДляПереустановки - Массив из строка
//
Процедура УстановитьКомпонентуИзМакетаРекурсивно(Результат, Контекст) Экспорт
Если Не Результат.Установлено Тогда
ОбщегоНазначенияБПОКлиент.СообщитьПользователю(СтрШаблон(НСтр("ru = 'Ошибка установки компоненты: %1'"), Результат.ОписаниеОшибки));
КонецЕсли;
МакетыДляПереустановки = Контекст.МакетыДляПереустановки;
Если МакетыДляПереустановки.Количество()=0 Тогда
Возврат;
КонецЕсли;
ПоследнийИндекс = МакетыДляПереустановки.ВГраница();
ТекущийМакет = МакетыДляПереустановки[ПоследнийИндекс];
МакетыДляПереустановки.Удалить(ПоследнийИндекс);
ОповещениеУстановки = Новый ОписаниеОповещения("УстановитьКомпонентуИзМакетаРекурсивно", ЭтотОбъект, Контекст);
УстановитьКомпонентуИзМакета(ОповещениеУстановки, ТекущийМакет);
КонецПроцедуры
#КонецЕсли
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Параметры для вызова процедуры ВнешниеКомпонентыКлиент.ПодключитьКомпоненту.
//
// Возвращаемое значение:
// Структура:
// * Кэшировать - Булево - (по умолчанию Истина) использовать механизм кэширования компонент на клиенте.
// * ПредложитьУстановить - Булево - (по умолчанию Истина) предлагать устанавливать компоненту.
// * ПредложитьЗагрузить - Булево - (по умолчанию Истина) предлагать загрузить компоненту с сайта ИТС.
// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать.
// * ИдентификаторыСозданияОбъектов - Массив из Строка - массив строк идентификаторов создания экземпляров модуля объекта,
// используется только для компонент, у которых есть несколько идентификаторов создания объектов,
// при задании параметр Идентификатор будет использоваться только для определения компоненты.
// * Изолированно - Булево, Неопределено - (по умолчанию Неопределено) если Истина, компонента будет подключена
// изолированно, в этом случае внешняя компонента загружается в отдельный процесс операционной системы;
// Ложь - в этом случае внешняя компонента будет выполняться в том же процессе операционной системы,
// который выполняет код встроенного языка; Неопределено - поддерживается поведение платформы по умолчанию:
// изолированно - если компонентой поддерживается только этот режим, не изолированно - в остальных случаях.
// См. https://its.1c.ru/db/v83doc#bookmark:dev:TI000001866
//
// Пример:
//
// ПараметрыПодключения = ВнешниеКомпонентыКлиент.ПараметрыПодключения();
// ПараметрыПодключения.ТекстПояснения =
// НСтр("ru = 'Для использования сканера штрихкодов требуется
// |внешняя компонента ""1С:Сканеры штрихкода (NativeApi)"".'");
//
Функция ПараметрыПодключенияБПО()
Параметры = Новый Структура;
Параметры.Вставить("Кэшировать", Истина);
Параметры.Вставить("ПредложитьУстановить", Истина);
Параметры.Вставить("ПредложитьЗагрузить", Истина);
Параметры.Вставить("ТекстПояснения", "");
Параметры.Вставить("ИдентификаторыСозданияОбъектов", Новый Массив);
Параметры.Вставить("Изолированно", Неопределено);
Параметры.Вставить("ОбновлятьАвтоматически", Истина);
Возврат Параметры;
КонецФункции
// Структура параметров для процедуры ВнешниеКомпонентыКлиент.УстановитьКомпоненту.
//
// Возвращаемое значение:
// Структура:
// * ТекстПояснения - Строка - для чего нужна компонента и что не будет работать, если ее не устанавливать.
// * ПредложитьЗагрузить - Булево - предложить загрузить компоненту с сайта ИТС
// * ПредложитьУстановить - Булево - (по умолчанию Ложь) предлагать устанавливать компоненту.
//
Функция ПараметрыУстановкиБПО()
Параметры = Новый Структура;
Параметры.Вставить("ТекстПояснения", "");
Параметры.Вставить("ПредложитьЗагрузить", Истина);
Параметры.Вставить("ПредложитьУстановить", Ложь);
Возврат Параметры;
КонецФункции
// Результат подключения компоненты.
//
// Возвращаемое значение:
// Структура:
// * Подключено - Булево - признак подключения.
// * ПодключаемыйМодуль - Неопределено, ОбъектВнешнейКомпоненты - экземпляр объекта внешней компоненты;
// - ФиксированноеСоответствие из КлючИЗначение - экземпляры объектов внешней компоненты,
// указанные в ПараметрыПодключения.ИдентификаторыСозданияОбъектов:
// ** Ключ - Строка - идентификатор внешней компоненты;
// ** Значение - ОбъектВнешнейКомпоненты - экземпляр объекта.
// * ОписаниеОшибки - Строка - краткое описание ошибки. При отмене пользователем пустая строка.
//
Функция РезультатПодключения() Экспорт
Результат = Новый Структура;
Результат.Вставить("Подключено", Ложь);
Результат.Вставить("ОписаниеОшибки", "");
Результат.Вставить("ПодключаемыйМодуль", Неопределено);
Возврат Результат;
КонецФункции
// Результат установки компоненты.
//
// Возвращаемое значение:
// Структура:
// * Установлено - Булево
// * ОписаниеОшибки - Строка
//
Функция РезультатУстановки() Экспорт
Результат = Новый Структура;
Результат.Вставить("Установлено", Ложь);
Результат.Вставить("ОписаниеОшибки", "");
Возврат Результат;
КонецФункции
Функция ТипПодключенияКомпоненты(Изолированно) Экспорт
Если Изолированно = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
#Если Не ВебКлиент И Не МобильныйКлиент И Не МобильноеПриложениеКлиент Тогда
Если Изолированно Тогда
Возврат ТипПодключенияВнешнейКомпоненты.Изолированно;
КонецЕсли;
Возврат ТипПодключенияВнешнейКомпоненты.НеИзолированно;
#Иначе
Возврат Неопределено;
#КонецЕсли
КонецФункции
#КонецОбласти