質問

大規模なバッチで請求書を生成し、EDIに変換して本社に転送する必要があります。すべての注文が入った注文テーブルがあります。その日のある時点で、セット(約1k)を取得して請求書を生成する必要があります。

  1. 請求書番号を生成するのに最適な場所はどこですか? SQL Serverバックエンドで?または、バッチを.NETアプリケーションに取り込み、そこで請求書番号を生成しますか?請求書番号はランダムにすることができますが、繰り返さないでください(3〜4年間)。プレイできる最大の桁数は12桁で、英数字でもかまいません。請求書番号の生成に関する情報はどこで入手できますか。

注:請求書を作成している間、注文の合計と税金を計算する必要があります。

ご意見をお寄せください。

役に立ちましたか?

解決

請求書番号は法的要求によって規制されている場合があります(私が住んでいる場所では、番号を順番に並べる必要があり、順番にギャップがあるとは思わない)。

多くの場合、数字には時間内に範囲を指定する要素が含まれています(年: 2009 03472など)。そうすれば、同じ番号を2回使用するリスクを最小限に抑えることができます。

1日に約1K件の請求書があると言います。つまり、6桁の請求書番号でニーズが満たされます。したがって、4桁の年とそれに続くゼロで埋められた6桁の請求書番号があれば、おそらくうまくいくはずです。

おそらく、それらが一意であることを保証するためにデータベースに生成させるでしょう。

他のヒント

最後に使用した請求書番号の値を格納するデータベースにテーブルを追加し、この値をインクリメントして、請求書の作成に使用する新しい値を返すストアドプロシージャを追加します。

新しい請求書を保存するとき、次の請求書番号を取得するためにSPを呼び出します-検証に合格した後、ディスクに書き込む直前に-引用のリスクを最小限に抑えるために;穴"番号付け順序で。

何らかの理由でランダムにしたい場合を除き、シーケンシャルIDを使用することをお勧めします(顧客がほぼ同じ期間から別の注文の注文IDを推測できないようにするためなど)。シーケンシャルIDを使用すると、現在の最大値を読み取って、バッチプロセスから注文をコミットする直前に書き込む範囲に何も書き込まれていないことを確認できます。

データベースをチェックする負担が不要で、他のプロセスが干渉しないことを確認できる場合は、DateTime.UtcNowとBase64変換を活用できる場合があります。本当に不格好なイラストは次のようなものかもしれません:

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 })

または

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

Base32 の変換(A〜Zの文字を使用し、数字2〜7)。ただし、ネイティブの.Net変換はないため、1つを検索する必要があります。

請求書IDの生成に関する規則を制限する法律がない場合、それはあなたが望むものになります。

次の例があります:

実際に請求書システムをプログラミングしていて、IDコードを順番に生成していましたが、たとえば顧客が会社との契約をキャンセルしたときに、以前に12回の請求書を生成していたため、いくつかのギャップが生じました。

(ここではISP会社であり、契約は6、12、または24か月でなければならないため)

システムのユーザーがキャンセルされた請求書を削除したため、データベースにギャップが生じました。連番が本当に必要な場合は、法律に問題があります。また、ここには他の多くの状況があり、それによって連続した請求書番号にギャップが生じました。

この種の問題を回避する方法が本当にわかりません。それが起こる状況は数多くあります。アイデアはありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top