• ベストアンサー

ActiveReportについて

ActiveReportの詳細セクション(Detail)以外の、例えばGroupFooterなどで、1ページに表示するデータ(行)数が足りなかった場合に空白行を出力することなどできますか? (例えば1ページに18行のデータを表示するとして、データが5件の場合、合計(GroupFooter)で18行に満たない分、空白を表示させる) 説明がうまくできなくて申し訳ないのですが、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.6

お疲れ様です。 あまりお役に立てず申し訳ありません。自分にも勉強になります。 >あと、詳細情報の件数で改ページするというのはできますか? Detail_Formatで現在の行数を判断して If 現在の行数 = 最大行数 Then Me.Detail.NewPage = ddNPAfter '// このあと改ページ Else Me.Detail.NewPage = ddNPNone    '// 改ページしない End If で良いと思います。 >グループ条件が変わったかどうかという情報は、このようにしないととれないでしょうかね? 自分はまだまだ勉強不足なのでこのような取得方法しか思いつきませんでした。 お役に立てずすいません。 Detail_Formatを少し変えてみました。 RS.MovePreviousを使わない方法です。お試しください。 Private Sub Detail_Format()   Dim RS As New ADODB.Recordset   Set RS = DataControl1.Recordset.Clone   '// データ出力の判断   If BoolEMPTY Then     '// 空行     Field1.Text = ""   Else     '// データ行     Field1.Text = RS!グループ条件   End If      '// 次のデータへ移動   RS.MoveNext      If Not RS.EOF Then     '// 次のデータとグループ条件を比較     If DataControl1.Recordset!グループ条件 <> RS!グループ条件 Then       '// 次のデータでグループ条件が変わる       If IntROW >= 最大データ行数 Then         '// 空の行数を満たした         Me.LayoutAction = 1 + 2 + 4         BoolEMPTY = False       Else         '// まだ空行を印字する         Me.LayoutAction = 1 + 2         BoolEMPTY = True       End If     Else       '// 次のデータもグループ条件が等しい       Me.LayoutAction = 1 + 2 + 4       BoolEMPTY = False     End If   Else     '// これ以上データがない     If IntROW >= 最大データ行数 Then       '// 空の行数を満たした       Me.LayoutAction = 1 + 2 + 4       BoolEMPTY = False     Else       '// まだ空行を印字する       Me.LayoutAction = 1 + 2       BoolEMPTY = True     End If   End If      '// 行数カウントアップ   IntROW = IntROW + 1   RS.Close End Function 間違っていたらごめんなさい。

marmi1516
質問者

お礼

何度もご親切にありがとうございました。 やはり、RS.MovePreviousを使わない方法でもできませんでした。 というより、上司がADOと言っていたのですが、どうも私が思うに違うようなきがします。 OLE(?)とか書いてあるんですよ。だから違うんじゃないかと・・・。 (ActiveReportに詳しい人がうちの会社にはいないもので・・・) 結局、夜中までやってもわからなかったので、課長が来た時に相談したところ、 別の方法でやり方はあるらしいのですが、ちょっと面倒なやり方らしいです。 リリースも23日に迫っていて忙しいので、ブレイクのみで空白行はとりあえずは保留になりました。 でも、josyo_mさんが教えてくださったことが、他の帳票作成にかなり役立ちました。 何度も教えていただいたのに、このような結果になってしまってすみませんでした。 また何かあったときはよろしくお願いします。 本当にありがとうございました。

その他の回答 (5)

  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.5

お疲れ様です。 たびたびすいません。 もしADOでしたら ActiveReport_ReportStart で With DataControl1   .Source = SQL   '// SQL文   '// ↓↓↓↓↓↓↓↓↓   .Recordset.Close   .Recordset.CursorType = adOpenStatic   .Recordset.Open   '// ↑↑↑↑↑↑↑↑↑ End With と指定してみてはどうでしょうか。 間違っていたらごめんなさい。

marmi1516
質問者

補足

やはり、上のようにしても駄目でした。(ちなみにADOでした) グループ条件が変わったかどうかという情報は、このようにしないととれないでしょうかね? 昨日も終電ちかくまで頑張ったのですが、やはり上手く情報が取れませんでした。 あと、詳細情報の件数で改ページするというのはできますか?

  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.4

お疲れ様です。 どのようなエラーでしょうか? MoveNextはエラーにならなかったのでしょうか? 前方カーソル?? また、DataControl1はどのタイプを使用していますか?ADO,RDO,DAO?? ちなみに例であげたのはDAOです。 接続のところでは、 DAODataControl1.DefaultType = ddDAOUseJet と、指定してあります。なにか関係あるかな? 例は、あくまでも例なのでこだわらずに、とりあえず次のデータとグループ条件が比較できればよいと思います。 間違っていたらごめんなさい。

  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.3

お疲れ様です。 ちょっと作ってみました。 Option Explicit Private IntROW   As Integer   '// 現在の行数 Private BoolEMPTY As Boolean   '// 空行判断 Private Sub ActiveReport_ReportStart()      '// 接続処理 略      '// GroupHeader   GroupHeader1.DataSource = "DAODataControl1"   GroupHeader1.DataField = グループ条件   GroupHeader1.NewPage = ddNPAfter    End Sub Private Sub GroupHeader1_Format()      '// 行数初期化   IntROW = 1   BoolEMPTY = False    End Sub Private Sub Detail_Format()      Dim RS As DAO.Recordset      Set RS = DAODataControl1.Recordset      '// データ出力の判断   If BoolEMPTY Then          '// 空行     Field1.Text = ""      Else          '// データ行     Field1.Text = RS!グループ条件        End If      '// 次のデータへ移動   RS.MoveNext      If Not RS.EOF Then          '// 次のデータとグループ条件を比較     If Field1.Text <> RS!グループ条件 Then              '// 次のデータでグループ条件が変わる       If IntROW >= 最大データ行数 Then                  '// 空の行数を満たした         Me.LayoutAction = 1 + 2 + 4         BoolEMPTY = False                Else                  '// まだ空行を印字する         Me.LayoutAction = 1 + 2         BoolEMPTY = True                End If            Else              '// 次のデータもグループ条件が等しい       Me.LayoutAction = 1 + 2 + 4       BoolEMPTY = False            End If        Else          '// これ以上データがない     If IntROW >= 最大データ行数 Then              '// 空の行数を満たした       Me.LayoutAction = 1 + 2 + 4       BoolEMPTY = False            Else              '// まだ空行を印字する       Me.LayoutAction = 1 + 2       BoolEMPTY = True            End If        End If      '// データ位置を戻す   RS.MovePrevious      '// 行数カウントアップ   IntROW = IntROW + 1    End Sub Detailに枠が書かれていることが前提です。 >このLayoutActionを使用する場合、この改ページの仕方では駄目ですか? LayoutActionを使用していてもNewPageには関係ないと思いますが。 >何か他に改ページの仕方をご存知でしたら教えて下さい。 自分もNewPageプロパティしか改ページとして使えるものは知りません。NewPageプロパティをどのセクションに設定するかによっても動きが違うと思います。 間違っていたらごめんなさい。

marmi1516
質問者

補足

RS.MovePrevious が使えませんでした。 エラーになってしまいました。 RS.MovePreviousが使えない場合、他には方法はないのでしょうか? 本当に何度もすみません・・・

  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.2

お疲れ様です。 >LayoutActionは、空白というだけあって何も表示されませんよね? Detailに枠線がかかれていれば印字されると思いますけど。 次のデータでグループ条件が変わり、合計(GroupFooter)が印字されるとわかるのでしたら、 Detail_Formatで Me.LayoutAction = 1 + 2 と設定して、必要な行数を空印字(Detail_Formatを必要な回数回る)してから Me.LayoutAction = 1 + 2 + 4 に戻すといいのではないでしょうか。現在何行目まで印字しているかをカウントしていないとだめですけど。 LayoutActionプロパティで指定している値は 1 = セクションを出力する 2 = レイアウトを移動する 4 = 次のレコードへ移動する です。 間違っていたらごめんなさい。

