AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firbird Generator und Transaction
Thema durchsuchen
Ansicht
Themen-Optionen

Firbird Generator und Transaction

Ein Thema von tkhandel · begonnen am 19. Mär 2025 · letzter Beitrag vom 20. Mär 2025
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.034 Beiträge
 
Delphi 12 Athens
 
#1

AW: Firbird Generator und Transaction

  Alt 19. Mär 2025, 23:42
in Firebird ist das per Generator einfach lösbar aber nur als eindeutige werte, lückenlos muss man anders machen, geht aber eigentlich
auch einfach.
Jetzt spannst du uns aber auf die Folter
Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
238 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Firbird Generator und Transaction

  Alt 20. Mär 2025, 06:16
Ein (schon sehr alter) Ansatz für numerierte Belege :

Man speichert eine gewisse Anzahl Nummern mit Hilfe des Generators in einen "Vorrat".
Von dort holt man sich bei Bedarf für seine Transaktion die niedrigste ungesperrte Nummer und sperrt sie im Vorrat.

Wird Transaktion abgebrochen, hebt man einfach die Sperre wieder auf. Ansonsten wird die Nummer entfernt. Ein Trigger sorgt dafür, dass immer genug ungesperrte Nummern vorrätig sind. 50 Nummern waren bei nur drei Clients immer genug.

Dann ist die Folge der Nummern lückenlos, aber nicht zwingend chronologisch. Die Reihenfolge kann bei längeren Transaktionen durch Abbruch vertauscht sein. Das war für die damalige Aufgabenstellung aber nicht wichtig und wurde durch einen zusätzlichen Zeitstempel kenntlich gemacht.

Alternativ kann man statt zu sperren auch die Nummer sofort aus dem Vorrat entfernen und bei Abbruch der Transaktion wieder dort einfügen.

Wahrscheinlich gibt es aber noch bessere Methoden.
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....

Geändert von Billa (20. Mär 2025 um 06:28 Uhr)
  Mit Zitat antworten Zitat
tkhandel

Registriert seit: 2. Jan 2022
Ort: Arnsberg im Sauerland
102 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Firbird Generator und Transaction

  Alt 20. Mär 2025, 10:47
Hallo,

eine spannende Diskussion die ich da losgetreten habe.
Ich habe aber eine ganz einfache Situation, da ich nur einen User an einer Kasse habe und die Kassen abends nur Ihre Daten übertragen und am
nächsten Tag wieder bei 0 anfangen( ausser die BON Nr die muss eben an jeder Kasse für sich weitergezählt werden).
ist ein Generator die sicherste Lösung.

Da ja keine zwei User eine Kasse bedienen können habe ich da mal über eine procedure gelöst die ich aufrufe wenn
der Kassiervorgang abgebrochen wurde.


SET TERM ^ ;

create or alter procedure PROC_BONGEN_DEC (
IST_ZAEHLER integer)
returns (
SOLL_ZAEHLER integer)
as
begin
ist_zaehler = GEN_ID( gen_bon_id, 0 );
Soll_Zaehler = (ist_zaehler - 1);
if (soll_zaehler >0) then
begin
ist_zaehler = gen_id(GEN_BON_ID, -(gen_id(Gen_Bon_Id, 0)));
soll_zaehler = gen_id(Gen_Bon_Id, :soll_zaehler);
end
suspend;
end^

SET TERM ; ^

Gibt es was das da gegen spricht ?
Jürgen
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
687 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Firbird Generator und Transaction

  Alt 20. Mär 2025, 10:54
Kannst Du eine nicht genutzte Nummer einfach als annuliert führen ? SO haben wir das in Kolumbien lösen können, da wird das vom Finanzamt scheinbar erlaubt (sagte mein Chef)
  Mit Zitat antworten Zitat
tkhandel

Registriert seit: 2. Jan 2022
Ort: Arnsberg im Sauerland
102 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Firbird Generator und Transaction

  Alt 20. Mär 2025, 11:05
Ich hatte das in einer Multiuser-Umgebung so gelöst, das ein erzeugter Beleg beim abrechen (automatisch) wurde, also
ein neuer Stornobeleg zum Ursprungsbeleg erzeugt wurde, das ist die einfachste Lösung da es nun ja nicht so oft vorkommt
und nach der Umstellung beim Kunden noch weniger wie vorher.

Bei Kassensystemen ist das nun eigentlich generell auch so das ein Beleg storniert werden muss um die
Nachvollziehbarkeit eines Kassenvorgangs zu gewährleisten zumal ja auch noch Positionsdaten des ersten Artikel
in der TSE gespeichert werden.
Jürgen
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
692 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Firbird Generator und Transaction

  Alt 20. Mär 2025, 11:22
wenn multiuser eh kein problem bei dir ist, dann ermittel die nächste nummer mit

select coalesce(max(nummer),0)+1 from tabelle where datum=current_date

mit einem desc index auf der nummer und dem datumsfeld (falls erforderlich weil datensätze von gestern in der tabelle bleiben)
geht das auch sehr schnell

wenn es eh bei 0 wieder losgeht ist der umweg über generator im singleuser mode unnötig kompliziert
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
Firebird 5 Update und Know-how Workshop – 28.8.-29.08.2025 64546 Mörfelden - Walldorf
  Mit Zitat antworten Zitat
tkhandel

Registriert seit: 2. Jan 2022
Ort: Arnsberg im Sauerland
102 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Firbird Generator und Transaction

  Alt 20. Mär 2025, 12:18
Hallo Holger,
ich hatte mich falsch oder besser gesagt Blöde ausgedrückt.
Die BON-Nr muss natürlich immer fortlaufend sein, deshalb der Generator bei der BonNr.
Ich hatte nur das Problem das ein Rollback alles zurück setzt nur den Generator nicht.
Jürgen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz