4.4.7 複数行に分割した出力

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行とも同じページに納まらない場合は、全体が次のページに送られます。

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