Имя: Пароль:
1C
 
Подключение сканера к пустой 1С 8 через nativeapi
,
0 aptomilov
 
26.11.24
13:45
Привет всем пытаюсь подключить сканер к пустой конфе

Установил драйвер opos который выгрузил с макета

пытаюсь подключить внешнюю компоненту  

ProgID = "AddIn.InputDevice";
ПодключитьВнешнююКомпоненту(ProgID);
                    ОбъектДрайвера = Новый (ProgID);

но ... пишет что не видит таких буков
буквы в кавычках подсмотрел в info.xml драйверов

<drivers>
<component progid="AddIn.AddIn.InputDevice" type="СканерШтрихкода" name="1С:Сканеры штрихкода (NativeApi)" version="10.4.2.6"> </component>
</drivers>

Может уже есть у кого опыт такого подключения, поделитесь.
1 p-soft
 
26.11.24
13:49
пробуйте Новый ("AddIn.InputDevice.InputDevice")
2 aptomilov
 
26.11.24
13:57
(1)
При подключении оборудования произошла ошибка:
"'1С:Сканеры штрихкода (NativeApi)': Не удалось загрузить драйвер устройства.
Проверьте, что драйвер корректно установлен и зарегистрирован в системе.".
3 aptomilov
 
26.11.24
13:57
{ОбщийМодуль.МенеджерОборудованияКлиент.Модуль(1526)}: Тип не определен (AddIn.InputDevice.InputDevice)
4 Garykom
 
гуру
26.11.24
14:05
(0) БПО же
5 aptomilov
 
26.11.24
14:11
(4) пытался кусками переносить бпо да но как то пока не получается его реанимировать
6 CepeLLlka
 
26.11.24
14:21
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	Если ГлДрайверОбъекта.Свойство("ИДУстройства") И ГлДрайверОбъекта.Свойство("ДрайверСканера") Тогда
		ГлДрайверОбъекта.ДрайверСканера.Отключить(ГлДрайверОбъекта.ИДУстройства);
		ГлДрайверОбъекта.Очистить();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	//Попытка подключения сканера
	ДопПараметры = Новый Структура;
	ДопПараметры.Вставить("ПредложенаУстановкаКомпоненты", Ложь);
	НачатьПодключениеВнешнейКомпоненты(Новый ОписаниеОповещения("ПодключениеВнешнейКомпонентыЗавершение", ЭтаФорма, ДопПараметры), "ОбщийМакет.Драйвер1СУстройстваВводаNative", "InputDevice", ТипВнешнейКомпоненты.Native);

КонецПроцедуры

&НаКлиенте
Процедура УстановкаВнешнейКомпонентыЗавершение(ДополнительныеПараметры) Экспорт 
	
КонецПроцедуры

&НаКлиенте
Процедура ПодключениеВнешнейКомпонентыЗавершение(Подключено, ДополнительныеПараметры) Экспорт
	
	Если НЕ Подключено Тогда
		Если НЕ ДополнительныеПараметры.ПредложенаУстановкаКомпоненты Тогда
			ДополнительныеПараметры.Вставить("ПредложенаУстановкаКомпоненты", Истина);
			НачатьУстановкуВнешнейКомпоненты(Новый ОписаниеОповещения("УстановкаВнешнейКомпонентыЗавершение", ЭтаФорма, ДополнительныеПараметры), "ОбщийМакет.Драйвер1СУстройстваВводаNative");
		КонецЕсли;
		НачатьПодключениеВнешнейКомпоненты(Новый ОписаниеОповещения("ПодключениеВнешнейКомпонентыЗавершение", ЭтаФорма, ДополнительныеПараметры), "ОбщийМакет.Драйвер1СУстройстваВводаNative", "InputDevice", ТипВнешнейКомпоненты.Native);
	Иначе
		
		Результат = ПодключитьСканер();
		Если НЕ Результат.Подключено Тогда
			
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = Результат.ТекстОшибки;
			Сообщение.Сообщить();
			
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры


&НаКлиенте
Функция ПодключитьСканер()
	
	//Подключение драйвера	
	Результат = Новый Структура;
	Результат.Вставить("Подключено", Истина);
	Результат.Вставить("ТекстОшибки", "");
	
	ОбъектДрайвера = Новый ("AddIn.InputDevice.InputDevice");
	
	//Добавление объекта драйвера в глобальную клиентскую переменную
	Если ОбъектДрайвера <> Неопределено Тогда
		ГлДрайверОбъекта.Вставить("ДрайверСканера", ОбъектДрайвера);
	Иначе
		Результат.Вставить("Подключено", Ложь);
		Результат.Вставить("ТекстОшибки", НСтр("ru='Не удалось создать объект драйвера.'"));
		Возврат Результат;
	КонецЕсли;
	
	Попытка
		ОбъектДрайвера.УстановитьПараметр("EquipmentType", "СканерШтрихкода") 
	Исключение
		Результат.Вставить("Подключено", Ложь);
		Результат.Вставить("ТекстОшибки", НСтр("ru='Ошибка обращения к драйверу.'"));
		Возврат Результат;
	КонецПопытки;	
	
	// Параметры для Линукса
	СисИнфо = Новый СистемнаяИнформация;
	Если СисИнфо.ТипПлатформы = ТипПлатформы.Linux_x86_64 ИЛИ СисИнфо.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда
	
		ОбъектДрайвера.УстановитьПараметр("COMEncoding", "UTF-8");
		ОбъектДрайвера.УстановитьПараметр("GSSymbolKey", -1);
		ОбъектДрайвера.УстановитьПараметр("KeyboardDevice", "SuperLead 2620-N-BT");
		ОбъектДрайвера.УстановитьПараметр("OutputDataType", 0);
		ОбъектДрайвера.УстановитьПараметр("Port", 0);
		ОбъектДрайвера.УстановитьПараметр("Speed", 9600);
		ОбъектДрайвера.УстановитьПараметр("Suffix", 13);
		ОбъектДрайвера.УстановитьПараметр("TimeoutCOM", 5);
		
	КонецЕсли;
	
	ИДУстройства = "";
	Попытка
		Ответ = ОбъектДрайвера.Подключить(ИДУстройства);
	Исключение
		Результат.Вставить("Подключено", Ложь);
		Результат.Вставить("ТекстОшибки", НСтр("ru='Ошибка вызова метода <ОбъектДрайвера.Подключить>.'") + Символы.ПС + ОписаниеОшибки());
		Возврат Результат;
	КонецПопытки;
	
	Если НЕ Ответ Тогда
		Результат.Вставить("Подключено", Ложь);
		ОбъектДрайвера.ПолучитьОшибку(Результат.ТекстОшибки)
	Иначе
		ГлДрайверОбъекта.Вставить("ИДУстройства", ИДУстройства);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции



В модуле приложения

Перем ГлДрайверОбъекта Экспорт;


Только эт для Линукса было, но там разница не большая была, я сначала на винде пробовал.
7 Звездец
 
26.11.24
14:13
а может лучше БПО внедрить? в чем необходимость сканер в лоб подключать?
8 lEvGl
 
гуру
26.11.24
14:17
+ за БПО, но если все не надо, то выдернуть, то что нужно
9 aptomilov
 
26.11.24
14:18
(7) может так и сделаю но позжа время жмем прям
10 lEvGl
 
гуру
26.11.24
14:22
вот выдергивал
Если Не ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера", "InputDevice", ТипВнешнейКомпоненты.Native) Тогда
УстановитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера");
ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера", "InputDevice", ТипВнешнейКомпоненты.Native);
Конецесли;
		
Сканер = Новый("AddIn.InputDevice.InputDevice");
Сканер.Подключить("СканерШтрихкода");

в БПО макет назывался, Кажется, по-другому, здесь тоже самописное

зы. ну судя по (2) надо просто установить сначала
11 CepeLLlka
 
26.11.24
14:22
(9)Так при помощи БСП быстрее будет всяко
12 aptomilov
 
26.11.24
14:45
(10) Устанавливал 10 раз, чо-то не видит
13 lEvGl
 
гуру
26.11.24
14:33
(12) что значит устанавливал?
14 aptomilov
 
26.11.24
14:35
(6) да заработало
осталось слушать этот сканер
он будет стационарный
15 aptomilov
 
26.11.24
14:36
(13)
из макета вываливаешь файлик
в зипе там экзешники
16 lEvGl
 
гуру
26.11.24
14:43
(15) код надо написать, даже просто скопировать

Если Не ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера", "InputDevice", ТипВнешнейКомпоненты.Native) Тогда
УстановитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера");
ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера", "InputDevice", ТипВнешнейКомпоненты.Native);
Конецесли;
		
