Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Peter Schweizer »

Hallo TSE-Programmierer,

ich möchte gemäß DSFinV-K 2.7.2 (Erleichterungsregel) verfahren und mache sofort nach jeder neuen Kassenposition eine Start/Finish-Transaction.

Nun soll z.B. nachträglich die Menge geändert werden oder die Position wieder gelöscht werden.

Wie geht man da vor ?
Da die Transaction bereits "gefinished" wurde kann wohl nicht mit "UpdateTransaction" gearbeitet werden ?

Gruß Peter
Gruss Peter
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

Halllo Peter,

Start/Finish-Transaction machen wir für den kompletten Beleg, unmittelbar vor dem Druck. Nicht pro Position.
Auf dem Bon müssen ja die Transaktionsdaten angedruckt werden. D.h. 1 Bon, 1 Transaktion.

Sollen nachträglich Änderungen erfolgen (z.B. Menge oder Preis ändern), muss für den Bon ein Storno-Bon erstellt werden.
Danach wird dann ein neuer Bon mit den geändert Daten erstellt. Storno-Bon und neuer Bon sind dann wiederum eigene Transaktionen.

Gruß
Stefan
Gruß
Stefan
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Peter Schweizer »

Hallo Stefan,

nehmen wir mal an, der Bediener erfasst mehrere Positionen und bricht dann den kompletten Vorgang ab (also ohne Bezahl-Daten).
Wenn ich das richtig sehe, müßte dann intern automatisch ein Update der aktuellen Transaction mit leeren ProcessData gemacht werden und
anschließend mit FinishTransaction die Transaktion beendet werden.

Habe ich das so richtig verstanden ?
Oder wie würde sonst ein Erfassungsabbruch gemanaged ?

Gruß Peter
Gruss Peter
Volker
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 26
Registriert: Sa, 29. Okt 2005 13:57
Wohnort: Hof
Hat sich bedankt: 14 Mal
Kontaktdaten:

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Volker »

Hallo Peter,

mit der Vorgehensweise von Stefan wäre das kein Problem, da erst vor dem Abschluss des Belegs die Start und Finish-Transaktion ausgeführt wird. Bei einem Abbruch wird dann nichts ausgeführt.

Ich hatte die Vorgaben allerdings so verstanden, dass mit der Erfassung der ersten Position die Start-Transaktion ausgeführt werden muss.
Mit Abschluss des Belegs dann die Finish-Transaktion.

@Stefan
Mit deiner Vorgehensweise wäre die Startzeit auf dem Beleg nahezu identisch mit der Abschlusszeit (Stop-Zeit).
Hast Du Infos ob das erlaubt ist?

Gruß
Volker
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Peter Schweizer »

@Volker, @Stefan

habe mir die gesetzlichen Vorgaben nochmals angeschaut und bin zu folgender (vorläufiger) Lösung für mich gekommen, die
mit 2 Transactionen auskommt.
Positionserfassung
StartTransaction (Type Bestellung) (dies ist auch der Startzeitpkunkt 1 der auf den Bon kommt)
Schleife: Erfassen/Ändern von Positionen
UpdateTransaction (Type Bestellung) mit allen bisherig erfassten Positionen
Wird der Erfassungsvorgang an dieser Stelle abgebrochen mache ich ein FinishTransaction (Type Bestellung) mit leeren processData

Ist die Positions-Erfassung, vorläufig beendet , beginne ich mit der Zusammenstellung der Bezahlung (bar + unbar + Rabatt +..)

Jetzt kann die eigentiche Bon-Erstellung+Ausgabe starten. Dazu wird aber nun zuerst ein
FinishTransaction (Type Bestellung) durchgeführt.
Bis zu diesem Zeitpkt wäre jederzeit eine erneute Aufnahme der Positionserfassung möglich.
Abschluß:
StartTransaction (Type Beleg)
Ausgabe Bon
FinishTransaction (Type Beleg)

Kann das so funktonieren ?
Gruß Peter
Gruss Peter
Volker
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 26
Registriert: Sa, 29. Okt 2005 13:57
Wohnort: Hof
Hat sich bedankt: 14 Mal
Kontaktdaten:

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Volker »

Hallo Peter,

für die Gastronomie kann ich das nicht sagen, ich bin im Handel unterwegs (hier gibt es nur Transaktionen vom Typ Beleg)
Bei mir löst aber auch die erste Position die Start-Transaktion aus, der Abschluss
des Belegs dann die Finish-Transaktion.

Gruß
Volker
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

Hallo zusammen,

der Transaktionstyp "Bestellung" ist meines Wissens nach nur für langandauernde Vorgänge bzw. komplexer Bedienabläufe zu verwenden.
D.g. wenn Du mit der Familie in die Gastwirtschaft gehst und da einige Stunden darin verbringst, dann sollte das angewandt werden.
In unserem ERP-System mit Kassenfunktion kommt ein Kunde, legt x Artikel hin und die werden kassiert,
daher ist das -für uns- etwas einfacher zu handhaben.

