Frage

Ich brauche Rechnungen in großen Stück zu erzeugen, die zu EDI und transportierten unsere HQ umgewandelt werden. Es gibt eine Auftragstabelle mit allen Aufträgen kommen in. An einem gewissen Punkt in dem Tag Ich habe eine Reihe greifen (etwa 1k) und die Rechnungen zu erzeugen.

  1. Wo wäre der beste Ort, um die Rechnungsnummern zu generieren? Auf SQL Server-Backend? Oder die Charge in einer .NET-Anwendung packen und dann die Rechnungsnummern dort generieren? Die Rechnungsnummern können zufällig sein, darf aber nicht wiederholen (für 3-4 Jahre). Ich habe ein Maximum von 12 Stellen mit zu spielen und kann alphanumerisch sein. Wo finde ich Informationen zur Erzeugung von Rechnungsnummern finden.

. Hinweis: Während ich die Rechnungen bin Erzeugung Ich brauche die Auftragseingänge und Steuer berechnen

Ich würde schätzen Sie Ihre Eingabe.

War es hilfreich?

Lösung

Rechnungsnummern können durch gesetzliche Anforderungen geregelt werden (wo ich sie in der Folge zu leben müssen, und ich glaube nicht, dass es in der Folge sein können Lücken).

Sie sehen oft, dass die Zahlen ein Element umfassen, das wird Umfang sie in der Zeit (wie das Jahr: 2009 03472). Auf diese Weise minimieren Sie das Risiko, zweimal die gleiche Nummer.

Sie sagen, Sie haben ~ 1K Rechnungen pro Tag. Das bedeutet, dass 6-stellige Rechnungsnummer Ihre Bedürfnisse decken. So 4-stelliges Jahr, gefolgt von Nullen aufgefüllt 6-stellige Rechnungsnummer sollen wahrscheinlich werden Sie produktiv.

würde ich wahrscheinlich haben die Datenbank sie erzeugen, um sicherzustellen, dass sie einzigartig sind.

Andere Tipps

eine Tabelle zur Datenbank hinzufügen, die den Wert der letzten Rechnungsnummer speichert verwendet, und eine gespeicherte Prozedur, diesen Wert zu erhöhen und den neuen Wert zurück zum Ihnen bei der Erstellung Ihrer Rechnung zu verwenden.

Wenn Sie Ihre neue Rechnung speichern, den Anruf an die SP machen die nächste Rechnungsnummer eines der letzten Dinge bekommen Sie - nach der Validierung vergangen, aber immdiately vor auf der Festplatte zu schreiben - um das Risiko von "zu versuchen, zu minimieren Löcher“in der Nummerierungsfolge.

sequenzielle IDs ist wahrscheinlich am besten, wenn Sie sie wollen aus irgendeinem Grunde zufällig sein (wie, weil die Kunden nicht in der Lage sein sollten, die Auftrags-ID einer anderen Ordnung von etwa der gleichen Zeit zu erraten). Mit sequentiellen IDs können Sie die aktuelle max lesen und dann überprüfen, dass keine haben im Bereich geschrieben Sie schreiben wollen, kurz bevor Sie Aufträge aus dem Batch-Prozess zu begehen.

Wenn Sie nicht die Last wollen die Datenbank zu überprüfen und können sicher sein, dass andere Prozesse gehen zu stören nicht, Sie könnten in der Lage sein DateTime.UtcNow und eine Base64 Umwandlung zu nutzen. Eine wirklich klobig Abbildung könnte so etwas wie:

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Year, 
                                    (byte)DateTime.UtcNow.Month,
                                    (byte)DateTime.UtcNow.Day,
                                    (byte)DateTime.UtcNow.Hour,
                                    (byte)DateTime.UtcNow.Minute,
                                    (byte)DateTime.UtcNow.Second,
                                    (byte)DateTime.UtcNow.Millisecond })

oder

Convert.ToBase64String(new byte[] { (byte)DateTime.UtcNow.Ticks })

Sie würden wahrscheinlich mehr Interesse an einem Base32 Umwandlung (es verwendet Buchstaben AZ und 2-7 Stellen), obwohl es gibt keine nativen .Net Konvertierung, so dass Sie ein, um die Suche müss.

ich denke, wenn es keine Gesetze gibt, die Regeln zu erzeugen, um die Rechnung-ID zu beschränken, kann es sein, was auch immer Sie wollen.

Jetzt habe ich ein gutes Beispiel über:

Eigentlich Programmierung ich eine Rechnung System und ich hatte meine ID-Code sequentiell zu erzeugen, und ich habe einige Lücken, denn wenn der Kunde zum Beispiel den Vertrag mit dem Unternehmen kündigen, und ich hatte bereits 12 Rechnungen generieren einmal vor.

(denn hier sind wir ein ISP-Unternehmen und der Vertrag muss 6, 12 oder 24 Monate)

Ich habe die Lücke in meiner Datenbank, da die Benutzer des Systems die stornierten Rechnungen gelöscht. Wenn ich wirklich eine laufende Nummer brauche bekam ich ein Problem mit dem Gesetz. Und ich habe viele andere Situationen, die hier das gab mir eine Lücke in meiner sequentiellen Rechnungsnummer.

Ich weiß wirklich nicht, wie diese Art von Problem Ursache zu vermeiden, gibt es zahlreiche Situation, wo es geschehen. Jede Idee?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top