Ошика в фаркарде-это ошибка работы внешнего модуля. Я ,работая с РК7 при помощи фаркардз 5, получал все данные корректно, за исключением бонусов, которые корректно работают только в 6.02
Вид для печати
Ошика в фаркарде-это ошибка работы внешнего модуля. Я ,работая с РК7 при помощи фаркардз 5, получал все данные корректно, за исключением бонусов, которые корректно работают только в 6.02
Параллельно разбираюсь со связью r-keeper и gamekeeper. Т.е. использование gk карт в качестве бонусных на кассах рк. Это работает с farcard 5.07 и R-keeper 7.5.7.65. Причем только с фаркард 5.07 это работает. С 6-ым не работает.
Вложение 5834
Т.е. схема farcard 5.07 + rk 7.5.7 рабочая. Что подкрутить в другой внешней dll чтобы заработало?
Добрый день!
Имеем задачу, схожую с задачей ТС - а именно "подружить keeper с собственной бонусной системой".
Есть farcards, написала dll с необходимыми функциями - farcards подключается, пишет, что dll готова к работе, но как только запускаем кипер и пробуем провести картой (это делает специалист по настройке, не из нашей конторы, я ему попросту отдала dll, поэтому не могу быть уверена, что он верно все настроил со стороны keeper'a) - возвращается ответ "Карта не найдена", логи моей dll не пишутся, из чего делаю вывод, что до ее вызова не доходит. В логах же Farcards имеются следующие строки
Хотелось бы понять, что происходит.Код:call GetCardInfoEx (,,,,,437,1,,,)
code: 12...
Почему не доходит до вызова функций dll?
Почему, судя по логам, из всех параметров функции заполенны только InpLen и InpKind?
Что такое code: 12... ?
Буду благодарна за помощь.
Кипер какая версия?
Надо для начала смотреть, отдается ли в настройках номер карты на Вашу dll.
Версия R-Keeper 7.5 7.75.
По словам тестирующего - при работе с другой библиотекой запрос выглядит так же
, но не выдается код ошибки 12, ф-я отрабатывает.Код:call GetCardInfoEx (,,,,,437,1,,,)
Есть ли возможность увидеть более подробные логи? Или узнать значение кода ошибки 12? Пока непонятно, куда копать...
в farcard.ini в секции [FarServer] прописать параметр Log = 3 (3 это max уровень)
И кстати, FarCard какой версии используется?
Добрый день, у нас возникла проблема с farcards 6.04 .
Мы написали для нее dll - ку .
Метод GetCardInfoEx вызывается , в нем заполняем структуру ,
но Rkeeper не получает ответа от farcards по данным структуры, а только возвращается номер карточки.
лог farcads
28.06.17 14:03:25.014 185.97.112.243, __UNIT01 > QOneCard
28.06.17 14:03:25.014 Card: 1001, Rant: 1, Unit: 1
28.06.17 14:03:25.014 OptKind: 1, Size: 648 -> 1029
28.06.17 14:03:25.014 call GetCardInfoEx(,,,,, InpLen = 1029, InpKind = 1,,,)
28.06.17 14:03:25.014 To cache 1001 1 1 -> 0 0
28.06.17 14:03:25.014 Account: 0, PersonID: 0, Status: Active
28.06.17 14:03:25.014 Balance: 0,00, Discount: 0, Bonus: 0, DiscLimit: 0,00
28.06.17 14:03:25.014 Account: 0, PersonID: 0
28.06.17 14:03:25.029 185.97.112.243, __UNIT01 > CQGetImage
28.06.17 14:03:25.029 Card: 1001, NoDos: 0...
28.06.17 14:03:25.029 ... Packed size: 0
пример кода в методе GetCardInfoEx
Код:int GetCardInfoEx(int64_t Card, int64_t Restaurant, DWORD UnitNo,
Info *info, char *InpBuf, DWORD InpLen, WORD InpKind,
const char *OutBuf, DWORD OutLen, WORD OutKind) {
//loadDataBase();
std::ofstream outfile("loyal.txt");
outfile << "Card: " << Card << std::endl;
outfile << "Restaurant: " << Restaurant << std::endl;
outfile << "UnitNo: " << UnitNo << std::endl;
//if (InpBuf) {
// outfile << "InpBuf: " << InpBuf << std::endl;
//}
outfile << "InpLen: " << InpLen << std::endl;
outfile << "InpKind: " << InpKind << std::endl;
outfile.close();
info->size = 1164;
info->owner_id = 1;
info->card_owner= "Maximus\0";
info->access_amount = 0;
info->bounus_num = 1000;
info->discount_num = 10;
info->acces_amount2 = 0;
info->access_amount3 = 0;
//info->access_amount4 = 0;
//info->access_amount5 = 0;
//info->access_amount6 = 0;
//info->access_amount7 = 0;
info->account_number = Card;
//info->not_pay_type = 2;
//info->max_discount = 1000;
//info->screen_comment = "\0";
//info->comment = "\0";
//info->access_amount8 = 100;
//info->blocked = 0;
//string test2 = "test2";
//info->block_reason = test2.c_str();
//info->deleted = 0;
//info->expired = 0;
//info->manager_confirm = 0;
//info->nedd_withdraw = 0;
info->not_valid = 0;
//info->printer_comment = "\0";
//OutKind = 101;
return 0;
}
все поля разкоменчивали , все равно ничего не меняется.
результат в RKeeper
Вложение 5956
также интересно , что из Ркипера в фаркардс приходит только номер карты,стальные поля не заполняются.
Все приходит там приходит нужно только взять...
Судя по коду вы пишите на Си. Значит и структуры данных у вас описаны типами Си.
Есть различия (по размеру занимаемой памяти) м/у вроде бы одинаковыми типами переменных в Си и Паскале.
FarCard написан на Delphi, соответственно типа дынных Паскалевские.
Я как то пытался это победить (корректно описать структуру типами данных Си) и по итогу плюнул и перевел проект на Delphi. Тогда дело пошло...
Что касается GetCardInfo - проблема у вас такая же. Заполняя структуру вы "промазываете" в памяти и когда эта структура приходит в FC он ее криво разбирает и в итоге криво отображается инфа на кассе.