最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

17.11.印刷の基本

[ Previous ] [ HOME ] [ Upper ] [ Next ]


印刷の基本事項を学ぼう

プログラムはすべて、ファイルを入出力対象とします。(これ以外に、データエリアとかもあるのですが、一般的に、入出力といえば、相手のオブジェクトは*FILEです。)さて、その中でも、特にO仕様書を使う場合は、データベースのほかに、印刷装置ファイルが多いです。そこで、まず、印刷装置ファイル(以下PRTF)の特性に根ざした事柄を説明します。

印刷装置の種類

キャラクタードットプリンター

一番古くて、基本的なプリンターです。性能として、大抵、一分間に何文字と表記されます。ドットインパクト方式なので、ワンライティング(カーボン伝票など)の複写型伝票に、今でも使われています。

ラインプリンター

大抵、印字ヘッドが、ライン型で、一回に一行印刷するのが基本ですが、似たような亜ラインプリンターがあります。性能表示としては、一分あたり何行という表示です。多分ドットインパクト方式が多いと思います。

ページプリンター

大抵、レーザープリンターと呼ばれるのはこの方式です。Windowsの普及で多くなったプリンターです。性能表示では、一分間に何頁という表記になると思います。

上記の、どのプリンターに対しても、RPGの記述は同じです。まれに、その特性を生かしたコーディングもあるにはあるのですが(プリンターに対する制御命令文字などをスプールに入れる)、最初は、そんな事は考えないでください。兎に角、印刷する方法を学んでください。

印刷特有の制御:オーバーフロー(あふれ処理)

これを理解するには、印刷の一般的な形式を、知らなくてはなりません。下の図は、ごく一般的なストックフォーム(ファンフォールド:紙左右に穴が開いている)の定義です。

printsize.gif

白紙のものもありますが、通常は横線が引かれています。これは6lpiの場合、印字2行分が、その線と線の間に収まります。オーバーフロー行とは、明細印刷とずーと続けていて、ある行に到達したら、次ページに紙送りをするものです。最後の1インチ(2.54センチ)は、合計金額などを印刷するために、予約されたエリアと考えてください。

オーバーフロー行以下には、「そのまま改ページしたら、合計行が、次のページに行ってしまう」のを避けるため、合計行(6行以内ですが)を、印刷することができるエリア(61行目から66行目)でもある。

と私は習いました。しかし、今では、それを説明する書籍に出会いません。どうして、6行も無駄にする理由を書かないのだろう?

基本的に、行数は、LPI(Lines Per Inch)により決定されます。4LPIは1インチあたり4行となり、6LPIは1インチあたり6行となり、8LPIは1インチあたり8行となります。これらの設定は、印刷装置ファイルにあります。ここで、もう一度、CPIとLPIについて、まとめておきます。

lpicpi.gif (4415 バイト)

CPI 桁数
10 132
12 158
13.4 176
15 198

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行目」という指定で、その位置にジャンプするのを「スキップ」といいます。

fcb.gif (13143 バイト)

印刷後、印刷のヘッドが、次の行に行く場合の行数の指定が、「スペース」です。いきなり、XX行目に行くのではなく、1行打ったら、次の行へ、また1行打ったら、次の行へという場合の動きです。

prtspac.gif (4970 バイト)

覚えておくと便利なプリンターファイルのパラメータ

SAVE 印刷後の保管 *YESで印刷後も残る(状況はSAVなのでリリースすると印刷)
HOLD スプールが作成されても印刷しない リリースすると印刷される
RPLUNPRT 印刷不能文字の置き換え もし印刷不能文字があると任意の文字で置き換えてくれる
USRDTA スプール識別用の文字列10文字まで *SOURCEならスプール作成のプログラム名
SPLFNAME(OVRPRTFのみ) スプールファイル名の一時変更、10文字まで使い道いろいろ。 *FILEならプリンターファイル名。

SPLFNAMEの利用例

SPLFNAMEをCLPの中で作成する。

CHGVAR &SPLFNAME  ('SL_'|<&YYMM|<'_01')  
OVRPRTF QPRINT ... SPLFNAME(&SPLFNAME) 
CALL pgm                           
DLTOVR QPRINT                 

