この特集のトップページへ
Chapter 6:ビジネスロジックの設計



6.3.5 在庫の処理
●入庫予定の施行
 さて,List 6-71AddStorageメソッドで入庫予定を追加した場合には,実際にその製品が入庫した段階で,対応する入庫予定を施行ずみにしなければならない。施行には,入庫と出庫があるわけだが,ここでは入庫の施行についてのみ説明する(出庫の施行については,「6.4 伝票管理処理」で説明する。

○データオブジェクトの構築
 「入庫を施行ずみする」ということは,次の3つの処理をするということである(Fig.6-65を参照)。

  1. DUEDATEフィールドに施行日を格納する
  2. CONFIRMEDFLAGフィールドの値をTrueに設定する
  3. 該当する製品の在庫数(製品情報テーブル内の該当製品を示すレコードのSTOCKフィールドの値)に入庫した数(NUMBERフィールドの値)を追加する

 まずは,1.と2.を処理するデータオブジェクトから構築する。この処理をSetConfirmedFlagというメソッドとしてDataObj.Stockコンポーネントに実装したものが,List 6-72である。

 List 6-72に示したSetConfirmedFlagメソッドでは,次の書式をとった。

Public Function SetConfirmedFlag(ByVal StockID As Long, _
                                 ByVal ConfirmedFlag As Boolean)

 第1引数のStockIDは,どの入庫予定レコードを施行ずみにするのかを決めるレコードIDである。ここには,在庫情報テーブル中の入庫予定レコードのIDフィールドの値を指定する。いい換えれば,AddStorageメソッドで入庫予定レコードを追加したときに戻り値として得られる値である。

 第2引数のConfirmedFlagには,施行ずみにしたいのであればTrueを,施行まえに戻したいのであればFalseを,それぞれ設定する。

 List 6-72の39〜45行目にあるように,施行ずみにするか施行まえに戻すのかに応じて,DUEDATEフィールドに設定する値を変えてある。施行ずみにする場合にはDUEDATEフィールドにその時点の日時を格納し,施行まえに戻す場合にはDUEDATEフィールドにはNull値を格納するようにした。なお,施行ずみにする場合にも施行まえに戻す場合にも,DataObj.HistoryコンポーネントのAddHistoryメソッドを使い,その履歴を残すようにした。

 ところで,指定したレコードが施行ずみであるか施行ずみでないか,つまりCONFIRMEDFLAGフィールドの値がTrueであるかFalseであるかを,事前に調べたいことがある。なぜなら,事前に施行されているかどうかを調べずに施行を重複して処理をしてしまうと,すでに在庫に加えた数量を再び在庫に加えてしまうことにもなりかねないからである。そこで,List 6-73に示すIsDueメソッドを実装しておく。

 List 6-73に示したIsDueメソッドは,すでに施行されていればSTOCK_DUEを,施行されていなければSTOCK_NODUEを,指定されたレコードが見つからなければSTOCK_NOTFOUNDを,それぞれ返す。これらの値はDUEFLAG列挙型として2〜6行目に定義した。

 また,施行ずみか施行まえかだけではなく,削除されているかどうかを知りたいこともある。そこで,List 6-74に示すIsDeletedメソッドも実装しておく。IsDeletedメソッドは,指定されたレコードが削除されていればID_Deletedを,存在すればID_Existsを,存在しなければID_NotFoundを,それぞれ返すというものである。

 次に,3.の処理をするデータオブジェクトを考える。このデータオブジェクトは,(1)入庫予定レコードの数量(NUMBERフィールドの値)を返すメソッド,(2)製品情報テーブル内の指定した製品の在庫数(STOCKフィールドの値)を指定数だけ増やすメソッド,という2つに分割して実装する。

 まず,(1)の入庫予定の数量を返す前者のメソッドは,DataObj.StockコンポーネントにGetRecordメソッドとして実装する。そのプログラムは,List 6-75のようになる。List 6-75は,NUMBERフィールドだけでなく,すべてのフィールドを返すよう実装した。なぜなら,(2)の処理をするにあたっては数量以外にも入庫予定の製品番号を知る必要があるためである。

 (2)の製品情報テーブル内の指定された製品の在庫数を指定数だけ増やす後者のメソッドは,DataObj.ProductコンポーネントにAddStockメソッドとして実装する。そのプログラムは,List 6-76のようになる。

prevpg.gif Chapter 6 44/92 nextpg.gif