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

7.7.1 伝票管理処理の概要
●明細情報ウィンドウ
 明細情報ウィンドウ(Fig.7-78)では,伝票内の明細を表示する。

 明細情報ウィンドウは,ユーザーが伝票情報ウィンドウ(Fig.7-77)の[明細]ボタンを押したときに,MDI子ウィンドウではないモードレスウィンドウ(開いたまま別のウィンドウにフォーカスを移すことができるウィンドウ)として表示する。このとき表示される明細は,伝票情報ウィンドウ内の下部にあるデータグリッドコントロールで選択されているカレント行(マーキーが指している行)の明細である。

 伝票情報ウィンドウと明細情報ウィンドウは連動させることにする。つまり,ユーザーが伝票情報ウィンドウ下部にあるデータグリッドコントロールのカレント行が指す位置をカーソルキーなどを使って変更したならば,そのカレント行が指す伝票の明細が,順次明細情報ウィンドウに表示されるようにする。

 ただし今回は,仕様上,明細情報が更新されても,伝票情報は自動的に反映させないことにする。もし伝票の明細を追加すれば,当然ながら伝票に記載されている合計額も変化する。このことを考えれば,明細情報の変更に同期して,伝票情報ウィンドウ内に表示される伝票の合計額も変更させるほうが望ましい。しかし,実際にそのような実装をしたところ,かなりの速度低下が見られた。それゆえ今回は,ユーザーが明細情報を変更しても,伝票情報ウィンドウ内に表示される伝票の合計額は同期して変更させない。ユーザーが明示的に伝票情報ウィンドウ内の[最新の情報に更新]ボタンを押さない限り,表示されている伝票情報に明細の変更は反映されない。

 明細情報ウィンドウには,伝票番号や取引先情報,発送先の情報など,伝票に関する情報を中央部のフレーム上に表示し,伝票の明細をウィンドウの下部に表示するという機能を搭載する。ユーザーが明細情報ウィンドウの[新規]ボタンや[編集]ボタンを押した場合には,Fig.7-82のウィンドウが表示され,明細を新規登録したり編集したりすることができるようにする。

Fig.7-82 明細の登録ならびに編集
fig7_82

 ユーザーが明細を登録または編集するときには,登録されている製品の1つをFig.7-82の[製品名]で選択し,その単価,数量,価格,摘要を入力するという形式をとる。このとき,ユーザーが選択した製品の単価を自動的に[単価]の項目に設定し,さらに[数量]の項目からフォーカスが移動したタイミングで,自動的に単価×数量を[価格]の項目に設定するという機能を搭載しておく。

 伝票番号や取引先情報,発送先の情報などは,明細情報ウィンドウ中央のフレームにまとめた。中央のフレームにある[更新履歴]ボタンが押されたときには,Fig.7-83のウィンドウを表示する。納入先や納期に変更があった場合には,このウィンドウにその履歴を表示する。この履歴表示機能は,単純に表示するだけであり,編集したり削除したりすることはできないものとする。

Fig.7-83 履歴の表示
fig7_83

 中央のフレームでは,取引先名を大きな文字にしたり,その下に罫線を引いたりといった見栄えの工夫もしてある。詳細は実装するときに説明するが,明細情報ウィンドウ中央のフレームは,そのまま印刷して伝票として使うことができるようにする。この方法により,中央部のフレームにあるラベルやテキストボックスの位置やフォントを変更することにより,任意のレイアウトで伝票を印刷できるようになる。たとえば,Fig.7-78で示した明細情報を印刷したときのイメージは,Fig.7-84のようになる。

Fig.7-84 伝票明細の出力イメージ
fig7_84

 もちろん,機能的には,わざわざFig.7-84のように出力しなくとも,すでに実装した顧客情報や製品情報,在庫情報の印刷と同じでかまわない。しかし,伝票は公式な文書として顧客の手元に残るものであるから,レイアウトが崩れたり,外観があまりに貧弱であったりするとみっともないのも事実である。そのため,少し見栄えも気にして,Fig.7-84のように見やすく印刷できる機能を提供しているのである。

 さて,明細情報ウィンドウの下部にある明細の一覧を表示するときには,データグリッドコントロールではなく,階層フレキシブルグリッドコントロール(MSHFlexGrid)を使うことにする。なぜなら,「3.2.7 セキュリティと履歴」で解説したように,削除された明細については,その明細を表示(印刷)しないのではなく,取り消し線を伴って表示させたいからである(Fig.7-85)。この機能を実装することにより,伝票の不正な書き換えがないということ,あとから修正した個所があるということの,2つを示すことができる。

Fig.7-85 取り消された明細の表示方法(ここでは製品Bを削除した。製品Bの行に取り消し線が表示されているという点に注目)
fig7_85

 データグリッドコントロールでは,個々のセルの表示書式を変更することができない。そのため,代わりに階層フレキシブルグリッドコントロールを用いることにした。階層フレキシブルグリッドコントロールについてはあとから詳しく説明するが,非常に高機能なコントロールである。各セルの表示書式をそれぞれ変更することができるほか,各セルに画像を表示することも可能である。ただし,データグリッドコントロールとは違い,データベース(ADODB.Recordsetオブジェクト)との連携機能はあまり高度なものとはいえない。データグリッドコントロールと階層フレキシブルグリッドコントロールとの違いについては,あとから詳しく説明する。

Prev 96/134 Next