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

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);
			КонецЕсли;
				
		Исключение
			Инфо = ИнформацияОбОшибке();
			ТекстОшибки = Инфо.Описание;
		КонецПопытки;
		
		Если ОбъектДрайвера <> Неопределено Тогда
			глПодключаемоеОборудование.ДрайвераПодключаемогоОборудования.Вставить(ДанныеДрайвера.ДрайверОборудования, ОбъектДрайвера);
			ОбъектДрайвера = глПодключаемоеОборудование.ДрайвераПодключаемогоОборудования[ДанныеДрайвера.ДрайверОборудования];
		КонецЕсли;
		
	КонецЕсли;   
		
	Возврат ОбъектДрайвера;
	
КонецФункции
Показать
Оставьте свое сообщение

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