従来の5577プリンターで複写式の伝票であった印刷を
SpoolライターVer5.0のオーバーレイ印刷に移行することができる。

つまりこれまで
・売上伝票
・納品書
・受領書
・出荷指図書
の4部構成で複写式用紙で印刷していた出力を
これまでと同じように1回の印刷実行だけでPDFを4部作成する方法である。
・印刷出力は1回だけ
・PDFにオーバーレイで重ね合せにする書式をJPG画像で4種類用意しておく。
・印刷プログラムには一切変更したり手を加える必要はない。
・印刷ファイル(PRTF)のDDSソースも変更しないしDDSも必要ない。
[コマンド MLTOVL ]
ソースはこちらから
0001.00 CMD PROMPT(' 複写式伝票をオーバーレイ印刷 ')
[コンパイル]
CRTCMD QTROBJ/MLTOVL SRCFILE(QTRSRC/QCMDSRC) AUT(*ALL)
[実行画面]
MLTOVL オーバーレイ印刷 (DDS) 日付 2023/03/05 これは複写式伝票を 1 回の実行だけで 4 枚の PDF に変換するサンプルです。 ・売上伝票 ・納品書 ・受領書 ・出荷指図書 の 4 部の PDF を 1 回の実行だけで 出力することができます。 実行キーを押して印刷を開始してください。 F3= 終了
[DSPF : MLTOVLFM ]
ソースはこちらから
0001.00 A*%%TS SD 20230228 114933 QTR REL-V6R1M0 5761-WDS
0002.00 A*%%EC
0003.00 A DSPSIZ(24 80 *DS3)
0004.00 A MSGLOC(24)
0005.00 A PRINT
0006.00 A R DSPHEAD
0007.00 A*%%TS SD 20230228 114933 QTR REL-V6R1M0 5761-WDS
0008.00 A TEXT(' 初期画面 ')
0009.00 A CF03(03 ' 終了 ')
0010.00 A ROLLUP(07)
0011.00 A ROLLDOWN(08)
0012.00 A BLINK
0013.00 A INZRCD
0014.00 A 1 2'MLTOVL'
0015.00 A 1 22' オーバーレイ印刷 (DDS)'
0016.00 A DSPATR(HI)
0017.00 A 1 63' 日付 '
0018.00 A DATE 8Y 0O 1 70EDTCDE(W)
0019.00 A 6 13' これは複写式伝票を 1 回の実行だ +
0020.00 A けで '
0021.00 A 7 13'4 枚の PDF に変換するサンプルです +
0022.00 A 。 '
0023.00 A 9 17' ・売上伝票 '
0024.00 A 10 17' ・納品書 '
0025.00 A 11 17' ・受領書 '
0026.00 A 12 14' ・出荷指図書 -
0027.00 A '
0028.00 A DSPATR(UL)
0029.00 A 14 13' の 4 部の PDF を 1 回の実行だけ +
0030.00 A で '
0031.00 A 15 13' 出力することができます。 '
0032.00 A 18 15' 実行キーを押して印刷を開始してく +
0033.00 A ださい。 '
0034.00 A DSPATR(HI)
0035.00 A 23 2'F3= 終了 '
0036.00 A COLOR(BLU)
0037.00 A 8 14' -
0038.00 A '
0039.00 A DSPATR(UL)
[CLP: MLTOVLCL ]
ソースはこちらから
0001.00 PGM
0002.00 /*-------------------------------------------------------------------*/
0003.00 /* MLTOVLCL : 複写式伝票をオーバーレイ印刷 */
0004.00 /* */
0005.00 /* 2023/02/28 作成 */
0006.00 /*-------------------------------------------------------------------*/
0007.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132)
0008.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
0009.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
0010.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
0011.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
0012.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1)
0013.00 DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)
0014.00 DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +
0015.00 VALUE('*ESCAPE ')
0016.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) +
0017.00 VALUE(X'000074') /* 2 進数 */
0018.00 DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) +
0019.00 VALUE(X'00000000')
0020.00 DCLF FILE(QTROBJ/MLTOVLFM)
0021.00 DCL VAR(&DATE6) TYPE(*CHAR) LEN(6)
0022.00 DCL VAR(&DATE8) TYPE(*CHAR) LEN(8)
0023.00 /*( PDF 出力に必要な変数 )*/
0024.00 DCL VAR(&USER) TYPE(*CHAR) LEN(10) +
0025.00 VALUE('QTMHHTTP ')
0026.00 DCL VAR(&JOB) TYPE(*CHAR) LEN(10) +
0027.00 VALUE('AURORA_EGN')
0028.00 DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6)
0029.00 DCL VAR(&PDF_FILE) TYPE(*CHAR) LEN(48)
0030.00 DCL VAR(&PCCMD) TYPE(*CHAR) LEN(123)
0031.00 DCL VAR(&IPADR) TYPE(*CHAR) LEN(15)
0032.00 /*( IFS の削除に必要な変数 )*/
0033.00 DCL VAR(&PDF_LINK) TYPE(*CHAR) LEN(128)
0034.00 DCL VAR(&DATEC) TYPE(*CHAR) LEN(6)
0035.00 DCL VAR(&TIME) TYPE(*CHAR) LEN(6)
0036.00 DCL VAR(&HH) TYPE(*DEC) LEN(2 0)
0037.00 DCL VAR(&HHC) TYPE(*CHAR) LEN(2)
0038.00 DCL VAR(&MM) TYPE(*DEC) LEN(2 0)
0039.00 DCL VAR(&MMC) TYPE(*CHAR) LEN(2)
0040.00 DCL VAR(&SS) TYPE(*DEC) LEN(2 0)
0041.00 DCL VAR(&SSC) TYPE(*CHAR) LEN(2)
0042.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
0043.00
0044.00 /*( 環境の取得 )*/
0045.00 RTVSYSVAL SYSVAL(QDATE) RTNVAR(&DATEC)
0046.00 RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME)
0047.00 RTVJOBA TYPE(&TYPE) DATE(&DATE6)
0048.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */
0049.00 CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ')
0050.00 ENDDO /* バッチ */
0051.00 ELSE CMD(DO) /* 対話式 */
0052.00 CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ')
0053.00 ENDDO /* 対話式 */
0054.00 CHGVAR VAR(&DATE8) VALUE('20' *CAT &DATE6)
0055.00 CHGVAR VAR(&DATE) VALUE(&DATE8)
0056.00
0057.00 /*( プロンプト表示 )*/
0058.00 SNDRCVF RCDFMT(DSPHEAD)
0059.00 IF COND(&IN03 *EQ '1') THEN(RETURN)
0060.00
0061.00 /*( 実行 )*/
0062.00 OVRPRTF FILE(URIDEN) HOLD(*YES) SECURE(*YES) +
0063.00 OVRSCOPE(*JOB)
0064.00 CALL PGM(QTROBJ/MLTOVL)
0065.00 DLTOVR FILE(URIDEN) LVL(*JOB)
0066.00 /*-------------------------------------------------------------------*/
0067.00 /* (1) 売上伝票 */
0068.00 /*-------------------------------------------------------------------*/
0069.00 CHGVAR VAR(&PDF_FILE) +
0070.00 VALUE('URIAGE.PDF')
0071.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0072.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0073.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0074.00 TODIR('/AS400-NET.USR/TEMP') +
0075.00 FRONTOVL(('/SPOOLWTR/URIAGE.JPG'))
0076.00 CALLSUBR SUBR(DSPLY)
0077.00 /* GOTO DLTSPL */
0078.00 /*-------------------------------------------------------------------*/
0079.00 /* (2) 納品書 */
0080.00 /*-------------------------------------------------------------------*/
0081.00 CHGVAR VAR(&PDF_FILE) +
0082.00 VALUE('NOHIN.PDF')
0083.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0084.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0085.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0086.00 TODIR('/AS400-NET.USR/TEMP') +
0087.00 FRONTOVL(('/SPOOLWTR/NOHIN.JPG'))
0088.00 CALLSUBR SUBR(DSPLY)
0089.00 /*-------------------------------------------------------------------*/
0090.00 /* (3) 受領書 */
0091.00 /*-------------------------------------------------------------------*/
0092.00 CHGVAR VAR(&PDF_FILE) +
0093.00 VALUE('JURYO.PDF')
0094.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0095.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0096.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0097.00 TODIR('/AS400-NET.USR/TEMP') +
0098.00 FRONTOVL(('/SPOOLWTR/JURYO.JPG'))
0099.00 CALLSUBR SUBR(DSPLY)
0100.00 /*-------------------------------------------------------------------*/
0101.00 /* (4) 出荷指示 */
0102.00 /*-------------------------------------------------------------------*/
0103.00 SPOOLWTR/RMVSPLCHR SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0104.00 STRING((26 105 26 113) (28 105 28 113) +
0105.00 (30 105 30 113) (54 105 54 113) (56 105 +
0106.00 56 113) (57 105 57 113))
0107.00 CHGVAR VAR(&PDF_FILE) +
0108.00 VALUE('SHUKA.PDF')
0109.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0110.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0111.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0112.00 TODIR('/AS400-NET.USR/TEMP') +
0113.00 FRONTOVL(('/SPOOLWTR/SHUKA.JPG'))
0114.00 CALLSUBR SUBR(DSPLY)
0115.00 /*-------------------------------------------------------------------*/
0116.00 /* 処理したスプールを削除 */
0117.00 /*-------------------------------------------------------------------*/
0118.00 DLTSPL: DLTSPLF FILE(URIDEN) JOB(*) SPLNBR(*LAST)
0119.00 CHGVAR VAR(&MSG) +
0120.00 VALUE(' 売上伝票を発行しました。 ')
0121.00 GOTO SNDMSG
0122.00 RETURN
0123.00
0124.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +
0125.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
0126.00 MSGFLIB(&MSGFLIB)
0127.00 SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO)
0128.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +
0129.00 TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE)
0130.00 ENDDO
0131.00 ELSE CMD(DO)
0132.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
0133.00 MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) +
0134.00 MSGTYPE(&MSGTYPE)
0135.00 ENDDO
0136.00 /******************************/
0137.00 SUBR SUBR(DSPLY)
0138.00 /******************************/
0139.00 /*( IFS に保存された PDF を表示する )*/
0140.00 RTVDTAARA DTAARA(ASNET.USR/HTTPSVR (1 15)) RTNVAR(&IPADR)
0141.00 CHGVAR VAR(&PCCMD) VALUE('START HTTP://' *CAT +
0142.00 &IPADR *TCAT '/AS400-NET.USR/TEMP/' *CAT &PDF_FILE)
0143.00 CHGVAR VAR(&PCCMD) VALUE(&PCCMD *TCAT ' *PRINT')
0144.00 STRPCO PCTA(*NO)
0145.00 MONMSG MSGID(IWS4010)
0146.00 STRPCCMD PCCMD(&PCCMD) PAUSE(*NO)
0147.00 CALLSUBR SUBR(DLT_IFS)
0148.00 ENDSUBR
0149.00 /******************************/
0150.00 SUBR SUBR(DLT_IFS)
0151.00 /******************************/
0152.00 /*( 10 分後に一時ファイルを消す )*/
0153.00 RTVSYSVAL SYSVAL(QDATE) RTNVAR(&DATEC)
0154.00 RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME)
0155.00 CHGVAR VAR(&HH) VALUE(%SST(&TIME 1 2))
0156.00 CHGVAR VAR(&MM) VALUE(%SST(&TIME 3 2))
0157.00 CHGVAR VAR(&SS) VALUE(%SST(&TIME 5 2))
0158.00 CHGVAR VAR(&MM) VALUE(&MM + 10)
0159.00 IF COND(&MM >= 60) THEN(DO)
0160.00 CHGVAR VAR(&HH) VALUE(&HH + 1)
0161.00 CHGVAR VAR(&MM) VALUE(1)
0162.00 ENDDO
0163.00 CHGVAR VAR(&HHC) VALUE(&HH)
0164.00 CHGVAR VAR(&MMC) VALUE(&MM)
0165.00 CHGVAR VAR(&SSC) VALUE(&SS)
0166.00 CHGVAR VAR(&TIME) VALUE(&HHC *CAT &MMC *CAT &SSC)
0167.00 CHGVAR VAR(&PDF_LINK) +
0168.00 VALUE('AS400-NET.USR/TEMP/' *CAT +
0169.00 &PDF_FILE)
0170.00 SBMJOB CMD(RMVLNK OBJLNK(&PDF_LINK)) JOB(DLTIFS) +
0171.00 SCDDATE(&DATEC) SCDTIME(&TIME) MSGQ(*NONE)
0172.00 ENDSUBR
0173.00 ENDPGM
[コンパイル]
CRTCLPGM PGM(QTROBJ/MLTOVLCL) SRCFILE(QTRSRC/QCLSRC) OPTION(*SRCDBG) AUT(*ALL)

