Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Перехват сканера штрихкодов в ФормеСписка справочника (число прочтений - 15698 )
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #15 - 14. Января 2009 :: 11:18
Печать  
Bit писал(а) 14. Января 2009 :: 09:41:
Может я чегото не понял, но не просче ислользовать уже готовые компаненты преднажначеные специально для работы со сканерами, например от Атола?

С Атолом я не знаком. Стоящая вещь? В отношении сканера лучше ФормЭкса?
У ФормЭкса мне очень нравится Сервис со своими методами!

Еще нюанс:
У меня Рарус:Магазин (к сожалению, достался в наследство). И он (Рарус) очень не любит другие ВК. Но я не сдаюсь и взял за правило везьде, где вмешиваюсь - избавляться от него. Но штатные средства очень скудны. И тут меня "испортили" 1Срр и ФормЭксом.
Первый категорически не пойдет, пока не очищу конфигурацию. К тому же с ООП еще ни разу не сталкивался.
А от второй ВК - я в восторге!
Только очень не просто освоение дается  Подмигивание
Очень не хватает описаний "Кто? Где? и Зачем?". Особенно в жизненных примерах.
« Последняя редакция: 14. Января 2009 :: 12:59 - simply »  
Наверх
IP записан
 
Василий
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 02. Октября 2008
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #16 - 04. Февраля 2009 :: 13:11
Печать  
Решал похожую задачу. Ловить события прямо на форме не получилось (не всегда правильно ловилось), а вот добавив поле ввода все получилось. При открытии формы фокус устанавливается на поле ввода, дальше отслеживается код Enterа на этом поле.
  
Наверх
 
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #17 - 05. Февраля 2009 :: 10:56
Печать  
Василий писал(а) 04. Февраля 2009 :: 13:11:
Решал похожую задачу. Ловить события прямо на форме не получилось (не всегда правильно ловилось), а вот добавив поле ввода все получилось. При открытии формы фокус устанавливается на поле ввода, дальше отслеживается код Enterа на этом поле.

К сожалению в моем случае так нельзя.
Дело в том, что я сделал новый информационный справочник "Артикулы", по которому пользователи чаще всего ищут артикул быстрым поиском по первой колонке "Код" ("Артикул"), а Enter-ом открывать нужный элемент для детализированной информации.
Такое поле будет только мешать.
Я уже нашел решение и реализовал его.
Обязательно его здесь подробно опишу, но только чуточку позже. Время - дефицит  Печаль
  
Наверх
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #18 - 11. Февраля 2009 :: 14:47
Печать  
Как обещал раньше, опишу поподробнее решение своей проблемы. Времени-то никогда не хватает. А вдруг кому пригодится?

Описание проблемы:
  Создал новый информационный справочник "Артикулы", только для чтения. Установил все запреты на изменение, какие только 1С 7.7 позволяет.
  У пользователей ФормаСписка этого справочника открыта постоянно (самый популярный справочник).
  На рабочем месте кладовщиков на подставке стоит постоянно включенный ручной лазерный сканер штрихкодов Symbol PS/2.
  Заметил, что когда курсор находится в МногострочнойЧасти ФормыСписка, а под сканер попадает какой-либо штрихкод, то в ФормеСписка выполняется проба произвести быстрый поиск (как при наборе на клавиатуре цифр для поиска), затем ближайшая ячейка становится доступной для редактирвония (как при редактировании в списке) и ее значение заменяется либо на остатки штрихкода, либо на символ клавиши, случайно нажатой пользователем, либо удаляется вообще.

  Еще раз повторюсь, никакие запреты ни в коде, ни в свойствах объекта не помогали.

Решение:
1. Запрограммировал в ручные сканеры префикс "+++" и суффикс "+++". "Объяснил" это 1С-у.
2. ПриОткрытии() ФормыСписка установил - Форма.ТолькоПросмотр(1)
  Так я полностью защитил элементы справочника.

  Но появились новые беды.
  - Сканер после штрихкода в конце передает <Enter> и пользователь при быстром поиске нужного артикула в конце нажимает <Enter>. При нажатии Enter-а открывается форма элемента, в которой детализируется нужная инфомация.
  - <Enter> после сканера сначала попадает в процедуру ПриНажатииКнопкиКлавиатуры(), а только потом в процедуру ОбработкаВнешнегоСобытия(Источник,Событие,Данные).

  Пришлось выкручиваться дальше:
3. В предопределенной процедуре FormEx-а ПриНажатииКнопкиКлавиатуры(КодКлавиши,Альт,Шифт,Контрл,СимвКл,ФСО) прописал необходимые, ставшие недоступными, стандартные обработки нажатия кнопок клавиатуры.
  А также начал перехватывать символ "+" при нажатии <Shift>+<=> и на цифровой клавиатуре.
  Заметил, что при прохождении штрихкода через сканер в этой процедуре надежно можно отловить только эти символы, которые стал накапливать в переменной чКвоПлюсы. Опытным путем вычислил, что при сканировании штрихкода чКвоПлюсы всегда равно 2.
  Так я стал различать Enter от сканера и  от пользователя.
  А чКвоПлюсы обнуляю при открытии формы элемента при помощи замечательного метода Сервис.УстановитьПеременнуюКонтекста()

Возможно все это слишком сложно, но все другие опробованные мною варианты - еще сложнее и не помогают.  Улыбка
« Последняя редакция: 11. Февраля 2009 :: 15:55 - simply »  
Наверх
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #19 - 11. Февраля 2009 :: 15:40
Печать  
Цитата:
2. ПриОткрытии() ФормыСписка установил - Форма.ТолькоЧтение(1)
  Так я полностью защитил элементы справочника.

Поделись, как сумел установить Форма.ТолькоЧтение(1) Улыбка
  
Наверх
ICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #20 - 11. Февраля 2009 :: 15:54
Печать  
vip писал(а) 11. Февраля 2009 :: 15:40:
Цитата:
2. ПриОткрытии() ФормыСписка установил - Форма.ТолькоЧтение(1)
 Так я полностью защитил элементы справочника.

Поделись, как сумел установить Форма.ТолькоЧтение(1) Улыбка

Смех
сорри
Форма.ТолькоПросмотр(1)
а ТолькоЧтение - в голове засело ...

P.S.: уже исправил. Так старался в минимум текста вложить максимум доступного смысла, что заговорился  Улыбка
  
Наверх
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #21 - 11. Февраля 2009 :: 16:01
Печать  
Почитай http://www.uasoft.com.ua/content/articles/318/
Все твои проблемы расписаны.  Улыбка
  
Наверх
ICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #22 - 11. Февраля 2009 :: 17:26
Печать  
vip писал(а) 11. Февраля 2009 :: 16:01:
Почитай http://www.uasoft.com.ua/content/articles/318/
Все твои проблемы расписаны.  Улыбка

Статья - СУПЕР!
Нижайший тебе поклон, vip!!!

Выходит, добавь я в суффиксе символ энтера, и не было бы головных болей.
Суффикс = "+++&13".

Дело в том, что отлаживать мне не где. На всем нашем офисе нет ни одного ПК с PS/2. А через переходник PS/2-USB сканер не работает. Поэтому выкручивался как мог.
Но ведь сделал!  Подмигивание

На днях проверю в каком-нибудь магазине.
  
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #23 - 11. Февраля 2009 :: 19:57
Печать  
Я пользовался драйвером Атол-а atol.ru - особых проблем - не было
  
Наверх
ICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #24 - 12. Февраля 2009 :: 07:55
Печать  
simply писал(а) 11. Февраля 2009 :: 17:26:
Суффикс = "+++&13".

simply писал(а) 11. Февраля 2009 :: 17:26:
На днях проверю в каком-нибудь магазине.

Промучался весь вечер и все утро, размышлял над символом <Enter> в конце суффикса.
Если рассуждать логически, то 1С должна съесть <Enter>, считая его окончанием штрихкода от сканера.
А у меня в конфигурации очень много поисковых полей в формах, где автоматически в конце должен быть нажат <Enter>.

   Убедился в том, что и с Enter-ом в конце суффикса все поисковые поля отрабатывают как и раньше.
   Тогда я закоментировал в программном  коде проверку счетчика <чКвоПлюсы>. Проверка показала, что <Enter> от сканера отрабатывается раньше чем попадает в ОбработкаВнешнегоСобытия().

Выводы: в моем случае установка символа <Enter> в суффиксе ничего не меняет. Единственым надежным решением остается - моё.

Атол использовать не могу, т.к. у меня Рарус-Компонента
  
Наверх
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #25 - 12. Февраля 2009 :: 11:12
Печать  
Цитата:
Выводы: в моем случае установка символа <Enter> в суффиксе ничего не меняет. Единственым надежным решением остается - моё.

Выводы неправильные.
Позволю себе процитировать.
Цитата:
При считывании кода карты, происходит передача информации в виде нажатий клавиш на клавиатуре, как будто вводится вручную, но очень быстро. Чтобы различить нажатия клавиш пользователя от «нажатия клавиш» торговым оборудованием используются лидирующие (префикс) и завершающие символы (постфикс). Символ может быть один или несколько. Обязательным условием является наличие и префикса, и постфикса.

