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

7.8.3 請求書の明細処理
●請求書と明細とを連動させる
 ユーザーがFormBillフォーム(Fig.7-105)の[明細]ボタン(BTN_DETAILボタン)を押したときには,実装中のFormBillDetailフォーム(Fig.7-109)を表示し,FormBillフォームのDGrid_Billデータグリッドでカレント行となっている請求書の明細をFormBillDetailフォームに表示する。ここでは,この処理を実装してみる。

○指定された請求書の明細を表示する
 まず,請求書番号が指定されたとき,その請求書の明細を表示する処理をFormBillDetailフォーム(Fig.7-109)に実装する。ここでは,請求書番号を引数にとり,その請求書の明細を表示するInitDataプロシージャをList 7-202のように実装する。

 List 7-202InitDataプロシージャは,引数に渡された請求書番号を持つ請求書を参照し,FRAME_BILLフレーム上に配置した各ラベルやテキストボックスの文字列を変更し,さらにFLXGrid_SlipDetail階層フレキシブルグリッドにその請求書と結び付けられている明細の一覧を表示する。32行目にあるように,請求書の情報を取得するには,Business.BillコンポーネントのGetBillメソッド(List 6-180)を用いている。


One Point! そのあと51行目で,顧客番号から顧客名を取得するためだけにBusiness.CustomerコンポーネントのGetCustomerメソッド(List 6-24)を利用しているが,これはあまり効率がよい処理とはいえない。本来ならば,Business.BillコンポーネントのGetBillメソッドの引数で顧客名も返すように実装すべきであろう。この点はビジネスロジックの設計ミスだったといわざるを得ない。反省する次第である。

 FLXGrid_SlipDetail階層フレキシブルグリッドに明細を表示する処理は,59行目にあるRefreshDataプロシージャの呼び出しに任せている。RefreshDataプロシージャは,List 7-203のように実装する。

 List 7-203の13行目では,Buiness.BillコンポーネントのGetBillDetailsメソッド(List 6-182)を呼び出し,指定された請求書番号と結び付けられている明細情報をADODB.Recordsetオブジェクトとして取得する。そのあと,その内容をFLXGrid_SlipDetail階層フレキシブルグリッドに次々と設定してゆく。基本的な操作は,伝票明細を表示するためのFormSlipDetailフォーム(Fig.7-92)の処理と変わらないので,処理の詳細については「●明細処理フォームを開く」を参照してほしい。

○[明細]ボタンが押されたときの処理
 以上の実装によって,FormBillDetailフォーム(Fig.7-109)のInitDataプロシージャ(List 7-202)の引数に請求書番号を渡せば,その請求書の明細がFormBillDetailフォームに表示されるようになった。

 つまり,FormBillフォーム(Fig.7-105)で[明細]ボタン(BTN_DETAILボタン)が押されたときには,まずFormBillフォーム上に存在するDGrid_Billデータグリッドのカレント行となっている請求書の請求書番号をInitDataプロシージャの引数に指定し,その後FormBillDetailフォームを表示する。これにより,DGrid_Billデータグリッドでカレント行となっている請求書の明細が表示されることになる。そのような実装は,List 7-204のようになる。

○請求書と明細とを同期させる
 以上で,FormBillフォーム(Fig.7-105)の[明細]ボタン(BTN_DETAILボタン)を押したときに,FormBillDetailフォーム(Fig.7-109)が表示されるようになった。しかしこのままだと,FormBillDetailフォームに表示される明細とは,[明細]ボタンが押されたときにFormBillフォームのDGrid_Billデータグリッドでカレント行となっている請求書だけ,ということになる。このあとユーザーがDGrid_Billデータグリッドをクリックしたりカーソルキーを押したりしてカレント行を移動しても,FormBillDetailフォームの内容は変わらない。

 そこで,FormBillフォームのDGrid_Billデータグリッドでカレント行を変更したときに,それに応じてFormBillDetailフォームの内容を同期させる処理が必要となる。

 この処理を実装するには,まずFormBillDetailフォームにList 7-205で示すDisableControlプロシージャを実装する。

 DisableControlプロシージャは,FRAME_BILLフレーム上に配置されたラベルやテキストボックスの文字列を“---”とし,FRAME_NAVIフレームとFRAME_BILLフレームを淡色表示にして無効にするというものである。FormBillフォームのDGrid_Billデータグリッドでカレント行がなくなったときには,表示すべき明細がないということになるから,DisableControlプロシージャを呼び出してFormBillDetailフォームの表示内容を無効にする必要がある。

 さて,FormBillフォーム上のDGrid_Billデータグリッドでカレント行が変更されたとしよう。カレント行が有効であれば,カレント行となったレコードの請求書番号を引数に指定して,List 7-202で示したInitDataプロシージャを呼び出し,そうでなければList 7-205で示したDisableControlプロシージャを呼び出すようにする。そうすれば,FormBillフォームのDGrid_Billデータグリッドでカレント行となっている請求書の明細をFormBillDetailフォームで表示することができる。そのためには,FormBillフォームのDGrid_Billデータグリッドに結び付けられているADODB.Recordsetオブジェクトを保持するグローバル変数g_objRecMoveCompleteイベントを,List 7-206のように処理すればよい。

 List 7-206の5行目では,カレント行が有効であるかどうかを判定し,カレント行が有効であり,かつFormBillDetailフォームが表示されているのであれば,そのInitDataプロシージャ(List 7-202)を呼び出して,FormBillDetailフォームを更新する。そうではなく,カレント行が無効であり,かつFormBillDetailフォームが表示されているのであれば,22行目にあるようにDisableControlプロシージャ(List 7-205)を呼び出し,FormBillDetailフォームの表示を無効にする。

 なお,12行目と13行目の処理は,FormBillDetailフォームの表示とは関係ない。これは,カレント行が無効であったときに,FormBillフォーム上の[削除]ボタン(BTN_DELETEボタン)と[明細]ボタン(BTN_DETAILボタン)を淡色表示して押せないようにするための処理である。

Prev 129/134 Next