Ловля штрих-кода на живца

11 1

Раскладываем снасти

На месте этих строк должно быть много текста о том, что такое штрих-код и как происходит его считывание и дешифровка современными сканерами штрих-кода. Но в интернете полно подобных статей и повторять написанное тысячи раз не имеет смысла. Однако, позволю себе все-таки повториться и напомнить, что наиболее распространены сканеры с одним из трех интерфейсов: “клавиатурный”, RS-232 и USB. Сканеры с интерфейсом USB, как правило, используют эмуляцию либо клавиатуры, либо COM-порта.

На спиннинг или на удочку?

С “клавиатурным” сканером все более или менее понятно - информация, считанная сканером, будет направлена в порт клавиатуры, как если бы пользователь набрал эту информацию нажимая на кнопки. С обработкой же данных поступающих на COM-порт есть некоторые трудности - программа обрабатывающая такие данные должна “уметь” реагировать на событие поступления данных в порт. Как известно, в DIRECTUM реализовать реакцию на внешние события невозможно. Отчасти данную проблему решает утилита быстрой идентификации документов (RapID), однако, при помощи данной утилиты невозможно заставить пользователя произвести считывание штрих-кода в строго определенный момент времени, например, при заполнении реквизита какого-либо справочника или документа.

Ловись рыбка

Альтернативным решением в деле “ловли” штрих-кода может выступить утилита ComReader, которая является абсолютно бесплатной. Данная утилита состоит из одного модуля, который при установке регистрируется в операционной системе в качестве сервера автоматизации и предоставляет свои методы для использования в любом приложении, поддерживающим технологию Component Object Model. Основное назначение утилиты ComReader достаточно простое - дождаться поступления данных на COM-порт и передать полученные данные в вызвавшее приложение.

Назначение утилиты всего одно,а вот применений ей можно найти довольно много.

Рыбка №1

Простейший vbs-скрипт реализующий функцию непрерывного считывания штрих-кода.

sRet = ""

Set objBarCode = CreateObject("b_alt_ComReader.BCReader")
'Номер порта сканера
objBarCode.ComNumber = 6

While sRet <> "Cancel"
	sRet = objBarCode.InitRead()
	WScript.Echo sRet
	'Здесь может быть реализована любая обработка
Wend

Рыбка №2

Сценарий DIRECTUM, реализующий непрерывное считывание и обработку штрих-кода.

sBarCode = ""
sKeyWord = "DIRECTUM" 
nLenKeyWord = Length(sKeyWord)
 
ObjCom = CreateObject("b_alt_ComReader.BCReader")
//Номер порта сканера
ObjCom.ComNumber = 6


while sBarCode <<>> "Cancel"
  sBarCode = ObjCom.InitRead()
  
  if sBarCode <<>> "Cancel"
    bIsDirectumBarCode = False
    if Length(sBarCode) > nLenKeyWord
      if Copy(sBarCode;1;nLenKeyWord) == sKeyWord
        bIsDirectumBarCode = True
      endif
    endif
    
    if bIsDirectumBarCode
      sBarCode = Copy(sBarCode;nLenKeyWord + 2)
      nNumChar = CharPos("-";sBarCode)
      
      ShowMessage(Format("ИД инсталляции: %s%sИД документа: %s";
        ArrayOf(Copy(sBarCode;1;nNumChar - 1);Cr;Copy(sBarCode;nNumChar + 1))))
    else
      ShowMessage("Неверный формат штрих-кода")
    endif 
  endif  
endwhile

Рыбка №3

Пользовательский выбор при заполнении реквизита справочника.

sBarCode = ""
 
ObjCom = CreateObject("b_alt_ComReader.BCReader")
//Номер порта сканера
ObjCom.ComNumber = 6

sBarCode = ObjCom.InitRead()

if sBarCode <<>> "Cancel"
  //Простое заполнение реквизита считанным значением
  Requisite.Value = sBarCode
endif

Рыбка №4 (неожиданная)

Как оказалось, в режиме эмуляции COM-порта работают не только сканеры штрих-кодов, но и некоторые проксимити считыватели. Например, устройство использованное Александром Католиковым в проекте “Подтверждение выдачи бумажных документов при помощи магнитных карт-пропусков”. Данное обстоятельство существенно расширяет границы использования утилиты ComReader - от автоматизации заполнения реквизитов типа “Справочник - Работники”, до установки электронной подписи по карте-пропуску.

На правах НЕ рекламы

В описанных выше “рыбках” возможности утилиты ComReader раскрыты не полностью, т.к. задействовано всего лишь одно свойство и один метод. Полное описание всех свойств и методов, а также примеры кода и системные требования можно найти на сайте разработчика или в каталоге технических решений.

Дмитрий Тарасов

Рыбка понравилась, забавно получилось smiley

Авторизуйтесь, чтобы написать комментарий