Меркурий 130 и DrvMercFR.dll: серийный номер
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
по поводу серийника, появилась функция QueryEcrIdentEx https://forum.incotexkkm.ru/viewtopi ... 0&p=33#p33
по поводу 4.6 сделал защиту от цифр типа 4.59999999, теперь проблем не должно быть на 2.30, 4.10, 4.60, 5.10 проверил.
по поводу 4.6 сделал защиту от цифр типа 4.59999999, теперь проблем не должно быть на 2.30, 4.10, 4.60, 5.10 проверил.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Вопрос:
Как пользоваться функцией QueryEcrIdent
Как получить данные ?
Приведите пример....
----------------------------------------------------------------
Dim res
Set DX = CreateObject("DynamicWrapperX")
DX.Register App.Path & "\DrvMercFR.dll", "QueryEcrIdent", "i=uus" '
MsgBox DX.QueryEcrIdent
-----------------------------------------------------------------
Ничего не выходит.
Как пользоваться функцией QueryEcrIdent
Как получить данные ?
Приведите пример....
----------------------------------------------------------------
Dim res
Set DX = CreateObject("DynamicWrapperX")
DX.Register App.Path & "\DrvMercFR.dll", "QueryEcrIdent", "i=uus" '
MsgBox DX.QueryEcrIdent
-----------------------------------------------------------------
Ничего не выходит.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
typedef int ( __stdcall *TQueryEcrIdent) (
char *ModelName,
char *Manufacturer,
char *FirmvareVersion
);
ориентируйтесь на описание в drvmercfr.h
char *ModelName,
char *Manufacturer,
char *FirmvareVersion
);
ориентируйтесь на описание в drvmercfr.h
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Ошибка получается.
Никак не удаётся получить результат работы функции.
Никак не удаётся получить результат работы функции.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
рабочий кусок:
void __fastcall TForm1::bInfoClick(TObject *Sender)
{
char ModelName[50],Manufacturer[50], FirmvareVersion[50];
int Res=QueryEcrIdent(ModelName,Manufacturer,FirmvareVersion);
if(Res==0)
{
Log->Lines->Add(ModelName);
Log->Lines->Add(Manufacturer);
Log->Lines->Add(FirmvareVersion);
}else Log->Lines->Add("QueryEcrIdent:"+IntToStr(Res));
}
смотрите TestDll и TestDll2 там рабочий код, соответственно по нему и делайте.
void __fastcall TForm1::bInfoClick(TObject *Sender)
{
char ModelName[50],Manufacturer[50], FirmvareVersion[50];
int Res=QueryEcrIdent(ModelName,Manufacturer,FirmvareVersion);
if(Res==0)
{
Log->Lines->Add(ModelName);
Log->Lines->Add(Manufacturer);
Log->Lines->Add(FirmvareVersion);
}else Log->Lines->Add("QueryEcrIdent:"+IntToStr(Res));
}
смотрите TestDll и TestDll2 там рабочий код, соответственно по нему и делайте.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Спасибо!
Но воспользоваться Вашим советом - не смогу.
У меня нет такой среды разработки программ.
Я делаю на VB6.
Потому применить, то что там имеется - не представляется возможным, по вышеуказанной причине и по причине отсутствия знаний данного языка программирования.
Но воспользоваться Вашим советом - не смогу.
У меня нет такой среды разработки программ.
Я делаю на VB6.
Потому применить, то что там имеется - не представляется возможным, по вышеуказанной причине и по причине отсутствия знаний данного языка программирования.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
час писал(а):Спасибо!
Но воспользоваться Вашим советом - не смогу.
У меня нет такой среды разработки программ.
Я делаю на VB6.
Потому применить, то что там имеется - не представляется возможным, по вышеуказанной причине и по причине отсутствия знаний данного языка программирования.
я Вам дал пример на одном из самых распространенных языков, на других языках, тем более на VB, у нас нет проверенных исходников.час писал(а):Интересно , а произвольную строку написать - функция в этой dll имеется?
==================
И где вообще посмотреть все её функции?
----------------------------------------------
Кстати такие фунции как QueryEcrDateTime
GetCurrOper
- не понял как вызывать и обрабатывать.
Кто нибудь приведите пример на любом языке программирования.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Спасибо за поддержку!
Жаль, что бейсик - не считается распространённым языком программирования.
Хотя вроде бы по мировым понятиям -на восьмом месте.
http://www.oszone.net/14233/Top_10_prog ... _languages
--------------------------------
C другой стороны
Dim ModelName,Manufacturer,FirmvareVersion
Res=QueryEcrIdent(ModelName,Manufacturer,FirmvareVersion)
Всё равно выдаёт ошибку.
Жаль, что бейсик - не считается распространённым языком программирования.
Хотя вроде бы по мировым понятиям -на восьмом месте.
http://www.oszone.net/14233/Top_10_prog ... _languages
--------------------------------
C другой стороны
Dim ModelName,Manufacturer,FirmvareVersion
Res=QueryEcrIdent(ModelName,Manufacturer,FirmvareVersion)
Всё равно выдаёт ошибку.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
А вроде ни кто и не говорил, что бэйсик не считается распространенным языком и на нем пишут подключение к М130.час писал(а):Спасибо за поддержку!
Жаль, что бейсик - не считается распространённым языком программирования.
Хотя вроде бы по мировым понятиям -на восьмом месте.
http://www.oszone.net/14233/Top_10_prog ... _languages
уже намного ближе, Вы уже поняли что возвращается не одно значение а три, теперь разберитесь как все таки на VB можно получать эти значения(я не знаю как именно в VB).час писал(а): C другой стороны
Dim ModelName,Manufacturer,FirmvareVersion
Res=QueryEcrIdent(ModelName,Manufacturer,FirmvareVersion)
Всё равно выдаёт ошибку.
- Briarius
- Сотрудник Инкотекс
- Сообщения: 386
- Зарегистрирован: 17 май 2011, 17:37
- Контактная информация:
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Помнится, в институте нам преподаватель цитировал http://ru.wikiquote.org/wiki/Эдсгер_Вибе_Дейкстра
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
============================================Briarius писал(а):Помнится, в институте нам преподаватель цитировал http://ru.wikiquote.org/wiki/Эдсгер_Вибе_Дейкстра
:D :D :D
это не по существу вопроса, но смешно!
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Код: Выделить всё
уже намного ближе, Вы уже поняли что возвращается не одно значение а три, теперь разберитесь как все таки на VB можно получать эти значения
Но до сих пор никакими силами не удаётся извлечь данные. :evil:
Они бы содержались в переменных - кои находятся в скобках, но эта строка не выполняется - как ошибочная при обращении ККМ
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Я не знаю как в VB оформлять заранее зарезервированые контейнеры для строк(с 0м в конце), как передавать указатель на эту область и как потом с этим работать но уверен, что такое должно быть, подозреваю что хелп по VB Вам в этом поможет.час писал(а):ЭТО Я ПОНЯЛ ДВА ДНЯ НАЗАД.Код: Выделить всё
уже намного ближе, Вы уже поняли что возвращается не одно значение а три, теперь разберитесь как все таки на VB можно получать эти значения
Но до сих пор никакими силами не удаётся извлечь данные. :evil:
Они бы содержались в переменных - кои находятся в скобках, но эта строка не выполняется - как ошибочная при обращении ККМ
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Спасибо!
VB6 использую как только он появился. С прошлого века.
Дело ни в ни знании дело в непониманиию
Как можно получить зна....
VB6 использую как только он появился. С прошлого века.
Дело ни в ни знании дело в непониманиию
Как можно получить зна....
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
DrvMercFR.dll ни чем по взаимодействию не отличается от множества других библиотек, это стандартный механизм взаимодействия и как этот механизм реализуется в VB надо смотреть в хелпе по нему, а так как вы используете DynamicWrapperX, то и по нему надо смотреть хелп, чтоб понять как именно можно реализовать то, что передает DLL.
Так как это форум не по программированию то ожидать гарантированного ответа не стоит, но может кто и поможет.
Так как это форум не по программированию то ожидать гарантированного ответа не стоит, но может кто и поможет.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Спасибо!
Подождём... :roll:
Подождём... :roll:
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
Если еще кому любопытночас писал(а): Подождём...
В исходниках видно, что изменение параметров идет по ссылкам, так что используйте при передаче возвращаемых параметров хэндлы, получить которые можно через тот же DynamicWrapperX методом StrPtr. По крайней мере в VBScript работает пример:час писал(а):DX.Register App.Path & "\DrvMercFR.dll", "QueryEcrIdent", "i=uus" '
Код: Выделить всё
...
DX.Register Path & "DrvMercFR.dll", "QueryEcrIdent", "i=hhh" "r=l"
...
KKMName = DX.Space(31,"")
KKMManu = DX.Space(31,"")
KKMVers = DX.Space(31,"")
hKKMName = DX.StrPtr(KKMName)
hKKMManu = DX.StrPtr(KKMManu)
hKKMVers = DX.StrPtr(KKMVers)
Res = DX.QueryEcrIdent(hKKMName, hKKMManu, hKKMVers)
KKMName = DX.StrGet(hKKMName,"s")
KKMManu = DX.StrGet(hKKMManu,"s")
KKMVers = DX.StrGet(hKKMVers,"s")
if Res = 0 then
Wscript.Echo "ModelName : " & KKMName & Chr(10) & _
"Manufacturer : " & KKMManu & Chr(10) & _
"FirmvareVersion: " & KKMVers
else
Wscript.Echo "Error : " & Res
endif
Код: Выделить всё
...
DX.Register Path & "DrvMercFR.dll", "GetTaxRate","i=lhh", "r=l"
DX.Register "kernel32.dll", "GlobalAlloc", "i=ul", "r=p"
DX.Register "kernel32.dll", "GlobalFree", "i=p", "r=p"
...
TaxNum = CInt(1)
hTaxRate = DX.GlobalAlloc(0,4)
hTaxName = DX.GlobalAlloc(0,24) 'для 12 2-х байтных символов
Res = DX.GetTaxRate(TaxNum,hTaxRate,hTaxName)
TaxRate = DX.NumGet(hTaxRate,0,"l")/100
TaxName = DX.StrGet(hTaxName,"s")
Wscript.Echo "TaxRateNum : " & TaxNum & Chr(10) & _
"TaxRate : " & TaxRate & Chr(10) & _
"TaxName : " & TaxName
DX.GlobalFree(hTaxRate)
DX.GlobalFree(hTaxName)
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
sergsen
Спасибо за помощь по VB
Не решенным осталось получение таким образом параметра GetTaxNum (всегда возвращаеся 0) и даты ККМ через QueryEcrDateTime (число в первых 4-х байтах вижу, все остальное непонятно)
позже посмотрю, потестирую, отпишусь.
Спасибо за помощь по VB
Не решенным осталось получение таким образом параметра GetTaxNum (всегда возвращаеся 0) и даты ККМ через QueryEcrDateTime (число в первых 4-х байтах вижу, все остальное непонятно)
позже посмотрю, потестирую, отпишусь.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
посмотрел GetTaxNum и QueryEcrDateTime, да действительно есть проблемы, QueryEcrDateTime думаю в dll как будет немного времени попробую починить, с GetTaxNum сложнее, пока даже не могу обещать.
Re: Меркурий 130 и DrvMercFR.dll: серийный номер
GetTaxNum не очень и критично. На кассе всего 5 вариантов налога и GetTaxNum возвращает их количество, а не анализирует варианты расчета и выборка таковых вообще драйвером не предусмотрена. Перебор из 5 с GetTaxRate дает размер ставки и наименование налога, что и так позволяет выбрать нужную ставку при желании.Shtirlic писал(а):посмотрел GetTaxNum и QueryEcrDateTime, да действительно есть проблемы, QueryEcrDateTime думаю в dll как будет немного времени попробую починить, с GetTaxNum сложнее, пока даже не могу обещать.
QueryEcrDateTime так же смысл имеет только справочный. Гораздо более интересно было бы использовать SynchronazeDateTime, но там, как я понял из исходников, только заглушка.
Еще вот что наблюдается при использовании dll через DynamicWrapperX в 1С77. Касса не каждый раз обрабатывает Connect после Disconnect, возвращая 18 и 3 ошибку. Существенно снизил количество конечных отказов, поставив Connect в цикле из 3-х подключений с отказами. При этом, как ни странно, даже среднее время отклика кассы сократилось.
Да, почему не DynamicWrapperX, а не frole использую. Не вижу возможности в frole программно выводить налоги в чек.