В этой инструкции описана настройка 3-х разных драйверов, используемых для считывания кодов маркировки.
Драйверы описаны по убыванию рекомендации использования:

  1. Драйвер bcr_com.dll "COM Barcode Reader"
  2. Драйвер DMatrkbd.dll "DataMatrix reader"
  3. Драйвер noprefix.dll "USB or PS/2 keyboard reader, decimal or hexadecimal, no prefix"

Как устроена маркировка

При введении обязательной маркировки для регистрации единичных товаров и групповых упаковок используются марки по стандарту DataMatrix.
Данные в марке содержат данные, закодированные по стандарту организации GS1.

Данные соединены в одну строку нескольких порций данных. Каждая порция данных начинается с "идентификатора применения". За ним сразу идёт блок данных, соответствующий этому идентификатору применения.
Идентификаторы применения: в документации AI - стандартизированы организацией GS1, и содержат две или более цифр. Данные для некоторых AI имеют фиксированную длину. Список таких AI зафиксирован. У остальных AI длина данных имеет переменную длину, поэтому для обозначения конца таких данных используется непечатаемый символ GS с ASCII кодом 29 (0x1D).
Очень важно, чтобы считыватель мог передать в драйвер символ разделителя данных GS. Иначе код маркировки будет неправильно разобран и передан в ОФД. Проблему с отсутствием кода GS практически невозможно обнаружить автоматически, стандарт GS не накладывает ограничений по длине на данные переменной длины.

Набор AI для каждого типа товаров, подлежащих обязательной маркировке, определяется НПА. Два AI являются обязательными для всех типов товаров:

  • AI(01) - GTIN. Глобальный идентификатор вида товара. GTIN присваивается товару по правилам организации GS1.
  • AI(21) - Serial number. Серийный номер единицы товара. Serial number присваивается единице товара по правила компании Честный Знак.

По обязательному наличию этих двух AI MCR алгоритм "Маркированная продукция GS1" добавляет к блюду специальный модификатор, содержащий данные маркировки.
Затем эти данные передаются в ФР при печати фискального чека.
Передача данных маркировки в ФР происходит в виде данных тега 1162 (код маркировки). Из данных маркировки выделяются необходимые данные.
Данные в марках для табачной продукции отличаются от всех остальных типов товаров. В данных маркировки для табака не содержатся идентификаторы применения и разделители GS, поэтому для передачи табачных марок не требуется тщательная настройка передачи символа GS. GTIN в марке, содержащий 14 цифр, должен соответствовать одномерному штрих-коду EAN13, обычно размещаемому на той же упаковке. 

MCR-алгоритмы для маркировки в поставке

  • ЕГАИС EAN13 {97609C73-11D8-40FE-8460-F000FD69E9E0} - читает EAN13 код в первый обязательный модификатор для блюда ЕГАИС
  • ЕГАИС PDF417 {04A80B34-A4CD-46FA-8BB6-D0965DE8089F} - читает акцизную марку во второй обязательный модификатор для блюда ЕГАИС
  • Маркированная продукция (GS1) {9BDABBC6-CB93-4EA9-ACC2-13E7C124588B} - читает DataMatrix марку в обязательный модификатор для блюда с маркировкой
  • Поддержка Штрих Кодов {694CC6A6-F943-4521-B23C-CDB18960178F} - читает EAN13 и добавляет блюдо
  • табак1 {937265C9-9649-49B7-B0F6-EC90B3E17928} - читает DataMatrix на пачке сигарет, берет оттуда EAN13 и добавляет блюдо. Если блюдо уже было добавлено — добавляет повторно. Алгоритм необходимо использовать, если при продаже сигарет не используется считывание EAN13 кода. Код в DataMatrix и в EAN13 может отличаться, это приводит к проблемам. Лучше отключить алгоритм.
  • табак2 {D4CBDC46-21F0-41FA-A0A2-600DA5BDDE3B} - читает DataMatrix на пачке сигарет в обязательный модификатор для блюда маркировкой

Модели сканеров

Для считывания маркировки "Честный Знак" должны подойти любые сканеры 2D, читающие DataMatrix.

Но алкогольные марки  встречаются и в формате PDF417.

Хороший список сканеров можно найти на странице проверки сканера.

Драйвер bcr_com.dll "COM Barcode Reader"

Используется для считывателей:

  • подключаемых в COM-порт по интерфейсу RS-232
  • подключаемых в порт USB и настроенных в режим эмуляции COM-порта (USB-Serial, Virtual Serial, CDC)

Достоинства:

  • Высокая скорость передачи информации
  • В настройках считывателя необходима только передача суффикса, параметр уже настроен по умолчанию.
  • Отсутствие пропуска символов
  • Возможность передачи всего алфавита символов ASCII
  • Нет проблем с использованием нескольких считывателей для разных MCR алгоритмов. Считыватели различаются по портам, без настройки разных префиксов

Недостатки:

  • Необходимо настраивать номер COM-порта
  • Для считывателей с интерфейсом USB необходимо переключения режима считывателя.
  • Для считывателей с интерфейсом USB необходима установка дополнительного драйвера
  • Для считывателей с интерфейсом USB невозможны подключения при уже запущенной программе

Настройка считывателя:

  • Переключите считыватель в режим эмуляции COM-порта (USB-Serial, Virtual Serial, CDC)
  • Отключите передачу префикса (prefix). Обычно настроено по умолчанию.
  • Настройте передачу суффикса (suffix, postfix) - символ CR (0x0D) или LF (0x0A), или комбинация CR-LF(0x0D, 0x0A). Обычно настроено по умолчанию.

Настройка драйвера

  • Обновите драйвер до версии не ниже 1.0.4.0 
  • Подключите считыватель к станции
  • Установите драйвер производителя для виртуального COM-порта, если такой еще не установлен в Windows
  • В панели управления выберите Диспетчер устройств, вкладку Порты. Узнайте номер COM-порта подключенного считывателя
  • В менеджерской станции перейдите во вкладку Сервис > Станции и Устройства
  • В открывшемся меню выберите кассу своего ресторана и перейдите на вкладку Устройства
  • Нажмите правой кнопкой мыши на свободном пространстве под Windows Video Driver. В появившемся окне выберите Список драйверов > I/0 порт > COM for Windows.
    Зажав левую кнопку мыши на надписи COM for Windows перетащите драйвер в свободное пространство. Отпустите мышку. 
  • В разделе Опции, в пункте Device Name введите номер COM-порта подключенного считывателя из Диспетчера устройств. Для двухзначного номера порта пропишите: "\\.\ComXX", где XX - номер порта
  • Нажмите правой кнопкой мыши на свободном пространстве под драйверами. В появившемся окне выберите Список драйверов > Считыватель штрих-кодов > COM Barcode Reader.
    Зажав левую кнопку мыши на надписи COM Barcode Reader перетащите драйвер на зеленый значок под надписью COM for Windows. Отпустите мышку. Драйвер считывателя добавится в конфигурацию  COM-порта.
  • В разделе Опции, в пункте Character Set из выпадающего списка выберите Datamatrix GS1 (0x1D,0x20-0xFF)
  • Сохраните изменения
  • Запустить кассовую станцию
  • В разделе прочее перейдите в меню Служебное меню > Отладка MCR алгоритмов
  • Проверьте настройки драйвера.

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

Драйвер DMatrkbd.dll "DataMatrix reader"

Используется для считывателей:

  • подключаемых в порт PS/2
  • подключаемых в порт USB и настроенных в режим эмуляции HID-клавиатуры

Достоинства:

  • Нет необходимости настраивать номер порта
  • Возможно переподключение считывателя при уже запущенной программе
  • Не замедляет клавиатурный ввод

Недостатки:

  • Необходимо настраивать префикс в считывателе
  • Медленная скорость передачи информации
  • Возможен пропуск символов, если считыватель передаёт их слишком быстро для Windows
  • Могут быть введены символы, только которые можно набрать на клавиатуре
  • Зависит от настроек клавиатуры в Windows
  • Зависит от состояния клавиатуры в Windows: язык, caps lock, num lock, нажатые клавиши

Настройка считывателя:

  • Переключите в режим эмуляции HID-keyboard. Обычно настроено по умолчанию
  • Настройте префикс в значение Ctrl-B: сканкоды последовательно 0x1D, 0x30
  • Проверьте с помощью отдельной утилиты, какие сканкоды присылает считыватель при считывании штрих-кода образца
  • Если последовательность сканкодов начинается не с 0x1D - 0x30, то префикс настроен не правильно.
    Дело в том, что считыватель может посылать код отжатия клавиши Ctrl (0x9D) раньше кода нажатия клавиши В (0x30). В этом случае настроите префикс на передачу только клавиши Ctrl (сканкод 0x1D).
    При этом проверьте, что сканкод 0x0B появляется сразу после сканкода 0x9D.
    Если не получается настроить указанный префикс, то настройте любой несимвольный префикс: например клавишу F1 со сканкодом 0x3B. Затем посмотрите утилитой на сканкоды при считывании образца.
    Первый или первые два сканкода можно использовать в качестве параметра драйвера.
    После них и до сканкода 0x0B не должно быть сканкодов со значением меньше 0x80.
  • Настроите передачу суффикса (suffix, postfix) - клавиша Enter (сканкод 1). Обычно бывает уже настроено по умолчанию.
  • Выясните в инструкции к модели считывателя какой клавишей передаётся код GS (0x1D). Код должен передаваться одной клавишей, а не комбинацией.
    Проверьте утилитой присутствие указанной клавиши в данных при считывании образцового штрих-кода. Если указанная клавиша отсутствует в считанных данных, то считыватель передает символ GS нажатием комбинации Ctrl-ASCII. Отключите этот режим.

