Введение

MCR-алгоритмы обеспечивают обработку сигналов с различных устройств ввода. Драйвер устройства отправляет:

  • Данные о сигнале устройства, DeviceSignal. DeviceSignal бывает 5 типов:
    • sgMagCard — магнитная карта
    • sgBarCode — штрих-код
    • sgDallas — даллас
    • sgKBDInterface — клавиатура
    • sgNoTouch — бесконтактный.
  • Идентификатор устройства, DeviceIdent. Задается в параметре драйвер Device Identifier.
  • Строку полученных входных данных.

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

Существует несколько типов алгоритмов, различающихся методом обработки данных. Не все из них используют всю информацию, предоставляемую драйвером, например анализироваться может только строка ввода. Для проверки корректности работы MCR-алгоритмов существует форма, в которой задаются входные воздействия и отображается их результат. Результат — список отработавших алгоритмов и выданных ими параметров и объектов.

Для всех MCR-алгоритмов задают свойства:

  • Тип алгоритма
  • Типы устройств — набор типов устройств, сигналы с которых будут обрабатываться этим алгоритмом
  • Область — способ дальнейшей обработки MCR-алгоритма или тип объекта.

Объект заполняется для всех областей кроме:

  • Работник
  • Карта входа
  • Штрих-код элемента меню
  • Код элемента меню.

Именно выбранный объект будет посылаться кассе после обработки сигнала от входного устройства.

Заполнять поле ввода параметром – поле видимо только вместе с полем объект.

При обработке многих объектов используется поле ввода в форме редактирования заказа. Например, при обработке элемента меню в поле ввода ожидается количество. Если стоит галочка в этом свойстве, то параметр, полученный при обработке MCR-алгоритмов будет обрабатываться так, как будто эта информация была введена в поле ввода.
Например, на магнитной полосе записано 1234. Существует MCR-алгоритм типа префикс с префиксом «123», областью «Элемент меню» и выставленным флагом «Заполнять поле ввода параметром». При прокатывании карточки параметр определится как 4 (результат отсечения префикса 123). В результате, добавится блюдо с количеством 4.

Область применения

Область — способ дальнейшей обработки MCR-алгоритма или тип объекта. Способы обработки без объекта:

  • Работник — регистрация работника в системе, в том числе для подтверждения операции. 
     Параметр, полученный при обработке MCR-алгоритма, сравнивается со свойством работников Код Карты и находится нужный работник.
  • Карта входа — обработка карты на входе.
  • Штрих-код элемента меню — поиск блюда по штрих-коду и добавление его в заказ. 
    Параметр, полученный при обработке MCR-алгоритма, сравнивается со свойством элементов меню Штрих-Коды и находится нужный. Кроме того, штрих-код может содержать вес, который тоже должен быть добавлен в параметр с разделителем «;». Пример MCR-алгоритма для обработки весовых блюд есть в стандартной поставке.
  • Код элемента меню — поиска блюда по коду и добавление в заказ. 
    Параметр, полученный при обработке MCR алгоритма, сравнивается со свойством элементов меню Код и находится нужный.

Для областей

  • Валюта
  • Элемент Меню
  • Тип заказа
  • Скидка

заполняется соответствующий объект. Как правило, при обработке таких MCR-алгоритмов параметр не важен, однако он может использоваться как информация из поля ввода.

Интерфейс – для MCR-алгоритмов этой области очень важно правильное определение параметра, так как именно параметр будет обрабатываться интерфейсом для связи с другими системами.

Типы MCR-алгоритмов 

DLL версии 7.0

Разбором входных данных занимается DLL, библиотека, имя которой задано в поле Имя DLL.

Прототип функции:

function (

Device: byte;       // Тип устройства

DeviceID: word;     // ID устройства

const Src: pChar;   // Указатель на входные данные (полученная строка)

ResBuffer: pchar    // Указатель на буфер, в который будет помещена обработанная строка-параметр

): integer; stdcall;
CODE

Возвращаемое значение:

Если входные данные нужного типа, функция должна вернуть число от 0 до 255. В этом случае это число считается длиной результата в ResBuffer. Числа вне диапазона 0 – 255 считаются признаком того, что данные не подходят алгоритму.

Префикс

Алгоритм проверяет, что данные на входе начинаются с последовательности, заданной в поле Префикс. Оставшаяся часть передается как параметр.

Например, для префикса «321» входные данные вида «32167» будут верны, полученный параметр будет «67».

Обработка по маске

Обработка идет по маске, заданной в поле Маска обработки.

Правила обработки следующие:

  • Символы 0123456789+-/=,A..Z обязательны на позициях, где стоят
  • a..f — текстовые
  • i..n — цифровые части распознанного текста для параметра
  • r — код ресторана
  • ? — игнорируется и учитывается в длине
  • Символы после * не учитываются.

Например, для маски «?bbb=jjj=aaa/iii*» и данных «Q456=000=123/789SOMEINFO» маска сработает и параметр будет таким: 123;456;789;000. 

Для обработки весовых товаров следует добавить алгоритм с обработкой по маске и типом объекта Штрих-код элемента меню либо Код элемента меню. Существует предустановленный элемент, который можно отредактировать. Например, формат данных 280aaaabbbbb? указывает, что цифры 280 являются контрольными, а на месте символа ? может находиться любой — символ введен для контроля длины. Такой алгоритм присутствует в стандартной поставке.

Рассмотрим строку ввода:

  • 280aaaabbbbb?
  • 2800198015007

В соответствии с маской выражение разберется:

  • ___019801500
  • Parameter = 0198;01500
    • 0198 — штрих-код блюда или код в случае типа объекта Код элемента меню
    • 01500 — вес блюда.
      Вес блюда будет разделен на значение, указанное в параметре BarcodeDivisor, который находится в группа параметров Весовой товар.

Если выбран тип объекта Код элемента меню или Штрих-код элемента меню, то параметр содержит идентифицирующий код — штрих-код, и, при необходимости, вес блюда. Если штрих-код весовой, то свойство Коэффициент количества штрих-кода игнорируется.

Если в строке ввода нет идентификаторов, которые следует передать в параметр, то при соответствии строки ввода маске передается вся строка ввода, например:

  • Маска: 992=?A??,
  • Ввод: 992=BAYZ

Так как ввод соответствует маске, то параметр будет 992=BAYZ.

Интерфейс

Разбором входных данных занимается некий интерфейс.

Интерфейс, за исключением внутренних, представляет собой DLL, соответствующую определенным спецификациям. Использование интерфейса только для обработки устройств ввода нецелесообразно.

Если у вас имеется некий интерфейс, используемый с какой-либо системой, предоставленной третьей стороной, и вы хотите включить в него возможность обработки устройств ввода, следует обратиться к разработчиками с запросом.

Скрипт вер. 7.0

Позволяет составить скрипт для обработки непосредственно в интерфейсе программы. Поэтому нет необходимости для составления собственной DLL.

Обработка основана на Innerfuse Pascal Script. Синтаксис языка такой же, как в языке Pascal, но набор функций ограничен. Обработчик поддерживает: 

  • Стандартные типы:
    • Byte
    • Shortint
    • Char
    • Word
    • SmallInt
    • Cardinal
    • Longint
    • Integer
    • String
    • Real
    • Double
    • Single
    • Extended
    • Comp
    • Boolean
    • Array
    • Record
    • Variant.
  • Переменные, константы
  • Стандартные выражения
    • Begin/End
    • If/Then/Else
    • For/To/Downto/Do
    • Case x Of
    • Repeat/Until
    • While
    • With
    • Uses
    • Try/Except/Finally Exit
    • Continue, Break. 
  • Функции, процедуры, параметры Array of Const, Var.

Каждый скрипт имеет заголовок вида:

function (

DeviceSignal: Integer;  // Сигнал устройства sgXXXX

DeviceIdent: Integer;   // идентификатор устройства, см. Device identifier

var Parameter: String  // На входе – вся информация, на выходе - параметр

): Boolean;
CODE

Возвращаемое значение:

Если TRUE, то скрипт считается корректно отработавшим, параметр берется из переменной Parameter

Список поддерживаемых функций представлен в файле RK7Scripts.doc, который можно скачать из папки на FTP /rk7/ForDealers/docs_english.

Существует возможность вызова функций из DLL. Для этого создайте MCR-алгоритм с типом Скрипт вер. 7.0 и областью Script Header. Такие алгоритмы не являются алгоритмами распознавания и служат для задания заголовков других алгоритмов.
Свойство Типы устройств указывает, что данный заголовок будет присоединяться только к скриптам алгоритмов, поддерживающих хоть один тип устройств из списка поддерживаемых алгоритмом с областью Script Header. В поле скрипт такого алгоритма необходимо указать объявление внешней функции в виде:

function MessageBox(hWnd: Longint; lpText, lpCaption: PChar; uType: Longint): Longint; external 'MessageBoxA@user32.dll stdcall';
CODE

В данном примере:

  • MessageBox — имя функции для вызова из скрипта
  • external — указывает, что функция внешняя
  • MessageBoxA — имя функции в DLL
  • user32.dll — имя DLL
  • Stdcall — указание спецификации вызова

Теперь функцию можно вызывать из скриптов алгоритмов:

MessageBox(0, ‘Some Text’, ‘Some Caption’, 0);
CODE