この特集のトップページへ
>
Chapter 6:ビジネスロジックの設計
6.3.5 在庫の処理
以上で,製品の登録,更新,参照,削除に必要なメソッドはすべて実装したことになる。ここまでの処理は,「6.2 顧客管理処理」で説明したプログラムと大差ない。
しかし,製品を管理するにあたっては,これだけの処理では不十分である。製品管理にあたっては,さらに製品の入出庫管理といった在庫情報の処理を実装する必要がある。
このサンプルでは,在庫情報テーブルを操作することで在庫を管理する(「3.2.6 在庫の管理」を参照)。在庫情報テーブルは,「3.2.6 在庫の処理」でTable 6-11のように定義した。
Table 6-11 在庫情報テーブル
型 | NULL | 解説 | ||
---|---|---|---|---|
ID | 数値型 (オートナンバー) | − | 不可 | レコードに対して唯一無二の値を割り当てる |
DATE | 日付型 | − | 不可 | 入庫および出庫の予定日 |
DUEDATE | 日付型 | − | 可 | 入庫および出庫が実際に行われた日 |
CONFIRMEDFLAG | Boolean型 | − | − | 入庫および出庫が実際に行われたかどうかのフラグ。行われていればTrue,まだ行われていなければFalse |
PRODUCTID | 数値型 | − | 不可 | この明細の対象となる製品を示す製品番号。製品情報テーブルのIDフィールドに格納されているいずれかの値が格納される |
NUMBER | 数値型 | − | 不可 | 入庫および出庫の数量。入庫の場合には正の数を,出庫の場合には負の数を格納する |
MEMO | 文字型 | 80 | 可 | 摘要 |
SLIPID | 数値型 | − | 可 | 出庫のとき,この出庫が生じるもととなった伝票の伝票番号。伝票情報テーブルのIDフィールドに格納されているいずれかの値が格納される |
MADEUSER | 文字型 | 256 | 不可 | この入出庫情報を登録したユーザーのアカウント名 |
MADEDATE | 日付型 | − | 不可 | この入出庫情報を登録した日時 |
LASTUSER | 文字型 | 256 | 不可 | 最終更新者のアカウント名 |
LASTDATE | 日付型 | − | 不可 | 最終更新日 |
DELETEDFLAG | Boolean型 | − | − | 削除されたかどうかのフラグ。Trueで削除されたことを,Falseで削除されていないことを示す |
Chapter 3でも説明したが,このサンプルでは在庫情報テーブルを使ってどのようにして在庫を管理するのかを再度まとめておく。
在庫情報テーブルには,入庫予定と出庫予定のデータが格納される(Fig.6-64)。
Fig.6-64 在庫情報テーブル
入庫予定なのか出庫予定なのかは,SLIPIDフィールドの値で区別する。SLIPIDフィールドがNull値のときには入庫予定である。出庫予定のときには,SLIPIDフィールドに伝票番号が格納される。また,出庫予定のときには,NUMBERフィールドの値に負の数が格納される。
入庫が施行されたときには,入庫予定レコードのDUEDATEフィールドに入庫が施行された日時を格納し,CONFIRMEDFLAGフィールドの値をTrueにする。そして,製品情報テーブルのなかにある該当する製品の在庫数(STOCKフィールドの値)を入庫数分だけ増やす(Fig.6-65)。
Fig.6-65 入庫が施行されたときの処理
出庫が施行されたときにも,入庫が施行されたときの処理と同様に,出庫予定レコードのDUEDATEフィールドに出庫が施行された日時を格納し,CONFIRMEDFLAGフィールドの値をTrueにする。そして,製品情報テーブルのなかにある該当する製品の在庫数(STOCKフィールドの値)ならびに予約数(BACKORDERフィールドの値)を,それぞれ出庫数分だけ減らす処理をする(Fig.6-66)。
Fig.6-66 出庫が施行されたときの処理
上記のように,在庫の操作には入庫と出庫の2つの処理が含まれる。ただし,出庫は伝票と連動しているため,その処理の一部は「6.4 伝票管理処理」で説明することにして,ここでは主に入庫処理について考えてゆく。
Chapter 6 42/92 |