Skip to main content

Инструкция по настройке

Установка и настройка состоит из двух этапов:

  • Настройка в менеджерской части
  • Настройка и запуск Farcards

Конфигурация со стороны RK7:

1. Добавить на кассовом сервере PDS Interface с настройками как на скрине:

image-1728397593681.png

Название сервера (PDS Server Name) произвольное, главное, чтобы оно совпадало с названием в farcards.ini

Отдельно стоит обратить внимание на настройку "Pass ALL Receipts XML data", если необходимо передавать все чеки(даже без скидочной карты) в процессинг системы лояльности, то нужно выставить "Yes, if possible". Однако надо учитывать, что если на объекте проблемы с интернетом, то при закрытии чеков это может вызывать ошибку. Как временное решение в таком случае, можно изменить значение на "by script". 

2. В “Сервис” - ”Интерфейсы” создать новый интерфейс и привязать ранее созданный PDS Interface в разделе «Файлы библиотек», а в разделе «Интерфейс» в поле “Xml dish attributes” указать “2560.CategPath”, подробнее на скрине:

image-1715784856385.png

3. В “Сервис” – “Обработка сигналов устройств” – “MCR алгоритмы” добавить новый алгоритм.
В настройках алгоритма необходимо указать область применения «Интерфейс», а в объекте указать ранее созданный интерфейс и выставить галки на типы устройств как на скрине:

image-1728398071768.png


В свойство скрипт скопировать убрав дефолтное значение:

begin    
    Result := (
      ( Copy( Parameter, 1, 4 ) = '0000' ) or
      (( Length( Parameter ) >= 12 ) and ( Length( Parameter ) <= 13 )) or
      (( Length( Parameter ) = 11 ) and
      (( Copy( Parameter, 1, 1 ) = '7' ) or (Copy( Parameter, 1, 1 ) = '8' ))) or
      ( Length( Parameter ) = 10 ) or
      ( Parameter = '76543210' ) or
      ((Length(Parameter) >= 5) and (Length(Parameter) <= 7))
      ) and
      (GUI.CheckFormInPayMode = false);
end;

4. В меню “Деньги” – “Скидки” создать 3 скидки. Для удобства и порядка можно создать отдельную папку под эти скидки. Для одновременной работы всех скидок необходимо в настройках каждой скидки изначально задать флаг “Комбинировать с любой скидкой”.

Первая скидка процентная для авторизации карты в заказе:
Название для скидки “Карта MB”
Галочки на “Не вручную” и "На заказ"
Детализация на 0 процентов

Вторая скидка суммовая для Бонусов. 
Название “Бонусы MB”
Галочки на “Не вручную” и "На блюдо"
В настройках надо указать тип «Сумма», в детализации установить значение 100 000.

Третья скидка суммовая для работы доп. акций. 
Название “Скидка MB”
Галочки на “Не вручную” и "На блюдо"
В настройках надо указать тип «Сумма», в детализации установить значение 100 000.

5. В форме редактирования заказа(обычной и для быстрого чека) нужно добавить скрипты.

Перед редактированием формы, нужно проанализировать актуальную схему и её формы на наличие возможных конфликтующих скриптов.

В самом начале обработчика событий формы нужно вставить текст скриптов и указать верные коды скидок:

// Лояльность MindBox
    
function MBMarkerCode : Integer;
begin
  Result := 33; // Скидка для активации карты
end;

function MBBonusCode : Integer;
begin
  Result := 25; // Суммовая скидка для бонусов
end;

function MBActionCode : Integer;
begin
  Result := 32; // Суммовая скидка для акций
end;

function IsMBMarker(O : TObject) : Boolean;
begin
  Result := False;
  if SYS.ObjectInheritsFrom(O, 'TDiscountItem') then
  begin
    Result := TDiscountItem(O).code = MBMarkerCode;
  end;
end;

function IsMBDiscount(O : TObject) : Boolean;
var
  code : integer;
begin
  Result := False;
  if SYS.ObjectInheritsFrom(O, 'TCheckItem') then
  begin
    code := TCheckItem(O).Code;
    Result := ( Code = MBBonusCode ) or ( Code = MBActionCode );
  end;
end;

procedure CheckMBDiscounts( var HasMarker, HasOther : Boolean );
var
  i, j : Integer;
  it : TCheckItem;
  dish : TDish;
begin
  HasMarker := False;
  HasOther := False;
  for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
  begin
    it := RKCheck.CurrentOrder.Sessions.Lines[i];
    if it.state <> disDeleted then
    begin
      if IsMBMarker( it ) then HasMarker := True
      else if SYS.ObjectInheritsFrom(it, 'TDish') then
      begin 
        dish := TDish(it);
        for j := 0 to dish.discounts.count - 1 do
        if IsMBDiscount( dish.discounts.items[j] ) then 
        begin
          HasOther := True;
          Break;          
        end;        
      end;      
    end;
    if HasMarker and HasOther then Exit;
  end;
end;

procedure RemoveMBDiscounts;
var
  i, j : Integer;
  it : TCheckItem;
  dish : TDish;
  discount : TCheckItem;    
begin
  for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
  begin
    it := RKCheck.CurrentOrder.Sessions.Lines[i];
    if SYS.ObjectInheritsFrom(it,'TDish') and ( it.state <> disDeleted ) then
    begin
      dish := TDish(it);
      j := 0;
      while j < dish.discounts.count do
      begin
        discount := dish.discounts.items[j];
        if IsMBDiscount(discount)
        then RKCheck.DeleteCheckItem(discount)
        else j := j + 1;
      end;      
    end;
  end;
end;

procedure CheckAndRemoveMBDiscounts;
var
  HasMarker, HasOther : Boolean;
begin
  CheckMBDiscounts( HasMarker, HasOther );
  if not HasMarker and HasOther then RemoveMBDiscounts;
end;

// лояльность MindBox - конец кода; дальше код в обработчиках

В этой же форме(редактирование заказа и редактирование заказа для быстрого чека) в самом низу добавить данный кусок:

procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string);
var
  HasMBMarker, HasMBOther, Allow : Boolean;
begin
  CheckMBDiscounts( HasMBMarker, HasMBOther );
  if HasMBMarker then
  begin
    Allow := False;
    if (AEditType = etRemove) and IsMBMarker(AObjectBef) then Allow := True;
    if IsMBDiscount(AObjectAft) then Allow := True;
    if SYS.ObjectInheritsFrom(AObjectBef, 'TPayLine') or
       SYS.ObjectInheritsFrom(AObjectAft, 'TPayLine') 
    then Allow := True;
    if not Allow then
    begin
      AMessage := 'Редактирование заказа после применения карты лояльности запрещено.';
      AAllow := False;
      Exit;
    end;
  end;  
end;

procedure CheckViewOnOrderVerify(Sender: TObject; AVerifyType: TVerifyType; oper: integer; var AContinue: boolean);
begin
  CheckAndRemoveMBDiscounts;
end;

Настройка и запуск Farcards

Копируем дистрибутив на компьютер где располагается Midserv, предпочтительно использовать рабочий каталог софта UCS. Проверяем, что в Farcards.ini указано правильное имя для интерфейса.

Далее по пунктам:
1. Запустите конфигуратор image-1728399960083.png
2. Установите пароль при первом запуске и войдите с паролем в настройки. Возможные варианты уже установленных паролей: Gfhjkm1! и 12345
3. Лицензируем экземпляр:

image-1728400043925.png



4. Укажите необходимые настройки в конфигураторе.
Настройки для подключения к API передает менеджер Mindbox, стандартная ссылка: https://api.mindbox.ru/v3/operations/sync
Настройки Rkeeper указываются в соответствии с кодами объектов, которые были заведены ранее.
Остальные параметры выставляем по согласованию с заказчиком.

image-1728400158956.png

Чуть подробнее про некоторые настройки:
"Использовать скидки на блюдо" - стандартная настройка, лучше использовать именно её, если снять галочку, то скидка будет автоматически распределяться самим r-keeper между блюд и появятся копейки при расчетах.
"Код карты для удаления расчета из заказа" - используется в случае если нужно аннулировать расчет по примененной карте в заказе.
"Автоматически удалять старые расчеты через" - указывается кол-во часов через которые будут удалены рассчитанные скидки в заказах которые не были закрыты. Используется для разблокирования зарезервированных скидок в случае, если карту добавили, но потом удалили из заказа или в целом весь заказ был аннулирован.
"Префикс для ввода mindboxId гостя" - используется при вводе короткого id по схеме префикс+id.
"Диапазон номеров карт" - получается со стороны Mindbox. Длина не может быть менее 12 символов, чтобы не пересекаться с номерами телефонов. Без четкого понимания, что вы делаете, не стоит менять значения по умолчанию.
"Префикс для передачи mindboxId заказа от FastOperator" - этот префикс используется для заказов переданных из системы доставки FastOperator. Выставляется значение автоматически при первом сохранении, менять не рекомендуется.

Логирование по умолчанию используется только для фиксации ошибок. 
При возникновении проблем можно воспользоваться расширенным логированием XML, JSON и трафика HTTP. Рекомендую всегда сразу включать все логи.

5. После настройки конфигуратора необходимо установить Farcards службой используя ключ /install и запустить приложение с ключом /desktop для проверки, что ПО корректно запустилось. Для упрощения в дистрибутиве есть батники выполняющие эти действия без необходимости создавать ярлыки.