実行サンプル

14. 日本語で印刷 (PGM108 JPN)

これは「15.中国語で印刷」と同じサンプル・プログラムです。
印刷ファイル (PRTF) : PGM108P は DDS の MSGCONキー・ワードを使って
日本語と中国語の見出し印刷を切替えています。

日本語PRTF DDSソース

0001.00      A***************************************************************
0002.00      A*    PGM108P      :   部課マスター一覧表
0003.00      A*     ソース      :  QTRSRC/QPRTSRC(PGM108P)
0004.00      A*     使用目的    :   照会 (*INQUIRY)
0005.00      A*     作成日      :  2017/08/18         18:52:47
0006.00      A*     作成者      :  QTR
0007.00      A*     コンパイル     CRTEXPRTF QTROBJ/PGM108P SRCFILE(QTRSRC/QPRTSRC)
0008.00      A*                      LVLCHK(*NO) AUT(*ALL)
0009.00      A*
0010.00      A***************************************************************
0011.00      A*( 見出行 )
0012.00       *    ---------------------------
0013.00      A          R PRTHEAD
0014.00       *    ---------------------------
0015.00      A                                      SKIPB(03)
0016.00      A                                     1'PGM108P'
0017.00      A*                                   66' 部課マスター一覧表 '
0018.00      A*           TKCODE_       20G       66
0019.00      A                                    66MSGCON(20 MSG0017 QTROBJ/USRMSG)
0020.00      A*                                     CCSID(1200 *NOCONVERT)
0021.00      A                                   120'PAGE゙'
0022.00      A                                    +1PAGNBR
0023.00      A                                      EDTCDE(Z)
0024.00      A                                      SPACEA(1)
0025.00      A            SYSNAM         8A      132
0026.00      A                                   120DATE EDTCDE(Y)
0027.00      A                                   132TIME
0028.00      A                                      SPACEA(1)
0029.00      A            LINE1        132A      132
0030.00      A                                      SPACEA(1)
0031.00      A*                                    1' 部課コード '
0032.00      A*           BUKACD_       12A  O     1MSGID(MSG0002 QTROBJ/USRMSG)
0033.00      A                                     1MSGCON(12 MSG0002 QTROBJ/USRMSG)
0034.00      A                                      TEXT(' 部課コード ')
0035.00      A*                                   13' 部課名 '
0036.00      A*           BUKANM_       10A  O    13MSGID(MSG0014 QTROBJ/USRMSG)
0037.00      A                                    13MSGCON(10 MSG0014 QTROBJ/USRMSG)
0038.00      A*                                   24' 当月労働時間計 '
0039.00      A*           WRKDAY_       14A  O    24MSGID(MSG0015 QTROBJ/USRMSG)
0040.00      A                                    24MSGCON(14 MSG0015 QTROBJ/USRMSG)
0041.00      A*                                   41' 時間当賃金 '
0042.00      A*           WRKMON_       12A  O    41MSGID(MSG0016 QTROBJ/USRMSG)
0043.00      A                                    41MSGCON(12 MSG0016 QTROBJ/USRMSG)
0044.00      A                                      SPACEA(1)
0045.00      A            LINE2        132A      132
0046.00      A                                      SPACEA(2)
0047.00      A*( 明細行 )
0048.00       *    ---------------------------
0049.00      A          R DETAIL
0050.00       *    ---------------------------
0051.00      A            BKCODE         2A        5TEXT(' 部課 コード')
0052.00      A            BKNAME        10        13TEXT(' 部課名 ')
0053.00      A                                      CHRID
0054.00      A            BKHOUR         3S 0     34TEXT(' 当月労働時間計 ')
0055.00      A                                      EDTCDE(J)
0056.00      A            BKRATE         5S 0     42TEXT(' 時間当賃金 ')
0057.00      A                                      EDTCDE(J)
0058.00      A                                      SPACEA(2)
0059.00      A*( 最終行 )
0060.00      A          R ENDPRT
0061.00      A                                    69'*  *  *  *  *'
0062.00      A                                    +1' 報  告  書  の  終  り '
0063.00      A                                    +1' *  *  *  *  *'
0064.00      A                                      SPACEA(1)
【解説】

