Neues Thema starten

Verwaiste Transaktionen

Über worm_transaction_listStartedTransactions  kann ich die Nummern der verwaisten Transaktionen ermitteln. 

Abschließen kann ich diese Transaktionen nur, wenn ich die korrekte ClientID dafür verwende. Derselbe Client muss die zu TransactionNumber gehörende Transaktion geöffnet haben, andernfalls wird das Finish abgelehnt.

Woher bekomme ich die passende ClientID aus der TSE, wenn mehrere Clients darauf arbeiten?

Bleibt mir nur die Möglichkeit, die Funktion  worm_transaction_listStartedTransactions  für jeden bekannten Client einzeln auszuführen oder geht es auch einfacher?


Hallo GSchlag,


dies ist eine der Schwachstellen der aktuellen Firmware, s.a. unser Ticket

https://support.gastro-mis.de/support/tickets/18937

Es gibt leider keine Möglichkeit, die ClientID's der offenen Transaktionen auszulesen, d.h. wenn man diese nicht selbst mitprotokolliert, steht man im Regen. Hier hilft es nur, entweder jede ClientID, die mal auf der TSE gearbeitet hat (so man sie hoffentlich protokolliert hat!), zu probieren oder eben gleich ein eigenes Log über alle Transaktionen zu führen.

Mehr darüber können Sie bei Interesse auf meiner neuen Seite https://www.tse-easy.de lesen.


Viele Grüße

U. Kleinert


1 Person gefällt dies

Hallo Herr Kleinert,

zum Glück führen wir in der Software ein eigenes Log zu den Transaktionen mit.
Darüber konnte ich das Problem erfolgreich lösen.

Herzliche Grüße
Geritt Schlag

ja, das problem hatte ich auch.

inzwischen kann ich über die Transaktionsnummer den Start Sector für die transanktionsnummer auslesen, in der ja der Client steht.

beispiel

sector: 246->24.01.2020 13:20:59
556E6978745F313537393837323035395F5369672D3132305F4C6F672D5472615F4E6F2D355F53746172745F436C69656E742D4B6F726F6E69782E6C6F670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030303030303033373400313336313235363734373300303136333535002030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007573746172003030000000000000000000000000000000000000000000000000000000000000000000000000
Unixt_1579872059_Sig-120_Log-Tra_No-5_Start_Client-Koronix.log0000000037413612567473016355 0ustar00
*******************
also sectoren lesen - Tra_No-5_start_client suchen - dahinter steht der Client . . .

damit brauche ich nicht eine extra aufzeichnung . . . . .

Grüsse

   Günter Schäfer


Hallo Herr Schäfer,

das klingt irgendwie vielversprechend, aber ich verstehe es noch nicht. Vielleicht stehe ich hier gerade auf dem Schlauch?

  • woher nehmen Sie die Transaktionsnummer (die soll ja gerade ermittelt werden)
  • wie berechnen Sie die Sektorennummer aus der Transaktionsnummer

Aber selbst wenn man die Sektorennummer hat, kann man über das SDK ja den Sektor in der TSE nicht direkt lesen, sondern muß einen inkrementellen oder kompletten Tar-Export machen, was bei bis zu 7 GB Daten in keinem Fall Freude macht.
******

Transaction 1   / Signatur 27 / Sektor 12
Transaction 161 / Signatur 187 / Sektor 332

******

Viele Grüße

U. Kleinert


die ausgabe über tarexport geht natürlich nicht, da die transaktion nicht abgeschlossen ist, zudem mühsam.

aber natürlich können sie die tse auslesen wie eine Festplatte mit einer sector leseroutine

sector von 0 an, 512 Byte, darin ist dann lesbar wie oben bechrieben.

stringsuche nach transaktionsnummer die nicht abgeschlossen ist

die bekommen sie unter - zeige offene Transaktionen

und nachdem sie ja in etwa wissen wo sie suchen können sie ja bei sector 1000 oder so anfangen

aber auch 10  000 sectoren sind sehr schnell gelesen, keine Sekunde


hier ein beispiel der sector lesefunktion, habe sie für mich etwas abgeändert

ein sector 512 Byte, 



Private Function DirectReadDriveNT(sDrive As String, iStartSec As Long, ByVal iOffset As Long, ByRef lpBuffer() As Byte, ByVal cBytes As Long) As Long
    Dim hDevice As Long
    Dim abBuff() As Byte
    Dim nSectors As Integer
    'sDrive = stick & "\tse_comm.dat"
    nSectors = Int((iOffset + cBytes - 1) / BytesPerSector) + 1
    Rem hDevice = CreateFile("\\.\" & UCase(Left(sDrive, 1)) & ":", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, 0&, 0&)
    Rem 4-11-2008 Physical disk read/write modification
    hDevice = CreateFile("\\.\" & sDrive, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, &H20000000, 0&)
    If hDevice = INVALID_HANDLE_VALUE Then Exit Function
    Call SetFilePointer(hDevice, iStartSec * BytesPerSector, 0, FILE_BEGIN)
    ReDim lpBuffer(cBytes - 1)
    ReDim abBuff(nSectors * BytesPerSector - 1)
    Call ReadFile(hDevice, abBuff(0), UBound(abBuff) + 1, cBytes, 0&)
    CloseHandle hDevice
    CopyMemory lpBuffer(0), abBuff(iOffset), cBytes
    DirectReadDriveNT = cBytes
End Function


*********** und hier das ergebnis jeweils 4 Einträge wenn die Transaktion abgeschlossen ist

sector: 6228->02.12.2020 16:10:46
556E6978745F313630363932353434365F5369672D333131315F4C6F672D5472615F4E6F2D3735395F53746172745F436C69656E742D4B6F726F6E69782E6C6F670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030303030303033333600313337363137333632303600303136363031002030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007573746172003030000000000000000000000000000000000000000000000000000000000000000000000000
Unixt_1606925446_Sig-3111_Log-Tra_No-759_Start_Client-Koronix.log0000000033613761736206016601 0ustar00
*******************

sector: 6229->
3081DB020102060904007F000703070101801053746172745472616E73616374696F6E81074B6F726F6E69788200830E4B617373656E62656C65672D5631850202F70420F71C8F3F42C0A74B7BCF341FC012E0A61D500B18AE7D6E5A4580F8927473124B300C060A04007F0007010104010402020C2702045FC7BC86046050A78CA1E14FFD942C1B7391DDD8295482D98F30560F4BFBCA4ABCB48AF8FFEFC1ACEDC4852EEF61747D51EC1733F16B465F653B66FFFD0B9AB8A153DE51ADFA7E39BC24E3F41BF5703C17AF18D3F333369AE6F5B93D21118AE0B0F3E0908DEF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0�Û����    �������€�StartTransaction��Koronix‚ƒ�Kassenbeleg-V1…��÷� ÷��?BÀ§K{Ï4�À�à¦�P��®}nZE€ø’ts�K0�
����������'��_Ǽ†�`P§Œ¡áOý”,�s‘ÝØ)T‚Ù�0V�KûÊJ¼´ŠøÿïÁ¬íÄ….ïat}Qì�3ñkF_e;fÿý�š¸¡SÞQ­ú~9¼$ãô�õp<�¯�Óó36šæõ¹=!�Šà°óà��ï
*******************
sector: 6230->02.12.2020 16:10:46
556E6978745F313630363932353434365F5369672D333131325F4C6F672D5472615F4E6F2D3735395F46696E6973685F436C69656E742D4B6F726F6E69782E6C6F6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030303030303034323600313337363137333632303600303136373235002030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007573746172003030000000000000000000000000000000000000000000000000000000000000000000000000
Unixt_1606925446_Sig-3112_Log-Tra_No-759_Finish_Client-Koronix.log0000000042613761736206016725 0ustar00
*******************
sector: 6231->
30820112020102060904007F000703070101801146696E6973685472616E73616374696F6E81074B6F726F6E697882364156547261696E696E675E302E30305F302E30305F302E30305F302E30305F352E37305E352E37303A4261725F302E303A556E626172830E4B617373656E62656C65672D5631850202F70420F71C8F3F42C0A74B7BCF341FC012E0A61D500B18AE7D6E5A4580F8927473124B300C060A04007F0007010104010402020C2802045FC7BC8604606CB622DB30C35853EE86C2F7D94265D15F2AB72632E2ABF79BF4EC89D6D83ADDCA4F77042802B90E39B9844E555E64B3613A67C5EE339C6C660B6532B195307339E7408705DD1366E6A74682E6312C42A6A755B4DD24D8EE0F30FBCD774A44150000000000000000000000000000000000000000000000
0‚������    �������€�FinishTransaction��Koronix‚6AVTraining^0.00_0.00_0.00_0.00_5.70^5.70:Bar_0.0:Unbarƒ�Kassenbeleg-V1…��÷� ÷��?BÀ§K{Ï4�À�à¦�P��®}nZE€ø’ts�K0�
����������(��_Ǽ†�`l¶"Û0ÃXSî†Â÷ÙBeÑ_*·&2â«÷›ôì‰ÖØ:ÝÊOw�(�¹�9¹„NU^d³a:gÅî3œlf�e2±•0s9ç@‡�Ý�fæ§F‚æ1,B¦§U´Ý$Øî�0ûÍwJD�
Funktion
�FinishTransaction��Koronix‚6AVTraining^0.00_0.00_0.00_0.00_5.70^5.70:Bar_0.0:Unbarƒ�Kassenbeleg-V1
SerialNumber
F71C8F3F42C0A74B7BCF341FC012E0A61D500B18AE7D6E5A4580F8927473124B
Signatur
6CB622DB30C35853EE86C2F7D94265D15F2AB72632E2ABF79BF4EC89D6D83ADDCA4F77042802B90E39B9844E555E64B3613A67C5EE339C6C660B6532B195307339E7408705DD1366E6A74682E6312C42A6A755B4DD24D8EE0F30FBCD774A4415
*******************
So mache ich auch den TAR Export, wesentlich schneller und ich weis was passiert . . .
Grüsse
          Günter Schäfer

image


Hallo Herr Schäfer,

zuerst einmal Congratulations für Ihr Programm. So wie ich das sehe, haben Sie das SDK durchschaut...

Jetzt verstehe ich auch, was Sie meinen. Klar, wenn Sie die TSE nativ lesen, können Sie natürlich die SDK-Funktionen umgehen und die Daten der Sektoren (wie eine Festplatte) lesen. Haben Sie die Inhalte der Sektoren durch reverse engineering ermittelt oder haben sie auch eine Visualisierung der TLV-Records in den Sektoren gemacht?

So wie es aussieht, belegt jede Signatur jeweils zwei komplette Sektoren mit 512 Byte, obwohl sie i.d.R. deutlich kleiner ist (z.B. UpdateTime 199 Byte, start_transaction 210 Byte). Deshalb wohl auch 4 Sektoren pro Transaktion (2 Signaturen * 2 Sektoren = 4 Sektoren). Ich habe mir bisher noch nicht die Mühe gemacht, die TSE nativ zu lesen, sondern immer die Log-Messages bzw. das komplette Tar exportiert. Aber vielleicht sollte ich mir doch mal die Daten genauer ansehen...


Sie schreiben, "wenn Sie wissen, so Sie  suchen müssen". Wie berechnen Sie den Startsektor? Die Transaktionsnummer sagt ja nichts Genaues aus. Man kann zwar Transaktion * 4 als Startsektor machen, aber wenn es viele Logs ohne Transaktion gibt oder wenn die Daten der TSE bereits mehrfach gelöscht wurden, klappt das nicht mehr wirklich. Ich habe bei mir z.B. aktuell 670 Signaturen, bei 5 Transaktionen und diese belegen 1370 Blöcke. Das ist zwar nicht praxisnah, aber eben möglich.

Haben Sie schon mal erforscht, was eigentlich in den AuditLogs steht? Alle anderen Logs habe ich inzwischen komplett visualisiert, beim AuditLog fehlen mir die Infos, die Struktur "seAuditData" ist nirgends beschrieben.


Noch etwas: bei Sector 6229 steht bei start_transaction ein "Kassenbeleg-V1". Normal darf doch dort eigentlich laut Vorgabe kein Inhalt stehen (erst bei finish_transaction), oder?


Was meinen Sie zu dem Firmwarbug, den ich hier beschrieben habe:
Haben Sie hier eine Lösung oder wie gehen Sie damit um. Ich mache im Moment im Notfall immer einen zusätzlichen (erfolglosen) Selbsttest und lasse einen Client mit ID "system" immer angemeldet (die GastroMIS macht das mit dem Client "SwissbitDemo" übrigens ebenso).

Falls Sie Interesse haben, wäre ich sehr an einem Austausch interessiert, da Sie m.E. hier deutlich tiefer in der Materie sind als viele Andere. Gern können Sie mich auch über info@axxis-soft.de kontaktieren. Ich habe auch eine LAN-TSE, s. https://support.gastro-mis.de/support/discussions/topics/36000016988

Vielen Dank und viele Grüße
U. Kleinert

ich habe lange die Daten ausgewertet die ich aus der TSE gelesen habe, Byte für Byte


sector: 2198->10.03.2020 12:26:43
556E6978745F313538333834333230335F5369672D313039365F4C6F672D5472615F4E6F2D3331385F53746172745F436C69656E742D4B6F726F6E69782E6C6F670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000303030303030303033333600313336333137303336303300303136353633002030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007573746172003030000000000000000000000000000000000000000000000000000000000000000000000000
Unixt_1583843203_Sig-1096_Log-Tra_No-318_Start_Client-Koronix.log0000000033613631703603016563 0ustar00
*******************
hier ganz eindeutig der zusammenhang zwischen transaktionsnummer und client!

sie brauchen eigentlich nur ein paar bytes zu lesen um diese info zu bekommen . . .

es sind Bytes, also Bytes -> String



sector: 3441->

30 8201 11 020102060904007F0007030701018011
Finish Transaktion - 46696E6973685472616E73616374696F6E
Client - 8105 4130303032
8237 Beleg ....
42656C65675E3331382E30355F302E
30305F302E30305F302E30305F302E
30305E3130302E303A4261725F3231
382E30353A556E626172
830E Kassenbeleg 4B617373656E62656C65672D5631
850201E6 0420
seriennummer-F71C8F3F42C0A74B7BCF341FC012E0A61D500B18AE7D6E5A4580F8927473124B
300C060A04007F00070101040104020206B502045F7395EA0460
signatur-50C3F19A8066C978DD7C9584FAE083AA5375C9C18E29BC92C56C2980072658E2CA95EA699B81CB8CF4D677D65EE7C9CD061DE926BBCF355176796AB46AD051CCCBC60CD828F971F1F222C4E0123E005E57C0AC4ED299B54C6863E5CF7FFC1A60 000000000000000000000000000000000000000000000000


zu den offenen Transaktionsnummern :

sie brauchen den cleinten um die offene  transaktion zu schliessen

eigentlich sollten sie alle clienten kennen!

mit client angemeldet 

dann reicht TSE befehl zeige offene clienten


sollte client nicht bekannt sein dann liste der offenen transaktionen mit client erstelle


auch wenn sie auf sektor 0 anfangen zu lesen

Start transaktion (text) suchen

eintragen als offen mit client - steht als klartext im String

liste mit allen offenen erstellen

Finish Transaktion (text) suchen

transaktionsnummer schließen

übrig bleiben offenen nummern mit Client!

dauert nur wenig Zeit wenn sie direkt vom Stick lesen . . .


Noch etwas: bei Sector 6229 steht bei start_transaction ein "Kassenbeleg-V1". Normal darf doch dort eigentlich laut Vorgabe kein Inhalt stehen (erst bei finish_transaction), oder?

ja, eigentlich  . .

hat aber keinen einfluss auf das Ergebnis

nur die länge Payload darf (bei start transaktion) nicht vorhanden sein!


Den Tar Export mache ich auch auf diese Art, wesentlich schneller natürlich auch bessere selektionsmöglichkeiten  . .


         Grüsse

                 Günter




habe mich mal kurz ein kleines Programm für die offenen Transaktionen gebaut.

image


nochmals überarbeitet

Sectoren lesen

alle starts mit sectornummer

Fehlerliste anzeigen

TSE Selbsttest ausführen, ist notwendig damit sectoren gelesen werden können


image


exe
Anmelden oder Registrieren um einen Kommentar zu veröffentlichen