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

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

よく使うマニュアルです

Wiki

updated on 2004.06.23

9.50.罫線を帳票につけたい(2)

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


RPGサンプル

さて、問題は、この罫線のSCS制御コードをいかにプログラムの中で使うのか、ということです。

自分の流儀なのですが、まず、罫線指定部分は、0改行で印刷しています。0改行で、罫線データをプリンターに送り、実際のデータは、そのあと、罫線付きで、印刷されるのです。はっきり言えば、データ部分自身と、罫線部分自身の、相互に、その内容としては関連性はありません。罫線の様式をデザインして、そのまま、それをコード化して、プリンターに送り、その後、その罫線のデータを打つつもりでいるプリンターから、文字データを、ついでに、一緒に印刷する、そんな感じです。

また、たて横、同時に罫線印刷する yy=C0は、あまり、小回りが効かないので、使っていません。たて横両方のイメージをセットできるのは、割と簡単な表になりますので、後で修正する際、yy=C0から別のパラメータにすると、ロジックも変わってしまいます。それで、最初から、どっちにでも対応できる「縦のみ(yy=40)」「横のみ(yy=80)」を使っています。

下記のサンプルは、11.10.レコード様式罫線付き印刷のRPGです。この中では、バンバン罫線を使っています。

帳票レイアウト

※クリックすれば拡大します。尚、CPIは15です。

rcdfmt1.gif (11488 バイト)

このレイアウトを元に、罫線の線分を分解していきましょう。まず、上記の表は、2つのグループに別れていますね。上が見出し部分で、下が明細部分です。

rcdfmt2.gif (3727 バイト)

見出し部分の線分

見出し部分を、ラインタイプ(細線、太線、破線など)と、垂直、水平のグループに分解します。下の例では、1〜4までの罫線のグループに分かれましたね。また、帳票の桁位置を拾い出しておきます。

rcdfmt3.gif (3459 バイト)

明細部分の線分

今度は明細部分を、ラインタイプ(細線、太線、破線など)と、垂直、水平のグループに分解します。下の例では、5〜8までの罫線のグループに分かれましたね。また、帳票の桁位置を拾い出しておきます。

rcdfmt5.gif (3526 バイト)

さて、よく見ると、1,2と5,6、さらに4と8は同じ線分ですね。したがって、線分は、全部で、5個作らなければ成りません。

RCDFMTより

ここは、あまり罫線に関係ないですが、10進数を16進数にする部分があります。あと,罫線消去は、固定情報で可能です。

     H            Y/                                    1 
     FRCDFMTHPIF  E           K        DISK
     FRCDFMTDPIP  E           K        DISK
     FQPRINTS O   F     198     OF     PRINTER
     E******************************************************
     E*          A R R A Y        T A B L E               *
     E******************************************************
     E                    GI         20  2               
     E                    POS        20  5 2A            
     E                    TTL     1   1 26               題
     I******************************************************
     I*     D E F I N E    D A T A  - S T R U C T U R E    *
     I******************************************************
     I* 罫線用 
     I           IDS
     I                                    B   1   20DSBIN
     I                                        2   2 DSCHR
     I           IDS
     I                                    B   1   40DSBIN2
     I                                        3   4 DSCHR2
     I* 罫線データ
     IDSDGL       DS
     I I            X'2BFD00000000'           1   6 DSBFD
     I                                        3   3 DSCNT
     I                                        5   5 DSLTYP
     I                                        6   6 DSOPT
     I                                        7  46 GI
     I           SDS
     I                                        1  10 W1PGM
     I                                      244 253 W1JOB
     I                                      254 263 W1USR
     I                                      264 2690JOB#
     I******************************************************
     I*     D E F I N E    C O N S T A N T                 *
     I******************************************************
     I              X'2BFD04000000'       C         #CLRGR
     I              X'2BFD04021000'       C         #RESUM
     I              X'2BFD04022000'       C         #DBL
     C******************************************************
     C*     DEFINITION  MODULE  ( PLIST   FIELD   KLIST )  *
     C******************************************************
     C*                                                    
     C*  DEFINE ENTRY                                      
     C*                                                    
     C           *ENTRY    PLIST                           
     C                     PARM           PIOTXT 50
     C******************************************************
     C*             M A I N -  R O U T I N E               
     C******************************************************
     C                     EXSR @DTL                       
     C*                                                    
     CLR                   EXSR @END                       
                                                           
           

ここでは、あることに注意してください。それは、水平垂直を同時に、罫線を引く場合は、必ず、水平が先です。下のソースを良く見てください。みな、水平を出してから、垂直を出しています。

     C******************************************************
     C*             S U B   -  R O U T I N E               
     C******************************************************
     C*----------------------------------------------------*
     C           *INZSR    BEGSR                           初期設定
     C*----------------------------------------------------*
     C                     Z-ADD0         YY      30       
     C                     Z-ADD0         W1POSC  50       
     C                     Z-ADD0         W1CNT   30       
     C                     Z-ADD0         W1LTYP  20       
     C*                                                    
     C                     EXSR @GRID                      罫線
     C*                                 
			省  略                       
     C*                                                    
     C                     EXSR @HEAD                      
     C*                                                    
     C                     ENDSR                           
     C*----------------------------------------------------*
     C           @HEAD     BEGSR                           
     C*----------------------------------------------------*
     C                     Z-ADD0         W1CTL   30       
     C*                                                    
     C                     EXCPT#CLK                       
     C                     EXCPT#HED1                      
     C*                                                    
     C                     EXCPT#HZ2                       
     C                     EXCPT#VT1                       
     C                     EXCPT#DMY                       
     C*                                                    
     C                     EXCPT#HZ1                       
     C                     EXCPT#VT1                       
     C                     EXCPT#HED2                      
     C*                                                    
     C                     EXCPT#HZ1                       
     C                     EXCPT#VT2                       
     C                     EXCPT#DMY                       
     C*                                                    
     C                     EXCPT#HZ1                       
     C                     EXCPT#HED3                      
     C*                                                    
     C                     ENDSR                           
     C*----------------------------------------------------*
     C           @DTL      BEGSR                           
     C*----------------------------------------------------*
B001 C           WIHDG2    IFEQ *BLANK                     
*001 C           WIHDG3    ANDEQ*BLANK                     
                                                        
			省  略                            
     C*                                                    
B001 C           *INOF     IFEQ *ON                        
 001 C                     EXCPT#HZ2                       
 001 C                     EXSR @HEAD                      
+001 C                     ELSE                            
B002 C           W1CTL     IFNE 0                          
 002 C                     EXCPT#HZ1                       
E002 C                     END                             
E001 C                     END                             
     C*印刷                                              
     C                     EXCPT#VT2                       
     C                     EXCPT#ITM1                      
     C                     EXCPT#ITM2                      
     C                     EXCPT#VT2                       
     C                     EXCPT#ITM3                      
     C*                                                    
     C                     Z-ADD1         W1CTL   10       
     C*                                                    
     C                     ENDSR                           
     C*----------------------------------------------------*
     C           @END      BEGSR                           
     C*----------------------------------------------------*
     C                     EXCPT#HZ2                       
     C                     EXCPT#CLK                       
     C*                                                    
     C                     ENDSR                           
                              

罫線データの作成部分

rcdfmt6.gif (3107 バイト)

