Какие права нужны пользователю для подключения внешней компоненты из общего макета в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке функционала печати штрихкодов или генерации QR-кодов программисты часто встраивают внешние компоненты непосредственно в конфигурацию или внешнюю обработку в виде общего макета с двоичными данными. При внедрении такого решения у пользователей могут возникать ошибки инициализации библиотеки. Разберем по шагам, какие права требуются в операционной системе и внутри 1С для корректной работы компоненты, а также выясним причину возможных сбоев.

Зависимость прав от технологии: Native API или COM

Хотя в общем макете действительно хранится исполняемая библиотека (DLL) или ZIP-архив с библиотеками под разные операционные системы, требования к правам зависят от архитектуры самой компоненты:

  1. Компоненты по технологии Native API: Современный стандарт разработки под 1С:Предприятие. Такие компоненты не требуют регистрации в системном реестре Windows. При вызове метода подключения платформа 1С автоматически извлекает файл библиотеки из макета во временный каталог текущего пользователя или профиль сеанса и загружает его в адресное пространство процесса. Для работы с Native API пользователю не нужны права локального администратора Windows.
  2. Компоненты по технологии COM: Устаревший формат. Перед использованием COM-объекта библиотека должна быть зарегистрирована в реестре операционной системы с помощью утилиты regsvr32. Для этой операции требуются права администратора операционной системы. Однако регистрация выполняется всего один раз на конкретном рабочем месте, после чего обычный пользователь может вызывать компоненту без повышенных привилегий.

Права доступа внутри базы данных 1С

Рассмотрим, какие права требуются на уровне системы ролей и прав самой платформы 1С:

  1. Пользователю не требуется назначать полные административные права внутри 1С.
  2. В назначенной пользователю роли должно быть включено право Чтение на используемый общий макет (или на внешнюю обработку, если макет хранится в ее составе).
  3. Если компонент подключается через вызовы БСП (Библиотеки стандартных подсистем), достаточно стандартных пользовательских ролей, в которые уже заложен доступ к служебным объектам подсистем.

Контекст исполнения: на клиенте или на сервере

Проанализируем ситуацию с местом выполнения кода генерации QR-кода:

  1. Подключение на клиенте (Тонкий клиент / Толстый клиент): Библиотека распаковывается в пользовательскую папку %LOCALAPPDATA%\1C\1Cv8\... или системный %TEMP%. Процесс 1С запускается от имени вошедшего в Windows пользователя, и прав на запись в эти каталоги у него достаточно.
  2. Подключение на сервере (или в фоновом задании): Если код выполняется на стороне сервера 1С:Предприятия, то вызов и распаковка компоненты осуществляются от имени системной учетной записи службы сервера (по умолчанию USR1CV8). В этом случае права пользователя на клиентском компьютере вообще не играют роли — главное, чтобы у службы сервера был доступ к своему рабочему каталогу и разрешена загрузка библиотек.

Программный вызов: разделение установки и подключения

Посмотрим на пример правильной программной инициализации компоненты из общего макета на встроенном языке 1С. Для надежной работы платформы рекомендуется разделить операцию на два этапа: установку на клиентское место и последующее подключение.


// Имя макета, где лежит архив с компонентой Native API
ИмяМакета = "ОбщийМакет.КомпонентаПечатиQR";
Местоположение = "ОбщийМакет.КомпонентаПечатиQR";

// 1. Доставка файлов компоненты на рабочее место
Если УстановитьВнешнююКомпоненту(Местоположение) Тогда
    // 2. Подключение компоненты в сеансе
    Если ПодключитьВнешнююКомпоненту(Местоположение, "QRCodeGen", ТипВнешнейКомпоненты.Native) Тогда
        // 3. Создание объекта компоненты
        Компонента = Новый ("AddIn.QRCodeGen.QRCodeExtension");
        // Вызов методов компоненты...
    Иначе
        ВызватьИсключение "Не удалось подключить внешнюю компоненту генерации QR-кода.";
    КонецЕсли;
Иначе
    ВызватьИсключение "Не удалось установить внешнюю компоненту из макета.";
КонецЕсли;

Частые причины ошибок при отсутствии проблем с правами

Если прав достаточно, но компонента все равно не подключается, проанализируем следующие факторы:

  1. Несоответствие разрядности (32-бит и 64-бит): 32-разрядный клиент 1С не сможет загрузить 64-битную библиотеку и наоборот. В макете должен быть ZIP-архив с файлом MANIFEST.xml, содержащий сборки под обе разрядности Windows (а при необходимости и Linux).
  2. Отсутствие системных библиотек C++: Для работы DLL на целевом компьютере часто требуется установленный пакет Microsoft Visual C++ Redistributable соответствующей версии.
  3. Ограничения политик безопасности и антивирусов: Системы защиты (SRP, AppLocker, антивирусный софт) могут блокировать исполнение динамических библиотек, извлекаемых во временные пользовательские папки (Temp, AppData).

Альтернативные способы генерации QR-кода

Если использование внешних библиотек затруднено из-за ограничений безопасности в корпоративной сети, рассмотрим альтернативные варианты решения задачи:

  1. Алгоритм на чистом коде 1С: Формирование матрицы QR-кода математическим алгоритмом на встроенном языке с выводом результата в виде черно-белой таблицы или рисунка. Такой способ полностью автономен и не зависит от внешних DLL.
  2. Формирование через поле HTML-документа: Генерация изображения QR-кода с помощью легковесных JavaScript-библиотек внутри скрытого поля HTML.
  3. Штатные механизмы БСП: Использование встроенной в типовые конфигурации подсистемы генерации штрихкодов, которая оптимизирована под различные клиентские платформы.
← На главную