この特集のトップページへ
>
Chapter 3:データストア層の構築
3.2.4 請求書情報テーブル
請求書情報テーブルは,請求書の情報を格納するためのテーブルである。請求書とは,一定期間内の伝票の総額を集計し,それを記録したものであり,経理部で作成される。一般的に請求書には,顧客名(請求先),集計期間,総額(必要に応じて明細)といった情報が含まれる。また,システム構築の観点からすると,請求書に対して入金があったかどうかのフラグを用意しておけば,データベースを検索するだけで未入金の伝票のみを抽出できるようになるため,便利である。
ここでは,請求書情報テーブルをTable 3-6のように定義する。なお,顧客名(請求先)には顧客の名前ではなく,顧客情報テーブルに登録されている顧客番号(IDフィールド)の値を記録することにした。
Table 3-6 請求書情報テーブル
フィールド名 |
型 |
サイズ |
NULL |
解説 |
ID |
数値型 |
− |
不可 |
請求書を識別するための唯一無二の番号。請求書番号として使われる |
CUSTOMERID |
数値型 |
− |
不可 |
この請求書の対象となる顧客を示す顧客番号。顧客情報テーブルのIDフィールドに格納されているいずれかの値が格納される |
STARTDATE | 日付型 | − | 不可 | この請求書の集計期間の開始日(この日を含む) |
ENDDATE | 日付型 | − | 不可 | この請求書の集計期間の終了日(この日を含む) |
MADEDATE |
日付型 |
− |
不可 |
請求書の作成日 |
SUBMITDATE | 日付型 | − | 可 | 入金の確認日 |
PAIDFLAG | Boolean型 | − | − | 入金があったかどうかのフラグ。Trueで入金ずみ,Falseで未入金を示す |
SENDBILLFLAG | Boolean型 | − | − | 請求書を送付ずみかどうかのフラグ。Trueで送付ずみ,Falseで未送付を示す |
SUBTOTAL |
金銭型 |
− |
不可 |
小計。この請求書の金額(税抜)合計 。STARTDATE〜ENDDATEの期間内の伝票の小計(SUBTOTALフィールド)の和 |
TAX |
金銭型 |
− |
不可 |
消費税。STARTDATE〜ENDDATEの期間内の伝票の消費税(TAXフィールド)の和 |
TOTAL |
金銭型 |
− |
不可 |
この請求書の合計(税込金額)。STARTDATE〜ENDDATEの期間内の伝票の合計(TOTALフィールド)の和 |
MEMO | 文字型 | 80 | 可 | 摘要 |
○請求書と伝票の連結
ところで,請求書は合計額だけ算出すればよいというものではない。請求書には,具体的にその請求金額がどのように算出されたのか,つまり,その請求の明細も一緒に示さなければならないのである。そこで,伝票情報テーブルに,請求書の番号を格納するBILLIDフィールド,請求書が作られたかどうかを示すMADEBILLFLAGフィールド,請求書が作成された日付を格納するMADEBILLDATEフィールド,の3つを追加する(Table 3-7)。
Table 3-7 請求書と連結させるためのフィールドを追加した伝票情報テーブル
フィールド名 |
型 |
サイズ |
NULL |
解説 |
ID |
数値型 |
− |
不可 |
伝票を識別するための唯一無二の番号。伝票番号として使われる |
CUSTOMERID |
数値型 |
− |
不可 |
この伝票の対象となる顧客を示す顧客番号。顧客情報テーブルのIDフィールドに格納されているいずれかの値が格納される |
MADEDATE |
日付型 |
− |
不可 |
伝票の起票日 |
DIVISION | 文字型 | 64 | 可 | 顧客側の部署名 |
PERSON | 文字型 | 64 | 可 | 顧客側の担当者名 |
DELIVERDATE | 日付型 | − | 不可 | 納入予定日 |
SENT_ADDR | 文字型 | 255 | 可 | 発送先の住所。製品管理部が製品をこの住所に発送する |
SENT_TEL | 文字型 | 32 | 可 | 発送先の電話番号。製品管理部が製品発送の際の連絡先として用いる |
SUBTOTAL |
金銭型 |
− |
不可 |
小計。この伝票に含まれるすべての注文の金額(税抜)を加えたもの |
TAX |
金銭型 |
− |
不可 |
消費税。現状では,小計×1.05 |
TOTAL |
金銭型 |
− |
不可 |
合計(税込金額)。小計+消費税 |
MEMO | 文字型 | 80 | 可 | 摘要 |
BILLID | 数値型 | − | 可 | この伝票を集計結果として含む請求書の請求書番号。請求書情報テーブルのIDフィールドに格納されているいずれかの値が格納される |
BILLDATE | 日付型 | − | 可 | この伝票を集計結果として含む請求書が作られた日 |
MADEBILLFLAG | Boolean型 | − | − | この伝票を集計結果として含む請求書が作られているかどうかのフラグ。Trueで請求書が作られていることを,Falseで作られていないことを示す |
BILLIDフィールドは,伝票と請求書を連結させるためのフィールドで,伝票から作られた請求書の番号(請求書情報テーブルのIDフィールドに格納されている値)を保存するものである(Fig.3-10)。こうすることで,請求書は伝票をたどることができる。たとえば,請求書番号が10番である請求書に集計された伝票を得るには,次のSELECT文を発行すればよい。
SELECT * FROM 伝票情報テーブル WHERE BILLID=10
伝票をたどれるということは,たどった伝票からさらに明細にもたどれるということである。その結果,請求書に含まれるすべての明細を調べることもできるようになる(Fig.3-7参照)。
Fig.3-10 請求書と伝票の連結
○請求書の集計期間
請求書は,一定の期間内の伝票を集計するものであるが,「一定の期間」とは具体的にどこからどこまでを指すのだろうか。一般的に請求書は,10日,25日,月末などを伝票の締め日として集計し,月単位で期間を区切って集計することが多い。そこで,このサンプルでもそれに倣い,月単位で集計することにする。
毎月何日を締め日として集計するのかは固定してしまってもかまわないが,顧客ごとに設定できたほうが汎用性が高まるし,何よりもより早く入金される可能性が高くなる。たとえば,請求先の締め日が20日である場合に25日締めで請求書を発行してしまうと,請求先ではその請求書が翌月の20日に処理されることになる。だが,もし当月の20日に間に合うように請求書を発行していれば,当月の請求として処理されることになり,1ヶ月入金が早くなる可能性がある。業務状況にもよるが,運転資金を早期に回収してゆくことは,企業活動を円滑に進めるうえでも重要なことである。
そこで,このサンプルには,顧客情報テーブルに締め日を設定するため,BILLDAYというフィールドを追加する(Table 3-8)。
Table 3-8 締め日の設定を追加した顧客情報テーブル
フィールド名 |
型 |
サイズ |
Null |
解説 |
ID |
数値型 |
― |
不可 |
顧客番号。レコードに対して唯一無二の値を割り当てる |
NAME |
文字型 |
64 |
不可 |
顧客名 |
YOMIGANA | 文字型 | 80 | 可 | 顧客名のよみがな |
ZIP |
文字型 |
10 |
可 |
郵便番号 |
ADDRESS |
文字型 |
255 |
可 |
住所 |
TELEPHONE |
文字型 |
32 |
可 |
電話番号 |
FAX |
文字型 |
32 |
可 |
FAX番号 |
MEMO |
文字型 |
80 |
可 |
摘要 |
BILLDAY | 数値型 | − | 可 | 請求書を作成する期間の締め日(1〜31) |
たとえば,BILLDAYフィールドに25を指定した場合,その顧客の伝票は25日を締め日として集計されることにする。つまり,10月であれば,9月26日〜10月25日の伝票が10月分の請求書としてまとめられるようにする。
伝票を集計して請求書を作成する処理は,1日1回,サーバー側で自動的に実行されるプログラムに実装する予定である(詳細はChapter 5で解説する予定である)。たとえば,10月25日にそのプログラムが実行されたとすると,プログラムは顧客情報テーブルのなかからBILLDAYフィールドの値が25に設定された顧客を取り出し,その顧客に対応する9月26日〜10月25日の伝票を集めて請求書を作る。ただし,このとき懸念されるのが,月末の処理である。たとえば,BILLDAYフィールドの値が31に設定されていた場合,31日がない月,すなわち,2月,4月,6月,9月,11月は,請求書が作成されないということにもなりかねない。そこで,該当月の最終日よりも大きな値がBILLDAYフィールドに設定されていたときには,該当月の最終日に請求書を作るようにする。このようなルールを作ることで,月末に締め日を設定したい顧客であれば,BILLDAYフィールドに31を指定すればすむことになる。
ところで,場合によっては1ヶ月分の請求をまとめて請求書にするのではなく,1つの伝票に対して1つの請求書を作成したいこともある。たとえば,発送と同時に請求書も一緒に送付するようなケースがこれにあたる(定常的な発注があるのではなく,単発で発注がある場合には,このような運用を採用することが多いだろう)。そのような場合に備え,ある伝票に対して1枚の請求書を作るかどうかを示すONEBILLFLAGフィールドを伝票情報テーブルに用意しておくことにする。このフィールドがTrueのときには,月次で集計した請求書に含めるのではなく,独立した請求書を作るようにする(Table 3-9)。
Table 3-9 独立した請求書を作るかどうかのフラグを追加した伝票情報テーブル
フィールド名 |
型 |
サイズ |
NULL |
解説 |
ID |
数値型 |
− |
不可 |
伝票を識別するための唯一無二の番号。伝票番号として使われる |
CUSTOMERID |
数値型 |
− |
不可 |
この伝票の対象となる顧客を示す顧客番号。顧客情報テーブルのIDフィールドに格納されているいずれかの値が格納される |
MADEDATE |
日付型 |
− |
不可 |
伝票の起票日 |
DIVISION | 文字型 | 64 | 可 | 顧客側の部署名 |
PERSON | 文字型 | 64 | 可 | 顧客側の担当者名 |
DELIVERDATE | 日付型 | − | 不可 | 納入予定日 |
SENT_ADDR | 文字型 | 255 | 可 | 発送先の住所。製品管理部が製品をこの住所に発送する |
SENT_TEL | 文字型 | 32 | 可 | 発送先の電話番号。製品管理部が製品発送の際の連絡先として用いる |
SUBTOTAL |
金銭型 |
− |
不可 |
小計。この伝票に含まれるすべての注文の金額(税抜)を加えたもの |
TAX |
金銭型 |
− |
不可 |
消費税。現状では,小計×1.05 |
TOTAL |
金銭型 |
− |
不可 |
合計(税込金額)。小計+消費税 |
MEMO | 文字型 | 80 | 可 | 摘要 |
BILLID | 数値型 | − | 可 | この伝票を集計結果として含む請求書の請求書番号。請求書情報テーブルのIDフィールドに格納されているいずれかの値が格納される |
BILLDATE | 日付型 | − | 可 | この伝票を集計結果として含む請求書が作られた日 |
MADEBILLFLAG | Boolean型 | − | − | この伝票を集計結果として含む請求書が作られているかどうかのフラグ。Trueで請求書が作られていることを,Falseで作られていないことを示す |
ONEBILLFLAG | Boolean型 | − | − | この伝票に対して独立した請求書を作るかどうかのフラグ。Trueで独立した請求書を作ることを,Falseで月単位で集計した請求書に含めることを示す |
Chapter 3 8/22 |