DEF_XXXXX系のコマンドを使うと、1レコード分のデータを複数行に分けて印字することができます。例えばレポートの頭書きを次のように印字することを考えてみましょう。

印刷日付:DD/MM/YY
会社      :XXXXXXXXXX
部門      :XXXXXXXXXXXXXXXXXXXX

これは次のようにDEF_HEADコマンドを3つ並べて記述することにより実現できます。

     DEF_HEAD  NAME(#HEAD01) FIELDS((#DATE *L1 *C2))
DEF_HEAD  NAME(#HEAD02) FIELDS((#COMP *L2 *C2))
DEF_HEAD  NAME(#HEAD03) FIELDS((#DIV  *L3 *C2))

あるいはこの3つをまとめて次のように記述してもかまいません。

     DEF_HEAD  NAME(#HEAD) FIELDS((#DATE *L1 *C2)(#COMP *L2 *C2) 
          (#DIV *L3 *C2))

次の理由で、後者の書き方をお勧めします。

  • ファンクション定義、実行文とも、短く簡潔に記述できます。
  • レポート設計ツールでの取り扱いが簡便です。

頭書き(DEF_HEAD)や後付け行(DEF_FOOT)に関しては、可能な限り、1行のコマンドで必要な事項をすべて記述するようにしてください。

一方、明細行(DEF_LINE)やブレーク行(DEF_BREAK)については、1行にまとめるか複数に分割して記述するかによって結果が異なります。

例えば次のようなレポートを考えてみましょう。
 
 顧客名                           住所
 XXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXXXXXXX
                            XXXXXXXXXXXXXXXXXXXXXXXXXXX
                            XXXXXXXXXXXXXXXXXXXXXXXXXXX
                            郵便番号:9999
 
 XXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXXXXXXX
                            XXXXXXXXXXXXXXXXXXXXXXXXXXX
                            XXXXXXXXXXXXXXXXXXXXXXXXXXX
                            郵便番号:9999
 
 XXXXXXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXXXXXXX
                            XXXXXXXXXXXXXXXXXXXXXXXXXXX
                            XXXXXXXXXXXXXXXXXXXXXXXXXXX
                            郵便番号:9999 

 
明細行の定義は次のようになるでしょう(行および列の詳細は省略)。

     DEF_LINE NAME(#DET01) FIELDS(#CUSNAM #CUSAD1) 
          IDENTIFY(*COLHDG)
DEF_LINE NAME(#DET02) FIELDS(#CUSAD2) IDENTIFY(*NOID)
DEF_LINE NAME(#DET03) FIELDS(#CUSAD3) IDENTIFY(*NOID)
DEF_LINE NAME(#DET04) FIELDS(#POSTCD) IDENTIFY(*LABEL)

あるいは次のように記述することも可能です。

     DEF_LINE NAME(#DETAIL) FIELDS((#CUSNAM *L1 *C2  *COLHDG)
                              (#CUSAD1 *L1 *C39 *COLHDG)
                              (#CUSAD2 *L2 *C39 *NOID  )
                              (#CUSAD3 *L3 *C39 *NOID  )
                              (#POSTCD *L4 *C39 *LABEL ))

細かく見ると、この2つの定義方法では、出力結果に若干の違いがあります。

単一のDEF_XXXXXコマンドでまとめて定義した場合、全体がひとつの「かたまり」と看做されるので、ページをまたがって印字されることはありません。

一方、それぞれ分割して記述した場合、次のように、途中に改ページが入ることもありえます。
 
  XXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                       XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                       XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                              郵便番号:9999
                                                      最後尾
  XXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  ページ
                                                          1
 
 
                                                       先頭
  顧客名                 住所                        ページ
                         XXXXXXXXXXXXXXXXXXXXXXXXXXXXX    2
                         XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                         郵便番号:9999
 
  XXXXXXXXXXXXXXXXXXX    XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                         XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                         XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                         郵便番号:9999

一方、全体をひとつのコマンドで定義した場合、このようにページをまたがって出力されることはありません。4行とも同じページに納まらない場合は、全体が次のページに送られます。

レポートのレイアウト設計で、ページをまたがっても構わないとするか否かにより、いずれかの方法を選んでください。

  • No labels