罫線データを、作成する部分です。内容的には単純ですよね。

     C*----------------------------------------------------*
     C           @GRID     BEGSR                           
     C*----------------------------------------------------*
     C                     MOVE *BLANK    W1VHTP  1        
     C                     Z-ADD15.0      W1CPI   41       
     C           1440      DIV  W1CPI     W1GLDC 159       
     C* [2]                                                   
     C                     MOVE 'H'       W1VHTP           水平
     C                     Z-ADD00        W1LTYP           細線
     C                     Z-ADD*HIVAL    POS              初期値
     C                     Z-ADD1.00      POS,1            
     C                     Z-ADD195.00    POS,2            
     C                     EXSR @MKGRD                     
     C                     MOVELDSDGL     O1HZL1 10 P      戻りデータ
     C* [1]                                                   
     C                     MOVE 'H'       W1VHTP           水平
     C                     Z-ADD01        W1LTYP           太線
     C                     Z-ADD*HIVAL    POS              初期値
     C                     Z-ADD1.00      POS,1            
     C                     Z-ADD195.00    POS,2            
     C                     EXSR @MKGRD                     
     C                     MOVELDSDGL     O1HZL2 10 P      
     C* [3]                                                   
     C                     MOVE 'V'       W1VHTP           垂直
     C                     Z-ADD00        W1LTYP           細線
     C                     Z-ADD*HIVAL    POS              初期値
     C                     Z-ADD14.00     POS,1            
     C                     Z-ADD26.00     POS,2            
     C                     Z-ADD32.00     POS,3            
     C                     Z-ADD40.00     POS,4            
     C                     Z-ADD49.00     POS,5            
     C                     Z-ADD57.00     POS,6            
     C                     Z-ADD63.00     POS,7            
     C                     Z-ADD69.00     POS,8            
     C                     Z-ADD75.00     POS,9            
     C                     Z-ADD99.00     POS,10           
     C                     EXSR @MKGRD                     
     C                     MOVELDSDGL     O1VTL1198 P      
     C* [7]                                                   
     C                     MOVE 'V'       W1VHTP           垂直
     C                     Z-ADD00        W1LTYP           細線
     C                     Z-ADD*HIVAL    POS              初期値
     C                     Z-ADD6.00      POS,1            
     C                     Z-ADD32.00     POS,2            
     C                     Z-ADD43.00     POS,3            
     C                     Z-ADD51.00     POS,4            
     C                     Z-ADD58.00     POS,5            
     C                     Z-ADD62.00     POS,6            
     C                     Z-ADD66.00     POS,7            
     C                     Z-ADD73.00     POS,8            
     C                     Z-ADD80.00     POS,9            
     C                     Z-ADD85.00     POS,10           
     C                     Z-ADD99.00     POS,11           
     C                     Z-ADD151.00    POS,12           
     C                     EXSR @MKGRD                     
     C                     MOVELDSDGL     O1VTL2198 P      
     C* [4]                                                   
     C                     MOVE 'V'       W1VHTP           垂直
     C                     Z-ADD01        W1LTYP           太線
     C                     Z-ADD*HIVAL    POS              初期値
     C                     Z-ADD1.00      POS,1            
     C                     Z-ADD195.00    POS,2            
     C                     EXSR @MKGRD                     
     C                     MOVELDSDGL     O1VTL3198 P      
     C*                                                    
     C                     ENDSR                           
     C*----------------------------------------------------*
     C           @MKGRD    BEGSR                           
     C*----------------------------------------------------*
     C                     SORTAPOS                        
     C* カウント                                         
B001 C           1         DO   20        II      30       
B002 C           POS,II    IFEQ *HIVAL                     初期値
 002 C                     LEAVE                           
+002 C                     ELSE                            
 002 C                     Z-ADDII        W1POSC           
E002 C                     END                             
E001 C                     END                             
     C*                                                    
     C           W1POSC    ADD  2         W1CNT            
     C                     MULT 2         W1CNT            
     C                     Z-ADDW1CNT     DSBIN            16進数変換
     C                     MOVE DSCHR     DSCNT            16進数変換
     C*ラインタイプ                                      
     C                     Z-ADDW1LTYP    DSBIN            16進数変換
     C                     MOVE DSCHR     DSLTYP           16進数変換
     C*オプション                                        
     C                     MOVE X'40'     DSOPT            
B001 C           W1VHTP    IFEQ 'H'                        
 001 C                     MOVE X'80'     DSOPT            
E001 C                     END                             
     C*罫線位置データ作成 (2バイト)                     
     C                     Z-ADD0         YY               
     C                     MOVE *BLANK    GI               
     C*                                                    
B001 C           1         DO   W1POSC    II               
 001 C           W1GLDC    MULT POS,II    DSBIN2           16進数変換
 001 C                     ADD  1         YY               
 001 C                     MOVE DSCHR2    GI,YY            16進数変換
E001 C                     END                             
     C*                                                    
     C                     ENDSR                           
                              

o仕様書 文字データ部分

ここは、罫線とともに出す、固定情報や、データの定義部分です。

     O******************************************************
     O*             O U T P U T   M O D U L E              *
     O******************************************************
     OQPRINTS E  202           #HED1
     O                         #DBL
     O                         TTL,1     75
     O                         #RESUM
     O                         UDATE Y + 20
     O                                      '現在'
     O                         PAGE
     O                                      '頁'
     O                                 + 20 'FILE  '
     O                         WHFILE
     O*
     O        E  2             #HED2
     O                                   12 'ファイル名'
     O                                   26 'レコード様式'
     O                                   31 'タイプ'
     O                                   41 'レコード長'
     O                                   48 'アクセスパス'
     O                                   57 '保 守'
     O                                   63 '重複'
     O                                   69 '選択'
     O                                   75 'キー数'
     O                                   86 '基礎ファイル'
     O                 50               160 'レ コ ー ド様 式 記 述'
     O                N50               160 ' オ ブ ジ ェ ク ト 記 述 '
     O*
     O        E  1             #HED2
     O                         WHFILE    13
     O                         WHRFMT    25
     O                         O1FTYP    32
     O                         WHRLEN1   39
     O                         O1ACCP    48
     O                 10                57 '即 時'
     O                 11                57 '再作成'
     O                 12                57 '遅 延'
     O                 20                63 '不可'
     O                N20                62 '可'
     O                 21                68 '有'
     O                N21                68 '無'
     O                         APNKYFZ   73
     O                N25      WHBASF    87
     O                 50      WHTEXT   150
     O                N50      PIOTXT   150
     O*
     O        E  0             #HED3
     O                                    6 ''
     O                                   23 '項 目 名'
     O                                   43 'フィールド名'
     O                                   50 '属性'
     O                                   56 'バイト'
     O                                   62 '整'
     O                                   66 '小'
     O                                   73 '開始'
     O                                   80 '終了'
     O                                   84 'KEY'
     O                                   97 '選択/除外'
     O                                  130 'フ ィ ー ル ド記 述'
     O                                  178 '備   考'
     O*
     O        E 1              #ITM1
     O                         WIHDG1    29
     O*
     O        E 1              #ITM2
     O                         O1SEQ Z    5
     O                         WIHDG2    29
     O                         WIFLD     43
     O                         O1ATR  B  50
     O                         WIBLENZ   57
     O                 23      WIINT 3   61
     O                 23      O1DECP3   65
     O                         WISTR Z   72
     O                         WIEND Z   79
     O                         WIKEY Z   84
     O                         O1SLO  B  89
     O                         WICOMP    92
     O                         WIVAL     98
     O                         WITEXT   150
     O*
     O        E 1              #ITM3
     O                         WIHDG3    29
                              

o仕様書 罫線部分

rcdfmt6.gif (2968 バイト)

罫線を印刷する部分です。0改行にしていますね。例外出力は、レコードを書き出しているので、0改行でも、バッファにデータを送っていることになります。プリンターが行送りをしないだけです。水平+垂直と順番に書き出せば、バッファーに累積されて、そのエクセプト命令単位(レコード出力単位)に、プリンターを制御していきます。この内容が、バッファーに入っている限り、上記の文字データを普通に印刷すると、あたかも合成されて出てくるのです。APWやAFPとの違いは、ページ単位のフォーマットではなく、行単位の罫線フォーマットである、という点です。

     O*
     O        E  1             #DMY
     O*水平罫線 
     O        E 0              #HZ1
     O                         O1HZL1	[2]
     O*水平罫線 
     O        E 0              #HZ2
     O                         O1HZL2	[1]
     O*垂直罫線
     O        E 0              #VT1
     O                         O1VTL3	[4]
     O        E 0              #VT1
     O                         O1VTL1	[3]
     O*
     O        E 0              #VT2
     O                         O1VTL3	[4]
     O        E 0              #VT2
     O                         O1VTL2	[7]
     O*罫線消去
     O        E 1              #CLK
     O                         #CLRGR
                              

さあ、どうですか?結構便利だし、追加のソフトもなしに出来るので、お試しください。そういえば、PC5250のプリンターだと、罫線が少しずれて印刷されましたが、5250WSなんかだと、きれいに印刷されました。

以上

2000-8-8


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

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

 

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