Перейти к основному контенту

RkPayQR - Настройки под фастфуд (Быстрый чек)

Перед настройкой под режим фастфуда сначала необходимо выполнить общие настройки в системе r_keeper_7

В режиме фастфуда есть два формата вывода QR-кода:

  1. Вывод QR-кода для оплаты на второй экран - необходимы только настройки модуля интеграции и общие настройки r_keeper_7. QR-код на оплату выводится отдельным окном поверх всех приложений.
  2. Печать QR-кода для оплаты на фискальном регистраторе или сервис-принтере, с передачей чека клиенту

Настройка под режим печати чека с QR-кодом

Настройка пользовательского макета

Зайти в менеджерской r_keeper_7 в пункт меню:

Настройки→ Печать → Документы и макеты

Перейти к пункту бокового меню:

Прочее → Пользовательский макет

  1. Создать новый макет (через правую кнопку мыши)
  2. Ввести название ПМ RkPayQR

    image-1649166230067.png

  3. Перейти в дизайн макета
  4. В свойствах макета добавить глобальные переменные (после входа в макет сразу нажать Свойства):

    printtextQR - тип “string”

    printtextErr - тип “string”

    ToPaySum - тип “double”

     

    image-1649166353876.png

  5. Создать 2 Бенда, 3 Мемо как на изображении ниже:

     

    image-1649166403322.png



    Обязательно указать бендам источники данных - Заказы и Чеки как на изображении выше

    Содержимое первого Мемо:

    Оплата QR-кодом
    Содержимое второго Мемо:
    <QRProperties 150;15%>
    [printtextQR]
    Содержимое третьего Мемо:
    Отсканируй QR-код в мобильном
    приложении банка

  6. Перейти в Мемо с параметрами QR-кода и указать следующий скрипт:
var
    host,qResult, tOrder,trestGUID,tmidGUID, sumData, postData, tSum, sumToSend, strSum,code,restguid:string;
    restcodeData,restguidData,midguidData,tablecodeData,stationcodeData,autoPayData:string;
    autoPay,ttableCode,tstationCode,i,j,statusCode:integer;
begin
  begin
    printtextQR := '';
    printtextErr := '';
    qResult:='';
    ToPaySum :=[Сумма];
       
    host:='http://127.0.0.1:6800/terminal/Qr/';
    autoPay:=0;
    statusCode:=0;
    
    tOrder := [Заказы.GUID];
    ttableCode := [Заказы.Стол.Код];
    tstationCode := [System.Станция.Код];
    i:=Pos('{', tOrder); j:=Pos('}', tOrder);
    tOrder := copy(tOrder,i+1,j-i-1);
    trestGUID := [System.Ресторан.GUID];
    i:=Pos('{', trestGUID); j:=Pos('}', trestGUID);
    trestGUID := copy(trestGUID,i+1,j-i-1);
    tmidGUID := [System.Кассовыйсервер.GUID];
    i:=Pos('{', tmidGUID); j:=Pos('}', tmidGUID);
    tmidGUID := copy(tmidGUID,i+1,j-i-1);
    tSum := IntToStr(trunc(ToPaySum));
    strSum := FloatToStr(ToPaySum);
    code := inttoStr([RestaurantCode]);
    sumToSend := tsum + copy(StrSum, pos('.',StrSum)+1,2);
    
    sumData:= '?sum=' + sumToSend;
    restcodeData:= '&restaurantCode=' + code;
    restguidData:= '&restaurantGuid=' + trestGuid;
    midguidData:= '&midServerGuid=' + trestGuid;
    autoPayData:= '&autoPayment=' + IntToStr(autoPay);
    tablecodeData:= '&tableCode=' + IntToStr(ttableCode);
    stationcodeData:= '&stationCode=' + IntToStr(tstationCode);
    
    //postData:= host + tOrder + sumData + restcodeData + restguidData + midguidData+autoPayData;
    postData:= host + tOrder + sumData + restcodeData + restguidData + midguidData+autoPayData+tablecodeData+stationcodeData;
    statusCode:=httppost(postData, 'QR', qResult);
    printtextErr:='Тело запроса: '+ qResult;
      if (statusCode <> 0) then
        begin
          if (statusCode = 400) then
          begin
          statusCode:=httppost(postData, 'QR change sum',  qResult);
          if (statusCode <> 0) then
             begin
             printtextQR := 'Ошибка формирования QR-кода: код ответа ' + IntToStr(statusCode);
             end
             else
             begin
             printtextQR := '<QRCODE ' + qResult + '>';
             end;   
          end
          else
          begin
          printtextQR := 'Ошибка формирования QR-кода: код ответа ' + IntToStr(statusCode);
          end;
        end
        else
          printtextQR := '<QRCODE ' + qResult + '>';
        end;    
end

Если клиент RkPayQR находится не локально с кассовым сервером, укажите ip-адрес клиента RkPayQR в переменной "host"

Если версия клиента ниже 1.0.3.7, то необходимо заменить строку с postData на закомментированную.

image-1649081605911.png

При необходимости можно в конец добавить команду <EndRoll> если чек автоматически не отрезается

Добавление пользовательского макета в схему печати

Зайти в менеджерской r_keeper_7 в пункт меню:

Настройки→ Печать → Схемы печати

  1. В используемой схеме печати в корне нажать ПКМ → Добавить представление документа

    image-1628778678599.png

  2. В появившемся окне выбрать созданный пользовательский макет ПМ RkPayQR и нажать кнопку ОК
  3. Выставить класс основного принтера Для чеков

    image-1649167707095.png

  4. Запомнить или записать код представления пользовательского макета - это понадобится при дальнейшей настройке

Настройка скрипта на форме быстрого чека

Настройка формы

Зайти в менеджерской r_keeper_7 в пункт меню:

Настройки → Графический интерфейс → Формы

Перейти к пункту бокового меню:

Заказ → Редактирование заказа (быстрый чек)

  1. Создать копию предустановленной формы Редактор заказа (быстрый чек) и назвать ее Редактор заказа (быстрый чек) RkPayQR. Также возможно использование уже скопированной ранее формы с другим названием

    image-1649167203480.png

  2. Перейти в редактирование формы, один раз нажать на белую зону (CheckView) и во вкладке События нажать двойной клик на пустое поле возле OnBeforeCheckViewEdit


    image-1629122099684.png

  3. Привести процедуру CheckViewOnBeforeCheckViewEdit к следующему виду:

procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string);
var i: integer;
    it: TCheckItem; 
    DishesList: string;
begin
if (SYS.ObjectInheritsFrom(TObject(AObjectAft), 'TPayLine')) then
   begin
   case TPayLine(AObjectAft).TransactionStatus of
     tsNoTransaction: DishesList := 'tsNoTransaction';
     tsCanceled:      DishesList := 'tsCanceled';
     tsCreated:       DishesList := 'tsCreated';
     tsAuthorizing:   DishesList := 'tsAuthorizing';
     tsAuthorized:    DishesList := 'tsAuthorized';
     tsConfirmed:     DishesList := 'tsConfirmed';
     tsVoided:        DishesList := 'tsVoided';
     tsDayClosed:     DishesList := 'tsDayClosed';
     else
     DishesList := 'None';
     end;
     dbg.dbgprint('CVonBefCVEdit, TransactionStatus:' + DishesList + ', TPayline.Owner:' + TPayLine(AObjectAft).Owner +
                  ', Name:' + TPayLine(AObjectAft).Name + ', Code:' + inttostr(TPayLine(AObjectAft).Code));
   end;
if (SYS.ObjectInheritsFrom(TObject(AObjectAft), 'TPayLine')) then
 if (TPayLine(AObjectAft).TransactionStatus = tsNoTransaction) and (TPayLine(AObjectAft).Code = XXXXX) then
  begin
   RK7.PerformRefObject(RK7.FindItemByCode(rkrefMaketSchemeDetails, YYYYY));
   if gui.MessageDlgEx('Гость подвердил оплату QR ?', mtInformation, mbYes+mbNo, 'Да;Нет') = ID_No then 
    begin
     AAllow := false;
    end;
  end;     
end;

XXXXX заменить на код созданной валюты RkPayQR

YYYYY заменить на код представления пользовательского макета

На изображении ниже представлен пример заполнения скрипта. В Вашем случае коды могут быть другими!

image-1629122681808.png

Настройка схемы форм (прикрепление формы к схеме форм)

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

Зайти в менеджерской r_keeper_7 в пункт меню:

Настройки → Графический интерфейс → Схемы форм

В используемой схеме форм выберите ранее созданную форму Редактор заказа (быстрый чек) RkPayQR. В случае использования предустановленной схемы форм создайте копию схемы форм Новый дизайн и назовите ее Новый дизайн RkPayQR

image-1649167450011.png

Настройка использования схем форм

Зайти в менеджерской r_keeper_7 в пункт меню:

Настройки → Графический интерфейс → Использование схем форм
Убедитесь, что на ресторан, в котором устанавливается RkPayQR, назначена правильная схема форм

image-1649167569373.png

Изменения с формами применяются только после перезагрузки doscash.exe