marmi1516
質問者

補足

たびたびすみません。 いままで、改ページの設定をNewpageというのでやってたのですが(他にわからなかったので)、 このLayoutActionを使用する場合、この改ページの仕方では駄目ですか? 何か他に改ページの仕方をご存知でしたら教えて下さい。 教えていただいたLayoutActionについては、まだ上手くできていませんが、 もうすこし頑張ってみます。 どうしても上手くいかなかった場合は、またお伺いするかもしれませんが・・・

  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.1

回答ではないのですが、 (例えば1ページに18行のデータを表示するとして、データが5件の場合、合計(GroupFooter)で18行に満たない分、空白を表示させる) とは、5件のデータを印字して残りの13行分の空白行を印字して合計(GroupFooter)を印字したいということですか?もしそうでしたらLayoutActionプロパティを使ってDetailで空白行数を出力してはどうでしょうか。 あまりイメージがつかめなくてすいません。 間違っていたらごめんなさい。

marmi1516
質問者

補足

その通りです。 今日ヘルプをみていて、LayoutActionをみつけたのですが、 使い方がよくわかりません。 ただ、わたしがここでやりたい「空白」というのは、 データの空白なので枠は表示させたいのです。 LayoutActionは、空白というだけあって何も表示されませんよね? ちょっとその辺がまだよくわからないんです・・・。