Теперь коротко о том как это работает. Сначала ожидается ввод префикса. Когда происходит нажатие символа(ов) префикса, определенное время ожидается (таймаут) ввод постфикса. Если постфикс был введен до истечения таймаута, то все символы, введенные в промежутке между префиксом и постфиксом, идентифицируются как считанный код карты. Из буфера клавиатуры распознанная последовательность нажатий клавиш удаляется и генерируется внешнее событие в 1С, передается информация о считанной карте. Эти занимается внешняя компонента RestU.dll. Она автоматически загружается при старте программы и находится в памяти до завершения работы 1С:Предприятия. Если не выполнится какое либо из вышеперечисленных условий – последовательность нажатий будет оставлена в буфере клавиатуры без изменений. Так будет происходить, если программе неверно указать префикс, постфикс или таймаут ожидания.

<Enter> здесь не при чем.
Сделай префикс например "#" и постфикс "#" без <Enter>.
Если не получится, поиграй с таймаутом.
  
Наверх
ICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #26 - 12. Февраля 2009 :: 13:01
Печать  
vip писал(а) 12. Февраля 2009 :: 11:12:
Чтобы различить нажатия клавиш пользователя от «нажатия клавиш» торговым оборудованием используются лидирующие (префикс) и завершающие символы (постфикс). Символ может быть один или несколько. Обязательным условием является наличие и префикса, и постфикса.

<Enter> здесь не при чем.
Сделай префикс например "#" и постфикс "#" без <Enter>.
Если не получится, поиграй с таймаутом.

На снимке все параметры настройки сканера.
Единственное, что мне не было известно - это установка в постфикс (суффикс) символа <Enter>.

Как видно на рисунке, в 1С таймаут установлен на 500 мс, точнее - 501.
Префикс = "+++"
Постфикс= "+++&13"

Все тоже запрограммировано в сканер.

Все, как написано в статье, происходит и у меня. Я наблюдал это при отладке ранее. Единственное отличие - название файла внешней компоненты, у меня Shop2Ukr.dll.
  В моей ФормеСписка, в процедуре ПриНажатииКнопкиКлавиатуры() я перехватываю нажатие пользователем <Enter> и открываю форму текущего элемента.
  Сюда же попадает <Enter> после сканера и естественно - тоже открывает форму элемента. А только потом данные сканера передаются в процедуру ОбработкаВнешнегоСобытия().
  После того, как я записал в префикс и суффикс значения "+++", 1С стало четко определяет, что это событие от сканера. Но ситуация с <Enter> осталась прежней.
  Поэтому я ввел счетчик чКвоПлюсы, который помогает мне отделить <Enter> сканера от <Enter> пользователя.

  Мне один пользователь показал как он один в один повторил ситуацию со сканером до настройки префикса и суффикса.
  На цифровой клавиатруе он быстро набирал цифры артикула и клавишу <Enter>. Курсор вошел в режим редактирования в списке. И код артикула стал доступен для изменения.
  Вот тогда я и ввел ПриОткрытии() - Форма.ТолькоПросмотр(1).
А теперь вынужден перехватывать клавишу <Enter> и двойной клик мыши, т.к. они в режиме просмотра не обрабатываются.

  vip, спасибо тебе огромное, что так много времени уделяешь моей проблеме!
  Слушай, может отличие ВК между мной и автором статьи и есть ключевым?!
  А то я уже не знаю на что еще смотреть ...
  

SetupScanerPS2_1.jpg ( 105 KB | Загрузки )
SetupScanerPS2_1.jpg
Наверх
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #27 - 12. Февраля 2009 :: 13:24
Печать  
Убери <Enter> из постфикса!!!
  
Наверх
ICQ  
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #28 - 12. Февраля 2009 :: 13:28
Печать  
И таймаут поменьше сделай.
  
Наверх
ICQ  
IP записан
 
simply
God Member
*****
Отсутствует


Мечта: избавиться от 1С

Сообщений: 573
Местоположение: Киев
Зарегистрирован: 31. Декабря 2008
Пол: Мужской
Re: Перехват сканера штрихкодов в ФормеСписка справочника
Ответ #29 - 12. Февраля 2009 :: 15:51
Печать  
vip писал(а) 12. Февраля 2009 :: 13:28:
И таймаут поменьше сделай.

Без <Enter>-а у меня и работало.
А какой таймаут установить? Как по умолчанию 200?

Да и есть ли смысл, что-либо менять? С реализованной у меня логикой - все работает надежно.
Если "Солнце всходит и заходит каждый день" - зачем что-то трогать? Улыбка
« Последняя редакция: 13. Февраля 2009 :: 07:00 - simply »  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать