Имя: Пароль:
1C
 
Настройка сканера ШК тонкий клиент
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) спасибо , добрый человек )