読者です 読者をやめる 読者になる 読者になる

Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

自社業務システムのDB設計メモ(請求業務編)

etc

今、僕は自社の業務システムを組んでるんですが、その中でこうやった方がきっとハピハピハッピーだねって思うことを、書いておきます。その内カテゴリーが増えていきます。突然消えることもあります。

こっちを読んで!

下記内容を元に実際に組んだ内容を公開してありますので、こっちを見てください。

販売管理システムの請求業務の設計を考える - Life is Really Short, Have Your Life!!

注意事項

このエントリを書いてすぐ後に、ERDの鬼である羽生さんにアドバイス頂き、1枚のJPGに設計指針をまとめたものを作りました。それは後日別エントリで公開します>< このログ、あんま意味ないです><

請求業務

請求残管理を請求テーブルでやらんほうがいい

良くあるDB設計として、「当月請求額」「前回請求額」という感じで、そのテーブルの中で請求残管理を行っているんだけどこれ違うんじゃないかなって思った。月毎の請求データに残を紐づけるとめんどくさくてしょうがない。今月5万の請求だけど1万しか入金がないとか、2ヶ月前の請求の入金が全く無いとか、そんなことザラにある。入金が多くても困るし。入金月と請求月で無理矢理紐づけても良いけど、床のにおいがする。

なので、単純に今までの請求累計と今までの入金累計を引き算すればいいんじゃね、という結論に至っている。請求と入金を紐づけない。プラスマイナスだけの関係。請求累計が多ければ請求残(売掛残)になる。入金累計が多ければ次月から差し引けばいい。これが最もシンプルで最も柔軟だ。別に累計っていっても、大抵締め支払いだからソシャゲみたいにINSERTしまくることないし。

ただ、このやり方だと「請求残一覧」を出すときに、請求テーブルと入金テーブルを請求先コードで全部JOINして集計かけたあと、HAVINGで請求累計!=入金累計みたいなことをしないと算出できないので、場合によってはSELECTするのにえらい時間がかかる恐れがあるなぁ。そこが怖い。

あ、大変。請求はあるけど入金が完了していない顧客をひっぱるのどうやってやろう。うーん、やっぱり請求データと入金データを全部引っ張ってきて、残があったら今月の請求に載せるしかない。当月の伝票がない場合は、当月で新しく請求を起こせばいいい。が、請求残があって且つ当月の伝票がある場合・・・請求残カラムが必要にならざるを得ない・・・・。伝票はないけど請求をするなら、それは分けないといかんなぁ。請求書で。あーあ、結局ココまで書いて朝令暮改かw カラムとしては要るんだな。

うはwwww 当月の請求データは当然だけど全く入金がないので全部請求残だ。あかん!当月の請求に残があるのは当たり前。問題は過去に請求があって入金がない場合なので、このままでは二重で請求データがががが。うわー。これはキツいで銀ちゃん。うーん、結局アレやな。請求残の抽出は当月より前の請求データと入金の今までの累計を付き合わせないとあかんってことか・・・・。それを今月の請求データにトゥギャザーして、請求残カラムにその都度入れていく、と。か、勝てる?これで?

請求先と納品先は違う

個人店なんかはそのお店に請求書送っていいんだけど、チェーン展開している場合は経理部さんがおるので、本社に請求書を出すことが多い。チェーン展開している店が複数あれば、その複数の店舗を纏めて本社に請求を出さねばならない。店毎に集計する必要があるので、請求データを作るときは請求先コードを用意してそれで集計かけないと床のにおいがする。

締日集計&再集計

締日ってのはフリーダムだ。僕が知る限り、10/15/20/25/28/31の6種類あるのを確認済だ。1から31まで全てがあり得る。なので、顧客データにあるはずの締日カラムでDISTINCTして、デイリーバッチでバッチ実行日と締日が同じだったら自動的に請求データ作ってやるのが、人の道だ。締日が来る前に請求データを作ることはまずない。都度請求の所は締日を0にする。都度請求ってのは発注があったらその度入金もらう。代引きとか。締日を0日にすれば、この世には1月0日なんてものがないから、締日集計は絶対実行されない。締日の数だけ請求データを都度作成する必要があることを忘れると、床のにおいがする。

で、世の中には伝票が間違ってたり、当月の伝票を翌月に回したりってことがよくある。日付や合計がズレたら再計算しなくてはならない。古い業務アプリだと伝票訂正後に締日単位で、再度締め直すという作りの所が多い。いや、請求先単位で締め処理をやり直せばいいんじゃねってすごく思うので、訂正に関しては締日単位ではなく、請求先単位で行えばいいはず。別に締日単位でもいいけど。Drop&CreateでオールOKだし。どっちも用意すれば盤石かな。

ただ、困るのが今が2月だとすると、12月の伝票を直したいなんて言う場合だな・・・。これをやると、12月→1月→2月という風に訂正があった年月から遡って請求データを再作成しなくてはならないんだけど、今の所そういうことは無いので見て見ぬふりをしている。