Вход | Регистрация
 

Настройка сканера ШК тонкий клиент

Настройка сканера ШК тонкий клиент
Я
   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;

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

Буду благодарен за любую наводку )
   Likons
 
1 - 20.07.20 - 10:37
PS : в отладчике ОбъектДрайвера имеет тип AddIn.Scaner45 , с заполненными мною значениями - все ок. Но Внешнее событие не вызывается , при сканировании
   Alex Проблемный
 
2 - 20.07.20 - 10:39
(0) Я не особо в теме, но вроде бы ещё нужна компонента 1С scaner1C?
   Likons
 
3 - 20.07.20 - 10:42
(2) угу , там специальная dll для сканеров есть , называется Scaner1C.dll. У меня она есть и она зареганая и даже создается объект с её типом. Беда в том , что не вызывается внешнее событие (
   Alex Проблемный
 
4 - 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/
   Anton1307
 
5 - 20.07.20 - 10:45
А у формы назначил, что по событию "Внешнее событие" должен вызываться метод "ВнешнееСобытие" ?
А то я так когда-то парился - метод скопировал, а к форме привязать забыл
   Likons
 
6 - 20.07.20 - 10:50
(4) спасибо ) Но там работают через com , у меня usb ( Можно , конечно , попробовать поиграться с эмулятором , но хочется ставить лишнее драйвера. Подозреваю , что можно обойти без них
   Likons
 
7 - 20.07.20 - 10:51
(5) привязал ( есть подозрения , что проблема с номером порта в параметрах , но я не знаю как посмотреть номер порта USB сканера , пытаюсь копать в этом направлении. Хотя возможно это бред )
   shpioleg
 
8 - 20.07.20 - 10:52
(6) А COM порт сканера , для начала, появился?
   shpioleg
 
9 - 20.07.20 - 10:53
Сканер переведи в режим эмуляции ком порта (если поддерживается сканером
)
   Likons
 
10 - 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) При любом способе подключения сканер должен после передачи ШК послать перевод строки. Иначе драйвер не определит окончание передачи.
   Likons
 
14 - 20.07.20 - 11:14
(11) Спасибо за ответ )
Да , сканер настроен в "в разрыв клавиатуры" , в блокнот ШК сканируется. В простое полее ввода 1с , тоже сканируется )
А что значит перевод строки ? Имеется в виду суффикс "#13" ?
   Василий Алибабаевич
 
15 - 20.07.20 - 11:17
(14) Просканируй в  блокноте два ШК. Если суффикс не настроен они лягут в одну строку. Если настроен - в две.
   Василий Алибабаевич
 
16 - 20.07.20 - 11:19
+ (15) В драйвере есть метод типа ТестУстройства() или что-=то в этом духе. Его можно вызвать программно. Оно в своем собственном окне покажет текущие настройки.
   Likons
 
17 - 20.07.20 - 11:21
(15) в блокноте сканирует с переходом на следующую строку , вроде норм.
   Likons
 
18 - 20.07.20 - 11:21
(16) сейчас попробую , спасибо )
   Василий Алибабаевич
 
19 - 20.07.20 - 11:25
В (0) вот это вот оно - "ОбъектДрайвера.Суффикс    = "#13";"

Но суффикс (который отправляет сканер) может быть #13 или #10#13 или #13#10. Драйверу нужно указать точно такой, какой отправляет сканер.
   Likons
 
20 - 20.07.20 - 11:30
(19) Подозреваю , что нашел в чем проблема. Но еще не знаю как исправить.
Еще раз посмотрел на объект сканера в отладчике.
Почему то он не запоминает параметры , которые я ему передаю.
Например , я передаю ему 
ОбъектДрайвера.БитыДанных = 7;

а в отладчике БитыДанных = 4 почему то. 

Аналогично не "запоминается" несколько параметров (
   Василий Алибабаевич
 
21 - 20.07.20 - 11:32
(20) При подключении "в разрывч клавиатуры" ему пофиг на битность данных, четность, старт/стопы. Оно для КОМ-порта.
   Likons
 
22 - 20.07.20 - 11:33
(21) а скорость обмена - тоже не важна ?
   Василий Алибабаевич
 
23 - 20.07.20 - 11:37
(22) Оно помещает данные в буфер клавиатуры. Чтение оттуда намного выше, чем передача по КОМ-порту. И физика совершенно друная. Так что - не важно.
Для клавиатуры важно вот это : "ОбъектДрайвера.Чувствительность = 30;" Чем меньше - тем больше вероятность потери символов. Больше - есть вероятность, что ввод с клавиатуры будет опознан как ввод со сканера.
   Likons
 
24 - 20.07.20 - 12:20
(23) Попробовал так :

Процедура ПриНачалеРаботыСистемы() 
    
    Попытка
        // Загрузка внешней компоненты

        ЗагрузитьВнешнююКомпоненту("C:\Program Files (x86)\ATOL\Drivers\Bin\Scaner1C.dll");
        Попытка
            // Создание объекта

            Сканер = Новый("AddIn.Scaner45");
            Сканер.НомерПорта = 100;
            Сканер.Суффикс    = 13;
            Сканер.Чувствительность    = 30;
            Сканер.УстройствоВключено=1;
            Сканер.OldVersion = 1;
        Исключение
            Сообщить("Объект не найден!");
        КонецПопытки;
    Исключение
        Сообщить("Внешняя компонента драйвера не найдена");
    КонецПопытки;
    
КонецПроцедуры

Заработало , но только на толстом клиенте (
   Likons
 
25 - 20.07.20 - 13:37
Разобрался ) Оставлю тут решение , возможно кому то поможет )

В модуле управляемого приложения нужно засунуть это :
Перем Сканер Экспорт;

Процедура ПриНачалеРаботыСистемы()экспорт 
    
    Попытка
        ProgID = "AddIn.Scaner45"; 
        ПодключитьВнешнююКомпоненту(ProgID); 
        Сканер = Новый(ProgID);
        Сканер.НомерПорта = 100;
        Сканер.Суффикс    = Символ(13);
        Сканер.Чувствительность    = 30;
        Сканер.УстройствоВключено=1;
        Сканер.OldVersion = 1;
    Исключение
        Сообщить("Обнаружены неполадки с драйвером сканера !");
    КонецПопытки;
КонецПроцедуры

При чем в Сканер.Суффикс обязательно нужно передавать код символа суффикса , а не строку , иначе оно не работает )

Ну и Scaner1c.Dll должна быть зарегана.
После таких манипуляций , внешнее событие начало откликаться )
Всем большое спасибо за ответы )
   Garykom
 
26 - 20.07.20 - 13:42
Нахер ты для самописной конфы на свежей платформе решил юзать платный драйвер от атол?

Да еще и старый по технологии COM.
Вместо нового бесплатного по технологии NativeAPI от самой 1С?
   sitex
 
27 - 20.07.20 - 13:46
(26) Он просто ее не разобрался. Чего сразу напал на человека)
   sitex
 
28 - 20.07.20 - 13:46
(27) +еще
   Likons
 
29 - 20.07.20 - 13:57
(26) О такой еще не слышал , поэтому сюда и написал , собственно. Вот нашел такое решение - решил поделиться. Что тут плохого то ? На "100% правильность" или споры о том какой метод реализации лучше не претендую , если бы я был уверен , в максимальной оптимальности моего подхода и тему бы не создавал )
   Likons
 
30 - 20.07.20 - 13:59
(27) спасибо , добрый человек )
 
 Рекламное место пустует


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.