PGM PARM(&SIRFROM &SIREND &DATEFROM &DATEEND + &OUTPUT) /*-------------------------------------------------------------------*/ /* FAXSPLCL : スプールの FAX 番号で送信 */ /* */ /* [ 注 ] この例では処理をできるだけ CLP で行うようにした例を */ /* 示しています。 */ /* */ /* (1) 指定した仕入先コードの範囲で RPG: FAXSPL を実行します。 */ /* (2) RPG: FAXSPL はひとつの仕入先の注文書だけを出力して */ /* 出力した仕入先コードをパラメータに戻します (SIRFROM) */ /* (3) 再び RPG:FAXSPL が呼び出されますが FAXSPL は */ /* パラメータ SIRFROM の次の仕入先の注文データを探して */ /* 印刷します。 */ /* (4) 印刷が終わればまた SIRFROM に戻して繰返し印刷を行います。 */ /* (5) SIREND まで印刷するか EOF になれば終了します。 */ /* */ /* 2021/02/28 作成 */ /*-------------------------------------------------------------------*/ DCL VAR(&SIRFROM) TYPE(*CHAR) LEN(4) DCL VAR(&SIREND) TYPE(*CHAR) LEN(4) DCL VAR(&NXTSIR) TYPE(*CHAR) LEN(4) DCL VAR(&DATEFROM) TYPE(*DEC) LEN(8 0) DCL VAR(&DATEEND) TYPE(*DEC) LEN(8 0) DCL VAR(&OUTPUT) TYPE(*CHAR) LEN(6) DCL VAR(&MSG) TYPE(*CHAR) LEN(132) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10) DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) + VALUE('*ESCAPE ') DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + VALUE(X'000074') /* 2 進数 */ DCL VAR(&ERR) TYPE(*CHAR) LEN(1) DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) + VALUE(X'00000000') DCL VAR(&DFTCCSID) TYPE(*DEC) LEN(5 0) DCL VAR(&RTNVAR) TYPE(*CHAR) LEN(128) DCL VAR(&FAXNO) TYPE(*CHAR) LEN(15) DCL VAR(&LR) TYPE(*CHAR) LEN(1) DCL VAR(&SRNMJ) TYPE(*CHAR) LEN(32) MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) /*( 環境の取得 )*/ RTVJOBA TYPE(&TYPE) DFTCCSID(&DFTCCSID) IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ') ENDDO /* バッチ */ ELSE CMD(DO) /* 対話式 */ CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ') ENDDO /* 対話式 */ /*( パラメータの検査 )*/ CHGJOB CCSID(5035) /*( プログラムの実行 )*/ NXTHAT: IF COND((&OUTPUT *EQ '*') *OR (&OUTPUT *EQ + '*FAX')) THEN(DO) OVRPRTF FILE(QPRINT) HOLD(*YES) USRDTA(' 注文書 ') + SECURE(*YES) OVRSCOPE(*JOB) ENDDO ELSE CMD(IF COND(&OUTPUT *EQ '*RONT') THEN(DO)) + /* 印刷 */ OVRPRTF FILE(QPRINT) USRDTA(' 注文書 ') + SECURE(*YES) OVRSCOPE(*JOB) ENDDO /* 印刷 */ OVRDBF FILE(HATTUL1) TOFILE(QTRFIL/HATTUL1) + SECURE(*YES) OVRSCOPE(*JOB) CALL PGM(QTROBJ/FAXSPL) PARM(&SIRFROM &SIREND + &DATEFROM &DATEEND &SRNMJ &LR) DLTOVR FILE(*ALL) LVL(*JOB) CHGJOB CCSID(&DFTCCSID) IF COND(&OUTPUT *EQ '*FAX') THEN(DO) /* *FAX */ /*( スプールの FAX 番号を検索 )*/ SPOOLWTR/RTVSPLF SPLF(QPRINT) JOB(*) SPLNO(*LAST) + POSITION(4 1 15) RTNVAR(&RTNVAR) CHGVAR VAR(&FAXNO) VALUE(%SST(&RTNVAR 1 15)) /*( CVTSPLF で FAX 送信する )*/ CVTSPLF SPLF(QPRINT) JOB(*) SPLNO(*LAST) + OUTPUT(*PDF) OPTION(*FAX) + RECIPIENT((&FAXNO &SRNMJ)) + FROM(0669938746) FAX_SUBJ(' 注文書 ') + FAXFROM(' 株式会社オフィスクアトロ ') + COVERPAGE(*NO) ENDDO /* *FAX */ ELSE CMD(IF COND(&OUTPUT *EQ '*') THEN(DO)) /* + 表示 */ DSPSPLF FILE(QPRINT) JOB(*) SPLNBR(*LAST) DLTSPLF FILE(QPRINT) SPLNBR(*LAST) ENDDO /* 表示 */ ELSE CMD(DO) /* 印刷 */ ENDDO /* 印刷 */ /*-----------------------------------------------------*/ /* LR- 終了でなければ次の仕入先の処理へ戻る */ IF COND(&LR *NE '*') THEN(DO) GOTO NXTHAT ENDDO /*-----------------------------------------------------*/ IF COND(&OUTPUT *EQ '*FAX') THEN(DO) /* *FAX */ SNDPGMMSG MSG(' 注文書を FAX しました。 ') MSGTYPE(*DIAG) ENDDO /* *FAX */ ELSE CMD(IF COND(&OUTPUT *EQ '*') THEN(DO)) /* + 表示 */ ENDDO /* 表示 */ ELSE CMD(DO) /* 印刷 */ SNDPGMMSG MSG(' 注文書を印刷しました。 ') MSGTYPE(*DIAG) ENDDO /* 印刷 */ RETURN APIERR: CHGVAR VAR(&MSGID) VALUE(%SST(&APIERR 9 7)) CHGVAR VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100)) CHGVAR VAR(&MSGF) VALUE('QCPFMSG ') CHGVAR VAR(&MSGFLIB) VALUE('QSYS ') GOTO SNDMSG ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) + MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + SNDMSGFLIB(&MSGFLIB) SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO) SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE) MONMSG MSGID(CPF2400) EXEC(RETURN) ENDDO ELSE CMD(DO) SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) + MSGTYPE(&MSGTYPE) MONMSG MSGID(CPF2400) EXEC(RETURN) ENDDO ENDPGM