AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb
Thema durchsuchen
Ansicht
Themen-Optionen

Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

Ein Thema von RWarnecke · begonnen am 27. Nov 2011 · letzter Beitrag vom 28. Nov 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 18:56
Hallo zusammen,

ich muss in einem Programm Rechnungsnummern mit fortlaufender Nummer vergeben ohne eine Lücke zu produzieren. Die Vergabe muss auch noch dann funktionieren, wenn mehrere Leute eine Rechnung erstellen. Ich habe dazu zwei Tabellen für die Rechnung. Die erste Tabelle enthält alle Daten zum Kunden und natürlich die Rechnungsnummer und die zweite Tabelle enthält alle Rechnungspositionen, mit Referenz auf die Rechnungsnummer. Ich hatte mir dazu zwei Möglichkeiten überlegt.
  1. Die Rechnungsnummer wird beim Aufruf des Rechnungsformular vergeben.
  2. Die Rechnungsnummer wird erst vergeben, wenn die Rechnung gespeichert wird.
Bei der ersten Möglichkeit sehe ich das Problem, wenn mehrere Leute das Rechnungsformular geöffnet haben und einer die Eingabe abbricht oder sonst irgendwas passiert, eine Lücke entstehen kann. Bei der zweiten Möglichkeit weiß ich nicht, wie ich das mit dem Speichern übernehmen sollte.

Wie würdet Ihr die Aufgabe lösen ? Eine meiner Möglichkeiten verwenden, wenn ja welche und warum ? Oder gibt es noch einen ganz anderen Ansatz ?

P.S. : Wenn es umbedingt nötig ist, kann das Design der beiden Tabellen geändert werden.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von MGC
MGC

Registriert seit: 15. Mai 2008
Ort: Helsa
106 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 19:09
Hallo,

Du hast doch mit Sicherheit eine Tabele, in der ggf. nur die vergebenen Rechnungsnummern stehen. Wenn Du beim Speichern die Tabelle kurzzeitig sperrst, den gröten bereits gespeicherten Wert ausliest, deine demnach nächst höhere Nummer spiecherst und dann die Tabelle für den nächsten freigibst sollte nichts mehr passieren können.

Also im Prinzip Dein 2. Ansatz. Schwierig wird es jedoch, wenn Du mit verschiedenen Severn zu tun hast und diese erst synchronisiert werden. Dort könnte es dann zu Problenmen, bzw. bemerkbaren teitlichen Verzögerungen kommen.

Auf welche Weise ist das DB-System aufgebaut, bzw. wie werden die Zugriffe geregelt udn welche Technologie setzt Du beim Zugriff auf die DB ein?

Viele Grüße,
Marc
Programmieren ist wie Chemie:
1. Wenn man alles einfach nur zusammenschmeisst kommt es zu unerwarteten Reaktionen.
2. Wenn es plötzlich anfängt zu qualmen, muss man eben noch mal von vorn anfangen.
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
536 Beiträge
 
Delphi 12 Athens
 
#3

AW: Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 19:27
Hallo,

ich mache es so:

Es gibt eine Tabelle mit Rechnungsnummern, nur eine Spalte. Wenn eine Nummer gebraucht wird, holt sich der Client die kleinste Nummer aus der Tabelle und löscht sie.

Wenn die Tabelle nahezu leer ist, wird sie wieder aufgefüllt.

Bricht jemand eine Rechnung ab oder es geht sonst etwas schief, wird die Nummer wieder in die Tabelle zurückgeschrieben.

Die Zeit von Nummer holen bis "verbrauchen" halte ich sehr kurz, die Nummer wird erst geholt wenn die Rechnung ausgegeben wird, nicht schon wenn die Positionen bearbeitet werden.

Ist die Rechnung gedruckt und gegebenenfalls bestätigt ist die Nummer entgültig verbraucht. Dann kann man nur noch eine Stornorechnung machen.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 19:30
Wie werden die Rechnungen erstellt?

Ich mache das so: Es wird zunächst eine offene Rechnung erstellt. Erst wenn diese vollständig (und in der DB vollständig gespeichert) ist, wird per Stored Procedure eine eindeutige und lückenlos steigende Rechnungsnummer erstellt.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 19:32
Hallo...

welches DBMS ist im Einsatz ? Persönlich würde ich folgenden Ablauf bevorzugen:
1. RE speichern
2. DBMS vergibt eine Nummer über einen Generator (Firebird)... ist damit eindeutig und fortlaufend
3. Die Query enthält als Rückgabewert die Nummer
4. Mit dieser Nummer können dann die Positionen gespeichert werden (Zuordnung)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 19:37
@haentschman
so kenn ich es auch, unter Berücksichtigung der Vorgaben finde ich die Implementierung von Neumann am interessantesten.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

AW: Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 19:37
Auf welche Weise ist das DB-System aufgebaut, bzw. wie werden die Zugriffe geregelt udn welche Technologie setzt Du beim Zugriff auf die DB ein?
Es soll lediglich nur einen Firebird-Server geben, wo alle drauf zugreifen. Als Datenbankkomponente setze ich UniDAC ein. Die Daten werden aus der Datenbank geholt und in einer TObjectList gespeichert und dort vom Programm auch bearbeitet. Erst wenn es Änderungen in der TObjectList gibt, werden die Daten zurückgeschrieben in die Datenbank.

Wie werden die Rechnungen erstellt?
Ich habe ein Formular erstellt, wo ich die Kundendaten eintragen kann und die Rechnungspositionen. Danach ist alles offen, wie die Daten verarbeitet werden. Bevor ich die Rechnung ausdrucke oder abschliesse, möchte ich natürlich noch eine Vorschau haben.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 20:01
...
2. DBMS vergibt eine Nummer über einen Generator (Firebird)... ist damit eindeutig und fortlaufend
...
Man muss aufpassen, das es beim Speichern kein Rollback geben kann, das ist Alles.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#9

AW: Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 20:48
Klar, in diesem Ausnahmefall (bei fehlerhaftem Eintragen in die DB) wäre dann die Nummer verbraucht. Mit diesem Sonderfall hätten wahrscheinlich alle Lösungen ein Problem und sollte seperat behandelt werden.
  Mit Zitat antworten Zitat
TBx
(Administrator)

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

AW: Vorgehensweise für Rechnungsnummernvergabe im Multi-User Betrieb

  Alt 27. Nov 2011, 21:02
Klar, in diesem Ausnahmefall (bei fehlerhaftem Eintragen in die DB) wäre dann die Nummer verbraucht. Mit diesem Sonderfall hätten wahrscheinlich alle Lösungen ein Problem und sollte seperat behandelt werden.
Und genau dafür kann man die vorgeschlagene Möglichkeit mit der Rechnungsnummerntabelle verwenden!
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:53 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