Ситуация, когда под учетной записью администратора подключаемое оборудование работает исправно, а под обычным пользователем (особенно при включенном механизме RLS) возникает ошибка «Не удалось загрузить драйвер устройства», является классической для конфигураций на базе БСП (Библиотека стандартных подсистем). Рассмотрим подробнее, почему это происходит и как исправить ситуацию в конфигурации «Медицина. Поликлиника» или других аналогичных системах.
В нашем распоряжении следующие вводные данные: два пользователя 1С работают в рамках одной сессии операционной системы (один и тот же пользователь ОС). У первого пользователя полные права (без RLS), у второго — ограниченные права с активным RLS. Ошибка возникает только у второго пользователя, но исчезает, если первым в систему зашел администратор.
Это прямо указывает на то, что проблема кроется не в установке драйвера в саму Windows (так как пользователь ОС один и тот же), а во внутренних механизмах 1С по извлечению и регистрации компоненты из информационной базы. Когда заходит администратор, 1С успешно считывает бинарные данные драйвера из справочника, сохраняет их во временную папку и регистрирует. После этого драйвер становится доступен для всей системы, и второй пользователь «подхватывает» уже готовую компоненту.
Проанализируем код, который отвечает за получение объекта драйвера. Основная проблема часто кроется в функции ПолучитьОбъектДрайвера. Проанализируем фрагмент, где происходит попытка подключения внешней компоненты:
Если ДанныеДрайвера.ВСоставеКонфигурации Тогда
Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет." + ДанныеДрайвера.ИмяМакетаДрайвера, СтрЗаменить(ИмяОбъекта, ".", "_"));
Иначе
СсылкаНаДрайвер = ПолучитьНавигационнуюСсылку(ДанныеДрайвера.ДрайверОборудования, "ЗагруженныйДрайвер");
Результат = ПодключитьВнешнююКомпоненту(СсылкаНаДрайвер, СтрЗаменить(ИмяОбъекта, ".", "_"));
КонецЕсли;
Выясним причину сбоя: метод ПолучитьНавигационнуюСсылку или само обращение к объекту ДанныеДрайвера.ДрайверОборудования может возвращать Неопределено или вызывать ошибку доступа, если на справочник «Драйверы оборудования» наложены ограничения RLS. Если система не может прочитать макет драйвера из базы, переменная Результат будет ложной, и объект драйвера не будет создан.
Первым делом проверим права доступа для «проблемного» пользователя. Даже если роль «Работа с подключаемым оборудованием» назначена, механизмы RLS могут блокировать чтение конкретных записей. Выполним следующие действия:
ДрайверыОборудования.ПрисоединенныеФайлы (или аналогичному, где хранятся бинарные данные драйверов), так как драйвер физически может лежать там.Подключаемое оборудование в 1С жестко привязано к конкретному рабочему месту. Разберем по шагам, как это влияет на загрузку драйвера:
Когда пользователь 2 открывает форму (например, список чеков ККМ), система пытается инициализировать оборудование для его текущего рабочего места. Если у пользователя недостаточно прав на чтение справочника РабочиеМеста или если для него не создано (и не может быть создано из-за прав) рабочее место, инициализация прерывается.
Рассмотрим код проверки ранее подключенного устройства:
ПодключенноеУстройство = ПолучитьПодключенноеУстройство(глПодключаемоеОборудование.ПараметрыПодключенияПО, Устройство.Ссылка);
Если ПодключенноеУстройство = Неопределено Тогда
// Попытка первичного подключения
Иначе
// Устройство уже в памяти, просто добавляем клиента
ПодключенноеУстройство.Клиенты.Добавить(ИдентификаторКлиента);
КонецЕсли;
Именно этот участок объясняет, почему после захода администратора у пользователя 2 все работает: устройство уже находится в глобальной переменной глПодключаемоеОборудование, и система просто переиспользует готовый объект, не пытаясь загрузить его заново из базы.
Поскольку используется оборудование Штрих-On-Line, проанализируем ситуацию с точки зрения взаимодействия с драйвером. Драйверы «Штрих-М» часто требуют регистрации COM-объекта в реестре Windows. Если первый запуск (регистрация) происходит под пользователем с ограниченными правами, запись в реестр может не создаться.
Рекомендация: Попробуйте один раз запустить 1С от имени администратора ОС под учетной записью данного пользователя и инициализировать оборудование. Если это решит проблему, значит, дело было в правах записи в ветку реестра HKEY_CLASSES_ROOT или в папку AppData.
Чтобы окончательно устранить ошибку «Не удалось загрузить драйвер устройства», выполним следующие проверки:
ИнтерактивнаяУстановкаВнешнихКомпонент.Таким образом, мы выяснили, что ошибка носит комплексный характер: она связана с тем, что механизм RLS мешает первичному получению бинарных данных драйвера из базы данных, в то время как «разогретый» администратором сеанс позволяет обойти эту проверку за счет использования уже инициализированных в памяти объектов.