Сканер = Новый("AddIn.InputDevice.InputDevice");
Сканер.Подключить("СканерШтрихкода");

конечно предварительно выгрузив макет БПО в файлик и загрузив его в макет своей конфы, потом этот код. Впрочем.. без разницы.
17 aptomilov
 
26.11.24
14:43
При попытке отсканировать приложение падает  :-)  в ошибку
не нашу не 1с вскую
18 CepeLLlka
 
26.11.24
14:48
(17)Код то хоть как-то адаптировали?

ОбъектДрайвера.УстановитьПараметр("KeyboardDevice", "SuperLead 2620-N-BT");

Тут конкретное устройство указывается например, у вас вероятно оно совсем другое
19 aptomilov
 
26.11.24
15:20
Да не, но не думаю, что из-за этого строкового параметра что-то может сильно поменяться.
20 aptomilov
 
26.11.24
20:15
(6)
Этот же код поднял в абсолютно другой конфигурации и на другой машине

приложение так же падает....
21 CepeLLlka
 
26.11.24
20:21
(20)Код нужно адаптировать под вашу ситуацию. Этот код работает на линуксе со сканером Mertech SuperLead 2620-N-BT
22 aptomilov
 
26.11.24
21:02
(21)

Все параметры взял с рабочей конфы где сканер работает  

ОбъектДрайвера.УстановитьПараметр("COMEncoding", "UTF-8");
        ОбъектДрайвера.УстановитьПараметр("GSSymbolKey", 7);
        //ОбъектДрайвера.УстановитьПараметр("KeyboardDevice", "SuperLead 2620-N-BT");
        ОбъектДрайвера.УстановитьПараметр("OutputDataType", 0);
        ОбъектДрайвера.УстановитьПараметр("Port", "0");
        ОбъектДрайвера.УстановитьПараметр("Speed", 9600);
        ОбъектДрайвера.УстановитьПараметр("Suffix", 3338);
        ОбъектДрайвера.УстановитьПараметр("Prefix", -1);
        ОбъектДрайвера.УстановитьПараметр("Timeout", 35);
        ОбъектДрайвера.УстановитьПараметр("Parity", 0);
    ОбъектДрайвера.УстановитьПараметр("LogType", -1);    
            ОбъектДрайвера.УстановитьПараметр("DataBits", 8);
        ОбъектДрайвера.УстановитьПараметр("StopBits", 0);
        

пока не помогает
23 Умный Слоненок
 
27.11.24
09:53
Сам драйвер загружен как внешняя компонента или как двоичные данные? Надо именно чтобы макет был типа внешняя компонента.
24 lEvGl
 
гуру
27.11.24
09:59
(23) можно забить, он установкой драйвера называет запуск экзешника в зипе
25 aptomilov
 
27.11.24
10:29
(23) Макет я взял из БПО
26 aptomilov
 
27.11.24
10:30
(24) дружище а ты когда любой драйвер ставишь в систему не exe ли запускаешь ?
27 lEvGl
 
гуру
27.11.24
10:38
ты мне не дружище, бот
28 CepeLLlka
 
27.11.24
11:38
(22)Вот были наработки какие-то, попробуйте https://dropmefiles.com/TTNCD
29 aptomilov
 
27.11.24
12:45
По итогу я так и не смог запустить сканер отдельно
при сканировании падает приложение
зато смог Запихать БПО
и теперь не только сканер но что угодно можно подключить к базе
Кому нужна будет помощь в запихивании бпо обращайтесь
там есть несколько ньюансов
инструкции от  1с неактуальны
30 aptomilov
 
27.11.24
12:45
(28)
за наработки спасибо обязательно попробую
31 aptomilov
 
27.11.24
12:49
(28) работает удивительно  
сейчас буду смотреть сравнивать в чем разница
огромное благодарю
32 aptomilov
 
27.11.24
13:22
Вобщем проблема была именно в Макете от КА 2,5
из за нее падает похоже она какая то кривая - но при этом в родной базе она работает отлично. Подгрузил из БПО и все завелось снова.
Всем кто участвовал спасибо.
33 aptomilov
 
27.11.24
14:18
(28)
обнаружил такой интересный баг
если 2 раза нажать на кнопку подключить сканер  то приложение так же выпадает
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан