Последнее изменение статьи  06.11.2025 17:49

Для корректного извлечения номера карты лояльности или номера купона из переданного кассе трека (идентификатора) в виде некой последовательности символов, считанной устройством чтения (кардридером, сканером штрих-кодов, видеокамерой смартфона и т.п.) с предъявленной владельцем пластиковой карты или QR-кода, или RFID-метки в браслете, или введенного вручную кассиром, необходимо создать MCRалгоритм(ы). Для каждого типа идентификатора свой MCR-алгоритм. 
MCR-алгоритм представляет собой процесс обработки считанного на кассе трека (последовательность символов, записанная на магнитную полосу карты или зашитая в QR-код или введенная вручную кассиром и т.п.) с целью извлечения из этой последовательности символов только тех из них, которые позволяют выделить и однозначно определить номер карты/купона, указанный в БД системы лояльности. 
Создадим для примера два MCR-алгоритма:

  1. MCR-алгоритм, извлекающий номер карты из трека пластиковой карты, записанного на магнитную полосу, и содержащего последовательность *778=12885=ХХХХХХ{*}, где последние 6 символов представляют собой номер карты/купона, который мы должны извлечь в результате применения к заказу этой карты/купона, путем ее прокатывания по считывателю магнитных карт, имеющемуся на моноблоке кассира. 

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

    function MCR2623055(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean; 

    На входе:  778=128850087=000016 На выходе: 000016} begin

      Result:= pos('778=12885', Parameter)>0;   if Result then   begin

        delete(Parameter, 1, pos('=', Parameter));     delete(Parameter, 1, pos('=', Parameter));     Parameter:= copy(Parameter, 1, 6);   endend;


    Теперь, при применении карты с магнитной полосой к столу путем ее считывания на кардридере моноблока кассы, при условии, что трек карты с магнитной полосы содержит последовательность 778=12885=ХХХХХХ, касса отправит запрос в модуль Farcards с номером карты, состоящим из последних 6-ти символов из этого трека (у нас в примере это символы ХХХХХХ, вместо которых в реальном треке содержатся какие-то цифры).
  2. MCR-алгоритм, извлекающий номер карты из трека, считанного сканером штрих-кодов из предъявленного *QR-кода{*}. 
    По аналогии с п.1 в справочнике «MCR алгоритмы» менеджерской r_k создайте новый алгоритм, задайте ему свойства (выделено красным на скриншоте). 

    Откройте содержимое свойства «Скрипт» и внестие туда представленный ниже код. 

    function MCR1943316(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;

    Возвращает True только если в bar-коде содержатся цифры, иначе - False} var

      i: integer;

    begin

      Result:= true;

      for i:= 1 to Length(Parameter) do

        if (pos(Parameter[i],'0123456789')<=0) then Result:= false;   end;


    Теперь, если в открытом столе отсканировать сканером штрих-кодов, подключенным к кассе, предъявленный гостем QR-код с зашитым в нем номером карты/купона, то касса отправит запрос в модуль Farcards с номером карты, считанным из QR-кода.