Настройка драйвера:

  • Обновить драйвер до версии не ниже 7.0.4.0 
  • В менеджерской станции перейдите во вкладку Сервис > Станции и Устройства
  • В открывшемся меню выберите кассу своего ресторана и перейдите на вкладку Устройства
  • Нажмите правой кнопкой мыши на свободном пространстве под Windows Video Driver. В появившемся окне выберите Список драйверов > I/0 порт > KBD port for Windows.
    Зажав левую кнопку мыши на надписи KBD port for Windows перетащите драйвер в свободное пространство. Отпустите мышку. 
  • Нажмите правой кнопкой мыши на свободном пространстве под драйверами. В появившемся окне выберите Список драйверов > Считыватель штрих-кодов > Datamatrix reader.
    Зажав левую кнопку мыши на надписи Datamatrix reader перетащите драйвер на зеленый значок под надписью KBD port for Windows. Отпустите мышку. Драйвер считывателя добавится в конфигурацию порта.
  • В разделе Опции, в пункте Prefix укажите значение, в зависимости от префикса в считывателе:
    • Если в считывателе настроен префикс Ctrl-B, считанные сканкоды: 0x1D, 0x30 — введите $1D30
    • Если в считывателе настроен префикс для клавиши, сканкод 0x3B — введите $3B
  • В разделе Опции, в пункте Key for GS symbol из выпадающего списка выберите какой клавишей передаётся код GS
  • Сохраните изменения
  • Запустить кассовую станцию
  • В разделе прочее перейдите в меню Служебное меню > Отладка MCR алгоритмов
  • Проверьте настройки драйвера.

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

Драйвер noprefix.dll "USB or PS/2 keyboard reader, decimal or hexadecimal, no prefix"

Используется для считывателей:

  • подключаемых в порт PS/2
  • подключаемых в порт USB и настроенных в режим эмуляции HID-клавиатуры.

Достоинства:

  • Нет необходимости настраивать номер порта
  • Нет необходимости настраивать считыватель. Большинство считывателей работают в этом режиме по умолчанию.
  • Возможно переподключение считывателя при уже запущенной программе

Недостатки:

  • Замедляет клавиатурный ввод. Из-за отсутствия фильтрации по префиксу, вынужден захватывать все нажатия клавиш и передавать их программе только после истечения паузы или получения нажатия Enter.
  • Из-за отсутствия префикса невозможно различить считыватели, если их более одного
  • Медленная скорость передачи информации
  • Возможен пропуск символов, если считыватель передаёт их слишком быстро для Windows
  • Могут быть введены символы, которые есть только на клавиатуре
  • Зависит от настроек клавиатуры в Windows
  • Зависит от состояния клавиатуры в Windows: язык, caps lock, num lock, нажатые клавиши

Настройка считывателя

  • Переключите в режим эмуляции HID-клавиатуры (HID-keyboard). Обычно уже настроено по умолчанию
  • Отключите передачу префикса. Обычно уже настроено по умолчанию
  • Настроите передачу суффикса (suffix, postfix) - клавиша Enter: сканкод 1. Обычно бывает уже настроено по умолчанию.
  • Выясните в инструкции к модели считывателя какой клавишей передаётся код GS (0x1D). Код должен передаваться одной клавишей, а не комбинацией.
    Проверьте утилитой присутствие указанной клавиши в данных при считывании образцового штрих-кода. Если указанная клавиша отсутствует в считанных данных, то считыватель передает символ GS нажатием комбинации Ctrl-ASCII. Отключите этот режим