「部課コード」という固定情報テキストは

  A                                     1MSGCON(12 MSG0002 QTROBJ/USRMSG)
  A                                      TEXT(' 部課コード ')

のようにして MSGCON キー・ワードによってメッセージとして定義されています。
MSGCON のメッセージの内容 (部課コード) は CRTPRTF のコンパイルと同時に
PRTF のオブジェクト内部にインクルードされますので
実行時にオーバーライドした他のメッセージに一時変更することはできません。
従って他言語の印刷ファイルを作成するには PRTF は別のオブジェクトとして
作成しなければなりません。

中国語PRTF DDSソース

0001.00      A***************************************************************
0002.00      A*    PGM108P      :   部課マスター一覧表
0003.00      A*     ソース      :  QTRSRC/QPRTSRC(PGM108P)
0004.00      A*     使用目的    :   照会 (*INQUIRY)
0005.00      A*     作成日      :  2017/08/18         18:52:47
0006.00      A*     作成者      :  QTR
0007.00      A*
0008.00      A***************************************************************
0009.00      A                                      CCSID(13488)
0010.00      A*( 見出行 )
0011.00       *    ---------------------------
0012.00      A          R PRTHEAD
0013.00       *    ---------------------------
0014.00      A                                      SKIPB(03)
0015.00      A                                     1'PGM108P'
0016.00      A*                                   66' 部課マスター一覧表 '
0017.00      A                                    66MSGCON(20 MSG0017 CHINALIB/USRMSG
0018.00      A                                   120'PAGE.'
0019.00      A                                    +1PAGNBR
0020.00      A                                      EDTCDE(Z)
0021.00      A                                      SPACEA(1)
0022.00      A            SYSNAM         8A      132
0023.00      A                                   120DATE EDTCDE(Y)
0024.00      A                                   132TIME
0025.00      A                                      SPACEA(1)
0026.00      A            LINE1        132A      132
0027.00      A                                      SPACEA(1)
0028.00      A*                                    1' 部課コード '
0029.00      A                                     1MSGCON(12 MSG0002 CHINALIB/USRMSG)
0030.00      A                                      TEXT(' 部課コード ')
0031.00      A*                                   14' 部課名 '
0032.00      A                                    14MSGCON(10 MSG0014 CHINALIB/USRMSG)
0033.00      A*                                   24' 当月労働時間計 '
0034.00      A                                    24MSGCON(14 MSG0015 CHINALIB/USRMSG)
0035.00      A*                                   41' 時間当賃金 '
0036.00      A                                    41MSGCON(12 MSG0016 CHINALIB/USRMSG)
0037.00      A                                      SPACEA(1)
0038.00      A            LINE2        132A      132
0039.00      A                                      SPACEA(2)
0040.00      A*( 明細行 )
0041.00       *    ---------------------------
0042.00      A          R DETAIL
0043.00       *    ---------------------------
0044.00      A            BKCODE         2A        5TEXT(' 部課 テーn゙')
0045.00      A            BKNAME        10        13TEXT(' 部課名 ')
0046.00      A                                      CHRID
0047.00      A            BKHOUR         3S 0     34TEXT(' 当月労働時間計 ')
0048.00      A                                      EDTCDE(J)
0049.00      A            BKRATE         5S 0     42TEXT(' 時間当賃金 ')
0050.00      A                                      EDTCDE(J)
0051.00      A                                      SPACEA(2)
0052.00      A*( 最終行 )
0053.00      A          R ENDPRT
0054.00      A                                    69'*  *  *  *  *'
0055.00      A                                    +1' 報  告  書  の  終  り '
0056.00      A                                    +1' *  *  *  *  *'
0057.00      A                                      SPACEA(1)
【解説】

中国語のメッセージ・ファイル : CHINALIB/USRMSG を使って

  A                                     1MSGCON(12 MSG0002 CHINALIB/USRMSG)
  A                                      TEXT(' 部課コード ')

のように記述されています。
その一方で大事なのは日本語データ・ベースの表現です。

  A            BKNAME        10        13TEXT(' 部課名 ')
  A                                      CHRID

のように漢字フィールド: BKNAME は CHRID キー・ワードが定義されています。
しかも BKNAME のタイプは必ずブランクにしてください。

CRTEXPRTFコマンドで上記の中国語印刷ファイル (PRTF) を作成するときは

CRTEXPRTF FILE(CHIMALIB/PGM108P) SRCFILE(CHINALIB/QPRTSRC)
    CHRID(320 290) LVLCHK(*NO) AUT(*ALL)

のようにして文字識別コード (CHRID) に日本語 (320 290) を指定します。
この指定によって CHRID と指定されている BKNAME は日本語コードであることが
印刷ストリーム (*SCS) に埋め込まれます。
BKNAME は日本語であると扱われます。
これによってスプール全体が中国語であっても
一部だけは日本語として扱える言語の混在が可能となります。

15. 中国語で印刷 (PGM108 CHS)

【解説】

部課マスター一覧表は中国語の見出しで日本語データ・ベースを印刷しているサンプルです。
国コードを CHS と指定すると中国簡体字環境 935
印刷プログラム: PGM108 を実行して印刷します。
下記に実行 CLP ソースを示します。

実行サンプルCLP: PGM108CL

0001.00              PGM        PARM(&FROMCD &TOCD &CNTRY &OUTPUT)
0002.00 /*---------------------------------------------------------*/
0003.00 /*    PGM108    :   部課マスター一覧表 ( 中国語 )          */
0004.00 /*---------------------------------------------------------*/
0005.00              DCL        VAR(&FROMCD) TYPE(*CHAR) LEN(2)
0006.00              DCL        VAR(&TOCD) TYPE(*CHAR) LEN(2)
0007.00              DCL        VAR(&CNTRY) TYPE(*CHAR) LEN(3)
0008.00              DCL        VAR(&OUTPUT) TYPE(*CHAR) LEN(6)
0009.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)
0010.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)
0011.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)
0012.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
0013.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
0014.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)
0015.00              DCL        VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)
0016.00              DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +
0017.00                           VALUE('*ESCAPE   ')
0018.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +
0019.00                           VALUE(X'000074') /* 2 進数  */
0020.00              DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) +
0021.00                           VALUE(X'00000000')
0022.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
0023.00
0024.00 /*( 環境の取得 )*/
0025.00              RTVJOBA    TYPE(&TYPE)
0026.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */
0027.00              CHGVAR     VAR(&TOPGMQ) VALUE('*SYSOPR   ')
0028.00              ENDDO      /*  バッチ  */
0029.00              ELSE       CMD(DO) /*  対話式  */
0030.00              CHGVAR     VAR(&TOPGMQ) VALUE('*TOPGMQ   ')
0031.00              ENDDO      /*  対話式  */
0032.00
0033.00 /*( 環境の設定 )*/
0034.00              IF         COND(&CNTRY *EQ 'JPN') THEN(DO) /*  日本  */
0035.00              CHGJOB     LANGID(JPN) CNTRYID(JP) CCSID(65535)
0036.00              ENDDO      /*  日本  */
0037.00              IF         COND(&CNTRY *EQ 'CHS') THEN(DO) /*  中国  */
0038.00              ADDLIBLE   CHINALIB
0039.00              MONMSG     CPF2100
0040.00              CHGJOB     LANGID(CHS) CNTRYID(CN) CCSID(65535)
0041.00              ENDDO      /*  中国  */
0042.00
0043.00 /*( 出力オプション )*/
0044.00              IF         COND((&OUTPUT *EQ '*     ') *OR (&OUTPUT *EQ +
0045.00                           '*BOTH ')) THEN(DO)
0046.00              OVRPRTF    FILE(PGM108P) HOLD(*YES)
0047.00              ENDDO
0048.00
0049.00  /*( 実行 )*/
0050.00              IF         COND(&CNTRY *EQ 'JPN') THEN(DO) /*  日本  */
0051.00              OVRPRTF    FILE(PGM108P) TOFILE(QTROBJ/PGM108P) +
0052.00                           SECURE(*YES) OVRSCOPE(*JOB)
0053.00              ENDDO      /*  日本  */
0054.00              IF         COND(&CNTRY *EQ 'CHS') THEN(DO) /*  中国  */
0055.00              OVRPRTF    FILE(PGM108P) TOFILE(CHINALIB/PGM108P) +
0056.00                           SECURE(*YES) OVRSCOPE(*JOB)
0057.00              ENDDO      /*  中国  */
0058.00              OVRDBF     FILE(BUKAM) TOFILE(QTRFIL/BUKAM) +
0059.00                           SECURE(*YES) OVRSCOPE(*JOB)
0060.00              CALL       PGM(QTROBJ/PGM108) PARM(&FROMCD &TOCD)
0061.00              MONMSG     MSGID(RPG9801) EXEC(GOTO CMDLBL(ERROR))
0062.00              DLTOVR     FILE(PGM108P BUKAM) LVL(*JOB)
0063.00              MONMSG     CPF9800
0064.00              CHGJOB     LANGID(JPN) CNTRYID(JP)
0065.00              SNDPGMMSG  MSG(' 印刷を完了しました。 ') MSGTYPE(*DIAG)
0066.00              IF         COND(&CNTRY *EQ 'CHS') THEN(DO) /*  中国  */
0067.00              RMVLIBLE   CHINALIB
0068.00              ENDDO      /*  中国  */
0069.00
0070.00 /*( 出力オプション )*/
0071.00              IF         COND((&OUTPUT *EQ '*     ') *OR (&OUTPUT *EQ +
0072.00                           '*BOTH ')) THEN(DO)
0073.00              DSPSPLF    FILE(PGM108P) JOB(*) SPLNBR(*LAST)
0074.00              ENDDO
0075.00              IF         COND(&OUTPUT *EQ '*     ') THEN(DO)
0076.00              DLTSPLF    FILE(PGM108P) SPLNBR(*LAST)
0077.00              ENDDO
0078.00              IF         COND(&OUTPUT *EQ '*BOTH ') THEN(DO)
0079.00              RLSSPLF    FILE(PGM108P) JOB(*) SPLNBR(*LAST)
0080.00              ENDDO
0081.00              RETURN
0082.00
0083.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +
0084.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
0085.00                           MSGFLIB(&MSGFLIB)
0086.00  SNDMSG:     IF         COND(&MSGID *EQ ' ') THEN(DO)
0087.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +
0088.00                           TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE)
0089.00              ENDDO
0090.00              ELSE       CMD(DO)
0091.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
0092.00                           MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) +
0093.00                           MSGTYPE(&MSGTYPE)
0094.00              ENDDO
0095.00              ENDPGM
【解説】