[解説]
印刷出力しているのは
0061.00 /*( 実行 )*/ 0062.00 OVRPRTF FILE(URIDEN) HOLD(*YES) SECURE(*YES) + 0063.00 OVRSCOPE(*JOB) 0064.00 CALL PGM(QTROBJ/MLTOVL) 0065.00 DLTOVR FILE(URIDEN) LVL(*JOB)
の部分の1回だけである。
続いて
0066.00 /*-------------------------------------------------------------------*/
0067.00 /* (1) 売上伝票 */
0068.00 /*-------------------------------------------------------------------*/
0069.00 CHGVAR VAR(&PDF_FILE) +
0070.00 VALUE('URIAGE.PDF')
0071.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0072.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0073.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0074.00 TODIR('/AS400-NET.USR/TEMP') +
0075.00 FRONTOVL(('/SPOOLWTR/URIAGE.JPG'))
0076.00 CALLSUBR SUBR(DSPLY)
0077.00 /* GOTO DLTSPL */
によって CVTSPLFコマンドで FRONTOVLキー・ワードにオーバーレイ書式:
/SPOOLWTR/URIAGE.JPG を指定している。
この JPGファイルは複合機で旧の専用用紙を読取らせた画像ファイルを
IFSにFTPで保存したものである。
同様に
0078.00 /*-------------------------------------------------------------------*/ 0079.00 /* (2) 納品書 */ 0080.00 /*-------------------------------------------------------------------*/
0089.00 /*-------------------------------------------------------------------*/ 0090.00 /* (3) 受領書 */ 0091.00 /*-------------------------------------------------------------------*/
も行うのであるが
0100.00 /*-------------------------------------------------------------------*/ 0101.00 /* (4) 出荷指示 */ 0102.00 /*-------------------------------------------------------------------*/ 0103.00 SPOOLWTR/RMVSPLCHR SPLF(URIDEN) JOB(*) SPLNO(*LAST) + 0104.00 STRING((26 105 26 113) (28 105 28 113) + 0105.00 (30 105 30 113) (54 105 54 113) (56 105 + 0106.00 56 113) (57 105 57 113))
の部分は少し異なっていて金額欄をRMVSPLCHRコマンドでブランクに削除している。
このように複写式印刷を移行するときに特定の文字列だけを複写しないようにすることも
SpoolライターVer5.0では可能である。

