Не удалось загрузить драйвер устройства

1. Степной 27 05.12.19 11:15 Сейчас в теме
Добрый день!

Дано:

- пользователь 1 с определенным набором прав без RLS;
- пользователь 2 с меньшим набором прав c RLS;
- набор прав в части работы с подключаемым оборудованием идентичный;
- под пользователем 1 ошибок нет, под пользователем 2 возникает ошибка.

Ошибка:

- При подключении устройства произошла ошибка. Не удалось загрузить драйвер устройства. Проверьте, что драйвер корректно установлен и зарегистрирован в системе.

Вопрос:

- полагаю, что недостаточно каких-то прав на уровне 1С, какие права проверить?

Комментарий:

- после входа пользователя 1 у пользователя 2 ошибка не возникает;
- конфигурация "Медицина.Поликлиника".
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 81 05.12.19 11:17 Сейчас в теме
(1)У "проблемного" пользователя скорее проблемы с уровнем доступа в ОС, т.к. при "установке" драйвера происходит регистрация *.dll в ОС.
3. Степной 27 05.12.19 11:31 Сейчас в теме
(2) Спасибо, но на машине запуск 1С под пользователем 1 и пользователем 2 происходит от имени одного пользователя ОС.
4. nomad_irk 81 05.12.19 11:41 Сейчас в теме
(3)В таком случае, для чего вы устанавливаете драйвера: у проблемного пользователя не работает ПодключаемоеОборудование?
5. Степной 27 05.12.19 12:09 Сейчас в теме
(4) Да, при открытии списка чеков ККМ у пользователя 2 возникает ошибка, которую указал. После входа в систему пользователя 1, либо администратора, пользователь 2 перезапускает 1С и все работает.
6. Morkvi 05.12.19 18:27 Сейчас в теме
В момент ошибки сколько активных сеансов запущено? те запущено только пользователь 2, или совместно с пользователем 1?
7. Степной 27 05.12.19 19:48 Сейчас в теме
(6) Один сеанс под пользователем 2.
8. Morkvi 06.12.19 09:32 Сейчас в теме
Странно, такая ошибка обычно не связана с правами. Она связана с блокировкой драйвера оборудования. Те если Вы зашли под пользователем1 и он уже использует драйвер данного оборудования, а Вы (не завершая сеанс 1 пользователя) пытаетесь запустить второй сеанс под пользователем 2.
Или, как вариант, у Вас в этот момент запущен драйвер сторонней программой, не 1с.
ПС: что за оборудование?
9. Степной 27 06.12.19 10:11 Сейчас в теме
10. Степной 27 06.12.19 11:06 Сейчас в теме
Так, ну допустим, почему после входа пользователя 1, у пользователя 2 ошибка отсутствует понятно из этого кода:

// Проверим, не подключено ли устройство ранее.
ПодключенноеУстройство = ПолучитьПодключенноеУстройство(глПодключаемоеОборудование.ПараметрыПодключенияПО, Устройство.Ссылка);

Если ПодключенноеУстройство = Неопределено Тогда // Если устройство не было подключено ранее.
            
    // программный код.........
    
Иначе // Устройство было подключено ранее.
    // Увеличим количество пользователей данного соединения.
    ПодключенноеУстройство.Клиенты.Добавить(ИдентификаторКлиента);
    ПодключенноеУстройство.КоличествоПодключенных = ПодключенноеУстройство.КоличествоПодключенных + 1;
    Если ОповещениеПриПодключении <> Неопределено Тогда
        ОписаниеОшибки = НСтр("ru='Ошибок нет.'");
        РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки, ПараметрыПодключения", Истина, ОписаниеОшибки, ПодключенноеУстройство.ПараметрыПодключения);
        ВыполнитьОбработкуОповещения(ОповещениеПриПодключении, РезультатВыполнения);
    КонецЕсли;
КонецЕсли;
Показать
11. Степной 27 06.12.19 11:08 Сейчас в теме
У пользователя 2, видимо, неверно отрабатывает вот эта функция:

Функция ПолучитьОбъектДрайвера(ДанныеДрайвера, ТекстОшибки = Неопределено)
    
    ОбъектДрайвера = Неопределено;
    
    Для Каждого ДрайверПО Из глПодключаемоеОборудование.ДрайвераПодключаемогоОборудования Цикл
        Если ДрайверПО.Ключ = ДанныеДрайвера.ДрайверОборудования  Тогда
            ОбъектДрайвера = ДрайверПО.Значение;
            Прервать;
        КонецЕсли;
    КонецЦикла;   
    
    Если ОбъектДрайвера = Неопределено Тогда
        Попытка
            
            ProgID = ДанныеДрайвера.ИдентификаторОбъекта;
            Если ПустаяСтрока(ProgID) Тогда
                ОбъектДрайвера = ""; // Драйвер не требуется
            Иначе
                ProgID1 = ?(Найти(ProgID, "|") > 0, Сред(ProgID, 1, Найти(ProgID, "|")-1), ProgID); 
                ProgID2 = ?(Найти(ProgID, "|") > 0, Сред(ProgID, Найти(ProgID, "|")+1), ProgID); 
                Если ДанныеДрайвера.ПоставляетсяДистрибутивом Тогда
                    ПодключитьВнешнююКомпоненту(ProgID1);
                Иначе
                    ИмяОбъекта = Сред(ProgID1, Найти(ProgID1, ".") + 1); 
                    Префикс = Сред(ProgID1, 1, Найти(ProgID1, ".")); 
                    ProgID2 = Префикс + СтрЗаменить(ИмяОбъекта, ".", "_") + "." + ИмяОбъекта;
                    Если ДанныеДрайвера.ВСоставеКонфигурации Тогда
                        Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет." + ДанныеДрайвера.ИмяМакетаДрайвера, СтрЗаменить(ИмяОбъекта, ".", "_"));
                    Иначе
                        СсылкаНаДрайвер = ПолучитьНавигационнуюСсылку(ДанныеДрайвера.ДрайверОборудования, "ЗагруженныйДрайвер");
                        Результат = ПодключитьВнешнююКомпоненту(СсылкаНаДрайвер, СтрЗаменить(ИмяОбъекта, ".", "_"));
                    КонецЕсли;
                КонецЕсли;
                ОбъектДрайвера = Новый (ProgID2);
            КонецЕсли;
                
        Исключение
            Инфо = ИнформацияОбОшибке();
            ТекстОшибки = Инфо.Описание;
        КонецПопытки;
        
        Если ОбъектДрайвера <> Неопределено Тогда
            глПодключаемоеОборудование.ДрайвераПодключаемогоОборудования.Вставить(ДанныеДрайвера.ДрайверОборудования, ОбъектДрайвера);
            ОбъектДрайвера = глПодключаемоеОборудование.ДрайвераПодключаемогоОборудования[ДанныеДрайвера.ДрайверОборудования];
        КонецЕсли;
        
    КонецЕсли;   
        
    Возврат ОбъектДрайвера;
    
КонецФункции
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот