![]() |
Rechnungsnummer generieren?
Hallo!
Also ich such nen praktischen Weg ne Rechnungsnummer zu generieren (soll fortlaufend sein). Meine Überlegung.-- 9 stellige zahl die ersten beiden die Jahreszahl und den Rest von 0 aufwärtzzählen. Beispiel 04xxxxxxx . ich würde dann die letzten 7 stellen in einer INI speichern und je Rechnung um eins erhöhen und wieder neu speichern ,als letzte vergebene Nummer. So nun find ich das nicht gerade Elegant und denk, da gibt es doch bestimmt ne bessere Lösung. mfg schniede |
Re: Rechnungsnummer generieren?
Was könnte da eleganter sein?
Die einzigen Alternativen, die mir dazu einfallen, wäre, den Wert in der Registry zu speichern und evtl. noch ein alphanumerisches Zahlensystem zu verwenden (z.B. Hexadezimal). Durch letzteres hast du einen Grösseren Nummerierungsbereich mit der gleichen Anzahl Ziffern (in dem Fall statt 1 bis 9.999.999 ein Bereich von 1 bis 268.435.455 = FFFFFFF in Hex). |
Re: Rechnungsnummer generieren?
Danke scp !
Das mit den hex lass ich lieber, ca. 27000 verschiedene Nummern pro Tag im Jahr sollten reichen. geht ja 2005 mit 05xxxxxxx weiter :-) Registry , hm Vorteile?? Ini ist für mich leichter zu händeln. thx schniede |
Re: Rechnungsnummer generieren?
Moin Schniede.
Dann lass es doch bei der INI. Du musst wegen einem Wert nicht gleich was in die Registry schreiben. |
Re: Rechnungsnummer generieren?
hi,
ich würde die rechnungsnummer weder in ini-files noch in der registry speichern. was machst du wenn zwei user auf das programm zugreifen und beide gleichzeitig eine rechnung erfassen ? am besten in der datenbank (wird es ja bei einem rechnungsprogramm geben) speichern und hochzählen lassen (je nach datenbank gibt es ja verschiedenen möglichkeiten zur unterstützung, bei interbase/firebird generatoren, bei oracle sequenzen, bei m$ und paradox die AutoInc-felder, etc.) :wink: thomas |
Re: Rechnungsnummer generieren?
Du kannst alternativ auch einfach Jahr + Monat + Tag + anzahl Sekunden des aktuellen Tages nehmen. Das sind 5 Stellen von 0 bis 86400 pro Tag.
Macht z.B. 040112 33180 Und man kann anhand der Rechnungsnummer auch gleich das Datum nachvollziehen. |
Re: Rechnungsnummer generieren?
Hallo schniede,
am besten in der Tabelle nach der letzten Rechnung suchen. Tabelle.LAST Tabelle.RECHNUM := Tabelle.RECHNUM + 1 So habe ich es gemacht. Wenn du willst schicke ich Dir einen Auszug mit dem erhöhen der Rechnungsnummer. Gruß |
Re: Rechnungsnummer generieren?
Hallo nochmal,
habe auf die schnelle den Prog-Teil gefunden.
Delphi-Quellcode:
// Rechnungsnummer um 1 erhöhen
DataModule1.T_Rechnungen.Last; LetzteRechNummer := DataModule1.T_Rechnungen.FieldByName('Rechnungsnummer').AsString; iLetzteRechNummer := StrToInt(LetzteRechNummer); iNeueRechNummer := iLetzteRechNummer + 1; NeueRechNummer := IntToStr(iNeueRechNummer); Ich habe die Rechnungsnummer als String gespeichert, weil ich "RE" davor schreibe. Ich hoffe ich konnte Dir damit etwas helfen. Gruß [edit=Admin]Delphi-Tags eingefügt. Bitte künftig selber amchen. ;-) Mfg, Daniel[/edit] |
Re: Rechnungsnummer generieren?
Moin. moin,
da war doch noch das Finazamt. Die möchten ab diesem Jahr abfogende Rechnugnsnummern auch wenn verschedene Rechner an diesem Procedre beteiligt sind. Deshalb entscheide zunächst ob Du ein reines Einzelplatzsystem hast und es auch nicht auf mehrer Rechner erweitern möchtest. Einzelplatzsystem: :bouncing4: Hier geht das mit der Ini bestens Mehrplaztsystem :duck: Verwende einen Datenbankgenerator (Hansa hatte mal ein schönes Beispiel) Das hängt natürlich vom Datenbanksystem ab, welches Du verwendest. Grüße // Martin |
Re: Rechnungsnummer generieren?
BiBi,
Problem könnte bei deinem codeschnipsel nur sein, dass in einem netzwerk zwei user gleichezeitig eine rechnung holen und damit jeweils die gleiche iLetzteRechNummer erhalten.... wenn würde ich gleich nach dem holen der zahl ein update auf das datenfeld durchführen. vermindert die wahrscheinlich etwas.
Code:
gruss
iLetzteRechNummer := StrToInt(LetzteRechNummer);
iNeueRechNummer := inc(iLetzteRechNummer); executeQuery : "update t_rechnungen set Rechnungsnummer = INeueRechNummer where ...." NeueRechNummer := IntToStr(iNeueRechNummer); ...... :-) thomas |
Re: Rechnungsnummer generieren?
merlin17,
ist richtig, doch habe ich das Prog nur für mich und als Einzelplatzlösung erstellt. Trotzdem Danke für den Tip. Gruß |
Re: Rechnungsnummer generieren?
Hy !!
Ich danke euch allen,war unterwegs und werd später genau lesen. Auf alle Fälle viel guter Ideen. thx schniede |
Re: Rechnungsnummer generieren?
Ich nehme mal an,
das deine Rechnungsnummern folgende Kriterien erfüllen müssen: 1. fortlaufend 2. lückenlos 3. unique im laufenden jahr 4. evtl will der anwender bei jahreswechsel wieder von n loslegen 5. der anwender will noch nicht verschickte rechnungen einfach verwerfen können und nicht sofort eine storno oder gutschrift erstellen ich würde folgenden ansatz verfolgen a) rechnr niemals PK b) rechnr über generator holen c) wenn generierte rechnr geloescht wird -> nummer zurück in einen nummernpool zu b) bevor der generator erhoeht wird, erstmal schauen ob noch was im nummernpool liegt, hier muss man sich dann im mehrplatzsytem was einfallen lassen, das nicht etwa 2 user zur selben zeit sich im pool bedienen können. Kriegt man aber über pessimistisches Locking hin (zumindest mit IBObjects). Eleganterweise wird das nummern holen dann mit einer SP gelöst. Bleibt das chronologische Problem. rechnr versus Rechdatum. (nur über Organisation in dem Betrieb möglich) wer Interesse an dem geschilderten ansatz hat, dem kann ich eine ausführlichere Interbase/IBO Lösung zukommen lassen. mfg delphideveloper |
Re: Rechnungsnummer generieren?
Zitat:
Und das Argument mit dem RE davor ist doch völliger Käse. Warum soll das RE in der Datenbank stehen? Wozu braucht du es? Auf der Rechnung? Dann lass es beim Schreiben der Rechnung davor schreiben (berechnetes Feld). Selbst auf irgendwelchen Masken macht man das so. Schliesslich hat das "RE" KEINERLEI Infogehalt in der Datenbank. Oder benutzt du für Währungen auch ein Stringfeld, damit du das € (oder früher DM) dahinter schreiben kannst? In der Datenbank ist bei einem Währungsfeld nur die Zahl gespeichert, nicht aber das €. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 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 by Thomas Breitkreuz