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

head2.gif 3.2.5 伝票の流れ
 以上で,「3.1.2 全体構造」で説明したデータベーステーブルは一通り構築したことになるが,まだもう少しデータベーステーブルを考慮する必要がある。考慮すべき問題の1つは伝票の流れを管理することであり,もう1つは在庫のチェック機構を設けることである。在庫のチェック機構については「3.2.6 在庫処理」で説明することにして,ここでは伝票の流れについて考えよう。

 「3.1 構築するアプリケーションモデル」で説明したように,伝票は営業部で作成され,製品管理部に流れ,製品が発送されたのちに経理部に流れる。この流れをデータベーステーブルに保存しておく必要がある。そうしないと,営業部のメンバーが書きかけの伝票を製品管理部のメンバーが参照して誤って発送してしまったり,または製品管理部のメンバーが製品を発送していないにもかかわらず経理部のメンバーが請求書を発行してしまったりすることになりかねない。

 そこで,伝票情報テーブルに,その時点における伝票の状態と,状態が変化した日時とを保存するフィールドを追加する(Table 3-10)。

Table 3-10 伝票の状態を追加した伝票情報テーブル

フィールド名

サイズ

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で月単位で集計した請求書に含めることを示す
REQ_CONSENTFLAG Boolean型 承認の依頼をしているかのフラグ。Trueで承認依頼中,Falseで承認依頼をまだしていないことを示す
REQ_CONSENTDATE 日付型 承認依頼をした日
REQ_CONSENTCOMMENT 文字型 80 承認依頼時のコメント。営業部上司へのコメントとなる
CONSENTEDFLAG Boolean型 承認したかどうかのフラグ。Trueで承認した,Falseで承認していないことを示す。通常は営業部の上司が設定するが,伝票の取引額が一定以下であり上司の承認が不要である伝票については,システム側でこのフラグをTrueに設定する
CONSENTEDDATE 日付型 承認された日
CONSENTEDCOMMENT 文字型 80 承認の際のコメント
REJECTEDFLAG Boolean型 上司によって却下されたかどうかを示すフラグ。Trueで却下されたことを,Falseで却下されていないことを示す
REJECTEDDATE 日付型 却下された日
REJECTEDCOMMENT 文字型 80 却下理由
SENDFLAG Boolean型 この伝票に含まれている製品が発送されたかどうかのフラグ。Trueで発送ずみであることを,Falseで未発送であることを示す
SENDDATE 日付型 発送日
SENDCOMMENT 文字型 80 発送の際のコメント
ACCOUNTINGFLAG Boolean型 経理部がその伝票をチェックしたかどうかのフラグ。チェックしたならばTrue,まだチェックしていなければFalse。このフラグがTrueになると,それが請求書を作成する際に集計の対象となる
ACCOUNTINGDATE 日付型

経理部が伝票をチェックした日

ACCOUNTINGCOMMENT 文字型 80 経理部のコメント

 追加したフィールドの詳細は,次のとおりである。

REQ_CONSENTFLAGREQ_CONSENTDATEREQ_CONSENTCOMMENT
 営業部のメンバーが上司に承認を依頼するときに設定されるフィールドである。営業部のメンバーが上司に承認を依頼している最中はREQ_CONSENTFLAGフィールドをTrueに設定し,承認を依頼した日時をREQ_CONSENTDATEフィールドに設定する。REQ_CONSENTCOMMENTフィールドは,上司へのコメントを格納するためのものである。
CONSENTEDFLAGCONSENTEDDATECONSENTEDCOMMENT
 営業部の上司が承認処理をするときに設定されるフィールドである。営業部の上司は,承認を依頼されている伝票(REQ_CONSENTFLAGフィールドがTrueの伝票)を参照し,不備がなければユーザーインタフェースに用意された[承認]といったボタンを押す。このとき,CONSENTEDFLAGフィールドにTrueを設定し,ボタンが押された日時をCONSENTEDDATEフィールドに設定する。CONSENTEDCOMMENTフィールドには,営業部の上司が入力した承認時のコメントを格納するものとする。
 なお,「3.1 構築するアプリケーションモデル」で説明したように,このサンプルでは伝票の取引額が一定額以下のときには,上司の承認を得ずに直接製品管理部に伝票を回送できるようにする。この場合には,営業部の上司の承認はとらず,システム側で自動的にCONSENTEDFLAGフィールドをTrueにする。
REJECTEDFLAGREJECTEDDATEREJECTEDCOMMENT
 営業部の上司が承認処理をするときに設定されるフィールドである。営業部の上司は,承認を依頼されている伝票(REQ_CONSENTFLAGフィールドがTrueの伝票)を参照し,不備があったならばユーザーインタフェースに用意された[却下]といったボタンを押す。このときREJECTEDFLAGフィールドにTrueを設定し,ボタンが押された日時をREJECTEDFLAGフィールドに設定する。REJECTEDFLAGフィールドにTrueが設定された伝票は,却下として扱われ,営業部の部下に差し戻される。REJECTEDCOMMENTフィールドには営業部の上司が入力した却下理由を格納するものとする。
SENDFLAGSENDDATESENDCOMMENT
 製品管理部が発送処理をするときに設定されるフィールドである。製品管理部のメンバーは,営業部から回ってきた承認ずみの伝票(CONSENTEDFLAGフィールドがTrueの伝票)を参照し,設定された納期(DELIVERDATEフィールドに格納された日時)が迫ったら,伝票に記載されている製品を発送する。そのうえで,SENDFLAGフィールドをTrueに設定し,その日時をSENDDATEフィールドに設定する。SENDCOMMENTフィールドには,製品発送時のコメントを格納する。
ACCOUNTINGFLAGACCOUNTINGDATEACCOUNTINGCOMMENT
 経理部が伝票をチェックするときに設定されるフィールドである。経理部のメンバーは,製品管理部から回ってきた発送ずみの伝票(SENDFLAGフィールドがTrueの伝票)を参照し,伝票をチェックする。このとき,ACCOUNTINGFLAGフィールドにTrueを設定し,その日時をACCOUNTINGDATEフィールドに設定する。もし伝票ごとに独立した請求書を作りたい場合には,ここでONEBILLFLAGフィールドにTrueを設定する(「3.2.4 請求書情報テーブル」を参照)。ACCOUNTINGCOMMENTフィールドには,経理部のコメントを格納する。
 ACCOUNTINGFLAGフィールドがTrueに設定された伝票は,自動的に集計され,請求書が作られることになる。
 以上の説明からもわかるように,伝票ごとに独立した請求書を作成するときには,経理部のメンバーがその旨を把握していなければならない。常にそのような請求書を作成する場合はともかくとして,受注時に営業部のメンバーが顧客からその旨を依頼された場合,あるいは営業部のメンバーが単発的な受注であると判断した場合などには,営業部のメンバーが起票するときに「請求書を伝票ごとに発行してほしい」などとREQ_CONSENTCOMMENTフィールドに記入しなければならない。

 以上の各フィールドの値と伝票の流れとの関係を図示すると,Fig.3-11のようになる。

Fig.3-11 伝票情報テーブルのフィールドと伝票の流れとの関係
fig3_11.gif

 以上のようにして伝票の状態を管理することによって,書きかけの伝票をもとにして製品が発送されてしまったり,経理部が確認していない伝票が請求書に含まれてしまったりすることがなくなる。

prevpg.gif Chapter 3 9/17 nextpg.gif