AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Lücken in Bon Nummern, Kassenabschluss Nummern etc.
Thema durchsuchen
Ansicht
Themen-Optionen

Lücken in Bon Nummern, Kassenabschluss Nummern etc.

Ein Thema von TurboMagic · begonnen am 3. Jan 2023 · letzter Beitrag vom 4. Jan 2023
Antwort Antwort
TurboMagic

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

Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 3. Jan 2023, 15:41
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC
Hallo,

amngenommen man benutzt in einer Firebird Datenbank Generatoren die mittels Trigger
aktiviert werden um eindeutige IDs für sowas wie BON_ID eines Kassenzettels oder
die Kassenabschlussnummer eines Kassenabschlusses zu generieren.

Und angenommen die Anwendung stürzt irgendwo ab oder man kammt in eine Situation
wo man einen Rollback der Transaktion durchführt (sollte in der Anwendung nicht
passieren, aber Teufel ist ein Eichörnchen...) dann ist die generierte Nummer ja
verloren und man hat bei der nächsten Buchung eine Lücke in den Nummern, was so Leute
vom Finanzamt gar nicht gerne sehen dürften...

Wie mit sowas umgehen? Für diese Felder dann doch immer erst einen Select mit
Max(Spalte) durchführen und +1 machen? Damit nach einem Absturz bei der nächsten Bcuhung
die mit der anderen methodik "verbummelte ID" wieder benutzt wird?

Das würde in dem Fall sogar funktionieren, da die jeweiligen Tabellen i.d.R-. noch ein wie
oben beschriebenes Schlüsselfeld haben, was wieder eindeutig wäre und für jede Kasse immer
nur eine Buchung zu einem Zeitpunkt stattfindet, selbst wenn dieselbe Datenbank für mehrere
Kassen benutzt würde.

Grüße

TurbnoMagic
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 3. Jan 2023, 15:48
Tja, dann eben nicht den Generator direkt benutzen, sondern in eine Funktion packen, welche nachsieht, ob die letzte Nummer doch nicht benutzt wurde.
Ob dann dennnoch mit Generator oder einfach nur Max(Spalte)+1 ist erstmal egal.


Wir haben an einigen Stellen eine Lückensuchfunktion, welche auch nach Lücken zwischen den letzten X Datensätzen sucht (mit einer zusätzlichen ReserviertTabelle),
aber da sind es auch mehrere/hunderte Clients beteiligs, die Nummern müssen nicht aufeinanderfolgend sein und die Nummer und andere Defauts werden bereits beim "DataSet-Insert" geholt, damit der User es schon bei der Eingabe sieht.


Du kannst es auch wie bei einer Blockchain machen.
im nächsten/neuen Datensatz irgendwie den Vorherigen mit erwähnen, bzw. den letzten/vorherrigen oder aktuellen Kassenstand,
dann ist erkenntlich, dass diese Nummer richtigerweise fehlt, weil es ja nachvollziehbar ist, dass es dennoch aufeinanderfolgt.
$2B or not $2B

Geändert von himitsu ( 3. Jan 2023 um 15:54 Uhr)
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 3. Jan 2023, 17:16
Zitat:

Wie mit sowas umgehen? Für diese Felder dann doch immer erst einen Select mit
Max(Spalte) durchführen und +1 machen? Damit nach einem Absturz bei der nächsten Bcuhung
die mit der anderen methodik "verbummelte ID" wieder benutzt wird?
genau

Wir arbeiten auch mit Firebird, früher haben wir es auch mit Triggern und Generatoren für jede Tabelle gemacht.

Mittlerweile haben wir nur noch einen einzigen Generator für die ganze Datenbank, nämlich für das Feld "ID".
Das Feld "ID" hat jede Tabelle als Primary Key, ohne jede Ausnahme.

Also Felder für tbl Kasse...ID, Bonnummer, Betrag etc...
Felder für tbl Aufträge... ID, AUftragsnummer, Artikel etc
Felder für tbl Bestellung ... ID, Bestellnummer, Artikel etc.

Da die ID über die ganze Datenbank nur einmal vorkommt, kannst du jede Tabelle mit jeder über Parent und Child Tabellen verknüpfen..
Das ist z.B. super wenn du einen Beleg als Dokumment dem Auftrag, der Kasse und der Bestellung zuordnen möchtest..

Die "Tabellen-Generatoren" speichern wir in einer normalen Datenbank Tabelle ab..Hat den Vorteil, dass du da
vielleicht noch speichern kannst, wer zuletzt wann da was gemacht hat..oder so
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 3. Jan 2023, 17:22
Du kannst das auch einfach z.B. in einer Tabelle mit Erklärung loggen. Das sollte ja nicht oft vorkommen und wenn sich diese Fälle dann erklären lassen, passt alles.

Nebenbei gibt es keine Regel, meines Wissens gilt das nach wie vor, dass die Nummern fortlaufend sein müssen. Sie müssen lediglich eindeutig sein und dafür ist fortlaufende Nummerierung natürlich gut geeignet. In der Praxis verlangen es aber viele Prüfer und wer hat schon Lust auf den Ärger, auch wenn man im Recht ist?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 3. Jan 2023, 17:58
Du kannst das auch einfach z.B. in einer Tabelle mit Erklärung loggen. Das sollte ja nicht oft vorkommen und wenn sich diese Fälle dann erklären lassen, passt alles.

Nebenbei gibt es keine Regel, meines Wissens gilt das nach wie vor, dass die Nummern fortlaufend sein müssen. Sie müssen lediglich eindeutig sein und dafür ist fortlaufende Nummerierung natürlich gut geeignet. In der Praxis verlangen es aber viele Prüfer und wer hat schon Lust auf den Ärger, auch wenn man im Recht ist?
Ja das stimmt absolut.

Wenn man sich z.B. die Rechnungen von Amazon anschaut, da sind die Nummern Alpha-Numerisch, ja dann auch keiner Nachvollziehen, ob die lückenlos vergeben wurden..auch das ist, soweit ich weiss, erlaubt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 3. Jan 2023, 18:20
Grund, warum z.B. bei Amazon, Post und Anderen das nicht fortlaufend ist, damit Hacker nicht einfach auf Nummern schließen können,
also aktuelle Nummer besorgen und dann weiß man welche andere Rechnungsnummern, bzw. Trackingnummern es somit gibt.

Und sie könnten ja dennoch intern zusätzlich noch eine weitere fortlaufende Nummer haben, für den mürrischen Prüfer.
$2B or not $2B

Geändert von himitsu ( 3. Jan 2023 um 20:28 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

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

AW: Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 3. Jan 2023, 18:44
Danke für diese Anregungen.
Ich hab's jetzt jeweils auf eine Max(Nummer)+1 Lösung geändert.
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.893 Beiträge
 
Delphi 12 Athens
 
#8

AW: Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 3. Jan 2023, 20:27
Danke für diese Anregungen.
Ich hab's jetzt jeweils auf eine Max(Nummer)+1 Lösung geändert.
Ich hoffe, Du hast auf der Spalte einen entsprechenden Index (absteigend sortiert). Sonst wartest Du Dir bei großen Tabellen irgendwann den Wolf.
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

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

AW: Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 4. Jan 2023, 17:49
MaxNr + 1 ist aber nicht mehr transaktionssicher. Das heisst, in einem von x Fällen kommt es leider doch vor, dass 2 Clients sich versuchen, diese Nummer zu krallen.
  Mit Zitat antworten Zitat
TurboMagic

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

AW: Lücken in Bon Nummern, Kassenabschluss Nummern etc.

  Alt 4. Jan 2023, 18:11
MaxNr + 1 ist aber nicht mehr transaktionssicher. Das heisst, in einem von x Fällen kommt es leider doch vor, dass 2 Clients sich versuchen, diese Nummer zu krallen.
Ja und nein: da ein und die selbe Kasse nichts parallel verbucht, passt das, denn es gibt eine
where Klausel mit eindeutiger KassenID.
  Mit Zitat antworten Zitat
Alt 17. Jan 2023, 03:47     Erstellt von toddcars
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
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 06:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz