この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

7.7.3 伝票情報の新規作成と編集
●[納期算出]ボタンが押されたときの処理
 次に,ユーザーがFormEditSlipフォームの[納期算出]ボタン(BTN_CALC)を押したときに,伝票の明細に記載された製品の在庫が揃う日付を算出するという処理を実装しておく。

 伝票の明細に記載された製品の在庫が揃う日付を調べるには,Business.Slipコンポーネントに実装したGetReadyDate_Slipメソッド(List 6-154)を使えばよい。その実装はList 7-128のようになる。

 List 7-128の処理は,さして複雑ではない。まず10行目で,編集対象となっている伝票の伝票番号を引数として渡し,Business.SlipコンポーネントのGetReadyDate_Slipメソッドを呼び出す。この処理により,その伝票の明細に記載された製品の在庫が揃う日付を取得する。取得した日付は,17行目にあるようにTXT_DELIVERDATEテキストフィールド(納入予定日)に設定される。

 なお,伝票の明細に記載された製品に入庫予定がまったくない場合,GetReadyDate_SlipメソッドはNullを返す仕様とした(Chapter 6の「●在庫の確認」を参照)。そのため,12行〜14目にあるように,GetReadyDate_Slipメソッドの戻り値がNullかどうかを調べ,Nullであるときには「この伝票に記載されている製品の入荷予定はありません。納期未定です」と表示するようにした。

●顧客を選択したときに自動的に住所と電話番号を転記する
 ところで,FormEditSlipフォーム(Fig.7-87)には,納入先住所と納入先電話番号を入力する2つのテキストボックスが用意されている。もちろん,伝票の新規作成時には,納入先住所と納入先電話番号の両方を入力する必要がある。しかし,ほとんどの場合,ここで入力すべき住所と電話番号は,顧客情報として登録されている顧客の住所や電話番号と一致していることが多い。そこで,ユーザーがCOMBO_CUSTOMERコンボボックスから顧客を選択したときに,その顧客の住所が納入先住所のテキストボックス(TXT_SENTADDR)へ,顧客の電話番号が納入先電話番号のテキストボックス(TXT_SENTTEL)へ,それぞれ格納されるように実装しておく。

 このような機能を実現するために,COMBO_CUSTOMERコンボボックスのLostFocusイベントに対応するプロシージャを,List 7-129のように実装する。

 LostFocusイベントは,コントロールがフォーカスを失ったときに発生するイベントである。List 7-129ではまず,13行目においてユーザーがCOMBO_CUSTOMERコンボボックスで選択した項目の番号を取得する。もしいずれかの項目が選択されていたならば,15〜29行目の処理を実行し,その顧客の顧客情報を取得し,TXT_SENTADDRテキストボックスに顧客の住所を,TXT_SENTTELテキストボックスに顧客の電話番号を,それぞれ設定する(22行目,26行目)。なお,顧客の情報を取得するためには,19行目にあるようにBusiness.CustomerコンポーネントのGetCustomerメソッド(List 6-24)を用いた。

 List 7-129のように実装することで,ユーザーがCOMBO_CUSTOMERコンボボックスで顧客を選択したあと,フォーカスが失われた段階で(いい換えれば,テキストボックスなど別のコントロールにフォーカスが移った段階で),自動的に顧客の住所と電話番号が納入先の住所と電話番号として設定されるようになる。

 なお,List 7-129の12行目を参照するとわかるように,グローバル変数SlipIDが-1であるときのみ,TXT_SENTADDRテキストボックスとTXT_SENTTELテキストボックスにそれぞれ顧客の住所と電話番号を設定するようにした。すでに説明したように,グローバル変数SlipIDが-1であるということは,「伝票を新規作成する」ということである。つまりこのサンプルでは,伝票を新規作成するときだけ,顧客の住所や電話番号を納入先の住所や電話番号として自動的に設定することになる。

 たとえば,納入先の住所と電話番号が,顧客の住所や電話番号とは異なる場面というものを考えてみよう。この場合ユーザーは,顧客情報に設定されているものとは異なる住所と電話番号を,納入先の住所や電話番号として入力することになる。この伝票をあとからユーザーが編集するとき,顧客名を選択するCOMBO_CUSTOMERコンボボックスからフォーカスが失われた段階で,新規登録時に入力したはずの住所や電話番号が顧客情報に登録されている住所や電話番号で上書きされてしまっては,明らかにまずい。このような問題を防ぐため,あえてList 7-129の12行目ではグローバル変数SlipIDが-1であるかどうかを調べ,伝票が新規登録される場合以外には,顧客情報として登録されている住所と電話番号で納入先の住所と電話番号を上書きしないようにしているのである。

Prev 102/134 Next