画面と帳票のイメージが近い業務アプリケーションを作成
業務アプリケーションの作成では、画面で入力した内容をそのまま帳票で印刷するなど、画面と帳票が密接に結びついている場合が多々あります。このようなケースに多い要望が、帳票と同じイメージの画面レイアウトです。
そこで今回は、MultiRow for Windows Forms 6.0J、InputMan for Windows Forms 6.0J、ActiveReports for .NET 6.0Jを組み合わせて、業務で現在使用している請求明細書をシステム化するというシナリオで、画面と帳票のイメージが近い業務アプリケーションを作成してみたいと思います。
なお、今回のサンプルソースには、下記の3つのサンプルが含まれています。
- CZ0905Bound
- CZ0912Bound
- CZ0912MultiRow
帳票を作成する
画面と帳票のどちらを先に作成するかはケースバイケースなのですが、画面よりも帳票の方が最終成果物としてのコダワリのあるクライアントが多く、そのようなクライアントの場合は帳票デザインから先に固めてしまうのがよいでしょう。今回も、帳票デザインを最初に確定するためにActiveReports for .NET 6.0Jで帳票を作成することになったと想定して進めていきます。
ActiveReports for .NET 6.0Jの新機能でより紙に近いデザインを実現する
以前紹介した3.0Jも帳票印刷に必要なさまざまな機能を備えていましたが、最新バージョンである6.0Jでは、さらにその機能が洗練され使いやすくなっています。
例えば、明細行が1ページあたり30行のデザインを作成した場合に4行しかデータがないと、図1左のように外側の枠線も4行分で終わってしまいますが、6.0Jでは図1右のように外側の枠線は常に30行分の大きさで引くといったことが可能です(サンプル「CZ0912Bound」)。
6.0Jではこのような枠線を引くために、CrossSectionBoxとCrossSectionLineという2つのコントロールが追加されています。このコントロールを使うことで、ページヘッダからページフッタまでをまたがって罫線が引けるため、明細行の実データ行数に左右されない印字が可能になっています。
参照設定を行う
新規にWindowsアプリケーションのプロジェクトを作成してActiveReports for .NET 6.0Jを使用する場合には、プロジェクトに参照設定を追加します。また、ActiveReports for .NET 3.0Jで作成したプロジェクトを6.0Jで流用するためには3.0Jと6.0Jでは名前空間(「DataDynamics.ActiveReports.ActiveReport3」→「DataDynamics.ActiveReports.ActiveReport」)などが異なるため参照設定をやりなおす必要があります。参照設定は次の手順で行います。
- Visual Studioでプロジェクトを開いたら、ソリューションエクスプローラで[参照の追加]をクリックして「参照の追加ダイアログボックス」を表示します。
- ダイアログボックスでActiveReports for .NET 6.0Jを使うときの必須コンポーネントである「GrapeCity ActiveReports Document」「GrapeCity ActiveReports for .NET」および「GrapeCity ActiveReports Viewer」を選択して[OK]ボタンをクリックします。
帳票をデザインしていると罫線と他のコントロールが重なることが多く、ActiveReportsでも下側のコントロールが選択しづらいときがよくあります。このような時は、[表示]-[その他のウィンドウ]-[ActiveReports 6.0Jレポートエクスプローラ]メニューをクリックしてレポートエクスプローラを起動すれば、ツリー表示から目的のコントロールを素早く確実に選択できます。
データ取得と印刷のコーディング
サンプル「CZ0912Bound」は、以前の記事でのサンプル「CZ0905Bound」に対して参照設定と名前空間の変更を行い、帳票定義体もCrossSectionBoxコントロールとCrossSectionLineコントロールに変更したサンプルになります。コードの詳しい説明は前回の記事と重複するため割愛しますが、データセットをActiveReportsで印刷するにはリスト1のようなコードを記述します。
Public Class CZ0912Bound_Form Private Sub Me_Shown(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Shown Dim rpt As New Seikyu_Report() Application.DoEvents() Using _prco As New CZ0912Bound rpt.DataSource = _prco.GetRecords("admin", "").Tables(0) Viewer1.Document = rpt.Document rpt.Run() End Using End Sub End Class