|
▼hatena さん:
>レポートのレコードソースは何も設定していないのですか。(非連結レポート?)
>
>その場合、詳細セクションは1行のみになりますが、
>どのように複数ページ出力をしているのですか。
レコードソースを指定していないつもりでつくっていましたが、いつの間にか指定しておりました。不正確な記述で申し訳ありません。レコードソースの指定を削除しましたところ、hatenaさまのおっしゃるとおり、1件分しか出力されなくなりました。追加質問ですが、レコードソースの指定をせずに、1レコードがレポート1枚に対応した帳票(単票?)を複数ページ出力するような処理は可能でしょうか?
>
>> 〜各処理〜
>
>肝心な部分を省略されては、回答しようがありません。
長いのと必要ないかと考えたのとで、省略してしまいました。
冗長となりますが、レポートのイベントを重複部分も含めて再掲いたします。
レポートのレコードソースにはTBL_NAME_PCKが指定してあります。レコード1件と
レポート1枚は基本的に1:1の対応なのですが、レコードの内容によって
2:1の対応になる場合があります。
自分でも調査したところ、2ページ分飛ばされてしまうのは、openReport実行時と
PrintOut時共に詳細_formatが走ってしまうため?と考えています。実際OpenReportをコメントアウトしたところ、飛ばされるのは1ページに減りました。
ですがこの場合、複数プリンタから、同じ開始ページで帳票が出力されてしまいました。PrintOutメソッドは実行時に自らレポートを開いて印刷し、既にOpenしたレポートをそのまま印刷してくれるわけではないということでしょうか?
Option Compare Database
Option Explicit
Private cnn As ADODB.Connection
Private rst As ADODB.Recordset
Private Sub Report_Close()
rst.Close
cnn.Close
End Sub
Private Sub Report_Open(Cancel As Integer)
'テーブルを開く
Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open TBL_NAME_PCK, cnn, adOpenKeyset, adLockReadOnly
rst.MoveFirst
End Sub
Private Sub 詳細_Print(Cancel As Integer, FormatCount As Integer)
'全てのコントロールを不可視にする
Call setCtlVisiblePCK(0, False)
Call setCtlVisiblePCK(5, False)
Call setCtlVisibleBLK(1, False)
Call setCtlVisibleBLK(2, False)
Call setCtlVisibleBLK(3, False)
Call setCtlVisibleBLK(4, False)
'rst!PGBLKSUM =2かつ 次レコードの値がrst!PGBLKSUM =2
'のとき、レポート1枚に対して2件のレコードを出力する。
If (rst!PGBLKSUM = 2) Then
rst.MoveNext
If rst!PGBLKSUM = 2 Then
'2:1
rst.MovePrevious
'P0,B1に値を入れる
Call setCtlVisiblePCK(0, True)
Call setCtlValuePCK(0)
Call setCtlVisibleBLK(1, True)
Call setCtlValueBLK(1, 1)
rst.MoveNext
'P5,B3に値を入れる
Call setCtlVisiblePCK(5, True)
Call setCtlValuePCK(5)
Call setCtlVisibleBLK(3, True)
Call setCtlValueBLK(3, 1)
'B2,B4を不可視
Call setCtlVisibleBLK(2, False)
Call setCtlVisibleBLK(4, False)
Else
'P0,B1に値を入れる
Call setCtlVisiblePCK(0, True)
Call setCtlValuePCK(0)
Call setCtlVisibleBLK(1, True)
Call setCtlValueBLK(1, 1)
'B2,B3,B4,P5を不可視
Call setCtlVisibleBLK(2, False)
Call setCtlVisibleBLK(3, False)
Call setCtlVisibleBLK(4, False)
Call setCtlVisiblePCK(5, False)
End If
Else
'P0,B1,B2,B3に値を入れる
Call setCtlVisiblePCK(0, True)
Call setCtlValuePCK(0)
Call setCtlVisibleBLK(1, True)
Call setCtlValueBLK(1, 1)
Call setCtlVisibleBLK(2, True)
Call setCtlValueBLK(2, 2)
Call setCtlVisibleBLK(3, True)
Call setCtlValueBLK(3, 3)
'B4,P5を不可視
Call setCtlVisibleBLK(4, False)
Call setCtlVisiblePCK(5, False)
End If
rst.MoveNext
If rst.EOF Then
rst.Close
cnn.Close
End If
End Sub
Private Sub setCtlVisiblePCK(i As Integer, blnVisible As Boolean)
Me("UNYOBI" & i).Visible = blnVisible
Me("ADD1" & i).Visible = blnVisible
Me("ADD2" & i).Visible = blnVisible
〜省略〜
End Subnd Sub
Private Sub setCtlValuePCK(i As Integer)
Me("UNYOBI" & i) = rst!UNYOBI
Me("ADD1" & i) = rst!ADD1
Me("PGTEN" & i) = rst!PGTEN
Me("PGBLK" & i) = rst!PGBLK
〜省略〜
End Sub
Private Sub setCtlVisibleBLK(i As Integer, blnVisible As Boolean)
Me("UNYOBI" & i).Visible = blnVisible
Me("ADD1" & i).Visible = blnVisible
〜省略〜
End Sub
Private Sub setCtlValueBLK(i As Integer, j As Integer)
Me("BLKCD" & i) = rst("BLKCD" & j)
Me("BLKNM" & i) = rst("BLKNM" & j)
Me("PGBLK" & i) = rst("PGBLK" & j)
〜省略〜
End Sub
|
|