別ページで紹介しています、帳票印刷の描画ルーチン作成ツールGenGraphic.mdbについてのお話をします。
私事ですが、今年の春に異動になりまして、異動先はAccessを使っていなかったんです。でみんなが使うユーティリティを作ろうと思っても、Visual Basicで作らないといけない。たいがいのことは、Visual Basicで作れるんですが、印刷部分を作るのがめんどうくさい。市販コントロールを購入するなんて贅沢は許されないし、DataReportもいろいろと制約があって大変。結局Printerオブジェクトを使って印刷することになるのですが、コードでぐりぐりと印刷部分を書いても、ちょっとした仕様変更の時に大変なんですね。そこで、Accessのレポートで設計したものをコードにできたらなと思って作ることにしたのです。実際に現在の職場の業務プログラムでも使っています。手作業コーディングよりも、簡単に帳票作成ができるし、変更時の保守性もかなりアップしました。
Accessのレポートからコードを生成するというアイデアは、Access単体で使っていた時に発想したものです。Accessでレポートを作っていてよくある要望に
データがページ途中で最後になっても、ページのおわりまで罫線を印字したい。
というのがあります。Accessで開発をされている方々はこの要望に様々な形で答えを出しておられます。例えば、
- 空の行を含むテンポラリテーブルを出力してそれを元にレポートを印刷する
- レポートのNextRecordプロパティなどを駆使して空白行を打ち出す
などです。僕は、レポートのPageイベントで、Lineメソッドを使ってページ全体に罫線を描画する方法を使うことにしました。これならページ全体に統一したフォーマットで罫線が引けます。ところがこれは、Lineメソッドを使うので、コードを書くのが面倒だし、保守性も悪い。(さっきと同じようなフレーズですね)そこで、罫線をページ一杯に描画したレポートを作り、それを元にして描画ルーチンを生成してやればよいと思い、Rectangle と Line の描画に絞った描画ルーチン生成プログラムを作りました。
GenGraphic.mdbというツールの元になったのは、このプログラムです。実際、GenGraphicが作成したルーチンは、AccessのレポートのPageイベントから呼び出すことで、Accessでも使うことができます。Object引数にMeを渡してやればいいのです。そのためにCDrawGraphic.clsもVBとAccess両方で使えるようになっています。Accessで使う場合は、GenGraphic.mdbからCDrawGraphicをインポートしてください。
自分で言うのもなんですが、GenGraphicというツールはなかなか使いよいです。印刷レイアウト作成は、Accessのレポートエディタという強力なツールを使うことができますし、プログラム自動作成後に、Visual Basic側のコードでやることと言ったら、単に一つのProcedureを呼び出すだけですから。1ページもののレイアウトを印刷するにはかなり強力なツールです。
1本10万円近くもするVisual Basicのとある帳票作成ツールを試用してみましたが、GenGraphicにできないことで、そのツールができることは沢山あるのですが、自分には必要ないし、GenGraphicにできる程度のことをするのにも、多くのコードを書かなければならないなど、とても使う気になりませんでした。
余談です。GenGraphicで使われている、CDrawGraphicというクラスについてですが、このクラスは、「クラスの利用者はプログラマではなく、GenGraphicというプログラムジェネレータである」という前提で作られたクラスです。ですから、WriteTextメソッドなどは、異様に数の多い引数を取るというヘンテコな仕様になっています。普通のクラスですと必要なプロパティをセットしてメソッドを呼び出すというような仕様にするんでしょうが、そうするとGenGraphicが吐き出すコードの行数がやたらめっぽう長くなってしまいます。やっぱり1つのコントロールから生成されるコードは1行程度じゃないと、と思ってこんな仕様になりました。
|
プログラムパーツ |
クライアントのプログラムを自動バージョンアップする |
