Введение
Иногда при использовании одной системы лояльности, например ПДС, возникает необходимость работы с новой системой, например R-Keeper CRM. Если новая система лояльности использует свои уникальные карты, номера которых не пересекаются с номерами старой системы, то все настраивается достаточно стандартно (два MCR-алгоритма, два логических и два физических интерфейса). Различными в данном случае могут быть не только карты, но и устройства (для одной системы используют магнитные карты, для другой - бесконтактные).
Все усложняется, когда одни и те же карты необходимо использовать в обеих системах. Тогда данное решение должно сопровождаться жестким делением на уровне устройств считывания. MCR-алгоритм можно жестко привязать к считывателю по его идентификатору.
Например, 2 кассы стоят в игровой зоне и тогда карта должна работать как платежная и еще 2 кассы стоят в ресторанной зоне и тогда карта должна работать как дисконтная.
Можно поступить проще - заказать карты, номера которых не пересекаются, но при этом имеют одинаковую часть (префикс) и создать 2 MCR-алгоритма с привязкой к разным интерфейсам и типом скрипт.
Настройка
Предположим у нас есть карты, номера которых разделили на 2 группы, т.к. 2 системы лояльности.
На карте прошито следующее: 778=07150000=НомерКарты.
Группа 1 - карты, номера которых попадают в диапазон от 3000000 до 3100000 включительно.
Группа 2 - карты, номера которых попадают в диапазон от 3100000 до 3200000 включительно.
Тогда для первой группы карт MCR-алгоритм будет выглядеть следующим образом:
function MCR1000158(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
var CardCode: integer;
begin
if pos('778=07150000=', Parameter) = 1 then
begin
delete(Parameter, 1, 13);
CardCode:= StrToInt(Parameter);
if ((CardCode>=3000000) and (CardCode<=3100000)) then
Result:=true else Result:= false;
end;
end;
CODE
А для второй группы карт MCR-алгоритм будет выглядеть так:
function MCR1000159(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
var CardCode: integer;
begin
if pos('778=07150000=', Parameter) = 1 then
begin
delete(Parameter, 1, 13);
CardCode:= StrToInt(Parameter);
if ((CardCode>3100000) and (CardCode<=3200000)) then
Result:=true else Result:= false;
end;
end;
CODE
Если необходимо, чтобы данный MCR-алгоритм проверялся только в режиме оплаты, то необходимо вставить проверку:
if (RKCheck.Valid = true) then ...
CODE
Настройка привязки MCR-алгоритма к интерфейсу происходит стандартным способом. Схематично изображено на рисунке ниже.

Рис. Настройка MCR-алгоритма №1

Рис. Настройка MCR-алгоритма №2