日本語として実行が指定された場合は

0035.00              CHGJOB     LANGID(JPN) CNTRYID(JP) CCSID(65535)

によって日本語環境が確保され

0051.00              OVRPRTF    FILE(PGM108P) TOFILE(QTROBJ/PGM108P) +
0052.00                           SECURE(*YES) OVRSCOPE(*JOB)

としてオーバーライドして日本語の印刷ファイル QTROBJ/PGM108P を使用するように
指定しますが、中国語が指定された場合は

0040.00              CHGJOB     LANGID(CHS) CNTRYID(CN) CCSID(65535)

によって中国語環境が設定されます。
このジョブの CCSID は i5/OS によって 935 となり
印刷スプールにはジョブの CCSID 935 が埋め込まれます。
Spoolライターはこれによってスプールが中国語であると判定します。

0055.00              OVRPRTF    FILE(PGM108P) TOFILE(CHINALIB/PGM108P) +
0056.00                           SECURE(*YES) OVRSCOPE(*JOB)

として中国語の印刷ファイル: CHINALIB/PGM108P を使うように指示します。

実行サンプルRPG: PGM108

0001.00 H DFTNAME(PGM108) DATEDIT(*YMD/) BNDDIR('QC2LE')
0002.00 F**********  部課マスター一覧表 ***************************************
0003.00 FBUKAM     IF   E           K DISK
0004.00 FPGM108P   O    E             PRINTER EXTDESC('QTROBJ/PGM108P')
0005.00 F                                     EXTFILE(*EXTDESC)
0006.00 F**********************************************************************
0007.00  *    QTRSRC/QRPGLESRC(PGM108)
0008.00  *     使用目的    :  一覧表印刷 (*REPORT)
0009.00  *     作成日      :  2017/08/18         18:55:30
0010.00  *     作成者      :  QTR
0011.00
0012.00 D LINE            S              1    DIM(132)
0013.00 D AR              S              1    DIM(80)
0014.00 D SAVDTA          S              1    DIM(1024)                             SAVE-[゙ート
0015.00 D STRGYO          S              2S 0 INZ(6)
0016.00 D GYOSU           S              3S 0
0017.00 D ENDRRN          S              3S 0
0018.00 D SFLPAG          S              2S 0 INZ(15)
0019.00 D SFLSIZ          S              3S 0 INZ(16)
0020.00 D LINE1           S            132A
0021.00 D LINE2           S            132A
0022.00 D TITLE_          C                   CONST(' 部品マスター一覧表 ')
0023.00
0024.00 D SAVEDS        E DS                  EXTNAME(JUCHU)
0025.00 D  DSPDTA                 1   1024
0026.00 D                                     DIM(1024)                             入力 [゙ート
0027.00
0028.00 D*( WORK 日付 YYMMDD [゙ート 構造  )
0029.00 D DATEDS          DS
0030.00 D  SRY                    1      2  0
0031.00 D  SRYMD                  1      8  0
0032.00 D  YYMMDD                 3      8  0
0033.00 D  YYMM                   3      6  0
0034.00 D  MMDD                   5      8  0
0035.00 D  YY                     3      4  0
0036.00 D  MM                     5      6  0
0037.00 D  DD                     7      8  0
0038.00
0039.00 C*w 注意 ワ
0040.00 C* このプログラムはパラメータつきで呼び出すことができます。
0041.00 C* パラメータなしで呼び出された場合は単独で動作します。
0042.00 C*----------------------------------------------------+
0043.00 C     *ENTRY        PLIST                                                  |
0044.00 C                   PARM                    FROMCD            2
0045.00 C                   PARM                    TOCD              2
0046.00 C*----------------------------------------------------+
0047.00 C                   MOVE      FROMCD        BKCODE
0048.00 C*----------------------------------------------------+
0049.00 C     SETKEY        KLIST
0050.00 C                   KFLD                    BKCODE
0051.00 C*----------------------------------------------------+
0052.00 C     SETKEY        SETLL     BUKAM
0053.00 C                   DO        *HIVAL
0054.00 C                   SETOFF                                       50
0055.00 C                   READ      BUKAM                                  50
0056.00 C   50              LEAVE
0057.00 C     BKCODE        CABGT     TOCD          REDEND
0058.00 C*-------------------------------------------------------------------------+
0059.00 C                   SETON                                        42        |
0060.00 C                   EXSR      OUTPUT                                       |
0061.00 C*-------------------------------------------------------------------------+
0062.00 C                   ENDDO
0063.00 C     REDEND        TAG
0064.00 C                   SETON                                        LR
0065.00 C   LR              EXSR      LRRTN
0066.00 C                   RETURN
0067.00 C******************************************************
0068.00 C     *INZSR        BEGSR
0069.00 C******************************************************
0070.00 C*  初期サイクルのみの実行
0071.00 C                   MOVEA     *ALL'-'       LINE
0072.00 C                   MOVEA     LINE          LINE1
0073.00 C                   MOVEA     LINE          LINE2
0074.00 C                   ENDSR
0075.00 C******************************************************
0076.00 C     LRRTN         BEGSR
0077.00 C******************************************************
0078.00 C*-------------------------------------------------------------------------+
0079.00 C                   SETON                                        43        |
0080.00 C                   EXSR      OUTPUT                                       |
0081.00 C*-------------------------------------------------------------------------+
0082.00 C                   ENDSR
0083.00 C******************************************************
0084.00 C     OUTPUT        BEGSR
0085.00 C******************************************************
0086.00 C  N40              SETON                                        4041
0087.00 C*----------------------------------------------------+
0088.00 C   41              WRITE     PRTHEAD
0089.00 C   42              WRITE     DETAIL                               OF
0090.00 C   43              WRITE     ENDPRT
0091.00 C*----------------------------------------------------+
0092.00 C   OF              SETOFF                                       40OF
0093.00 C                   SETOFF                                       414243
0094.00 C                   ENDSR
【解説】

部課マスター: BUKAM を読んで印刷ファイル: PGM108P に出力するだけの
単純な印刷プログラムであり日本語を印刷出力する場合も
中国語を印刷出力する場合もプログラムのアルゴリズムには何の影響もない。
つまりこれで既存の印刷プログラムであったとしても
国際言語化によって既存のプログラムに及ぼす影響はないと言える。