関連するQ&A

  • ActiveReportの改ページ不具合について

    .NETでActiveReportを使用しておりますが、改ページのデータ不具合が発生しております。 GroupHeader1に部門名、GroupHeader2に得意先名を指定しております。 各HeaderにはDataFieldを指定しており、GroupHeader1には部門コード、GroupHeader2には得意先コードを設定しております。改ページはGroupHeader1の部門コードごとに自動でされるよう設定しております。 帳票は下記のようになっています。 PageHeader GroupHeader1 GroupHeader2 Detail GroupFooter2 GroupFotter1 PageFotter このデータで帳票を出力した場合、1ページ内に収まりきらずに自動で改ページされ、かつ次ページに1件しかデータがない場合、GroupHeader1の部門名が次のGroupの部門名になってしまいます。なお、最初の部門名以外で、次ページに1件のみしかでない場合は正常です。 上記回避方法をお教え頂けませんでしょうか? 3日間悩んでいるのですが、なかなか解決方法が見つかりません。皆様のお力をお貸しいただきたく。 よろしくお願いいたします。

  • VB6でActiveReport1.5Jを使って2列印字を実現するには

    初めまして!開発におきまして、以下の経験を されている方がおられましたらご指導をお願い 致します。又、実現可能な案がありましたら ご意見をお願いいたします。 今回、ActiveReportでしたい事ですが、 ------------------   -------------------  |項目A|項目B|項目C|    |項目A|項目B|項目C| ------------------   -------------------     ・               ・     ・               ・     ・               ・     ・               ・     ・               ・     ・               ・ このような帳票イメージ(2列)でデータを 印字し出力したいと思っております。 1ページの明細行は固定にします。 上記のような帳票を出力するにはどういった 処理をVB側、ActiveReport側でしてやらないと いけないのでしょうか?ActiveReportの プロパティを使って出来るものなのでしょうか? お手数ですがご指導を宜しくお願いいたします。

  • ActiveReportでこんな帳票できますか?

    ご質問させていただきます。 ActiveReportでこんな帳票作れるでしょうか。 1ページ目  1年1組   名前1   名前2   ・・・   名前30 2ページ目  1年2組   名前1   名前2   ・・・   名前23 3ページ目  1年3組   名前1   名前2   ・・・   名前30 4ページ目  1年3組   名前31   ・・・   名前35 という風に 見出し:○年○組 中身:名前 といった組ごとのページ(入りきらない場合は複数ページ)を 表示させる帳票(?)です。実際は、違うデータで使うのですが、上記のようなレイアウトは可能でしょうか。 失礼致します。

  • ActiveReportでデータが0件の場合・・・

    VB6、ActiveReport2.0を使用しています。 フォームのボタンが押下された時に、帳票を発行するプログラムを作成しています。 rptXXX.PrintReport Falseにて印刷しているのですが、 表示するデータはrptXXXのActiveReport_DataInitializeでSQLを作成し、DataControlのSourceに渡してます。 このSQLを作成した時データが0件ならレポートの印刷をしないようにしたいのですが、記述の仕方がわかりません。 お分かりになる方いましたらアドバイスお願いします。

  • 複数ページに亘るExcelの集計内容を最終頁最下行に印刷したいのですが

    Excelの集計シートでの合計欄の記載についての質問です。 ある集計データについて1行目から20行目まで表示し(1行につきデータ1件分) 21件以上となった場合は次のページに印刷するというものなのですが、 以下の全てを満たすマクロ処理はないのでしょうか? あるとすればどうすればいいんでしょうか? (1)パソコン画面上に表示されるシートはデータ件数に関わらず1枚とする。 (2)1枚のシートに記載できるデータ件数の上限は99件とする。 (3)1行目は項目名を、2~100行目はデータ本体を、101行目は合計欄とする。(全て固定) (4)印刷の際、1枚の紙に印刷できるデータ件数は20件までとする。 (6)印刷のフォーマットは、1行目に項目欄、2~21行目にデータを、また最終ページの  22行目には合計欄を印刷するものとする。 (7)-1 データが20件以下の場合、1行目に項目欄を、2行目以降にデータを、  22行目に合計欄及び合計データを印刷する。 (7)-2 21~40件以下の場合は1ページ目には項目欄と20件目までのデータを、  2ページ目には項目欄及び21件目以降のデータと全データの合計データを印刷する。 (7)-3 (7)-2のように、印刷が複数ページに亘る場合、最終ページ以外については  1行目に項目欄、2~21行目にデータを印刷し、最終ページについては1行目に項目欄、  2行目以降に残りのデータ、22行目に全ページの合計データを印刷する。 (8)最終ページ以外の22行目は空白とする。(合計欄も印刷されない) (9)データ件数が20で割り切れない場合でも、最終データ記載行と合計データ記載行の間の  余白行は埋めず、必ず最終ページの22行目に合計欄及び合計データを印刷するものとする。 以上、よろしくお願いいたします。

  • ActiveReportへの出力に関して

    MySQL、C#を用いてActiveReportへ帳票を出力しようとしていますが、以下のURL を参考に、デザイン連携でMySQLから帳票のプレビューまで表示できるようになりましたが、 その後、仮に条件分岐のように、フラグ=1 の時は"○"のような加工をしたいと考えて いますが、どのようにすれば良いでしょうか??? 《URL》  http://d.hatena.ne.jp/Yamaki/20091118/1258535910 単純にあるテキストエリアの値を○等の操作をしたいと考えていますが、それをテーブルの 情報をもとにして操作したいと考えています。 ActiveReportのヘルプ等で確認しましたがわからず、、、 そもそも上記のようにデザイン連携した値をソース上で操作するにはどのように記述したら 良いのでしょうか。。。 初歩的な質問で申し訳ありませんが、教えて下さい。 よろしくお願いします。

  • Accessレポートに表示された結果でレポートの総合計が出せない

    Access97である3つの数値を一覧で表示しますが、レポートに表示するのみ、うち2つの項目を比較して、四捨五入値や切り上げ・切り捨て値で表示させ、その結果で合計をページ単位&全合計を出します。20行で必ず改ページをするため、詳細セクションの "OnPrint/印刷時" のイベントプロシージャで、行カウントの制御とページ単位の累計を計算していますが、全合計は、おかしな数値になてしまいます。 (全合計は、最終ページにそれのみで出力させなければなりません。) なにかいい方法はないでしょうか?

  • [Access・レポート]ページのちょうど中央に切り取り線

    レポートは詳細セクションのみで構成、詳細セクションがA5ヨコサイズ、印刷用紙サイズは常にA4タテで、レコード件数が2件なら1ページの上下に2件印刷され、3件なら2ページ目の下半分が余る、というレポートを作成しました。 実務では、印刷した用紙をハサミで半分に切り、A5バインダーに綴じますので、レコードの境界に切り取り線を印字したいのですが、詳細セクションの下端に線を引いただけではうまくいきませんでした。 レイアウト上、余白として必ず上下10ミリずつを要するため、ページ設定で行間隔を20ミリとすると… (=A4用紙高さ297ミリを順に、上余白10・奇数件目詳細セクション128.5・行間隔20・偶数件目詳細セクション128.5・下余白10-ととると)、 ページ中央の線は、まさに行間隔の中央でありそこに線はひけない…! 次に、詳細セクションを138.5ミリとすると、セクションの下端がちょうどページ中央となりますが、行間隔0ミリとしなければ1ページに2件のレコードは収まらず、これだと切断後、文字等の上位置が揃いません(偶数レコードが、奇数レコードよりも20ミリ上に印字されてしまいます)し、用紙の下から10ミリの位置に不要な線が印字されてしまいます。 詳細セクションのフォーマットイベントにいろいろプロシージャを講じたのですが、行き詰まっています。  *A4用紙に2件のレコードを印刷  *ページ中央に切り取り線を引きたい  *用紙切断後、文字などの高さはぴったり揃える  *用紙の余白上下10ミリずつ  *詳細セクションの内容は、上から下までテキストやラベルぎっしり どなたか素晴らしいアイデアをお授け下さい!宜しくお願いします。

  • ACCESS2003 レポートのレイアウトを2段にしたい

    ACCESS2003で開発しています。 レポートを作成しているのですがどのようにこのレイアウトを実現したらよいかわからないので、どなたかお力を貸してください。 詳細の部分には30件分のデータを入れます。 15件で折り返し、16件目からは1件目の横に表示します。 1件ごとにバーコードとデータを入れます。 1件目から15件目までをサブフォーム1にして、16件目から30件目までをサブフォーム2にするというようなやり方も考えたのですが、データ自体最大300件で、2ページ目になると連番が31から60件目までを表示というようになります。 するとサブフォームを件数分(今回であれば10個のサブフォーム)用意し、親レポートに貼り付け、サブレポート2つごとに改ページを入れておく?!なんてことになるのかな?と考えたのですが、どうもよくわからなかったのです。 イメージはこんな感じです↓ ------------------------------------------------------------ ページヘッダー ------------------------------------------------------------ 詳細 1 (バーコードとデータを表示)  16 2                 17 ・                 ・ ・                 ・ ・                 ・ 15                30 ------------------------------------------------------------ ページフッター 合計とページ数を表示 ------------------------------------------------------------ このようなレイアウトは本当に可能でしょうか? またサブレポート化した場合のサブレポートのソースオブジェクトはサブレポートごとに作成してやらないといけないですよね?? なんだかとてもややこしいのですが、何かアドバイスをいただければありがたいです。 よろしくお願いいたします。

  • ActiveReportバウンドコントロールの値はどうやて参照すればいいの?

    ActiveReport2.0+VB6.0 今、オラクルのテーブルから読み込んだレコードをリスト出力するプログラムを作っています。 Select 名前 from TB1; というレコードセットをsourceとし、Detailエリアに「名前」のバウンドコントロールtxtA、アンバウンドコントロールtxtBを配置します。 「名前 」には(はなこ、まさお、たろう、けいこ・・)と入っていて、それにあわせてtxtBに(女、男、男、女・・)と出力するとします。 今、FetchDataイベントで txtAの値を参照しながらtxtBの出力値を設定しようとしていますがtxtAの値が参照できません。 どのようにすれば参照できるでしょうか。 またこのようなことを実現する場合はどこのイベントで行えばよいのでしょうか?

専門家に質問してみよう