スプール名の例

  • SL_9807_01 ... 「1998年7月のEOM(月末締め処理)の売上レポート1」
  • SL_9807_02 ... 「1998年7月のEOM(月末締め処理)の売上レポート2」
  • SK_9807_01 ... 「1998年7月のEOM(月末締め処理)の在庫レポート1」
  • SK_9807_02 ... 「1998年7月のEOM(月末締め処理)の在庫レポート2」

といったスプール名で、OUTQに並びます。尚、USRDTAはさわらず、プログラム名を出した方が、あとあと便利です。

印刷不能文字の置き換えの注意

特殊なコードをスプールに埋め込む場合、置き換えない様に*NOにしなければ、特殊コードは機能しません。せっかく埋め込んだコードを置き換えてしまうのですから。

グループ印刷と集計について

たとえば、ある学校のクラスの国語、算数の点数を印刷する場合を例に考えましょう。

クラス 氏名 科目 点数
1組 山田さん 国語 60
1組 山田さん 算数 70
1組 田中さん 国語 80
1組 田中さん 算数 60
2組 佐藤さん 国語 50
2組 佐藤さん 算数 60
2組 北野さん 国語 60
2組 北野さん 算数 80
2組 加藤さん 国語 80
2組 加藤さん 算数 80

これを、クラスと科目を集計キーとして、データを並び替え、各人の国語と算数の点数(明細)と、クラス別に(クラスが変わったら)合計を出す様にすると以下のようになります。

並べ替え(クラスを第1のキー、科目を第2のキーとして)

クラス 科目 氏名 点数
1組 国語 山田さん 60
1組 国語 田中さん 80
1組 算数 山田さん 70
1組 算数 田中さん 60
2組 国語 佐藤さん 50
2組 国語 北野さん 60
2組 国語 加藤さん 80
2組 算数 佐藤さん 60
2組 算数 北野さん 80
2組 算数 加藤さん 80

クラスと科目をキーとして集計する

クラス 科目 氏名 点数
1組 国語 山田さん 60 明細
1組 国語 田中さん 80 明細
  国語 計  140 「科目」キーブレイク発生 合計処理
1組 算数 山田さん 70 明細
1組 算数 田中さん 60 明細
  算数 計  130 「科目」キーブレイク発生 合計処理
    1組 計  270 「クラス」キーブレイク発生 合計処理
2組 国語 佐藤さん 50 明細
2組 国語 北野さん 60 明細
2組 国語 加藤さん 80 明細
   国語 計 190 「科目」キーブレイク発生 合計処理
2組 算数 佐藤さん 60 明細
2組 算数 北野さん 80 明細
2組 算数 加藤さん 80 明細
   算数 計 220 データ終わり強制「科目」キーブレイク発生 合計処理
    2組 計  410 データ終わり強制「クラス」キーブレイク発生 合計処理
    総計  680 データ終わり総合計

国語計、算数計、1組計とか、2組計と出ていますね。このように、キーとなる値が、変わったら、何かを(たとえば合計)するタイミングを「キーブレイク」といいます。たとえば、クラスを集計キーとして、キーブレイクで点数の合計を出す、といった具合に表現をします。この呼び名はほかに、「コントロールブレイク」「コントロールが切れる」ともいいます。さらに、このように、キーでまとめる処理を、「グループ処理」とも言います。

上の表を見ると、山田さん、田中さんが「国語」で、その次の山田さんのところで、いままで「国語」だったところが「算数」に変わりましたよね。キーブレイクが発生したのです。ここで、「国語」だった田中さんと山田さんの国語の点数の合計を出しています。

2組の加藤さんの最後のデータの後は、ちょっと特殊です。次のキーがもう無いのだから、キーブレイクにはならないのですが、「最終レコード処理」という意味で、必ずキーブレイクと同じ処理をします(「算数計」と「2組計」のこと)。さらに、大抵、すべての明細が終了すると、「最終合計」を出すのが習わしです。

注意:合計を出しても意味がないときは、出しませんよ。商品別の売上個数のリストでは、個々の商品の売上個数は重要ですが、全商品の売上個数は、無意味な場合もあります。

図式化するとこのようになります。

明細
明細
小計
明細
明細
小計
中計
明細
明細
小計
明細
明細
小計
中計
総合計

また、

 

小計
小計
中計
小計
小計
中計
総合計

という明細を印刷しない形式もあります。たとえば、下図のようなものです。

クラス 科目
1組 国語 140
  算数 130
1組 計   270
2組 国語 190
  算数 220
2組 計   410
総計   680

この場合、そのリストを見る人に取っては、「小計」が「明細」の様に読めます。「集計明細」などと呼ばれることがあります。

グループ表示印刷

クラスの印刷の部分で、重複する1組、とか2組を、最初の値のみ残して、後を省略するのが通例です。これを「グループ表示印刷」と呼びます。これで、見やすくしようとしているのです。このとき、オーバーフローして、グループ印刷の途中で、次のページにまたがる場合は、グループ印刷中で、抑止している項目も出してあげるほうが、見やすいかもしれません。そのときは、ちょっと工夫して、(前ページより)をつけるともっと、親切でしょう。ただ、行数が増えてしまうので、場合によってはうっとおしいかもしれません。この辺は、あなたの感性で判断してください。

また、帳票のデザインは、もろに作成する人のデザイン感覚が出てきます。見やすくて、美しくて、無駄のない帳票をデザインしましょう。HTML上ではけっこきびしい。(^_^;)

クラス	   科目		  氏名		      点数
-------	 --------	---------	-----------
 1組	  国語		山田さん		 60
 1組	  国語		田中さん	     80
			--------	-----------
		       【国語 計】 		140 *
			
 1組	  算数		山田さん		 70
 1組	  算数		田中さん		 60
			--------	-----------
		       【算数 計】		130 *
 		       【1組  計】 		270 **
			
 2組	  国語		佐藤さん		 50
 2組	 国語		北野さん		 60
 2組	 国語		加藤さん		 80
			--------	------------
		       【国語 計】 		190 *
			
 2組	  算数		佐藤さん		 60
 2組	  算数		北野さん		 80
 2組	  算数		加藤さん		 80
			--------	------------
		       【算数 計】	 	220 * 
		       【2組  計】 		410 **
 	               【総   計】		680 ***
                

               ↓ グループ表示印刷として変更

クラス	   科目		  氏名		      点数
-------	 --------	---------	-----------
 1組	  国語		山田さん		 60
     		田中さん	     80
			--------	-----------
		       【国語 計】 		140 *
			
 	  算数		山田さん		 70
 	  		田中さん		 60
			--------	-----------
		       【算数 計】		130 *
 		       【1組  計】 		270 **
			
 2組	  国語		佐藤さん		 50
 	 		北野さん		 60
 			加藤さん		 80
			--------	------------
		       【国語 計】 		190 *
			
 	  算数		佐藤さん		 60
 	  		北野さん		 80
 	  		加藤さん		 80
			--------	------------
		       【算数 計】	 	220 * 
		       【2組  計】 		410 **
 	               【総   計】		680 *** 
 

キーブレークで改ページ

もし、出てきたリストを、各クラスの担任の人に配るとしたら、このままでは、ページの途中で切り取る事になりますね。そこで、クラスがキーブレークを起こしたら、クラス計を出して、改ページしましょう。これによって、ページのミシン線で切り取れますよね。さらに、総合計も改ページしましょう。最後のクラスのページのみ総合計を出すのは無意味ですよね。出さなくてもいいし、何か別のリストとの、突き合わせ検査ように出してもいいでしょう。

クラス	   科目		  氏名		      点数
-------	 --------	---------	-----------
 1組	  国語		山田さん		 60
     		田中さん	     80
			--------	-----------
		       【国語 計】 		140 *
			
 	  算数		山田さん		 70
 	  		田中さん		 60
			--------	-----------
		       【算数 計】		130 *

 		       【1組  計】 		270 **
 

改ページ

クラス	   科目		  氏名		      点数
-------	 --------	---------	-----------
 2組	  国語		佐藤さん		 50
 	 		北野さん		 60
 			加藤さん		 80
			--------	------------
		       【国語 計】 		190 *
			
 	  算数		佐藤さん		 60
 	  		北野さん		 80
 	  		加藤さん		 80
			--------	------------
		       【算数 計】	 	220 * 

		       【2組  計】 		410 **

 

改ページ

クラス	   科目		  氏名		      点数
-------	 --------	---------	-----------

  	               【総   計】		680 *** 

 

 

                                                   

というわけで、今回は帳票に関する基礎固めをしていただきました。人により、様々なデザインが可能だけに、一概に言い切れない部分もあるのですが、だいたいこんなところを知っておいてください。細かな点は、後続の講義に出てくると思います。

起立、礼、着席

  


[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送