帳票MDIのしくみ

皆さん、こんにちは。Dr.テトランです。

前回の「MDIについて」において、帳票ウィンドウは別扱いのような記述をしましたが、今回帳票ウィンドウについて少し詳しく述べてみたいと思います。

一般の表ブラウザウィンドウと同様に、帳票ウィンドウもTDBをブラウズ(&修正)するためのUIですが、大きく異なる点があります。このMDIが最終資料を提示する目的で作られているためです。

 

■表示様式(書式)をユーザが指定できます
表ブラウザでは、表示項目の選択とその配置、レコードの選別とソーティングぐらいですが、帳票ウィンドウでは、予め導入されたオブジェクト(ページ、矩形、表)に限定されはしますが、 TDB上のデータを任意に関連付けることが可能です。(但し表は一種類のみ)とは言っても、目的の表を設計することは至難の業になりますので、Tetra21ではドキュメントの種類に応じて、 幾つかの表(ID)を予め用意し、ユーザはそれをカスタマイズすることになります。

例えば、ドキュメントが見積書シートならば、「工事総括表」や「見積明細書」「工事原価台帳」等々です。 後は、表示したい列項目をそのプロパティと共に定義し、必要に応じて矩形項目を配置すれば、概ね目標だった帳票が形式的にできると思います。 プロパティの中には、ページに依存するものや特殊な指示を書き込むための矩形もありますが、基本的にはページには依存せず、全頁同じことを繰り返します。但し、このことや表が一種類のみという制限が、特殊な帳票への対応を難しくしているのも事実です。

■加工して表示できます
表ブラウザが、TDBの指定した部分を、ほぼそのまま表示しているのに対して、帳票ウィンドウでは目的に応じた補正を施すことができます。 これは、行方向に顕著で、同じ種類のレコードを合計して纏めたり、不要なレコードを排除したり、逆にレコードを付け足したりします。 この加減を設定するのがスタイルシートです。

 

では、いよいよ「しくみ」について述べたいと思います。既に述べたことですが、表ブラウザの場合は、UI等を司る基底クラスからそれぞれのドキュメント固有の特性に対応するための派生クラスを作っています。 つまり、ドキュメントの種類だけクラスがあります。しかし、帳票ウィンドウでは一種類だけです。帳票ウィンドウクラスは、帳票(ビュー)の書式(パラメータ)とそれを設計するUIだけを持っています。 つまり表示するべき中身の性質には一切触れません。そういった意味では、表ブラウザの基底クラスと同様です。しかし、表ID毎に派生クラスを作るのではなく、データソースとなる表ブラウザとリンクして、その任に当らせます。

一番の理由は、単純に派生させようとすれば、追加するメソッドが膨大になってしまったためです。 多重継承と言う手もありますが、MFCがそのように仕組まれていないのと、動作時の仕組みとの整合性から、リンクしてそのドキュメントクラスから、描画時のセルデータを逐一もらうことにしました。

そのデータを準備させるために、帳票ウィンドウクラスはリンク確定(ソースドキュメントからの起動も含む)時と、「最新情報に更新」、「スタイルの変更」両コマンドを受けた時点で、表IDや必要パラメータを伴って、ソースドキュメントの専用初期化メソッドを呼び出しています。 つまり、「スタイルの変更」は帳票ウィンドウのコマンドですが、UIを提供してそのスタイルのデータを準備しているのは、データソースとなる表ブラウザ側なのです。その結果、帳票ウィンドウ接続中にデータを修正しても、リアルタイムで帳票側が変わる場合とそうでない場合が起きます。それは、この初期化によって作られたデータか否(こちらがリアルタイム)かによります。

 

コメントを残す

 

 

 

これらのHTMLタグが利用可能です

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>