この特集のトップページへ
Chapter 3:データストア層の構築

head2.gif 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

金銭型

不可

小計。この請求書の金額(税抜)合計 。STARTDATEENDDATEの期間内の伝票の小計(SUBTOTALフィールド)の和

TAX

金銭型

不可

消費税。STARTDATEENDDATEの期間内の伝票の消費税(TAXフィールド)の和

TOTAL

金銭型

不可

この請求書の合計(税込金額)。STARTDATEENDDATEの期間内の伝票の合計(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 請求書と伝票の連結
fig3_10.gif

○請求書の集計期間

 請求書は,一定の期間内の伝票を集計するものであるが,「一定の期間」とは具体的にどこからどこまでを指すのだろうか。一般的に請求書は,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で月単位で集計した請求書に含めることを示す
prevpg.gif Chapter 3 8/22 nextpg.gif