17.11.印刷の基本 |
印刷の基本事項を学ぼうプログラムはすべて、ファイルを入出力対象とします。(これ以外に、データエリアとかもあるのですが、一般的に、入出力といえば、相手のオブジェクトは*FILEです。)さて、その中でも、特にO仕様書を使う場合は、データベースのほかに、印刷装置ファイルが多いです。そこで、まず、印刷装置ファイル(以下PRTF)の特性に根ざした事柄を説明します。 印刷装置の種類
上記の、どのプリンターに対しても、RPGの記述は同じです。まれに、その特性を生かしたコーディングもあるにはあるのですが(プリンターに対する制御命令文字などをスプールに入れる)、最初は、そんな事は考えないでください。兎に角、印刷する方法を学んでください。 印刷特有の制御:オーバーフロー(あふれ処理)これを理解するには、印刷の一般的な形式を、知らなくてはなりません。下の図は、ごく一般的なストックフォーム(ファンフォールド:紙左右に穴が開いている)の定義です。 白紙のものもありますが、通常は横線が引かれています。これは6lpiの場合、印字2行分が、その線と線の間に収まります。オーバーフロー行とは、明細印刷とずーと続けていて、ある行に到達したら、次ページに紙送りをするものです。最後の1インチ(2.54センチ)は、合計金額などを印刷するために、予約されたエリアと考えてください。 オーバーフロー行以下には、「そのまま改ページしたら、合計行が、次のページに行ってしまう」のを避けるため、合計行(6行以内ですが)を、印刷することができるエリア(61行目から66行目)でもある。と私は習いました。しかし、今では、それを説明する書籍に出会いません。どうして、6行も無駄にする理由を書かないのだろう? 基本的に、行数は、LPI(Lines Per Inch)により決定されます。4LPIは1インチあたり4行となり、6LPIは1インチあたり6行となり、8LPIは1インチあたり8行となります。これらの設定は、印刷装置ファイルにあります。ここで、もう一度、CPIとLPIについて、まとめておきます。
CPIはCharacters per inchです。通常は10cpiです。印刷可能な最大桁数は13.2inchですので、13.2 * 10で、横に132文字印刷できます。もし。これが15CPIならば、13.2*15-198なので、横に198文字印刷できます。 LPIは、Lines per inchです。通常は6LPIです。1頁は11inchなので、全部で11*6-66行となります。もし8LPIならば、1頁88行です。但し、1頁の下1インチは、オーバーフロー行となります。従って、6LPIならば、全体で66行、オーバーフロー行が60行目となります。勿論、特殊な用紙の場合、横も縦も違うかもしれません。こういった場合、その用紙のサイズなどから割り出したり、スペーシングチャート(実寸大)を透かしてみたりして、判断します。 スペースとスキップ印刷装置が、印刷をする場合、それを管理するバッファがあるのですが、1頁全体の行数を、あたかも絶対行数のごとくに、内部管理している部分があります。予め、1行目は、「ここが1行目だ」と指示をすることで、その内部ロジックで、その行を1行目と記憶しています。もし、「14行目にジャンプしろ」、指示を出すと、その1行目から、カタカタカタと紙送りされて、14行目に来ます。もし、最初の1行目がずれていると、ずれたまま、14行目に来てしまいます。(実際の用紙の5行目を、1行目として紙の位置合わせをしてしまうと、14行目は、実際には19行目になってしまう。)これは、「用紙の位置合わせ」が大事であることを示唆しています。プログラムをきちんと作っても、最初の位置がずれてしまえば、その後のページは、ずっとずれたままです。注意しましょう。 さて、このように。「XX行目」という指定で、その位置にジャンプするのを「スキップ」といいます。 印刷後、印刷のヘッドが、次の行に行く場合の行数の指定が、「スペース」です。いきなり、XX行目に行くのではなく、1行打ったら、次の行へ、また1行打ったら、次の行へという場合の動きです。 覚えておくと便利なプリンターファイルのパラメータ
SPLFNAMEの利用例SPLFNAMEをCLPの中で作成する。
スプール名の例
といったスプール名で、OUTQに並びます。尚、USRDTAはさわらず、プログラム名を出した方が、あとあと便利です。 印刷不能文字の置き換えの注意特殊なコードをスプールに埋め込む場合、置き換えない様に*NOにしなければ、特殊コードは機能しません。せっかく埋め込んだコードを置き換えてしまうのですから。 グループ印刷と集計についてたとえば、ある学校のクラスの国語、算数の点数を印刷する場合を例に考えましょう。
これを、クラスと科目を集計キーとして、データを並び替え、各人の国語と算数の点数(明細)と、クラス別に(クラスが変わったら)合計を出す様にすると以下のようになります。 並べ替え(クラスを第1のキー、科目を第2のキーとして)
クラスと科目をキーとして集計する
国語計、算数計、1組計とか、2組計と出ていますね。このように、キーとなる値が、変わったら、何かを(たとえば合計)するタイミングを「キーブレイク」といいます。たとえば、クラスを集計キーとして、キーブレイクで点数の合計を出す、といった具合に表現をします。この呼び名はほかに、「コントロールブレイク」「コントロールが切れる」ともいいます。さらに、このように、キーでまとめる処理を、「グループ処理」とも言います。 上の表を見ると、山田さん、田中さんが「国語」で、その次の山田さんのところで、いままで「国語」だったところが「算数」に変わりましたよね。キーブレイクが発生したのです。ここで、「国語」だった田中さんと山田さんの国語の点数の合計を出しています。 2組の加藤さんの最後のデータの後は、ちょっと特殊です。次のキーがもう無いのだから、キーブレイクにはならないのですが、「最終レコード処理」という意味で、必ずキーブレイクと同じ処理をします(「算数計」と「2組計」のこと)。さらに、大抵、すべての明細が終了すると、「最終合計」を出すのが習わしです。 注意:合計を出しても意味がないときは、出しませんよ。商品別の売上個数のリストでは、個々の商品の売上個数は重要ですが、全商品の売上個数は、無意味な場合もあります。 図式化するとこのようになります。
また、
という明細を印刷しない形式もあります。たとえば、下図のようなものです。
この場合、そのリストを見る人に取っては、「小計」が「明細」の様に読めます。「集計明細」などと呼ばれることがあります。 グループ表示印刷クラスの印刷の部分で、重複する1組、とか2組を、最初の値のみ残して、後を省略するのが通例です。これを「グループ表示印刷」と呼びます。これで、見やすくしようとしているのです。このとき、オーバーフローして、グループ印刷の途中で、次のページにまたがる場合は、グループ印刷中で、抑止している項目も出してあげるほうが、見やすいかもしれません。そのときは、ちょっと工夫して、(前ページより)をつけるともっと、親切でしょう。ただ、行数が増えてしまうので、場合によってはうっとおしいかもしれません。この辺は、あなたの感性で判断してください。 また、帳票のデザインは、もろに作成する人のデザイン感覚が出てきます。見やすくて、美しくて、無駄のない帳票をデザインしましょう。HTML上ではけっこきびしい。(^_^;)
↓ グループ表示印刷として変更
キーブレークで改ページもし、出てきたリストを、各クラスの担任の人に配るとしたら、このままでは、ページの途中で切り取る事になりますね。そこで、クラスがキーブレークを起こしたら、クラス計を出して、改ページしましょう。これによって、ページのミシン線で切り取れますよね。さらに、総合計も改ページしましょう。最後のクラスのページのみ総合計を出すのは無意味ですよね。出さなくてもいいし、何か別のリストとの、突き合わせ検査ように出してもいいでしょう。
改ページ
改ページ
というわけで、今回は帳票に関する基礎固めをしていただきました。人により、様々なデザインが可能だけに、一概に言い切れない部分もあるのですが、だいたいこんなところを知っておいてください。細かな点は、後続の講義に出てくると思います。 起立、礼、着席
|
You are at K's tips-n-kicks of AS/400
|
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||