Настройка драйвера:

  • Обновите драйвер до версии не ниже 7.0.11.0 
  • В менеджерской станции перейдите во вкладку Сервис > Станции и Устройства
  • В открывшемся меню выберите кассу своего ресторана и перейдите на вкладку Устройства
  • Нажмите правой кнопкой мыши на свободном пространстве под Windows Video Driver. В появившемся окне выберите Список драйверов > I/0 порт > KBD port for Windows.
    Зажав левую кнопку мыши на надписи KBD port for Windows перетащите драйвер в свободное пространство. Отпустите мышку. 
  • Нажмите правой кнопкой мыши на свободном пространстве под драйверами. В появившемся окне выберите Список драйверов > Бесконтактный считыватель > USB os PS/2 keyboard reader, decimal or hexadecimal, no prefix.
    Зажав левую кнопку мыши на надписи USB os PS/2 keyboard reader, decimal or hexadecimal, no prefix перетащите драйвер на зеленый значок под надписью KBD port for Windows. Отпустите мышку. Драйвер считывателя добавится в конфигурацию порта.
  • В разделе Опции:
    • в пункте Compatible mode из выпадающего списка выберите As is
    • в пункте Device type из выпадающего списка выберите Bar Code Reader
    • в пункте Key for GS symbol из выпадающего списка выберите какой клавишей передаётся код GS
  • Сохраните изменения
  • Запустить кассовую станцию
  • В разделе прочее перейдите в меню Служебное меню > Отладка MCR алгоритмов
  • Проверьте настройки драйвера.

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

Проверка настройки считывателя

  1. Запустите кассовую станцию
  2. В разделе прочее перейдите в меню Служебное меню > Отладка MCR алгоритмов

  3. Считайте считывателем код: 
  4. На экране появится код:

    В некоторых считывателях код GS отображается как \xe8.
    В старых версиях r_keeper 7 код может отображаться с квадратами:

Если на экране код:

это может означать что:

  • символ GS был утерян
  • считыватель не передаёт сканкод при обнаружении символа GS
  • в драйвере неправильно настроен параметр Key for GS symbol

Для настройки драйверов dmatrkbd и noprefix используйте программу getscans. Программа используется для настройки считывателей, эмулирующих клавиатуру. Она показывает значения сканкодов.
Найдите клавишу, на которую сканер заменяет символ GS.
Для этого запустите программу и считайте тестовый штрихкод:


В нем содержится:

  • специальный символ FNC1, обозначающий кодировку по стандарту GS1. Может заменяться сканером на символ GS (0x1D) или игнорироваться в первой позиции кода.
  • цифра 1
  • специальный символ GS, обозначающий конец данных переменной длины по стандарту GS1.
  • цифра 2
  • специальный символ FNC1, который тоже может использоваться вместо символа GS
  • цифра 3

После считывания получится следующий результат:

Это правильная настройка считывателя для драйвера dmatrkbd, с использованием префикса $1D.

Видно, что считыватель передаёт:

  • Префикс Ctrl (0x1D)
  • Проигнорировал символ FNC1 в начале кода, это допустимо.
  • Клавишу 1 (сканкод 0x02)
  • Клавишу F8 (сканкод 0x42) вместо символа GS
  • Клавишу 2 (сканкод 0x03)
  • Клавишу F8 (сканкод 0x42) вместо символа GS, на который был заменён символ FNC1, что рекомендовано стандартом GS1
  • Клавишу 3 (сканкод 0x03)
  • суффикс Enter (сканкод 0x1C)

Это правильная настройка считывателя для драйвера dmatrkbd, с использованием префикса $1D (не $1D30, т.к. сканер не поддерживает такой префикс)

Кроме цифр 1, 2, 3 в тестовом штрихкоде содержаться лишь заголовочный символ FNC1, который может как передаваться считывателем, так и пропускаться, и символы разделители GS.

Клавиша, передающую символ GS находится между сканкодами цифр 1 и 2, и повторяется между сканкодами цифр 2 и 3.

После того, как вы обнаружили клавишу для разделителя GS ( в данном случае клавиша F8), остаётся увидеть префикс.

На представленном примере видно, что префикс состоит только из сканкода 0x1D, так как отжатие клавиши Ctrl (сканкод 0x9D) происходит раньше, чем нажатие клавиши 1 (сканкод 0x02)

Если считыватель посылает сначала нажатие клавиши Ctrl (сканкод 0x1D), потом нажатие клавиши B (сканкод 0x30), потом в любом порядке отжатия клавиши Ctrl, то префикс состоит из двух сканкодов 0x1D и 0x30, поэтому префикс в драйвере нужно задавать $1D30 . Примеры:

Если не удалось настроить сканирование

  • перейдите в папку  установки r_keeper
  • откройте папку Rk7Cash, в ней текстовым редактором откройте файл: wincash.ini
  • в блоке [CONFIG] добавьте строчку DebugMessages=55,56,76,80

  • сохраните изменения
  • считайте тестовый штрих-код
  • выключите кассу
  • в папке r_keeper откройте папку Logs, оттуда скопируйте файл cash.stk и пришлите на sd.rkeeper.ru с описанием проблемы