При разработке функционала печати штрихкодов или генерации QR-кодов программисты часто встраивают внешние компоненты непосредственно в конфигурацию или внешнюю обработку в виде общего макета с двоичными данными. При внедрении такого решения у пользователей могут возникать ошибки инициализации библиотеки. Разберем по шагам, какие права требуются в операционной системе и внутри 1С для корректной работы компоненты, а также выясним причину возможных сбоев.
Хотя в общем макете действительно хранится исполняемая библиотека (DLL) или ZIP-архив с библиотеками под разные операционные системы, требования к правам зависят от архитектуры самой компоненты:
regsvr32. Для этой операции требуются права администратора операционной системы. Однако регистрация выполняется всего один раз на конкретном рабочем месте, после чего обычный пользователь может вызывать компоненту без повышенных привилегий.Рассмотрим, какие права требуются на уровне системы ролей и прав самой платформы 1С:
Проанализируем ситуацию с местом выполнения кода генерации QR-кода:
%LOCALAPPDATA%\1C\1Cv8\... или системный %TEMP%. Процесс 1С запускается от имени вошедшего в Windows пользователя, и прав на запись в эти каталоги у него достаточно.USR1CV8). В этом случае права пользователя на клиентском компьютере вообще не играют роли — главное, чтобы у службы сервера был доступ к своему рабочему каталогу и разрешена загрузка библиотек.Посмотрим на пример правильной программной инициализации компоненты из общего макета на встроенном языке 1С. Для надежной работы платформы рекомендуется разделить операцию на два этапа: установку на клиентское место и последующее подключение.
// Имя макета, где лежит архив с компонентой Native API
ИмяМакета = "ОбщийМакет.КомпонентаПечатиQR";
Местоположение = "ОбщийМакет.КомпонентаПечатиQR";
// 1. Доставка файлов компоненты на рабочее место
Если УстановитьВнешнююКомпоненту(Местоположение) Тогда
// 2. Подключение компоненты в сеансе
Если ПодключитьВнешнююКомпоненту(Местоположение, "QRCodeGen", ТипВнешнейКомпоненты.Native) Тогда
// 3. Создание объекта компоненты
Компонента = Новый ("AddIn.QRCodeGen.QRCodeExtension");
// Вызов методов компоненты...
Иначе
ВызватьИсключение "Не удалось подключить внешнюю компоненту генерации QR-кода.";
КонецЕсли;
Иначе
ВызватьИсключение "Не удалось установить внешнюю компоненту из макета.";
КонецЕсли;
Если прав достаточно, но компонента все равно не подключается, проанализируем следующие факторы:
MANIFEST.xml, содержащий сборки под обе разрядности Windows (а при необходимости и Linux).Temp, AppData).Если использование внешних библиотек затруднено из-за ограничений безопасности в корпоративной сети, рассмотрим альтернативные варианты решения задачи: