Просмотр полной версии : DLL для FarCards. R-Keeper
asdForever
07.11.2013, 14:19
Добрый день.
Я программист в небольшой компании, которая в данный момент разрабатывает систему лояльности. Поступила задача написать "dll для r-keeper'а". Я его в глаза не видел ни разу в жизни и ни каких тестовых аппаратов у меня нет. Поиск информации ни к чему конкретному не привел. Понял только, что длл нужно писать не к самому киперу, а к FarCards. Даже нашел сам FarCards с readme файлом к нему, но с чего начать я не знаю. Если вы сможете чем то помочь буду крайне признателен. Спасибо.
VampireKB
07.11.2013, 15:17
Тогда Ваше начальство должно было просто направить запрос в ucs.ru .
Если оно это не сделало,то либо начальство странное,либо...
З.Ы. надеюсь вы с них ДОРОГО берете за разработку :-) т.к. разгребать вам потом ой ой ой сколько придется :-)
asdForever, пишите запрос на почту.
Если хотите советов здесь, то надо как минимум указать используемые версии ПО.
Есть текстовый фал с описанием того какие процедуры (и с каким набором параметров) должны поддерживаться DLL
Набор процедур зависит от версии FC.
asdForever
08.11.2013, 16:36
Спасибо всем откликнувшимся. В сети нашел FarCards 6.XX и доки к нему. В файле Extdll.txt сказано, что "DLL должна предоставить функции GetCardInfoEx и TransactionsEx".
пишу вот так:
// Эта функция возвращает информацию о карте
// результат:
//
// 0 - без ошибок, структура Info заполнена
// 1 - карта не существует
int GetCardInfoEx( INT64 card, // номер карты
DWORD UnitNo, // код ресторана
DWORD Restaurant, // номер кассы
CardInfo* CardInfoPointer, // адрес структуры, которую функция должна заполнить, если карта существует
CHAR* InpBuf, // дополнительная информация от кассы о заказе
DWORD InpLen, // длина информации от кассы
WORD InpKind, // тип информации от кассы (1-XML)
CHAR* OutBuf, // дополнительная ответная информация
DWORD OutLen, // длина ответной информации
WORD OutKind) // тип ответной информации (2-Pr1me)
{
ofstream myfile;
myfile.open ("test.txt");
myfile << "Writing this to a file.\n";
myfile << "Writing this to a file.\n";
myfile << "Writing this to a file.\n";
myfile << "Writing this to a file.\n";
myfile.close();
return 0;
}
// Эта функция проводит транзакции для кассового чека// результат
//
// 0 - все транзакции проведены
// 1 - ни одна транзакция не проведена
// частичного выполнения быть не должно - либо все проходят, либо ни одна!
int TransactionsEx( DWORD Count, // количество транзакций
TransactionInfo *transactionList, // адрес списка, каждый элемент котoрого - ссылка (Pointer) на описание транзакции
CHAR* InpBuf, // дополнительная информация от кассы о заказе
DWORD InpLen, // длина информации от кассы
WORD InpKind, // тип информации от кассы (1-XML)
CHAR* OutBuf, // дополнительная ответная информация
DWORD OutLen, // длина ответной информации
WORD OutKind) // тип ответной информации (2-Pr1me)
{
ofstream myfile;
myfile.open ("test.txt");
myfile << "Writing this to a file.\n";
myfile << "Writing this to a file.\n";
myfile << "Writing this to a file.\n";
myfile << "Writing this to a file.\n";
myfile.close();
return 0;
}
Структуры CardInfo и TransactionInfo объявлены в отдельном cpp файле. Компилируется без проблем, в FARCARDS.INI пишу:
[FarServer]Type = 1
DLL = kopilka.dll
Gate = 1
Log = 1
[LinkDLL]
1 = RNBOPen
2 = RLocal
[RTcp]
Client1 = Дальний Ресторан
Server1 = 127.0.0.1
Port1 = 2222
[RNBOpen]
Server = AServ
[RLocal]
Port = 0
и ложу kopilka.dll рядом с Farcards.exe. При попытке запустить ничего не происходит. Так и должно быть? Как вообще можно проверить что оно работает?
Еще раз спасибо всем откликнувшимся.
Принцип работы FC в режиме 1 (ваш случай)
На кассе кипера прокатали карту. Кипер передал ее номер в FC и он вызвал процедуру CardInfo из kopilka.dll.
Процедура отработала (заглянула в вашу БД ли еще куда) заполнила требуемую структуру и вернула ее в FC.
FC переправил ответ на кассу кипера, и там кассиру показали инфу по карточке (или ошибку "нет такой карты")
В вашем случае ничего не происходит т.к. нет запроса от кассы и FC не вызывает CardInfo... Дальше без запросов с кассы никуда...
29-й пртокол имеет ряд тонкостей.
Очень рекомендую обратиться к производителю и получить консультацию там.
asdForever
11.11.2013, 08:21
Принцип работы FC в режиме 1 (ваш случай)
На кассе кипера прокатали карту. Кипер передал ее номер в FC и он вызвал процедуру CardInfo из kopilka.dll.
Процедура отработала (заглянула в вашу БД ли еще куда) заполнила требуемую структуру и вернула ее в FC.
FC переправил ответ на кассу кипера, и там кассиру показали инфу по карточке (или ошибку "нет такой карты")
В вашем случае ничего не происходит т.к. нет запроса от кассы и FC не вызывает CardInfo... Дальше без запросов с кассы никуда...
А разве FC не должен хотя бы просто запущенным в процессах висеть? Проблема в том, что он даже не запускается.
---------- Добавлено в 09:21 ---------- Предыдущее сообщение было размещено в 09:21 ----------
29-й пртокол имеет ряд тонкостей.
Очень рекомендую обратиться к производителю и получить консультацию там.
Спасибо за рекомендацию. Уже написал им.
А разве FC не должен хотя бы просто запущенным в процессах висеть? Проблема в том, что он даже не запускается.
А вы его как запускаете? Наверное просто Farcards.exe ?
Надо или Farcards.exe /desktop - запустится как приложение
или Farcards.exe /install - поставится служба
FC 4.01 (какой был под рукой, но для тестов сойдет)
2487
Всем привет!
Не хочу плодить тем, у меня почти такая же ситуация как и у asdForever (http://www.carbis.ru/forum/member.php?u=10835), поручили исследовать возможность интеграции нашей системы лояльности с rkeeper->farcards, поскольку необходимого окружения под рукой нет, прошу помощи разобраться.
1) r-keeper работает только с дисконтными картами? Что передастся в метод GetCardInfoEx если прокатывать банковскую карту?
2) можно ли настроить r-keeper так, что бы тот передавал в TransactionsEx и GetCardInfoEx полные паны банковских карт?
1) r-keeper работает только с дисконтными картами? Что передастся в метод GetCardInfoEx если прокатывать банковскую карту?
2) можно ли настроить r-keeper так, что бы тот передавал в TransactionsEx и GetCardInfoEx полные паны банковских карт?
Вот тут ответы почти на все вопросы
http://www.carbis.ru/forum/Персональная-Дисконтная-Система-ПДС/5496-Описание-fix_len-dll.html
Всем привет!
Помогите настроить тесовую среду для своей DLL для FarCards.
Что имею:
1. Касса (версия R-keeper 6.97), на ней же кассовый север;
2. Компьютер с менеджерской частью (версия 6.88), на нем же FarCards 5.04
Чего хочется:
Ввести на кассе номер скидочной карты для получения скидки и чтобы запрос ушел на FarCards, а FarCards отправила запрос к моей DLL.
Чего не получаетя:
1. Настроить кассу для связи с FarCards (везде пишут про pcards, который мне не нужен, как я понимаю ?).
2. И ввести на кассе номер скидочной карты (где это делать ?). В менеджерской программе разрешил ввод карты ПДС вручную.
В менеджерской программе разрешил ввод карты ПДС вручную.
Надо еще и на кассе:
;позволяют вводить вручную номера карт при вводе скидки и при оплате без подтверждения менеджером
CanManualDiscInput=ON
CanManualCardInput=ON
ManagerForManualCard=OFF
ManagerForManualDiscCard=OFF
---------- Добавлено в 14:33 ---------- Предыдущее сообщение было размещено в 14:31 ----------
1. Настроить кассу для связи с FarCards (везде пишут про pcards, который мне не нужен, как я понимаю ?).
На сервере (раз у Вас сервер на кассе, то на кассе), указываем стандартно имя сервера farcards:
APServer=ASERV, где ASERV - это имя сервера, регистр букв важен.
Спасибо, параметры выставил. Но не вижу, где теперь на кассе нажать кнопку, чтобы появилось поле для ввода номера дисконтной карты?
В открытом столе нажимаете "Скидка" - "АЛТ"+"ВВОД"
В открытом столе нажимаете "Скидка" - "АЛТ"+"ВВОД"
Ничего не происходит. Стол открыт, нажимаю меню "скидки", у меня открывается меню скидок, применяется автоскидка. Нажимаю "Alt" + "Enter", ничего не происходит. Может должны быть выполнены ещё какие-то условия, помимо выставленных параметров?
CanManualDiscInput=ON
CanManualCardInput=ON
ManagerForManualCard=OFF
ManagerForManualDiscCard=OFF
А у вас станция Клавиатурная или Тач?
ALT + Ввод это комбинация на клавиатурной станции.
На Тачскрине при входе в меню скидок (кнопка "Скидка") внизу отображаются возможные скидки (наверное это вы называете "меню скидок"), а вправой части окна должна появиться кнопка "Номер карты".
Касса с тачскрином. В правой части кнопки есть, но нет кнопки "Номер карты".
Я по Вашему совету подключил клавиатуру и нажал "Alt"+"Enter" в этом меню, видим, зря?
---------- Добавлено в 15:34 ---------- Предыдущее сообщение было размещено в 15:28 ----------
Возможно, я могу использовать вместо ручного ввода существующею у меня лишнею карту с номером 1266. Для этого я скопировал на кассу в
EXTENS файл "fix_len.dll". В rkeeper.ini на кассе дописал строку:
FIX_LEN_MASK=N266
Вроде должна читаться моя карта с номером 1. Но тоже ничего не происходит.
Что я делаю не так?
Я по Вашему совету подключил клавиатуру и нажал "Alt"+"Enter" в этом меню, видим, зря?
Ну это мы просто друг друга не поняли немного... Обычная клава тут не играет.
Если нет кнопки "Номер карты", то это говорит о том что что то не так с параметрами настроек.
Во первых, из 4-х параметров нужно всего 2, а именно:
CanManualDiscInput=ON
ManagerForManualDiscCard=OFF
Остальные 2 касаются ручного применения карты при оплате, это нам сейчас не нужно.
Во вторых вы их куда прописали? Нужно в rkeeper6.ini на кассе.
И еще: покажите rkeeper6.ini с кассы целиком
---------- Добавлено в 15:37 ---------- Предыдущее сообщение было размещено в 15:35 ----------
и fix_len пока уберите (и из инишника и из extens)
Во вторых вы их куда прописали? Нужно в rkeeper6.ini на кассе.
И еще: покажите rkeeper6.ini с кассы целиком
Я эти параметры настроил для кассы в менеджерской программе, сейчас попробую вручную добавить на кассе.
rkeeper6.ini - сейчас опубликую.
Я эти параметры настроил для кассы в менеджерской программе, сейчас попробую вручную добавить на кассе.
rkeeper6.ini - сейчас опубликую.
Все понятно. В 97-ой версии настройки из менеджерской на кассу еще не влияли. То что они есть в менеджерской это только заготовка для более поздней версии кипера, для 103-ей.
Так что пишите их в ini файл на кассе. И туда же
APServer=ASERV, где ASERV - это имя сервера, регистр букв важен.
Спасибо большое. Прописал эти параметры на кассу и сразу увидел кнопку!
Ранее я прописывал эти параметры в настройках станции в менеджерской программе, потом выходил из менеджерской программы и перезагружал кассу. Подскажите, почему это не работало?
Подскажите, почему это не работало?
потому что
В 97-ой версии настройки из менеджерской на кассу еще не влияли. То что они есть в менеджерской это только заготовка для более поздней версии кипера, для 103-ей.
Ага, понял. Теперь шаг 2, буду пробовать свою DLL с FARCARDS настроить. Благодарю за помощь!
Появилась ещё проблема. Я настроил скидки в менеджерской программе, они правильно применяются, когда я ввожу номер карты и идет обмен данными с FarCards. Но есть такая проблема, что официант может выбрать скидку вручную, без ввода номера карты. Можно как-то запретить выбирать скидки вручную, но не запрещать их применяться по карте? В настройках самой скидки не увидел такой настройки.
Т.е смысл в том, чтобы:
1. Официант, когда зашел в меню "скидки" не мог снизу выбрать скидку (этого сейчас нет);
2. А когда проводил скидочной картой, то скидки применялась бы автоматически (это сейчас есть, нужно, чтобы осталось).
Но есть такая проблема, что официант может выбрать скидку вручную, без ввода номера карты. Можно как-то запретить выбирать скидки вручную, но не запрещать их применяться по карте? В настройках самой скидки не увидел такой настройки.
для РК6 - убрать галки в свойствах скидки у официанта, бармена, кассира, менеджера
для РК7 - есть свойство у скидки "не вручную"
satan, спасибо. Почему-то подумал, что если убрать права на эти скидки, по карте они тоже не будут применяться - ошибся.
Ещё вопрос - немного оффтоп правда - я когда задаю скидки в менеджерской программе, сохраняю их, закрываю менеджерскую программу, потом перезагружаю кассу. Настройки применяются не всегда, иногда на кассе остаются прежние настройки. Чтобы знать применились настройки или нет, я меняю название скидки (добавляю в конец названия новую цифру). Почему иногда кассы не подхватывает настройки из менеджерской программы? Как узнать подхватила касса настройки или нет после перезагрузки?
Почему иногда кассы не подхватывает настройки из менеджерской программы?
Плохая связь с DB.
Хочу, чтобы FarCards вызывал функцию моей ДЛЛ - CheckInfoL. Но он этого не делает. Выставил на кассе PdsXML=ON. FarCards 5.04. Кто знает, это проблема с версией, и какая тогда нужна?
Нашел документ такой:
ftp://www.techrk.ru/techrk/ENGENERS_SUPPORT/UCS_FULL/dealers/CardSystem/versions/Card%20System%20(History).txt
Но не могу понять в какой версии FarCards и кассового ПО появилась нужная мне возможность. Кто ни будь знает?
Ставили недавно одну внешнюю систему лояльности, все функции заработали только с 6.101
Насчет конкретно CheckInfoL ничего не могу сказать.
Farcards можно просто поставить последний, на сегодня 6.04: http://yadi.sk/d/yDKacUmfHhMgR
---------- Добавлено в 15:45 ---------- Предыдущее сообщение было размещено в 15:39 ----------
Нашел документ такой:
Этот документ от другой системы лояльности, а не от farcards: ЦПДСС (http://www.carbis.ru/forum/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D 0%BD%D1%8B%D0%B5-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D 0%BA%D0%B8-%D0%BD%D0%B0%D1%88%D0%B8%D1%85-%D0%BF%D0%B0%D1%80%D1%82%D0%BD%D0%B5%D1%80%D0%BE%D 0%B2/3857-%D0%9F%D1%80%D0%BE%D0%B4%D0%B0%D1%91%D1%82%D1%81%D 1%8F-%D0%B0%D0%BB%D1%8C%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D 1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9-%D0%9F%D0%94%D0%A1.html)
Вот куски из History:
6.96c Октябрь 2009
1) Реализована передача XML чека для FARCARDS (PDSXml=on)
2) Добавления для работы PINPAD авторизацией кр карт
6.99c
Сервер
1) #0009631 Дробное кол-во в отказах.
2) Интерфейс с FastOperator
Клиент
1) Новый протокол авторизации c pinpad
2) #0009525 PDSXML параметр
6.101.1
1) Добавлена передача XML также и перед запросом на информацию о карте
ExtendedPDSXML=ON (работает только при PDSXML=ON)
2) Исправлен баг с текстом ошибки при авторизации ПДС
6.105.1
1) Изменение порядка вызова ПДС
2) Изменение по XML
3) Поддержка разноверсионных ПДС
4) Можно запретить редактирование чека после применения персональной карты
EditAfterPDS=False
6.105.2
1) Иправления по внешней (радиопинпад) авторизации кред карт
6.105.3
1) Изменения для сертификации в Венгрии
2) дата-время в PDSLOG
3) EXTBONUS копируется и очищается
6.105.4
1) устранена утечка памяти при отправке XML в ПДС по 29 протоколу
Вроде бы как появилось с 6,96 но дальше то включали то отключали...
Со 101ой кассой должно начать работать более-менее.
FarCard нужен с 29-ым протоколом, соответственно 6,01 и выше.
VampireKB (http://www.carbis.ru/forum/member.php?u=91) должен знать точный ответ на вопрос. Он собаку без соли съел на этой проблеме... Хотя может и не захотеть просто так делиться, у него по моему до сих пор изжога от этого деликатеса...
sibgaba, SH, ребята, спасибо большое! Прям то, что нужно было знать!
Ну тогда расскажите, ради интереса, зачем вам все эти навороты в вашей ПДС? Интересно же теперь...
VampireKB
11.02.2014, 23:11
6.105 и выше работает с farcards V6
7.4.21 и 7.5.2 и выше работает исключительно с farcards V6
sibgaba,моё дело - предложить. А изыскания я,слава богу, закончил благополучно в 2-ух недельный период :-) Что уже можно назвать достижением :)
Ilne,Как я и говорил и говорю - зачем плодить кучу,если можно подключиться через готовый сервис ? моя модульная система вполне легко позволит связываться и с Вашей прогой :)
sibgaba, это для маркетологов, очень много возможностей по лояльности. Например, если вчера человек покупал водку,то завтра ему скидка на коньяк и т.д.
---------- Добавлено в 15:24 ---------- Предыдущее сообщение было размещено в 15:23 ----------
sibgaba, это для маркетологов, очень много возможностей по лояльности. Например, если вчера человек покупал водку,то завтра ему скидка на коньяк и т.д.
VampireKB, где можно подробно ознакомиться с тем, что предлагаете в плане интеграции с другими программами лояльности?
---------- Добавлено в 15:25 ---------- Предыдущее сообщение было размещено в 15:24 ----------
Подскажите, а есть какая-то связь версии кассового ПО и версией farcards ?
---------- Добавлено в 15:26 ---------- Предыдущее сообщение было размещено в 15:25 ----------
Может документ совместимости версий есть?
sibgaba, это для маркетологов, очень много возможностей по лояльности. Например, если вчера человек покупал водку,то завтра ему скидка на коньяк и т.д.
Маркетологи вечно все перепутают!
Если вчера водка (и много), то сегодня надо давать скидку не на коньяк, а на пиво и минералку :)
Ну а если серьезно, как вы планируете прописывать эти связи и условия?
Допустим у нас в ПДС сохраняется история чеков: что и когда покупали, вплоть до конкретных блюд (вы же этого хотите верно?)
А как дальше планируете формализовать желания маркетологов? Прописывать связи для конкретных блюд + временные рамки???
Как то давно тоже задумывались на подобную тему - пришли к выводу что в идеале надо оперировать не блюдами, а категориями, тогда вариантов выбора при настройке акций становится меньше на порядки...
Да в идеале - мне нужны позиции чека до запроса скидки.
Минимум - после печати чека.
По поводу настроек - этим занимаются другие люди. Мое дело - интеграция эти двух вещей (р-кипер и системы с настройками скидок).
Сергей777
04.03.2014, 18:11
Уважаемые форумчане, помогите понять такой вопрос, мне необходимо создать загрузку чеков в режиме реального времени в некую программу 1С Фитнес на управляемых формах из R-keepera, модуля SH - нет, может ли как-то помочь FarCards в данном случае??? С r-keeper-ом еще не приходилось работать, поэтому буду благодарен за любую помощь, может я что-то не так описал, спрашивайте и не судите строго...
Из прочитанного выше и вообще я понял, что есть некая стандартная выгрузка Transp32.exe, не знаю еще как она работает, но подозреваю, что с ней может быть только в ручном режиме, выгрузил руками, загрузил в 1С, никакого автоматизма, да и в реальном времени не получится, как с помощью ддл-ки FarCards... Вообщем вразумите меня по поводу интеграции с 1С, зараннее всем спасибо...
Извините, если не в тему, но не хочется плодить веток!
Я так понимаю что у вас есть фитнес автоматизированный на 1С и в нем бар(ы). Нужно что бы гость мог взять что то в баре и стоимость покупки отнести на свой счет в программе Фитнеса. Верно?
Если так, то первый вопрос: как гость будет идентифицироваться на кассе бара? Есть какие то идентификаторы (например электронные ключи от шкафчиков) или гостю на входе принудительно выдается какая то карта (например магнитная)?
Так или иначе, при входе в клуб, в программе 1С, мы должны привязать конкретный идентификатор к конкретному гостю. На кассе считывается идентификатор, проверяется что он к кому то привязан и этому кому то можно отпустить покупку. Если все ок, в 1с передается данные о покупки.
необходимо создать загрузку чеков в режиме реального времени в некую программу
Если вести речь просто о суммах - тут все довольно просто. Если вам нужны расшифровка этих сумм - будет сложнее...
есть некая стандартная выгрузка Transp32.exe, не знаю еще как она работает, но подозреваю, что с ней может быть только в ручном режиме, выгрузил руками, загрузил в 1С, никакого автоматизма
ЕМНИП, она понимает командную строку и может работать в автоматическом режиме. Но - только по закрытым сменам, не онлайн.
может ли как-то помочь FarCards в данном случае???
Мне кажется, что нет, так как фаркадс инициируется картой. Если нужны вообще все чеки подряд - надо читать базу из db онлайн. Решаемая задача, можете самостоятельно разобраться, можете купить готовый интерфейс, у нас есть.
есть некая стандартная выгрузка Transp32.exe, не знаю еще как она работает, но подозреваю, что с ней может быть только в ручном режиме, выгрузил руками, загрузил в 1С, никакого автоматизма
Перед тем как юзать Transp32 нужно подгрузить закрытый день в основную базу.
делается это утилитой Append32.exe. Можно запускать из командной строки, и при наличии в файле RKeeper.ini в разделе [Appender] ключа AutoClose = YES - оно отработав закроется. Далее юзаем Transp32. Можно запускать из командной строки, и при наличии в файле RKeeper.ini в разделе [Transport] ключа AutoClose = YES - оно отработав закроется. Формат запуска как то так
d:\rk6\Transp32.exe PWD 11 StartDate StopDate где PWD это ваш пароль на вход в кркипер (обычно его ставят 1), начальная и конечная дата - период выгружаемых продаж
ну и все, в итоге в папке указанной вRKeeper.ini в разделе [Transport]
StockPath= (обычно она C:\RK6\STOCK) ищем дбфки, которые может обработать вовремя ночью загрузившаяся 1с из планировшика под определенным юзером, под которым запускается обработка с загрузкой ))
Вообщем у меня сие реализовано и работает отлично.
В принипе если кассовый сервер на винде то можно дергать Rcheck.DB и check.DB с какой то периодичностью для получения текущих продаж.
Ребята, вы походу с фитнесом дело не имели и не представляете зачем это автору нужно...
Если я прав (см мой предыдущий пост), то все будет: и карты и farcard и online... И даже Вампир заглянет и предложит свою систему!
Сергей777
05.03.2014, 09:53
sibgaba, Вы все правильно понимаете!
Порядок такой: клиент приходит в фитнес клуб и регистрируется при входе в ПП 1С фитнес с помощью кардридера, т.к. у каждого клиента есть магнитная карта, потом в процессе занятия он может пользоваться баром что фиксируется в программе R-keeper и затем должно передаться в 1С фитнес, т.к. при выходе клиент будет рассчитываться уже исходя из данных в программе 1С Фитнес.
Пока что они хотят, чтобы фиксировалась просто сумма покупки клиента без данных по товарам, но как известно аппетит приходит во время еды, поэтому сейчас уточняю этот вопрос...
---------- Добавлено в 08:53 ---------- Предыдущее сообщение было размещено в 08:51 ----------
И большое спасибо всем кто откликнулся, я и не думал что этот форум такой живой и здесь такие профессионалы!!!
Ну тогда схема работы получается примерно такая:
Касса RK <-> Кассовый сервер RK <-> FarCard <-> Extdll <-> 1C
extdll - это то что вам нужно будет написать. Она должна поддерживать будет определенный набор функций. Когда на кассе кипера, при расчете прокатают карту гостя, ее номер передается в FC и он вызовет определенную функцию в Extdll, передав ей номер карты. Эта функция должна будет обратиться в 1С и получить от туда как минимум 2 вещи: что эта карта зарегистрирована в 1С и какой расход ей положен. После оплаты чека так же будет вызвана процедура которая передаст в Extdll сумму покупки (в новых версиях можно и содержимое) далее extdll должна будет засунуть эти данные в 1С.
Описание процедур, которые должны быть поддержаны в extdll, пока выложить не могу (нет под рукой) поищите тут, вроде было (искать extdll.txt), или может кто выложит оперативно.
Сергей777
05.03.2014, 10:42
SH, у Вас есть готовый интерфейс для загрузки чеков в режиме реального времени? Если да, для 1С на управляемых формах. Какова стоимость данной обработки?
---------- Добавлено в 09:40 ---------- Предыдущее сообщение было размещено в 09:36 ----------
johny22, Спасибо за разьяснение, теперь хоть какой-то порядок работы складывается у меня! Хотел спросить более подробно про Rcheck.DB и check.DB, что за инфа в них, реально ли возможно в режиме реального времени тянуть от туда данные о чеках?
---------- Добавлено в 09:42 ---------- Предыдущее сообщение было размещено в 09:40 ----------
sibgaba, спасибо за разъяснение, буду юзать, Extdll.dpr в виде примера уже нашел, а вот найденный мною Extdll.txt не могу открыть, одни иероглифы, уже какими кодировками только не пробовал...
Там DOS кодировка 866 кодовая страница
Rcheck.DB и check.DB вам не помогут. Ну допустим вытяните вы их них все чеки. И что дальше? Как вы поймете какому гостю принадлежит данный чек?
В любом случае нужно привязывать идентификатор гостя к чеку (катать карту) а для этого нужен будет FC
Сергей777
05.03.2014, 12:07
sibgaba, поэтому я и спрашиваю, что в Rcheck.DB и check.DB хронится, может там в чеках есть код карты или еще что-то, чтобы можно было организовать поиск нужного клиента в 1С.
К сожалению я совсем не знаю структуру программы R-keeper, и под рукой у меня ее тоже нет, поэтому и обратился за помощью и очень рад что нашел такой форум, уже понял многое благодаря вам!
---------- Добавлено в 11:07 ---------- Предыдущее сообщение было размещено в 10:46 ----------
И спасибо по поводу кодировки, хотел уже написать что OEM 866 я уже пробовал и она не подходит, но скачал заного и все получилось, прошлый файл я уже убил пробами разных кодировок...
SH, у Вас есть готовый интерфейс для загрузки чеков в режиме реального времени?
Есть, но лучше прислушайтесь к sibgaba :) Судя по всему, один наш интерфейс Вашу проблему все равно не решит.
function TransactionL( Account: DWORD; Info: Pointer ): Integer; stdcall;
VampireKB
25.04.2014, 14:10
function TransactionL( Account: DWORD; Info: Pointer ): Integer; stdcall;
за транзакции Л
за транзакции Л
А где берет dll данный параметр ??
VampireKB
25.04.2014, 20:56
А где берет dll данный параметр ??
вы не тем занимаетесь ))
Коллеги, всем доброго дня! Я вернулся :)
Только теперь я с 7-мым кипером под windows, вместо 6-го под DOS :)
Вопрос, наверно простой. Ранее в R-keeper 6, я прописывал нужные параметры в rkeeper6.ini:
CanManualDiscInput=ON
ManagerForManualDiscCard=OFF
PdsXML=ON
APSERVER=ASERV
У меня появлялась кнопка для ввода номера скидочной карты.
Теперь в 7-ом кипере, есть rkeeper.ini, но там все настройки разделены на группы. Записал нужные мне в группу "Config", но не получил нужного результата.
Куда писать эти настройки в 7 версии?
CanManualDiscInput=ON
В правах у роли "Код с клавиатуры". В "MSR алгоритмах" создаете свой с типом префикс и подключаете его к интерфейсу ПДС
ManagerForManualDiscCard=OFF
В правах у роли "Подтверждение операций" и "Менеджерской подтверждение для ПДС карты".
APSERVER=ASERV
Ну для этого есть целая статья по настройке PDS интерфейса, читаем на support.ucs.ru
VampireKB
31.07.2014, 19:00
Коллеги, всем доброго дня! Я вернулся
Только теперь я с 7-мым кипером под windows, вместо 6-го под DOS
Вопрос, наверно простой. Ранее в R-keeper 6, я прописывал нужные параметры в rkeeper6.ini:
CanManualDiscInput=ON
ManagerForManualDiscCard=OFF
PdsXML=ON
APSERVER=ASERV
и теперь каждый идиот сумеет дать своим "друзьям" неплохую скидку за откат. Молодец !
и теперь каждый идиот сумеет дать своим "друзьям" неплохую скидку за откат. Молодец !
Вообще тема про разработку своих DLL, естественно, что среда для разработчика отличается от среды для работы в ресторане.
---------- Добавлено в 18:34 ---------- Предыдущее сообщение было размещено в 18:32 ----------
В правах у роли "Код с клавиатуры". В "MSR алгоритмах" создаете свой с типом префикс и подключаете его к интерфейсу ПДС
Можно для чайников, я правильно понимаю, что теперь нельзя вписывать параметры в rkeeper.ini, а можно настраивать нужное в Менеджерской программе, верно?
Данные из менеджерской программы автоматически попадут на кассу и кассовый сервер?
---------- Добавлено в 18:40 ---------- Предыдущее сообщение было размещено в 18:34 ----------
Ну для этого есть целая статья по настройке PDS интерфейса, читаем на support.ucs.ru
Там логин и пароль нужны, если лицензия куплена, то туда как доступ получить?
Можно для чайников, я правильно понимаю, что теперь нельзя вписывать параметры в rkeeper.ini, а можно настраивать нужное в Менеджерской программе, верно?
Да.
Данные из менеджерской программы автоматически попадут на кассу и кассовый сервер?
Да, при наличии связи.
если лицензия куплена, то туда как доступ получить?
Никак, доступ только для дилеров.
UCS начало писать вменяемую документацию, так что народ разленился и вместо объяснений ссылки на закрытый ресурс дает :)
SH, спасибо!
UCS начало писать вменяемую документацию...
Поделитесь, пожалуйста, кусочком про подключение кассового сервера 7-го кипера к farcards?
Вопрос про настройку работы r-keepr 7 и farcards актуален, может кто-то помочь?
Немного подразобрался. Что было сделано:
1. RK7 Manager - Сервис - Кассовые станции и устройства
Выбрал кассовый сервер, создал "External transaction processing center interface #1"
Задал имя для FarCards сервера.
Менеджер показывает версию протокола 37.
2. RK7 Manager - интерфейсы связанный с устройством из пункта 1.
Все параметры по умолчанию, кроме
2.1 Станция - Касса (моя касса);
2.2 Содержимое заказа - да;
2.3 Условие отправки XML заказа - Передавать всегда;
2.4 Общее имя DLL - etpc.dll;
2.5 Связь с устройством "External transaction processing center interface #1";
2.6 ВОзможности - флаг установлен, только для Интерфейс.
3. На том же компьютере, где и кассовый сервер запустил farcards;
Теперь во время запуска кассового сервера и при оплате заказа тоже самое, кассовый сервер отправляет что-то на запущенный farcards:
В папке с farcards, в rtcp.log, появляется:
Th 00000D70. *** Chanel Error ***
Th 00000D70. 06.08.2014 12:17:58
Th 00000D70. Server Receive from "127.0.0.1, " on authorization stage 0
Th 00000D70. Bad packet Length: 82
Th 00000D70. .
Th 00000D70. *** Chanel Error ***
Th 00000D70. 06.08.2014 12:17:58
Th 00000D70. Server Receive from "127.0.0.1, " on authorization stage 0
Th 00000D70. Mismatch Decoder
Th 00000D70. .
Вопроса два:
1. Похоже, farCards 6.04 не совместим с версией 7.5.2, или я что-то делаю не так?
2. Есть ли более новый farcards ?
2. Есть ли более новый farcards ?
Пока нет.
Brambrulet
06.08.2014, 21:17
А если не запускать фаркардс, в логах будет появляться тоже самое? Что видно в логах фаркардса? В окошке фаркардса видно, что происходит подключение?
А если не запускать фаркардс, в логах будет появляться тоже самое? Что видно в логах фаркардса? В окошке фаркардса видно, что происходит подключение?
Дело в том, что rtcp.log лежит в папке с farcards, то есть это farcards не принимает пакеты от кассового сервера. farcards.log пустой (только инфа о запуске), заросы отбрасываются раньше. В окошке подключения не видно. Вот лог farcards.log:
07.08.14 10:14:57.306 ** Start Card Retranslator 6.04 **
07.08.14 10:14:57.306 Log = 3
07.08.14 10:14:57.306 Type: 1
07.08.14 10:14:57.306 External DLL: Test.dll
07.08.14 10:14:57.346 Loading Link DLL: RNBOPen (NB Open 3.03)
07.08.14 10:15:00.446 Loading Link DLL: RLocal (Local v.5)
07.08.14 10:15:00.476 Loading Link DLL: RTcp (TCP 6.03a)
07.08.14 10:15:00.496 Link modules loaded.
Вот farcards.ini:
[FarServer]
Type = 1
DLL = Test.dll
Gate = 1
CloseMins=5
XMLCP=1251
[LinkDLL]
1 = RNBOPen
2 = RLocal
3 = RTcp
[RTcp]
Client1 = Дальний Ресторан
Server1 = 127.0.0.1
Port1 = 2222
[RNBOpen]
Server = APSERV
[RLocal]
Port = 0
Может у меня старая версия rtcp.dll 6.03a ?
>07.08.14 10:15:00.476 Loading Link DLL: RTcp (TCP 6.03a)
Brambrulet
07.08.2014, 20:24
Хех. Думаю, что всё проще.
2979
2980
PS И всё таки попробуйте поюзать ПДС не запуская Farcards. Что-то мне подсказывает, что результат будет тот же самый.
Привет, парни!
Возможно ли связать ФО с киперовской ПДС? Через dll и Farcards, например? Нужно чтение всей инфы по карте и начисление бонусов.
VampireKB
19.02.2015, 01:47
Привет, парни!
Возможно ли связать ФО с киперовской ПДС? Через dll и Farcards, например? Нужно чтение всей инфы по карте и начисление бонусов.
неа
По-этому к 7-ому киперу приобретали External Delivery Interface (UCS) и мою Доставку с Цпдсс . (Совместимо с 6-ой версией кипера)
Ну, вопрос цены, на самом деле.
неа
По-этому к 7-ому киперу приобретали External Delivery Interface (UCS) и мою Доставку с Цпдсс . (Совместимо с 6-ой версией кипера)
И то и то? Или можно что-то одно?
---------- Добавлено в 16:59 ---------- Предыдущее сообщение было размещено в 16:32 ----------
Ну, вопрос цены, на самом деле.
Т.е. теоретически возможность есть? Ну программистам ФО нужно дать ориентир хотя бы, куда ковырять.
nintiniom
19.04.2017, 15:12
Добрый день. Поступила задача "расковырять" dll к FarCards ttttttt.
Подскажи, пожалуйста, изменилась ли структура dll для Farcards 4.06.03?
Старая farcards.dll подключалась к БД MySQL, но на днях нам установили rk7... и что-то пошло не так ©
никакой более подробной информации не поступило, в связи с чем и пытаюсь разобраться в чем отличия.
Раньше была связь Distr - Farcards, сейчас этой связи не вижу. Вижу соединение напрямую к Cardserv.
Необходима, пожалуйста, любая информация. Заранее спасибо!
Подскажи, пожалуйста, изменилась ли структура dll для Farcards 4.06.03?
Не совсем понятен вопрос...
4,06 это очень старый FC. 7-ку я с ним даже не пробовал запускать и все текущие проекты делались под 6,хх
В 6.хх вызов хранимых процедур изменился (и имена и передаваемые параметры) и dll написанная под 4,хх с 6,хх вряд ли заработает (хотя специально не тестил).
Старая farcards.dll подключалась к БД MySQL
Ну это к киперу не относится. Куда ее разработчик научил подключаться - с тем она и работает.
Раньше была связь Distr - Farcards
??? Может быть CDISTR???
Для 7ки он не нужен, все решается на уровне интерфейсов и MCR алгоритмов в 7ке.
Необходима, пожалуйста, любая информация.
Ну для начала нужна инфа от вас. Хотя бы понять на каком этапе затык происходит....
nintiniom
19.04.2017, 16:49
Не совсем понятен вопрос...4,06 это очень старый FC.
7-ку я с ним даже не пробовал запускать и все текущие проекты делались под 6,хх
Найден файлик 2008 года "extdll.txt" в котором описаны какие должны быть предоставлены dll функции (имена, параметры).
Имелось в виду изменилась ли эта информация.
В 6.хх вызов хранимых процедур изменился (и имена и передаваемые параметры) и dll написанная под 4,хх с 6,хх вряд ли заработает (хотя специально не тестил).
Можно подробнее об этом?
??? Может быть CDISTR???
Для 7ки он не нужен, все решается на уровне интерфейсов и MCR алгоритмов в 7ке.
Ну да, CDISTR - Card Distributer.
Ну для начала нужна инфа от вас. Хотя бы понять на каком этапе затык происходит....
Ни о чем не информировали, просто "что-то там не то". Сижу пытаюсь разобраться (до этого не приходилось сталкиваться с этим вообще). Знаю что поставили новые кассы, rkeeper 7.
По факту нет никакой информации по транзакциям с касс в БД (в которую они должны попадать через farcards.dll насколько понимаю). Но никаких логов с ошибками от FC не вижу...
Найден файлик 2008 года "extdll.txt" в котором описаны какие должны быть предоставлены dll функции (имена, параметры).
Имелось в виду изменилась ли эта информация.
для FC 4.06 - не изменилась
Но я не уверен что 4,06 будет работать с текущей семеркой (старый он сильно)
И если в итоге придется ставить 6,хх то том формат другой и dll надо будет переписывать...
Начинать надо с проверки настроек Кипера (ПДС интерфейса) возможно что там не настроили и запрос с кассы до FC не доходит
А если на кассе карту прокатать - инфа по карте показывается?
nintiniom
20.04.2017, 11:16
И если в итоге придется ставить 6,хх то том формат другой и dll надо будет переписывать...
нужен этот формат (скорее всего будут 6,хх ставить) просто не хочется в самый последний момент все переписывать и в итоге крайним остаться
Начинать надо с проверки настроек Кипера (ПДС интерфейса) возможно что там не настроили и запрос с кассы до FC не доходит.
А если на кассе карту прокатать - инфа по карте показывается?
номер карты и скидка... но сейчас со стороны смотрю - скидка не применяется при попытке оплаты
P.S. рестранслятор 6.04
Выставьте настройку в пдс интерфейсе чтоб сумма доступная для скидки не проверялась, насколько я помню в старой версии запроса transaction она не существовала, а сейчас она видимо передаётся нулевая.
nintiniom
20.04.2017, 12:31
Выставьте настройку в пдс интерфейсе чтоб сумма доступная для скидки не проверялась, насколько я помню в старой версии запроса transaction она не существовала, а сейчас она видимо передаётся нулевая.
Большое спасибо, но я не настраиваю пдс, этим занимаются сотрудники которые устанавливают rk. И про старую версию мало что знаю(
---------- Добавлено в 11:31 ---------- Предыдущее сообщение было размещено в 11:09 ----------
DLL функции для FC4.06.03:
----------------------------------------------------------------------
function GetCardInfo( Card: DWORD; Info: PCardInfo ): Integer; stdcall;
function Transaction( Card: DWORD; Info: PTransInfo ): Integer; stdcall;
-----------------------------------------------------------------------
Необязательные функции
function GetCardImage( Card: DWORD; Info: PImageInfo ): Integer; stdcall;
function GetCardMessage( Card: DWORD; Info: PMsgInfo ): Integer; stdcall;
function GetDiscLevelInfo( Card: DWORD; Info: PDLInfo ): Integer; stdcall;
function CheckInfo( Card: DWORD; Info: Pointer; Size: DWORD ): Integer; stdcall;
----------------------------------------------------------------------
Дополнительно можно предоставить процедуры:
procedure Init; - вызовется после загрузки DLL
procedure Done; - вызовется перед выгрузкой DLL
================================================== ===================
Имею в виду данную информацию, но для версии farcards 6.xx
nintiniom
20.04.2017, 13:11
Отправил
Спасибо!!
Выставьте настройку в пдс интерфейсе чтоб сумма доступная для скидки не проверялась, насколько я помню в старой версии запроса transaction она не существовала, а сейчас она видимо передаётся нулевая.
Что еще отключить можно. Мне не помогает. У меня похожая ситуация. фаркард 5.07 при проведении карты на кассе рк7 фаркард пишет Accses violation at adress 0048c4f4 in module farcards
5801
Лог
20.04.17 17:12:06.846 ** Start Card Retranslator 5.07 **20.04.17 17:12:06.846 Log = 10
20.04.17 17:12:06.846 Type: 1
20.04.17 17:12:06.846 External DLL: smcln
20.04.17 17:12:07.815 Loading Link DLL: pds_netk (pds_netk(7.42).NetKern v205)
20.04.17 17:12:08.893 Loading Link DLL: RLocal (Local v.5)
20.04.17 17:12:08.893 Loading Link DLL: RTcp (TCP 6.03a)
20.04.17 17:12:08.909 Loading Link DLL: RNETBIOS (NetBios v.3)
20.04.17 17:17:37.206 +> MIDSERVER2MIDSERV.exe <= 1 chanels
20.04.17 17:17:37.206 MIDSERVER2MIDSERV.exe > CQIdent
20.04.17 17:17:37.206 MIDSERVER2MIDSERV.exe > Protocol
20.04.17 17:17:37.206 >MIDSERVER2MIDSERV.exe > QSetProtocol 23
20.04.17 17:18:26.909 MIDSERVER2MIDSERV.exe > QOneCard
20.04.17 17:18:26.909 Card: 2247, Restaurant: 3024, Unit: 2 ...
20.04.17 17:18:26.909 call GetCardInfoL
20.04.17 17:18:27.018 Exception: Access violation at address 0048C4F4 in module 'Farcards.exe'. Read of address 00000018
Падает на запросе call GetCardInfoL
Ставить фаркард 6 и переписывать External Dll без вариантов?
VampireKB
20.04.2017, 15:45
Ошика в фаркарде-это ошибка работы внешнего модуля. Я ,работая с РК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 чтобы заработало?
Якименко Александра
02.06.2017, 17:34
Добрый день!
Имеем задачу, схожую с задачей ТС - а именно "подружить keeper с собственной бонусной системой".
Есть farcards, написала dll с необходимыми функциями - farcards подключается, пишет, что dll готова к работе, но как только запускаем кипер и пробуем провести картой (это делает специалист по настройке, не из нашей конторы, я ему попросту отдала dll, поэтому не могу быть уверена, что он верно все настроил со стороны keeper'a) - возвращается ответ "Карта не найдена", логи моей dll не пишутся, из чего делаю вывод, что до ее вызова не доходит. В логах же Farcards имеются следующие строки
call GetCardInfoEx (,,,,,437,1,,,)
code: 12...
Хотелось бы понять, что происходит.
Почему не доходит до вызова функций dll?
Почему, судя по логам, из всех параметров функции заполенны только InpLen и InpKind?
Что такое code: 12... ?
Буду благодарна за помощь.
Кипер какая версия?
Надо для начала смотреть, отдается ли в настройках номер карты на Вашу dll.
Якименко Александра
02.06.2017, 19:13
Кипер какая версия?
Надо для начала смотреть, отдается ли в настройках номер карты на Вашу dll.
Как я писала выше
логи моей dll не пишутся, из чего делаю вывод, что до ее вызова не доходит.
Судя по всему пишутся ошибки Farcards
Про версию кипера уточню.
Якименко Александра
05.06.2017, 12:25
Версия R-Keeper 7.5 7.75.
По словам тестирующего - при работе с другой библиотекой запрос выглядит так же
call GetCardInfoEx (,,,,,437,1,,,), но не выдается код ошибки 12, ф-я отрабатывает.
Есть ли возможность увидеть более подробные логи? Или узнать значение кода ошибки 12? Пока непонятно, куда копать...
в farcard.ini в секции [FarServer] прописать параметр Log = 3 (3 это max уровень)
И кстати, FarCard какой версии используется?
max-antip
28.06.2017, 12:08
Добрый день, у нас возникла проблема с 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
max-antip
28.06.2017, 12:10
также интересно , что из Ркипера в фаркардс приходит только номер карты,стальные поля не заполняются.
Все приходит там приходит нужно только взять...
Судя по коду вы пишите на Си. Значит и структуры данных у вас описаны типами Си.
Есть различия (по размеру занимаемой памяти) м/у вроде бы одинаковыми типами переменных в Си и Паскале.
FarCard написан на Delphi, соответственно типа дынных Паскалевские.
Я как то пытался это победить (корректно описать структуру типами данных Си) и по итогу плюнул и перевел проект на Delphi. Тогда дело пошло...
Что касается GetCardInfo - проблема у вас такая же. Заполняя структуру вы "промазываете" в памяти и когда эта структура приходит в FC он ее криво разбирает и в итоге криво отображается инфа на кассе.
max-antip
29.06.2017, 19:37
Спасибо , попробуем побороть, либо попробуем на дельфях )
max-antip
01.07.2017, 09:11
Все таки что то с приходящей структурой , у нас в скудной документации вот такая структура указана:
Структура, на которую указывает Info:
Word размер структуры = 1164 байт (это поле заполнено при вызове)
Byte Карта существовала, но была удалена
0 - нет, и сейчас есть
1 - да, удалена
Byte Карту надо изъять
0 - нет
1 - да
Byte Истек срок действия
0 - нет
1 - да
Byte Сейчас карта не действует
0 - нет, действует
1 - да, не действует
Byte Нужно ли подтверждение менеджера
0 - не нужно
1 - нужно
Byte Карта заблокирована
0 - нет
1 - да
256 байт Asciiz строка - причина блокировки карты - будет показана на кассе
40 байт Asciiz строка - имя владельца карты
Int64 Идентификатор владельца карты
DWORD Номер счета
DWORD тип неплательщика
Word номер бонуса
Word номер скидки
Int64 предельная сумма скидки, в копейках
Int64 сумма, доступная для оплаты счета, в копейках
Int64 сумма на карточном счете N 2, в копейках
Int64 сумма на карточном счете N 3, в копейках
Int64 сумма на карточном счете N 4, в копейках
Int64 сумма на карточном счете N 5, в копейках
Int64 сумма на карточном счете N 6, в копейках
Int64 сумма на карточном счете N 7, в копейках
Int64 сумма на карточном счете N 8, в копейках
256 байт Asciiz - произвольная информация о карте
256 байт Asciiz - информация для вывода на экран кассы
256 байт Asciiz - информация для распечатки на принтере
Версия RKeeper 6.109
Версия Farcards 6.04
Возможно ли , что эти версии не совместимы по протоколу передачи данных?
Все так. Все совместимо.
Покажите что ли как у вас структура описана в коде...
max-antip
01.07.2017, 09:58
вот наша структура
struct Info {
//размер структуры = 1164 байт(это поле заполнено при вызове)
WORD size;
//Удалена или нет
BYTE deleted;
//0 - нет, и сейчас есть
//1 - да, удалена
//Карту надо изъять
BYTE nedd_withdraw;
//0 - нет
//1 - да
//Истек срок действия
BYTE expired;
//0 - нет
//1 - да
//Сейчас карта не действует
BYTE not_valid;
//0 - нет, действует
//1 - да, не действует
//Нужно ли подтверждение менеджера
BYTE manager_confirm;
//0 - не нужно
//1 - нужно
//Карта заблокирована
BYTE blocked;
//0 - нет
//1 - да
//256 байт Asciiz строка - причина блокировки карты - будет показана на кассе
char block_reason[256];
//40 байт Asciiz строка - имя владельца карты
char card_owner[40];
//Идентификатор владельца карты
INT64 owner_id;
//Номер счета
DWORD account_number;
//тип неплательщика
DWORD not_pay_type;
//номер бонуса
WORD bounus_num;
//номер скидки
WORD discount_num;
//предельная сумма скидки, в копейках
INT64 max_discount;
//сумма, доступная для оплаты счета, в копейках
INT64 access_amount;
//сумма на карточном счете N 2, в копейках
INT64 acces_amount2;
//сумма на карточном счете N 3, в копейках
INT64 access_amount3;
//сумма на карточном счете N 4, в копейках
INT64 access_amount4;
//сумма на карточном счете N 5, в копейках
INT64 access_amount5;
//сумма на карточном счете N 6, в копейках
INT64 access_amount6;
//сумма на карточном счете N 7, в копейках
INT64 access_amount7;
//сумма на карточном счете N 8, в копейках
INT64 access_amount8;
//256 байт Asciiz - произвольная информация о карте
char comment[256];
//256 байт Asciiz - информация для вывода на экран кассы
char screen_comment[256];
//256 байт Asciiz - информация для распечатки на принтере
char printer_comment[256];
};
WORD size; 2
BYTE deleted; 1
BYTE nedd_withdraw; 1
BYTE expired; 1
BYTE not_valid; 1
BYTE manager_confirm; 1
BYTE blocked; 1
char block_reason[256]; 256
char card_owner[40]; 40
INT64 owner_id; 8
DWORD account_number; 4
DWORD not_pay_type; 4
WORD bounus_num; 2
WORD discount_num; 2
INT64 max_discount; 8
INT64 access_amount; 8
INT64 acces_amount2; 8
INT64 access_amount3; 8
INT64 access_amount4; 8
INT64 access_amount5; 8
INT64 access_amount6; 8
INT64 access_amount7; 8
INT64 access_amount8; 8
char comment[256]; 256
char screen_comment[256]; 256
char printer_comment[256]; 256
ИТОГО Байт 1164
Вот размер структуры (в байтах) посчитанный для Дельфей. По итогу складываются нужные 1164 байта.
SizeOf(Info) - у вас сколько покажет? Если не 1164, то тогда проверяйте каждый используемый тип (его длину) через SizeOf().
Си под рукой нету, поэтому сказать точно какой тип данных у вас не того размера не могу. Да еще и от компилятора зависит...
В памяти структура выравнивается соответственно ваша структура 1168 используйте паковку.
5978
Реализация в c++ builder
max-antip
03.07.2017, 15:22
Всем спасибо, да там была трабла со структурой походу и ошибка в одном из типов в методе, не тот тип аргумента ), мы это поправили, но родилась еще проблемка. Строковые переменные все норм приходят, а int-ы только старший байт что ли (тоесть приходит максимальная цифра инта ), хотя мы заполняем вменяемыми суммами.
---------- Добавлено в 14:22 ---------- Предыдущее сообщение было размещено в 12:24 ----------
Теперь работаем с методом TransactionEx И начали понимать в каком типе у нас пролемы идут - Это тип DWORD , в дельфи видимо он другой по размеру , пытаемся его побороть. Каким типом его интерпритировать в C++ его ?
Ну в дельфи DWORD это 4 байта.
Что под это подойдет в Си - вам виднее. Вы же на Си пишите...
Хотя вон в примере Slion - тоже DWORD используется и вроде как ничего...
Денис Афанасьев
11.07.2017, 01:13
Специально зарегистрировался чтобы отблагодарить.
СПАСИБО SLion за ExtDll!!!
И Ильину Александру за намек с размером структуры!
И Всем Форумчанам за внимание к данному вопросу!
:drinks:
condenser0071
02.10.2017, 14:48
Народ подскажите. Написал DLL для R-Keeper 6 на Visual Studio 2013. Все работает отлично. Но периодически зависает FarCards. На терминале при этом пишет что-то такое: "нет соединения с сервером карт". Я пробовал заливать пустую DLL, где функции возвращают только 0 и структуру с некоторыми значениями. Но все-равно виснет. В чем может быть дело? :(
Но периодически зависает FarCards.
система не 64-битная часом?
на ней не будет работать RnbOpen.dll
Нужно перейти на rTcp.dll, но работа через нее поддерживается только в новых версиях RK6
condenser0071
02.10.2017, 15:43
система не 64-битная часом?
на ней не будет работать RnbOpen.dll
Нужно перейти на rTcp.dll, но работа через нее поддерживается только в новых версиях RK6
Да, действительно 64-битная система... А новые версии это какие? Как проверить?
А новые версии это какие?
ЕМНИП, с 6.103, но лучше ставить сразу 6.111, в младших сейчас смысла нет.
condenser0071
08.11.2017, 15:06
система не 64-битная часом?
на ней не будет работать RnbOpen.dll
Нужно перейти на rTcp.dll, но работа через нее поддерживается только в новых версиях RK6
Спасибо большое за этот совет, перешел на rTcp.dll и проблема пропала.
Но появилась другая.
У меня в transactionEX тип оплаты всегда приходит 1 из (0...3), а так как у меня бонусы и я поставил скидку 0, то в транзакции и сумма приходит 0, поэтому беру данные из XML о товаре, которое присилает getCardInfoEX. Однако, если я использую "частичную оплату бонусами", то я в XML не вижу каких-либо признаков такой операции, а в транзакции тип по прежнему 1. В чем может быть проблема или что можно попробовать? :(
У меня в transactionEX тип оплаты всегда приходит 1 из (0...3)
Там возвращается массив и его надо перебрать (до Count)
dmlittle
19.04.2018, 15:42
Подскажите, есть ли возможность передать свое сообщение об ошибке через Farcards на R-Keeper?
Я заполняю поля OutBuff и OutLen, но эффект от этого нулевой - RK выдает свою ошибку вида
Ошибка NNNN
Персональная дисконтная система(ПДС): Ошибка "Внешняя ошибка выполнения транзакции (kind=7, account=0, Sum=45.0)" (12)
Кроме того, непонятно, что писать в поле OutKind?
Есть какая-нибудь документация или примеры того, как правильно заполнять эти поля?
Raziel38
23.05.2018, 09:06
где найти инстуркцию по подключению farcards к рк7? на саппорте её нету.
нашёл. на саппорте как и писал выше инструкции нету, но нашёл инструкцию как подключать какую то стороннюю систему, а там уже было показано как настроить фаркардс. я и не знал, что он цепляется через pds_netk.dll.
Здравствуйте!
Подскажите, пожалуйста, как узнать версию FarCards которая стоит на RK 7?
- - - Добавлено - - -
Здравствуйте!
Подскажите, пожалуйста, как узнать версию FarCards которая стоит на RK 7?
А. В логах которые пишет файркард
Б. Если запущен не службой а как десктоп, то на морде в заголовке окна
А куда по дефолту он пишет логи?
Я включаю farcard через CardRetranslate.cmd в котором START /B Farcards.exe /desktop
https://ibb.co/g7zOTU ссылка на скриншот. 6 02 07 это версия?
Да верно. Это номер версии
Доброго времени суток!
кто нибудь может поделиться верной структурой PCardInfo для функции GetCardInfoEx?
описания которые встречал в интернете для FC 4.х а то что есть тут на форуме, привел к такому виду:
type
PTInfo = ^TTInfo;
TTInfo = packed record
size: WORD;
deleted: BYTE;
need_withdraw: BYTE;
expired: BYTE;
not_valid: BYTE;
manager_confirm: BYTE;
blocked: BYTE;
block_reason: Array[0..255] of Char;
card_owner: Array[0..39] of Char;
owner_id: INT64;
account_number: DWORD;
not_pay_type: DWORD;
bonus_num: WORD;
discount_num: WORD;
max_discount: INT64;
access_amount: INT64;
acces_amount2: INT64;
access_amount3: INT64;
access_amount4: INT64;
access_amount5: INT64;
access_amount6: INT64;
access_amount7: INT64;
access_amount8: INT64;
comment: Array[0..255] of Char;
screen_comment: Array[0..255] of Char;
printer_comment: Array[0..255] of Char;
end;
но оно почему то не работает, кто может подсказать?
blackmetallman
24.01.2020, 00:42
Доброго времени суток. может кто нибудь подсказать, при проводке карты сумма у нас умножается на 65536. с чем это может быть связано?
FC 6.04 RK 7.6.2.190
damevanderjahr
24.01.2020, 12:12
есть дикое предположение, что в какой-то момент вместо деления на 0х100 происходит умножение на 0х100, а 65536=0х10000)
blackmetallman
30.01.2020, 22:10
есть дикое предположение, что в какой-то момент вместо деления на 0х100 происходит умножение на 0х100, а 65536=0х10000)
этот вопрос мы решили сменой версии, изначально была 6, теперь 5.
встал другой вопрос, функцию get мы сделали, уперлись post.
сможет ли кто с этим помочь?
сможет ли кто с этим помочь?
Я что то не понял
Вы пишете свою extdll или у вас не заводится какая то готовая?
функцию get мы сделали, уперлись post.
Какой post???
изначально была 6, теперь 5.
Если речь про готовую dll то значит она и писалась под 5ю версию.
Если вы разрабатываете сами то писать под FC5 не очень умное решение.
Приветствую, ранее здесь был вопрос о том, что всегда приходит только один вид операции (в TransactionsEx) и в единственном числе. Мой вопрос на ту же тему.
При проведении смешанной оплаты - баллами и рублями - сведения в dll приходят только об одном элементе транзакции, касающемся оплаты баллами и не получаются сведения об оплате наличными. Count при этом всегда равен 1. Вид операции всегда 0 (из 0...3)
Смешанную оплату мы проводим следующим образом.
1. Оплатить
2. Платежные карты
3. ПДС оплата 300 рублей
4. Ввод номера карты/телефона
5. Оплата части суммы имеющимися баллами
6. Оплата оставшейся части наличными.
Если поменять местами последовательность оплат, т.е. сначала заплатить рубли, а потом баллы, то всё равно приходят только сведения об оплате баллами... Что может быть не так?
Powered by vBulletin® Version 4.2.6 LTS Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot