Info über eine TSE Schnittstelle

Alles was nicht in ein Thema zuordnungsbar ist
Antworten
FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Info über eine TSE Schnittstelle

Beitrag von FDominicus »

Liebe Windev Benutzer, ich bin so weit und habe dafür Wrapper entwickelt:
https://www.swissbit.com/de/loesungen/fiskal/

Ist noich nicht völlig vollständig, aber sicherlich eine gute Ausgangsbasis. Bei der Erstellung habe ich mir am
C++ Klassenaufbau orientiert. Wer also irgendwann mal daran Interesse haben sollte, kann mich ja deswegen kontaktieren.

Einsatzbereich derzeit bei mir eine Ergänzung zu einer Software für Container/Abfallbetriebe. Ich habe da ein einfaches Kassenbuch mit "abgesichert" ( (ja ich weiß, Witze könnten ruhig etwas lustiger sein)

Könner von Ihnen dürften mit dem wrappen gut klar kommen, aber Zeit braucht es trotzdem ...

Man liest sich

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Info über eine TSE Schnittstelle

Beitrag von FDominicus »

Code sieht in diese Richtung aus:

Code: Alles auswählen

PROCEDURE MyScenario()
 clObjToTest is Wormstore dynamic = gpclApp.myWormStore
 nVal is int
 
 clObjToTest.tse_updateTime(Now())
 clObjToTest.user_login(WORM_USER_ADMIN, gpclApp.cltseOptions.adminPIN)
 clObjToTest.tse_ctss_enable()
 nVal = clObjToTest.clWormInfo.startedTransactions()
 TestCheckDifferent(nVal,0)
 
 sTestVal, sType are strings
 sTestVal = "testVal 2021-06"
 sType = "TestType"
 
 pclTransResponse is WormTransactionResponse dynamic
 
 pclTransResponse =  clObjToTest.transaction_start(clObjToTest.clientID, sTestVal, sType)
nVal = clObjToTest.clWormInfo.startedTransactions()
TestCheck(nVal>0)
 nVal = pclTransResponse.logTime()
 TestCheckDifferent(nVal, 0)
nVal = pclTransResponse.transactionNumber()
TestCheckDifferent(nVal,0)

 
 clObjToTest.user_logout(WORM_USER_ADMIN)


FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Info über eine TSE Schnittstelle

Beitrag von FDominicus »

Ergänzung: Ich habe die C-Api genommen und mich ungefähr am C++ Klassenmodell orientiert.
Die Tage dachte ich mir, ob man nicht den C# wrapper benutzen könnte.
Sieht so aus als ob es ginge, aber hier nur mit der Version 28

Wer immer noch interessiert sein sollte, kann mich ja anschreiben.

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Info über eine TSE Schnittstelle

Beitrag von FDominicus »

Ich habe mir diese Schnittstelle noch mal angeschaut, mir auch Gedanken über die C# Nutzung gemacht.
Prinzipiell kann ich die .Net library benutzen, aber dann gibt es klar Probleme mit Rückgabewerten wie
string [] und das ist problematisch.

Das C Interface, kann zumindest ich besser verstehen und nutzen
Manchmal frage ich mich ob die C API Entwickler ein bisschen böswillig sind:

Code: Alles auswählen

PROCEDURE allRegisteredClients(): array of string 
	eWormError is WormError
	arrResult is array of string
	
	ensureSelfTestRunSuccessfully()
	
	eWormError = loginAdmin()
	IF eWormError <> WORM_ERROR_NOERROR THEN
			RETURN arrResult
	END 	
	 
	clWormInfo.read() 
	nNumberOfRegisteredClients is int = clWormInfo.registeredClients()
	bRun is boolean
	bufTmp is Buffer
	
	bRun = True
	nRetrieved is int = 0
	nToSkip is int = 0
	WHILE bRun
		eWormError = tse_listRegisteredClients(nToSkip)
		IF eWormError <> WORM_ERROR_NOERROR THEN
			arrResult = Null
			BREAK
		END
		FOR i = 1 _TO_ m_stRegisteredClients.amount
			bufTmp = m_stRegisteredClients.clientIds[i]
			arrResult.Add(StringRetrieve(&bufTmp,srASCIIZAddress))
		END
		nRetrieved += m_stRegisteredClients.amount
		IF nRetrieved >= nNumberOfRegisteredClients THEN
				bRun = False
		ELSE
				nToSkip += 1
		END
	END

	logoutAdmin()
	RETURN arrResult


Hier so ein Fall. Eine Struktur mit einer
Anzahl (begrenzt) und einem Feld von "C-Strings" mit einer bestimmten Länge
Man muß nun in Schüben von irgendwo um 16 Einträge)
WormRegisteredClients is Structure
amount is int //Type C : int
clientIds is fixed array of 16 fixed string on 31 //Type C : char
END

einlesen
nToSkip ist also ein Vielfaches von 12 oder etwa in dieser Größenordnung


In C# sieht es nach string [] aus, ich hab aber keine Ahnung wie ich die rüber nach Windev bekomme.
Vielleicht hat ja hier einer eine Idee.

Wie auch immer die Schnittstelle läuft für mich gut genug und auch unproblematisch beim Kunden, daher sollte ich mich nicht beschweren.

Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: Info über eine TSE Schnittstelle

Beitrag von Herbert »

Neu in der Version 28 sind die sog. Plugins. Das sollte eigentlich für dich ein guter Lösungsansatz sein.
Siehe Anhang. Der Text ist leider auf Französisch, gibt aber die Ansätze dazu an.
Dateianhänge
plugins.jpg
plugins.jpg (585.07 KiB) 940 mal betrachtet

FDominicus
Member
Beiträge: 65
Registriert: 9. Mai 2015, 08:19

Re: Info über eine TSE Schnittstelle

Beitrag von FDominicus »

Ich denke, es ist was anderes als ich gemacht habe, die Funktionen einer C Library) in einem Klassenmodul gewrappt.
Und ich denke, das war recht vollständig. Diese Klassen kann ich nun in meine Programme importieren und damit dann
in /auf eine TSE-USB-Stick schreiben.

Antworten