Введение

Иногда при использовании одной системы лояльности, например ПДС, возникает необходимость работы с новой системой, например 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