AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Wie eindeutige Rechnungsnummer in DB erstellen und speichern?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

Ein Thema von DCoderHH · begonnen am 5. Dez 2016 · letzter Beitrag vom 8. Dez 2016
Antwort Antwort
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

  Alt 5. Dez 2016, 18:09
Ich persönlich würde wie folgt verfahren:

- Primarykey abtrennen....der hat nix mit ner Rechnungsnummer zu tun
- Einheitliches Format für Rechnungsnummer generieren:

z.B.
Mit dem Datum der Rechnung
Der Kundennummer
und ggf. einer lfd. Nummer


Das ganze als Varchar mit Index in die DB klatschen feddich.

Wenn ggf. die Anforderung besteht, das der Aufbau der Rechnungsnummer nicht ersichtlich sein soll,
kann man noch drüber nachdenken den o.g. String durch eine Hash-Routine zu jagen und den Hash als Rechnungsnummer zu nutzen. Damit wäre die Eindeutigkeit auch gesichert.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#2

AW: Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

  Alt 5. Dez 2016, 18:29
OK, ihr hab micht überzeugt. Ich werde 2 Felder nutzen: Ein ID-Feld als Primärschlüssel und die Rechnungsnummer im VarChar-Feld. Nun ist noch offen:

Wie erzeuge ich die Rechnungsnummer nach dem Schema YYYY-MM-NNNNNN? Y=Aktuelles Jahr, M=Aktueller Monat, N=Fortlaufende Nummer von 1 bis n im aktuellen Monat?

nahpets hat in Post #10 schon Code dazu genannt. Der sieht aber nicht so aus, als ob man dem mit einer DB im Multiuser-Zugriff nutzen könnte... Wer hat da eine gute Idee? Danke!

Geändert von DCoderHH ( 5. Dez 2016 um 18:31 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

  Alt 5. Dez 2016, 18:45
Naja, statt i nimmst Du in dem Teil hier Rechnungsnummer := Format('%.4d-%.2d-%.3d',[YearOf(Now),MonthOf(Now),i]); 'ne Datenbanksequenz.

Ggfls. könnte diesen Job aber auch ein Datenbanktrigger übernehmen?
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

  Alt 5. Dez 2016, 18:55
Naja, statt i nimmst Du in dem Teil hier Rechnungsnummer := Format('%.4d-%.2d-%.3d',[YearOf(Now),MonthOf(Now),i]); 'ne Datenbanksequenz.

Ggfls. könnte diesen Job aber auch ein Datenbanktrigger übernehmen?
Datenbanksequenz = Generator in Firebird? Und wie setze ich den dann jeden Monat wieder auf 1? Und zwar so, dass er nur genau ein mal pro Monat auf 1 gesetzt wird?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

  Alt 5. Dez 2016, 19:03
Code:
insert into mytable
values (1,                                                                       -- id
        'rn#_'||CAST(Extract(year FROM cast('NOW' as date))*10000 +
                     Extract(month FROM cast('NOW' as date))*100 +
                     Extract(day  FROM cast('NOW' as date)) AS VARCHAR(8))||
        LPAD (gen_id(gen_rn,1), 6, '0'),                                         -- rechnungsnummer
        cast('Now' as date));                                                    -- date
und reset

Code:
set generator gen_rn to 0;
Gruß, Jo
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#6

AW: Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

  Alt 5. Dez 2016, 19:24
und reset

Code:
set generator gen_rn to 0;
Und wann und wie rufst Du das auf und zwar so dass es genau ein mal pro Monat ausgeführt wird?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Wie eindeutige Rechnungsnummer in DB erstellen und speichern?

  Alt 5. Dez 2016, 19:40
naja, einmal im Monat
Mitternacht, am letzten Tag des Monats.

Ok, also ernst:
Eine lazy Variante wäre, das auf dem Server durch einen (Cron)Job durchführen zu lassen.
Dabei besteht leider die Gefahr, dass der Job fehlschlägt, das müsste man absichern.

Ich würde es wohl eher so machen, den gesamten Ausdruck, der die Nummer generiert, als Funktion abzurufen. Darin wird die Datumsgrenze geprüft und der Reset gemacht.
Dabei besteht leider das Problem, den Wechsel festzustellen, dafür eignet sich wohl am besten eine Hilfstabelle mit einer Zeile, die sich das Datum bei jedem Aufruf zum Vergleichen merkt.

Im übrigen muss man sich vielleicht noch überlegen, was das Rechnungsdatum wird. Tag der Erstellung, Tag des Versandes, ..
Je nach dem würde die Rechnungsnummer dann unterschiedlich generiert.
Gruß, Jo
  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 06:39 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