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 に出力するだけの
単純な印刷プログラムであり日本語を印刷出力する場合も
中国語を印刷出力する場合もプログラムのアルゴリズムには何の影響もない。
つまりこれで既存の印刷プログラムであったとしても
国際言語化によって既存のプログラムに及ぼす影響はないと言える。