IT-компания
Бизнес-Альянс
Рус Eng

Библиотека

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

Андрей Литвинов
руководитель направления DIRECTUM
ООО «Бизнес-Альянс»

Безмерно мудрый русский народ говорит, что  «для рыбалки мало страсти — нужны еще и снасти». Перефразировав пословицу, можно сказать, что для считывания штрих-кода не достаточно одного лишь сканера, нужна еще специализированная программа, способная принять, обработать и передать считанный штрих-код по назначению. Андрей Литвинов ловит рыбу в мутной воде способов считывания данных со сканеров.

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

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

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

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

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

Ловись, рыбка

Альтернативным решением в деле " ловли" штрих-кода может выступить наша бесплатная утилита ComReader. Утилита состоит из одного модуля, который при установке регистрируется в операционной системе в качестве сервера автоматизации и предоставляет свои методы для использования в любом приложении, поддерживающим технологию Component Object Model (COM, отсюда и название, а прочтение аббревиатуры на русском подарило утилите уникальный рыбообразный логотип). Основное назначение утилиты 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

ComReader: получение данных со сканера штрих-кода

Рыбка №3

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

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

sBarCode = ObjCom.InitRead()

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

Рыбка №4, случайно попалась

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

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

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