自社業務システムのDB設計メモ(請求業務編) - Life is Really Short, Have Your Life!!から約1年。昨年8月にリリースしたシステムも日常業務を回すということについては機能がそろったので、DB設計含めて皆さんとノウハウを共有したいと思います。
2013/04/08 更新
ER図で請求明細を作っていましたが、売上TBLに請求IDを付与すれば良いだけだったので、記述を変更しました。
ER図
https://cacoo.com/diagrams/2ih6FjObuO18CLts
現在の請求処理の流れ
請求データの作成は以下のような手順で行っています。
- .先月に請求がある顧客を探して当月の請求データを作る
- 2013年1月で締日が20日なら、請求日が2012-12-20の請求を探す。
- 当月の入金額を集計する。
- 先月と当月を足して請求データを作る
- .当月のみの請求がある顧客を探し、当月の請求データを作る。
- この時に、先月請求があがってる顧客を除く必要がある。
- 1と2で作った請求データを元に請求TBL➡請求明細TBL➡残高TBLをIN
- 請求明細に紐づいている売上IDを編集不可フラグを立てる。
請求が発生するパターンとしては、
- 先月からずっと繰越残がある場合
- 先月請求があって今月請求がある場合
- 当月のみ請求がある場合
この3パターンしかない。なので、請求日の先月のデータを最初に見に行って繰越を確認することからスタートしています。
請求IDと売上に紐づけろ
請求明細を作るときは、締め期間に該当する伝票一覧を登録しないといけません。請求明細書を発行するのに、どこの伝票を含んで出しているのかを紐づけるためです。なので、請求データ作成時に売上TBLに請求IDをFKで持たせて、その値をUPDATEするようにしています。請求IDが0もしくは空白でないなら締まっていることになるので、締めた売上は訂正・削除が出来ないようにしましょう。
請求先と納品先は別もの
本社経理部と店舗という紐付けがよくあるので、顧客に請求先コードを持たせないとダメです。10店舗もっているお客さんの場合は、伝票は店舗で請求書は本社になることが多いので、店舗の請求先コードを全部本社の顧客コードにしています。そうすれば、合算して集計できます。顧客コードと請求先コードが同じなら、それはそのままで。請求先と顧客を分けた方が正規化できていいんですが、昔のシステムから移行する際にそういう設計になってたのを引きずっています。困ったことは請求データの作成時に請求書の宛名を再取得しないといけない時ぐらい。
税計算
弊社の消費税算出は締めた当月買上額に対して一括で消費税を掛け合わせています。売るときは一つのロジックでいいけれど、問題は仕入で、会社によっては伝票毎に消費税を算出する会社もあったりします。端数の計算も銭単位を切り上げてくるところもあります。この辺は計算方式が複数あるのがうっとおしいです。消費税調整額っていう品番作ってつじつま合わせておけばよくね、って考えもあります。なんでもいいんです、仕入は。額が合えば。
入金
銀行口座にバコーンとつないでガツーンと自動で入金処理できればいいんでしょうけど、そんな機能はないので通帳を見て現状は手入力です。で、困ったことに顧客名と入金名義が全然違うことが多いので、時々どこかどこだかわからなくなるという哀しい問題が多々あります・・・。
締めの解除と締め直し
昔使ってた販売管理システムは、12月時点で9月の締めを解きたい場合、「12月を解く」→「11月を解く」→「10月を解く」→「9月を解く」っていう感じで、月毎に締めを解いて遡る必要があった。現在から順々に過去に遡るという、よくわからない仕様。「9月から今までの請求を全部解く」っていうロジックにすれば簡単だけどねぇ・・。ちなみに顧客を指定して締め解除も出来なかった。僕の場合は締めを解きたい請求を請求テーブルから検索して、解いた時にtmpの請求テーブルに入れてる。締め直すときはtmpの請求テーブルの内容を元に締め直している。そうすれば顧客指定があろうがなかろうが何でもいいわけ。
請求時には締日や請求先名カラムを作っとけ
実際にあった例ですと、2月までは20日締め、3月からは末締めに変更する顧客がいらっしゃいました。良くある話なんですが、締日が3月に変更された時に12月時点の請求書を再発行して欲しいと言われるとどうなるか。顧客の締日は変更されてしまっているから、12月は末締で締められてしまう。でも、当時は20日締だったんだから20日で締めてデータを作らねばならない。なので、請求データには締日を保存しておかないと後々辛くなる。請求先名称も変更になったら、過去の請求先名称が追えないのは辛いので保存しておく。
未入金の顧客を出したい
経営者から一番言われるのはコレ。未入金という概念は結構難しい。請求は毎月作られるけど入金が翌々末の場合は繰り越しがどうしても残る。現状はシンプルに繰越額がある顧客だけを指定して表示できるようにして、それを印刷できるようにした。翌々の顧客はすぐわかるし、これをシェア出来るだけで全く違うからね。
以上だぜ。