Ganz wichtig ist, dass Du Finish-Transaction VOR dem Bondruck machst, da Du die Daten andrucken musst.

Die Empfehlung von der DFKA (wir haben eine Schulung Ende letzten Jahres besucht) ist folgende:

Registrierung erstes Produkt
TSE: StartTransaction (keine Daten)

Registrierung weitere Produkte Rabatte usw.
TSE:passiert nix

Zahlungsvorgang
TSE: passiert nix

Ende des Vorgangs
TSE: FinishTransaction (Daten:Gesamtsummen etc.)

Speichern der Daten für DSFinV-K
TSE: passiert nix

Belegdruck
TSE: passiert nix

Wir haben das auch noch nicht abschließend impelemtiert.
Kann sein, dass wir Start/Finish-Transanction in einem machen oder doch Start-Transaction zu Begin des Bons, da wir da eh den Datensatz anlegen.

Beste Grüße

Stefan
Gruß
Stefan
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Peter Schweizer »

Hallo Stefan, Hallo Volker
danke für euere Anworten. -> Meine vorgehenweise müßte prinzipiel also okay sein.

Nun tritt aber gleich ein anderes Problem beim UpateTransaction() auf.

Bei der 1. Position die ich erfasse funktioniert noch alles.
UpdateTransaction --> prozessData : 1;"Test1";12.34
wird problemlos verarbeitet.

Kommt nun jedoch eine 2.te Position dazu und die Fkt UpdateTransaction()
wird mit den zusätzlich neuen Daten aufgerufen
UpdateTransaction --> prozessData : 1;"Test1";12.34\r2;"Test2";56.78

bekomme ich einen JSON Format Fehler.
Laut DSFinV-K Seite 110 ist das Zeilentrennzeichen "\r" .

Was mache ich bei der Aneinanderfügung der einzelnen Positionen falsch ? Irgend eine Idee ?
Gruß Peter

Nachtrag:
Mache ich mit den obigen UpdateDaten,mit den 2 Positoinen, ein FinishTransaction() so wird die Transaction problemlos angenommen und abgeschlossen.
Es schein also so zu sein, das ein UpdateTransaction() nicht die bereits bestehenden Daten ersetzt.
Das Wort Update muß also anderst interpretiert werden. Nur wie weiß ich noch nicht.
Gruss Peter
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

Hallo Peter,

da wir keine UpateTransaction machen, kann ich hier leider nichts dazu sagen.
Zudem sind wir noch nicht an der Stelle, wo wir signieren.
Initialisierung / Deaktivierung der TSE etc. wird in den nächsten Tagen fertig,
dann machen wir uns an die Transaktionen.

Grüße zum Wochenende
Stefan
Gruß
Stefan
Volker
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 26
Registriert: Sa, 29. Okt 2005 13:57
Wohnort: Hof
Hat sich bedankt: 14 Mal
Kontaktdaten:

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Volker »

Hallo Stefan,

ich kommuniziere aktuell per Socket-Verbindung mit der Epson TSE.
Ihr benutzt stattdessen die DLL. Benötigt Ihr dabei, bei Nutzung einer USB-TSE, auch den TSE-Treiber von Epson?

Ich würde mir gerne die Installation des Epson-Treibers auf den Kassen sparen.

Gruß
Volker
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

Guten Morgen Volker,

bei der Kommunikation über die DLL benötigt man genauso denTreiber. Die DLL macht genauso eine Socket-Verbindung.
Nur mit dem Vorteil, dass Du Dich um nichts kümmern musst. Egal welche Verbindungsmethode (COM-Port, Socket).
Wenn Du Dir den Treiber sparen willst, dann kannst Du einen TSE-Server verwenden oder einen EPSON-Drucker mit TSE.
Vorteil ist dann, dass eine TSE mehrere Kassen bedient.

Gruß
Stefan
Gruß
Stefan
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Jan »

Epson-Treiber? Also zumindest bei der Kommunikation per Socket braucht man keine. Ich mach das jedenfalls ohne.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

USB-TSE an USB-Port am Rechner -> Treiber notwenig.

Gruß
Stefan
Gruß
Stefan
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Jan »

Ah, OK. Das war mir nicht bewußt. Danke für den Hinweis.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

Im Prinzip ist es eigentlich kein Treiber, sondern stellt eine Art Server für die TSE bereit.
Host : localhost or 127.0.0.1
Port : 8009
DeviceID : local_TSE

Gruß
Stefan
Gruß
Stefan
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Jan »

Stefan,

wenn das so einfach ist - könnte man dann solche eine TSE nicht auch per Socket ansprechen? Dann könnte man sich die dll vielleicht sparen. Und eine Entwicklung könnte wirklich für egal welche TSE-Variante absolut exakt gleich sein. Außer das man bei der Server-Variante natürlich die einzelnen TSE-ID auslesen und verwalten muß, immerhin sind da ja bis zu 3 bzw. 8 TSE drin, die jeweils gezielt ansprechbar sein müssen. Aber selbst das wäre relativ ähnlich. Denn ob ich jetzt nur eine TSE (USB an Kasse oder ISB im Drucker), oder drei oder acht TSE habe - die sind jeweils über ihre ID anzusprechen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

Hallo Jan,

korrekt. Die lokale TSE wird genauso per Socket angesprochen.

Da wir die TSE über die EpsonTseLibC.dll ansprechen, müssen wir uns aber eh nicht um die Kommunikation kümmern.
Ob das seriell (TSE im Drucker und der steckt per USB am PC), oder per Socket läuft,
bzw. die Daten per XML oder JSON laufen, das macht alles die DLL.

Unser Code ist für alle TSE-Varianten absolut identisch.
Lediglich beim Connect zur TSE muss die Verbindungsmethode, Port (IP oder Comport)
und die TSE-ID (im Falle von local eben "local_TSE") angegeben werden.

Code: Alles auswählen

    xResult := DLLCall( ::dll, DLL_STDCALL, "TSEConnect", ::tseSelect:fieldGet("Method"),;
                      ::tseSelect:fieldGet("PortID"), Len(::tseSelect:fieldGet("PortID")), ;
                      ::tseSelect:fieldGet("TSEID"), Len(::tseSelect:fieldGet("TSEID")))
Hast Du Dir das WINDOWS_SDK_EPSON_TSE_DLL mal angeschaut? Das ist mitlerweise sehr gut beschrieben.


Gruß
Stefan
Gruß
Stefan
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Peter Schweizer »

Frage: Wie macht ihr das bei einer Vorgangs-Stornierung

Kann mir jemand auf die Sprünge helfen ?

Bei einer nachträglichen Vorgangs-Stornierung (vor einem Tagesabschluß),
genügt es da nur ein Start/Stop-Transaction mit dem negierten Bon Endbetrag zu machen ,
oder müßen dabei auch noch alle Einzelpositionen mit Start/Stop-Transaction negiert werden ?

Gruß Peter
Gruss Peter
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

Hallo,

also, wir machen einen Storno-Bon mit negativen Vorzeichen, welcher alle Positionen enthält.
Als Transaktionen aber nur Start/Finish Transaction mit den Summen.

Gruß
Stefan
Gruß
Stefan
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Peter Schweizer »

Hallo Stefan,

druckt ihr diesen Storno-Bon aus ?

Wenn ich das richtig verstehe, dann macht ihr für alle Positionen eines zu stornierenden Bons
ein Positions-Dublikat der einzelnen Position und ersetzt die Menge mit Menge x (-1) und davon dann
eine Start/Stop Transaction ?
Das gleich dann auch für die bezahlen Transaction mit den Summenwerten (bar/bargeldlos) ?

Gruß Peter
Gruss Peter
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

Hallo Peter,

wir machen grundsätzlich kein Start/Finish Transaction auf die Positionen, sondern immer nur auf dem kompletten Bon.
Mit Gastro, bzw. langanhaltende Vorgänge, haben wir zum Glück nix zu tun und können uns das daher sparen.

Da unsere Kasse auch Bestand führt, stehen auf dem Storno-Bon genau die gleichen Positionen mit Artikel, Menge, Preis.
Nur wird das Ganze dann mit -1 multipliziert. Umsatz wie auch die Zahlart.

Gruß
Stefan
Gruß
Stefan
Volker
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 26
Registriert: Sa, 29. Okt 2005 13:57
Wohnort: Hof
Hat sich bedankt: 14 Mal
Kontaktdaten:

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Volker »

Hallo Peter,

wir machen das genauso.

Ein Storno-Bon ist eine Kopie des Original-Vorgangs mit negierten Mengen (und einer neuen Belegnummer).

Der Beleg wird gedruckt (und signiert).

Gruß
Volker
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Jan »

Ich hab da eine ganz andere Frage zu. Für manche Zugriffe brauche ich den base64-Wert der gehashten challenge + Secret Key. Aber egal wie ich das mache, ich bekomme da keinen passenden Wert bei raus. Wie macht Ihr das?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
ssemleit
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 123
Registriert: Di, 08. Mär 2016 11:32
Hat sich bedankt: 19 Mal
Danksagung erhalten: 8 Mal

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von ssemleit »

Hallo Jan,

wir müssen nichts nach base64 umwandeln. Auch das übernimmt alles die EpsonTseLibC.dll.
Aber Du kannst Dir den Source von deren Dll anschauen, eventuell kannst Du da was ableiten.

Gruß
Stefan
Gruß
Stefan
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Kassensystem auf Gesetzeslage ab 1.1.20 anpassen

Beitrag von Jan »

Hallo Stefan,

naja, die Funktionen für das Hashen und Base64 liefert Alaska ja mit. Das ist ansich nicht das große Problem. Hoffe ich ....

Die Schwierigkeit ist, das ich nicht das korrekte Resultat erhalte. Zum Glück kenne ich das geforderte Ergebnis über einen Forenteilnehmer bei Epson. Aber ich kann das hier nicht reproduzieren. Daher meine Hoffnung, das einer von Euch das schon hinter sich hat.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten