|
Настройка сканера ШК тонкий клиент | ☑ | ||
---|---|---|---|---|
0
Likons
20.07.20
✎
10:33
|
День добрый , ув. форумчане )
Помогите справиться с задачей , пожалуйста. Есть самописная конфа на УФ , платформа (8.3.16.1148). Пытаюсь прикрутить к ней сканер ШК , который подключен по ЮСБ. Цель - заставить вызываться Внешнее событие на тонком клиенте. Сейчас я создал пустую обработку и засунул нагугленный мною кусочек. Но к сожалению , Внешнее событие так и не отзывается , а при сканировании шк попадает в свободное поле ввода ( сканер.длл лежит в папке bin с платформой , зареганая regsvr32. &НаКлиенте Процедура ВнешнееСобытие(Источник, Событие, Данные) Сообщить("Источник : " + Источник); Сообщить("Событие : " + Событие); Сообщить("Данные : " + Данные); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ProgID = "AddIn.Scaner45"; ПодключитьВнешнююКомпоненту(ProgID); ОбъектДрайвера = Новый (ProgID); ОбъектДрайвера.ДобавитьУстройство(); ОбъектДрайвера.АвтоВыключение = 0; ОбъектДрайвера.БитыДанных = 7; ОбъектДрайвера.БлокироватьУстройства = 0; ОбъектДрайвера.НомерПорта = 100; ОбъектДрайвера.Префикс = ""; ОбъектДрайвера.СкоростьОбмена = 9600; ОбъектДрайвера.СтопБиты = 1; ОбъектДрайвера.СтопФлаг = 0; ОбъектДрайвера.Суффикс = "#13"; ОбъектДрайвера.УстройствоВключено=1; ОбъектДрайвера.УстройствоВключеноПриCтарте=1; ОбъектДрайвера.Четность =0; ОбъектДрайвера.Чувствительность = 30; ОбъектДрайвера.АвтоВыключение = 0; ОбъектДрайвера.OldVersion = 1; ОбъектДрайвера.ПосылкаДанных = 1; КонецПроцедуры Буду благодарен за любую наводку ) |
|||
1
Likons
20.07.20
✎
10:37
|
PS : в отладчике ОбъектДрайвера имеет тип AddIn.Scaner45 , с заполненными мною значениями - все ок. Но Внешнее событие не вызывается , при сканировании
|
|||
2
Alex Проблемный
20.07.20
✎
10:39
|
(0) Я не особо в теме, но вроде бы ещё нужна компонента 1С scaner1C?
|
|||
3
Likons
20.07.20
✎
10:42
|
(2) угу , там специальная dll для сканеров есть , называется Scaner1C.dll. У меня она есть и она зареганая и даже создается объект с её типом. Беда в том , что не вызывается внешнее событие (
|
|||
4
Alex Проблемный
20.07.20
✎
10:44
|
&НаКлиенте
Перем ДемоКомп; &НаКлиенте Процедура ПриОткрытии(Отказ) ОповещениеПодключениеКомпоненты = Новый ОписаниеОповещения("ПодключитьСканер", ЭтаФорма); НачатьУстановкуВнешнейКомпоненты(ОповещениеПодключениеКомпоненты, "ОбщийМакет.DLLВZIP"); // В макете лежит zip архив с самой dll и манифестом КонецПроцедуры &НаКлиенте Процедура ПодключитьСканер(Параметры) Экспорт ПодключитьВнешнююКомпоненту("ОбщийМакет.DLLВZIP", "ScanerRFID", ТипВнешнейКомпоненты.Native); ДемоКомп = Новый("AddIn.ScanerRFID.ZR1CExtension"); ДемоКомп.Порт = "Com4"; DevID = Неопределено; ДемоКомп.Подключить(DevID); КонецПроцедуры &НаКлиенте Процедура ВнешнееСобытие(Источник, Событие, Данные) Сообщить(Данные); КонецПроцедуры Отсюда https://forum.infostart.ru/forum9/topic153421/ |
|||
5
Anton1307
20.07.20
✎
10:45
|
А у формы назначил, что по событию "Внешнее событие" должен вызываться метод "ВнешнееСобытие" ?
А то я так когда-то парился - метод скопировал, а к форме привязать забыл |
|||
6
Likons
20.07.20
✎
10:50
|
(4) спасибо ) Но там работают через com , у меня usb ( Можно , конечно , попробовать поиграться с эмулятором , но хочется ставить лишнее драйвера. Подозреваю , что можно обойти без них
|
|||
7
Likons
20.07.20
✎
10:51
|
(5) привязал ( есть подозрения , что проблема с номером порта в параметрах , но я не знаю как посмотреть номер порта USB сканера , пытаюсь копать в этом направлении. Хотя возможно это бред )
|
|||
8
shpioleg
20.07.20
✎
10:52
|
(6) А COM порт сканера , для начала, появился?
|
|||
9
shpioleg
20.07.20
✎
10:53
|
Сканер переведи в режим эмуляции ком порта (если поддерживается сканером
) |
|||
10
Likons
20.07.20
✎
11:01
|
(8) а эмуляция com в данном случае необходима ? Есть просто соседние конфигурации Розница 1.0 и УТП 1.2 , там работает без эмуляции com , вроде как. Но используются драйвера АТОЛ.
|
|||
11
Василий Алибабаевич
20.07.20
✎
11:08
|
(10) "AddIn.Scaner45" означает что и у тебя драйвер АТОЛ.
Одного только наличия драйвера недостаточно. Все должно быть согласовано. На какой порт сканер отдает ШК тот порт и должен слушать сканер. Исходя из "ОбъектДрайвера.НомерПорта = 100;" драйвер слушает клавиатуру. Проверь - сам сканер эмулирует клавиатуру? Проверить очень просто. Просканируй чего-нибудь при открытом блокноте. Если ШК появится - сканеер настроен "в разрыв клавиатуры". В диспетчере устройств его должно быть видно как HID устройство. |
|||
12
Василий Алибабаевич
20.07.20
✎
11:09
|
(11) /*должен слушать драйвер.
|
|||
13
Василий Алибабаевич
20.07.20
✎
11:10
|
+ (12) При любом способе подключения сканер должен после передачи ШК послать перевод строки. Иначе драйвер не определит окончание передачи.
|
|||
14
Likons
20.07.20
✎
11:14
|
(11) Спасибо за ответ )
Да , сканер настроен в "в разрыв клавиатуры" , в блокнот ШК сканируется. В простое полее ввода 1с , тоже сканируется ) А что значит перевод строки ? Имеется в виду суффикс "#13" ? |
|||
15
Василий Алибабаевич
20.07.20
✎
11:17
|
(14) Просканируй в блокноте два ШК. Если суффикс не настроен они лягут в одну строку. Если настроен - в две.
|
|||
16
Василий Алибабаевич
20.07.20
✎
11:19
|
+ (15) В драйвере есть метод типа ТестУстройства() или что-=то в этом духе. Его можно вызвать программно. Оно в своем собственном окне покажет текущие настройки.
|
|||
17
Likons
20.07.20
✎
11:21
|
(15) в блокноте сканирует с переходом на следующую строку , вроде норм.
|
|||
18
Likons
20.07.20
✎
11:21
|
(16) сейчас попробую , спасибо )
|
|||
19
Василий Алибабаевич
20.07.20
✎
11:25
|
В (0) вот это вот оно - "ОбъектДрайвера.Суффикс = "#13";"
Но суффикс (который отправляет сканер) может быть #13 или #10#13 или #13#10. Драйверу нужно указать точно такой, какой отправляет сканер. |
|||
20
Likons
20.07.20
✎
11:30
|
(19) Подозреваю , что нашел в чем проблема. Но еще не знаю как исправить.
Еще раз посмотрел на объект сканера в отладчике. Почему то он не запоминает параметры , которые я ему передаю. Например , я передаю ему ОбъектДрайвера.БитыДанных = 7; а в отладчике БитыДанных = 4 почему то. Аналогично не "запоминается" несколько параметров ( |
|||
21
Василий Алибабаевич
20.07.20
✎
11:32
|
(20) При подключении "в разрывч клавиатуры" ему пофиг на битность данных, четность, старт/стопы. Оно для КОМ-порта.
|
|||
22
Likons
20.07.20
✎
11:33
|
(21) а скорость обмена - тоже не важна ?
|
|||
23
Василий Алибабаевич
20.07.20
✎
11:37
|
(22) Оно помещает данные в буфер клавиатуры. Чтение оттуда намного выше, чем передача по КОМ-порту. И физика совершенно друная. Так что - не важно.
Для клавиатуры важно вот это : "ОбъектДрайвера.Чувствительность = 30;" Чем меньше - тем больше вероятность потери символов. Больше - есть вероятность, что ввод с клавиатуры будет опознан как ввод со сканера. |
|||
24
Likons
20.07.20
✎
12:20
|
(23) Попробовал так :
Процедура ПриНачалеРаботыСистемы() Попытка // Загрузка внешней компоненты ЗагрузитьВнешнююКомпоненту("C:\Program Files (x86)\ATOL\Drivers\Bin\Scaner1C.dll"); Попытка // Создание объекта Сканер = Новый("AddIn.Scaner45"); Сканер.НомерПорта = 100; Сканер.Суффикс = 13; Сканер.Чувствительность = 30; Сканер.УстройствоВключено=1; Сканер.OldVersion = 1; Исключение Сообщить("Объект не найден!"); КонецПопытки; Исключение Сообщить("Внешняя компонента драйвера не найдена"); КонецПопытки; КонецПроцедуры Заработало , но только на толстом клиенте ( |
|||
25
Likons
20.07.20
✎
13:37
|
Разобрался ) Оставлю тут решение , возможно кому то поможет )
В модуле управляемого приложения нужно засунуть это : Перем Сканер Экспорт; Процедура ПриНачалеРаботыСистемы()экспорт Попытка ProgID = "AddIn.Scaner45"; ПодключитьВнешнююКомпоненту(ProgID); Сканер = Новый(ProgID); Сканер.НомерПорта = 100; Сканер.Суффикс = Символ(13); Сканер.Чувствительность = 30; Сканер.УстройствоВключено=1; Сканер.OldVersion = 1; Исключение Сообщить("Обнаружены неполадки с драйвером сканера !"); КонецПопытки; КонецПроцедуры При чем в Сканер.Суффикс обязательно нужно передавать код символа суффикса , а не строку , иначе оно не работает ) Ну и Scaner1c.Dll должна быть зарегана. После таких манипуляций , внешнее событие начало откликаться ) Всем большое спасибо за ответы ) |
|||
26
Garykom
гуру
20.07.20
✎
13:42
|
Нахер ты для самописной конфы на свежей платформе решил юзать платный драйвер от атол?
Да еще и старый по технологии COM. Вместо нового бесплатного по технологии NativeAPI от самой 1С? |
|||
27
sitex
naïve
20.07.20
✎
13:46
|
(26) Он просто ее не разобрался. Чего сразу напал на человека)
|
|||
28
sitex
naïve
20.07.20
✎
13:46
|
(27) +еще
|
|||
29
Likons
20.07.20
✎
13:57
|
(26) О такой еще не слышал , поэтому сюда и написал , собственно. Вот нашел такое решение - решил поделиться. Что тут плохого то ? На "100% правильность" или споры о том какой метод реализации лучше не претендую , если бы я был уверен , в максимальной оптимальности моего подхода и тему бы не создавал )
|
|||
30
Likons
20.07.20
✎
13:59
|
(27) спасибо , добрый человек )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |