👉🏻 Настройка:
PDS Interface
MCR-алгоритмы
Скидка
Валюты
Доступ сотрудников
Передача товарных категорий
Макет пречека
Настройка конфиг-файла
MCR-алгоритмы
Скидка
Валюты
Доступ сотрудников
Передача товарных категорий
Макет пречека
Настройка конфиг-файла
👉🏻 Интерфейс
Скачайте полную сборку Farcards MCRM.
Шаг 1. PDS Interface
На нужные кассовые сервера добавляем «PDS Interface».
«PDS Server Name» – уникальное имя в сети (например, «MCRM»).
«PDS Server Name» – уникальное имя в сети (например, «MCRM»).
Регистр важен!
«Call timeout» – время в секундах, которое касса будет ждать ответа от FarCard.
Рекомендуемое значение 60-120 сек.
В поле «PassALLBillsXMLdata» выставить значение «Yes, if possible».
Остальные поля заполняются, как указано на скриншоте.
Остальные поля заполняются, как указано на скриншоте.
Если в ресторане несколько кассовых серверов, то мы можем подключить их все на одну копию FarCard. В этом случае «PDS Server Name» для «PDS Interfaсe» каждого кассового сервера делаем одинаковым.
Если в ресторане используется собственная дисконтная система, то мы добавляем дополнительные интерфейсы.
Шаг 2. Создание интерфейса
Название произвольное, например, "MCRM".
В «файлах библиотек» проверить привязку кассовых серверов к PDS интерфейсам, созданным на предыдущем шаге.
Шаг 3. Создание MCR алгоритмов
а. Алгоритм для поиска по номеру карты.
Объект – интерфейс, созданный во 2-м шаге.
Область – Интерфейс.
Область – Интерфейс.
Маска обработки – iiiiiii (кол-во знаков «i» по дефолту 7, но у клиента может быть нумерация карт с другой разрядностью. Необходимо этот момент уточнить у сотрудников MCRM в чат-боте Поддержки).
б. Алгоритм для поиска по номеру телефона.
В теле скрипта прописать код:
function MCR1000047(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
var RestCode: integer;
begin
if length(Parameter) = 10 then Result := true
else Result := false;
end;Опционально!
в. Сразу добавим ещё один алгоритм со скриптом для промокодов, аналогично скрипту для телефонов.
function MCR1000648(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
var
PROMO_PREFIX: String;
PROMO_POSTFIX: String;
have_prefix:boolean;
have_postfix:boolean;
begin
PROMO_PREFIX := 'ZN';
PROMO_POSTFIX := 'XX';
have_prefix := pos(PROMO_PREFIX, Parameter) > 0;
have_postfix := (pos(PROMO_POSTFIX, Parameter) = Length(Parameter) - Length(PROMO_POSTFIX) + 1);
//Uncomment suitable
//prefix only
Result := have_prefix;
//postfix only
//Result := have_postfix;
//both
//Result := have_prefix and have_postfix;
end;
Чаще всего используется только префикс. Промокоды имеют примерно такой вид: ZN12345.
При создании промокодов маркетологи определяют префикс, который нужно будет задать в 9 строке скрипта.
Или поступить от обратного, задать в скрипте префикс, который будут использовать маркетологи при создании промокодов.
Шаг 4. Настройка скидок
а. Скидка основная.
Завести скидку с произвольным названием, например, "MCRM".
Запоминаем код скидки!
В "Детализации" добавить:
а.1 Нулевую детализацию. Т.е. размер скидки всегда равен 0.
а.1 Нулевую детализацию. Т.е. размер скидки всегда равен 0.
и добавим тип бонуса
Запоминаем код типа бонуса: Начисление
а.2 Детализацию для оплаты бонусами
и добавим тип бонуса
Запоминаем код типа бонуса: Оплата
Настроим окно выбора режима бонусов: Накопление / Оплата
Важно!
Настройку форм необходимо производить инженеру r_keeper, разбирающегося в устройстве и схемах форм
Выберите форму, которая используется для редактирования заказа.
Это может быть и вариант с "Быстрым чеком"
Настройку форм необходимо производить инженеру r_keeper, разбирающегося в устройстве и схемах форм
Выберите форму, которая используется для редактирования заказа.
Это может быть и вариант с "Быстрым чеком"
- Выберите элемент формы CheckViewOnClickScript
Описываем функцию CheckMCRMDiscount
var
DopInfo: string;
User_email: string;
function CheckMCRMDiscount: boolean;
var
isChargeDiscount: boolean;
i: integer;
it: TCheckItem;
begin
// Функция проверяет наличие скидки с кодом 8 в заказе
isChargeDiscount := False;
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
if isChargeDiscount then break;
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountitem') then
if (it.CODE = 8) and (it.state <> disDeleted) then // Код скидки
isChargeDiscount := True;
end;
result := isChargeDiscount;
end;В 18 строке скрипта выставляем код скидки из пункта 4.а.
- выбираем событие OnBeforeCheckViewEdit
Создаём или редактируем событие
procedure ProcessDiscount(d: TDiscountItem);
var
Question: String;
begin
if d.Code <> 8 then Exit; // Код скидки
if d.BonusType = RK7.FindItemByCode(rkrefBonusTypes, 2).Ident then Exit; // Код типа бонуса Начисление
Question := DopInfo + #13 + #10 + 'Используем карту для списания бонусов?';
if gui.RKMessageDlg(Question, 3, 3, 0) = 6 then
begin
d.BonusType := RK7.FindItemByCode(rkrefBonusTypes, 3).Ident; // Код типа бонуса Оплата
end
else
begin
d.BonusType := RK7.FindItemByCode(rkrefBonusTypes, 2).Ident; // Код типа бонуса Начисление
end;
RKCheck.CurrentOrder.Sessions.NeedRecalc := True;
end;
procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string);
var
d: TDiscountItem;
begin
if (AEditType <> etRemove) and SYS.ObjectInheritsFrom(AObjectAft,
'TDiscountItem') then
ProcessDiscount(TDiscountItem(AObjectAft))
else
if (AEditType = etRemove) then
begin
if SYS.ObjectInheritsFrom(AObjectAft, 'TDiscountItem') then
begin
d := TDiscountItem(AObjectAft);
if d.Code = 8 then Exit; // Код скидки
end;
if CheckMCRMDiscount then
begin
AAllow := False;
AMessage := 'После добавления карты MCRM редактирование состава заказа запрещено';
end;
end;
end;- выбираем событие OnProcessCard элемента формы DesignForm
Создаем событие
procedure DesignFormOnProcessCard(IntfID, EntranceCardType: integer; CardCode: string; RKCardInfo: TRKCardInfo; var res: integer);
var
isDiscountInOrder: boolean;
i: integer;
it: TCheckItem;
begin
isDiscountInOrder := False;
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
if isDiscountInOrder then break;
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountitem') then
if (it.CODE = RKCardInfo.Discount) and (it.state <> disdeleted) then
isDiscountInOrder := True;
end;
DopInfo := RKCardInfo.Holder;
User_email := RKCardInfo.Holder;
if isDiscountInOrder then
begin
gui.ShowMessage('Дважды применить в одну карту нельзя');
res := 1;
end;
end;Опционально!
б. Скидка для промокода.
Завести еще одну скидку с произвольным названием, например, "MCRM Промокод".
Эта скидка будет использоваться при применении промокодов на "Подарочное блюдо".
В "Детализации" добавить 100% детализацию. Т.е. размер скидки всегда равен 100%.
Ограничить область действия "На блюдо" и "Не вручную".
Задать значение созданной скидки ("MCRM Промокод").
Шаг 5. Настройка валют
Валюта для кешбэка
Завести валюту для оплаты бонусами для основного (дефолтного) бонусного счета.
Задать для валюты название, например, "Бонусы кешбэк".
Задать для валюты название, например, "Бонусы кешбэк".
Тип фискальности валюты доступен только под дилерской учетной записью. Обычно выставляется в значение «Фискальная Скидка» (по требованиям 54-ФЗ).
Шаг 6. Доступ для сотрудников
В подразделе "Ограничения" выставить галочку в пункте "Предварительно персонализированные валюты".
Шаг 7. Настройка передачи в MCRM товарных категорий
Выставить галочку в пункте "Использовать в отчетах" или:
В свойствах параметра "Классификация для КДС и VDU" в пункте "Ссылка" выберете ту классификацию, которая будет передаваться с товаром в MCRM в качестве товарной категории.
Шаг 8. Настройка макета пречека
Пример настройки блока "Инфо о карте", в котором выводится максимально возможная сумма списания по обоим бонусным счетам.
Выберите готовый шаблон по ссылке
Шаг 9. Настройка конфиг-файлов
farcards.ini
Type = 1 - обязательно!
DLL = mcrm.dll - с таким же именем должен быть и ini-файл. Имя dll менять нельзя!
NetServerName=MCRM - имя интерфейса, созданного в Шаге 1.
mcrm.ini
BaseURL=
ApiKey=
ExtraAccountId=
- эти данные необходимо получить у сотрудников в MCRM.
UseWriteoffApprovement=0
параметр для вкл./выкл. верификации клиента при списании бонусов (0 - не отправлять смс, 1 - отправлять смс с кодом)
ZeroDiscountCode=8
Добавить в секции [DISCOUNTS] новый параметр:
BonusAsDiscount=8
код скидки из пункта "а" Шага 4.
Для механизма верификации клиента (WriteoffApprovement) существуют ещё 2 скрытых параметра, которые устанавливают время, через которое можно отправить проверочный код повторно и задать кастомный шаблон текста смс с подтверждением. При необходимости запросите их в боте нашей поддержки
Запуск
После выполнения всех настроек необходимо перезапустить кассовый сервер.
Запустить FarCards в качестве консольного приложения.
При возникновении ошибки, при которой FarCards не находит mcrm.dll (DLL not found: mcrm.dll) нужно установить пакет Visual C++ для Visual Studio 2015
Инсталлятор содержится в архиве со сборкой FarCards
Интерфейс
После авторизации карты в заказе появится модальное окно с сообщением о режиме работы с бонусами, выбор списывать бонусы или нет
При выборе "ДА" доступная сумма для списания будет проведена как скидка.
При выборе "Нет" будет произведено начисление бонусов при фискализации заказа
Далее, появится карточка клиента с информацией о нем
В карточке клиента отображаются данные по клиенту:
· в поле "Макс. Скидка" доступная для списания в текущем заказе сумма бонусов
· в поле "Макс. Скидка" доступная для списания в текущем заказе сумма бонусов
· в поле информации по клиенту:
- текущий (полный) баланс карты на основном счете;
- кол-во визитов (чеков);
- сумма чеков;
- средний чек;
- дата последнего визита (чека).
Для добавления карты в заказ необходимо в карточке клиента нажать на поле [Картинка].
При добавлении карты в заказе под списком блюд появится запись MCRM.
При применении промокода показывается карточка клиента и надпись в секции "Сообщение" об активации промокода. После этого в заказ добавляется блюдо со 100% скидкой.
Промокод добавляется в заказ только после добавления клиента.
Бонусная фича
Если у клиента в MCRM заполнено поле EMAIL, то оно автоматически добавится в "Пользовательские свойства заказа".
Данная опция позволяет отправить электронный чек клиенту на e-mail.
Данная опция позволяет отправить электронный чек клиенту на e-mail.
mcrm.ini
Для отключения передачи номера телефона и email в расширенные свойства заказа и отключения отправки чеков через ОФД в конфиг-файле изменить параметры:
PassGuestPhoneOnAuth - отключение телефона
PassGuestEmailOnAuth - отключение email
принимают значения 0 и 1
0 - отключить
Удачного вам запуска и больших выручек!
Установите "сервис автоматической авторизации карт" для r_keeper
Рекомендуется для ресторанов с официантами.
По всем возникшим вопросам при настройке обращайтесь к нам через Телеграм.