SpoolライターVer5.0

55. スプールの FAX 番号で送信するサンプル

先に紹介したRTVSPLF(スプール・ファイルの検索)コマンドを
利用したFAX送信の例を紹介致します。

この例では仕入先(取引先)に対する注文書を
仕入先の範囲を指定して一括で注文書をFAX送信するサンプルを
示しています。
仕入先コードをひとつずつ指定する必要がない
高度な処理で実行されるようになっています。

例えば生産計画に対して所要量を展開して計算して
展開した部品の一覧をまとめて注文書を発行することができる。
このような所要量計算のときに仕入先コードをひとつずつ
入力指定することなどできません。
そこでこの例でもまとめて注文書を発行できるようにしています。
ただし注文書は仕入先毎として出力してFAXまたはメールで
送信しなければなりません。

今回の例ではすべてFAX送信であるが仕入先別にFAXであったり
メール送信と分かれて混在している場合でもこの方法で行えます。

[FAXSPL:コマンド]

                      スプールの FAX 番号で送信  (FAXSPL)        
                                                                 
 選択項目を入力して,実行キーを押してください。                  
                                                                 
 仕入先     から  . . . . .                  文字値         
         まで  . . . . .   9999           文字値         
 発注日 (YYMMDD)    から  . .                  数値           
     (YYMMDD)    まで  . .   99999999       数値           
 出力  . . . . . . . . . . . . . > *FAX          *, *PRINT, *FAX 
                                                                 

                                                                        終り
F3= 終了    F4=プロンプト   F5= 最新表示    F12= 取り消し                      
F13= この画面の使用法                    F24= キーの続き                    

[FAXSPL:コマンドのソース]

ソースはこちらから

0001.00              CMD        PROMPT(' スプールの FAX 番号で送信 ')       
0002.00              PARM       KWD(FROMSIR) TYPE(*CHAR) LEN(4) +           
0003.00                           PROMPT(' 仕入先     から ')          
0004.00              PARM       KWD(TOSIR) TYPE(*CHAR) LEN(4) +             
0005.00                           DFT(9999) PROMPT('          +     
0006.00                            まで ')                                  
0007.00              PARM       KWD(DATEFROM) TYPE(*DEC) LEN(8 0) +         
0008.00                           PROMPT(' 発注日 (YYMMDD)    から ')    
0009.00              PARM       KWD(DATEEND) TYPE(*DEC) LEN(8 0) +          
0010.00                           DFT(99999999) PROMPT('     +           
0011.00                             (YYMMDD)    まで ')                  
0012.00              PARM       KWD(OUTPUT) TYPE(*CHAR) LEN(6) RSTD(*YES) + 
0013.00                           DFT(*PRINT) VALUES(* *PRINT *FAX) +       
0014.00                           PROMPT(' 出力 ')


                             

[コンパイル]

CRTCMD CMD(QTROBJ/FAXSPL) PGM(QTROBJ/FAXSPLCL) SRCFILE(QTRSRC/QCMDSRC) AUT(*ALL)

[FAXSPLCL : CLPソース ]

ソースはこちらから

0001.00              PGM        PARM(&SIRFROM &SIREND &DATEFROM &DATEEND +      
0002.00                           &OUTPUT)                                      
0003.00 /*-------------------------------------------------------------------*/ 
0004.00 /*   FAXSPLCL   :   スプールの FAX 番号で送信                        */ 
0005.00 /*                                                                   */ 
0006.00 /*  [ 注 ] この例では処理をできるだけ CLP で行うようにした例を       */ 
0007.00 /*         示しています。                                            */ 
0008.00 /*                                                                   */ 
0009.00 /*   (1) 指定した仕入先コードの範囲で RPG: FAXSPL を実行します。     */ 
0010.00 /*   (2) RPG: FAXSPL はひとつの仕入先の注文書だけを出力して          */ 
0011.00 /*       出力した仕入先コードをパラメータに戻します (SIRFROM)        */ 
0012.00 /*   (3) 再び RPG:FAXSPL が呼び出されますが FAXSPL は                */ 
0013.00 /*       パラメータ SIRFROM の次の仕入先の注文データを探して         */ 
0014.00 /*       印刷します。                                                */ 
0015.00 /*   (4) 印刷が終わればまた SIRFROM に戻して繰返し印刷を行います。   */ 
0016.00 /*   (5) SIREND まで印刷するか EOF になれば終了します。              */ 
0017.00 /*                                                                   */ 
0018.00 /*   2021/02/28  作成                                                */ 
0019.00 /*-------------------------------------------------------------------*/ 
0020.00              DCL        VAR(&SIRFROM) TYPE(*CHAR) LEN(4)                
0021.00              DCL        VAR(&SIREND) TYPE(*CHAR) LEN(4)                 
0022.00              DCL        VAR(&NXTSIR) TYPE(*CHAR) LEN(4)                 
0023.00              DCL        VAR(&DATEFROM) TYPE(*DEC) LEN(8 0)              
0024.00              DCL        VAR(&DATEEND) TYPE(*DEC) LEN(8 0)      
0025.00              DCL        VAR(&OUTPUT) TYPE(*CHAR) LEN(6)        
0026.00              DCL        VAR(&MSG) TYPE(*CHAR) LEN(132)         
0027.00              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)         
0028.00              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)         
0029.00              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)      
0030.00              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(132)      
0031.00              DCL        VAR(&TYPE) TYPE(*CHAR) LEN(1)          
0032.00              DCL        VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)       
0033.00              DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +    
0034.00                           VALUE('*ESCAPE   ')                  
0035.00              DCL        VAR(&APIERR) TYPE(*CHAR) LEN(116) +    
0036.00                           VALUE(X'000074') /* 2 進数  */       
0037.00              DCL        VAR(&ERR) TYPE(*CHAR) LEN(1)           
0038.00              DCL        VAR(&NULL4) TYPE(*CHAR) LEN(4) +       
0039.00                           VALUE(X'00000000')                   
0040.00              DCL        VAR(&DFTCCSID) TYPE(*DEC) LEN(5 0)     
0041.00              DCL        VAR(&RTNVAR) TYPE(*CHAR) LEN(128)      
0042.00              DCL        VAR(&FAXNO) TYPE(*CHAR) LEN(15)        
0043.00              DCL        VAR(&LR) TYPE(*CHAR) LEN(1)            
0044.00              DCL        VAR(&SRNMJ) TYPE(*CHAR) LEN(32)        
0045.00              MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
0046.00                                                                
0047.00 /*( 環境の取得 )*/                                             
0048.00              RTVJOBA    TYPE(&TYPE) DFTCCSID(&DFTCCSID)                  
0049.00              IF         COND(&TYPE *EQ '0') THEN(DO) /*  バッチ  */      
0050.00              CHGVAR     VAR(&TOPGMQ) VALUE('*SYSOPR   ')                 
0051.00              ENDDO      /*  バッチ  */                                   
0052.00              ELSE       CMD(DO) /*  対話式  */                           
0053.00              CHGVAR     VAR(&TOPGMQ) VALUE('*TOPGMQ   ')                 
0054.00              ENDDO      /*  対話式  */                                   
0055.00                                                                          
0056.00 /*( パラメータの検査 )*/                                                 
0057.00              CHGJOB     CCSID(5035)                                      
0058.00                                                                          
0059.00 /*( プログラムの実行 )*/                                                 
0060.00 NXTHAT:                                                                  
0061.00              IF         COND((&OUTPUT *EQ '*') *OR (&OUTPUT *EQ +        
0062.00                           '*FAX')) THEN(DO)                              
0063.00              OVRPRTF    FILE(QPRINT) HOLD(*YES) USRDTA(' 注文書 ') +     
0064.00                           SECURE(*YES) OVRSCOPE(*JOB)                    
0065.00              ENDDO                                                       
0066.00              ELSE       CMD(IF COND(&OUTPUT *EQ '*RONT') THEN(DO)) +     
0067.00                           /*  印刷  */                                   
0068.00              OVRPRTF    FILE(QPRINT) USRDTA(' 注文書 ') +                
0069.00                           SECURE(*YES) OVRSCOPE(*JOB)                    
0070.00              ENDDO      /*  印刷  */                                     
0071.00              OVRDBF     FILE(HATTUL1) TOFILE(QTRFIL/HATTUL1) +           
0072.00                           SECURE(*YES) OVRSCOPE(*JOB)               
0073.00              CALL       PGM(QTROBJ/FAXSPL) PARM(&SIRFROM &SIREND +  
0074.00                           &DATEFROM &DATEEND &SRNMJ &LR)            
0075.00              DLTOVR     FILE(*ALL) LVL(*JOB)                        
0076.00              CHGJOB     CCSID(&DFTCCSID)                            
0077.00              IF         COND(&OUTPUT *EQ '*FAX') THEN(DO) /* *FAX */
0078.00 /*( スプールの FAX 番号を検索 )*/                                   
0079.00              SPOOLWTR/RTVSPLF SPLF(QPRINT) JOB(*) SPLNO(*LAST) +    
0080.00                           POSITION(4 1 15) RTNVAR(&RTNVAR)          
0081.00              CHGVAR     VAR(&FAXNO) VALUE(%SST(&RTNVAR 1 15))       
0082.00 /*( CVTSPLF で FAX 送信する )*/                                     
0083.00              CVTSPLF    SPLF(QPRINT) JOB(*) SPLNO(*LAST) +          
0084.00                           OUTPUT(*PDF) OPTION(*FAX) +               
0085.00                           RECIPIENT((&FAXNO &SRNMJ)) +              
0086.00                           FROM(0669938746) FAX_SUBJ(' 注文書 ') +   
0087.00                           FAXFROM(' 株式会社オフィスクアトロ ') +   
0088.00                           COVERPAGE(*NO)                            
0089.00              ENDDO      /* *FAX */                                  
0090.00              ELSE       CMD(IF COND(&OUTPUT *EQ '*') THEN(DO)) /* + 
0091.00                            表示  */                                 
0092.00              DSPSPLF    FILE(QPRINT) JOB(*) SPLNBR(*LAST)           
0093.00              DLTSPLF    FILE(QPRINT) SPLNBR(*LAST)                  
0094.00              ENDDO      /*  表示  */                                
0095.00              ELSE       CMD(DO) /*  印刷  */                        
0096.00              ENDDO      /*  印刷  */                                    
0097.00  /*-----------------------------------------------------*/              
0098.00  /*  LR- 終了でなければ次の仕入先の処理へ戻る           */              
0099.00              IF         COND(&LR *NE '*') THEN(DO)                      
0100.00              GOTO       NXTHAT                                          
0101.00              ENDDO                                                      
0102.00  /*-----------------------------------------------------*/              
0103.00              IF         COND(&OUTPUT *EQ '*FAX') THEN(DO) /* *FAX */    
0104.00              SNDPGMMSG  MSG(' 注文書を FAX しました。 ') MSGTYPE(*DIAG) 
0105.00              ENDDO      /* *FAX */                                      
0106.00              ELSE       CMD(IF COND(&OUTPUT *EQ '*') THEN(DO)) /* +     
0107.00                            表示  */                                     
0108.00              ENDDO      /*  表示  */                                    
0109.00              ELSE       CMD(DO) /*  印刷  */                            
0110.00              SNDPGMMSG  MSG(' 注文書を印刷しました。  ') MSGTYPE(*DIAG) 
0111.00              ENDDO      /*  印刷  */                                    
0112.00              RETURN                                                     
0113.00                                                                         
0114.00  APIERR:                                                                
0115.00              CHGVAR     VAR(&MSGID) VALUE(%SST(&APIERR 9 7))            
0116.00              CHGVAR     VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100))        
0117.00              CHGVAR     VAR(&MSGF) VALUE('QCPFMSG   ')                  
0118.00              CHGVAR     VAR(&MSGFLIB) VALUE('QSYS      ')               
0119.00              GOTO       SNDMSG                                          
0120.00                                                                      
0121.00  ERROR:      RCVMSG     MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +          
0122.00                           MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
0123.00                           SNDMSGFLIB(&MSGFLIB)                       
0124.00  SNDMSG:     IF         COND(&MSGID *EQ ' ') THEN(DO)                
0125.00              SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +  
0126.00                           TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE)          
0127.00              MONMSG     MSGID(CPF2400) EXEC(RETURN)                  
0128.00              ENDDO                                                   
0129.00              ELSE       CMD(DO)                                      
0130.00              SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +         
0131.00                           MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) +          
0132.00                           MSGTYPE(&MSGTYPE)                          
0133.00              MONMSG     MSGID(CPF2400) EXEC(RETURN)                  
0134.00              ENDDO                                                   
0135.00              ENDPGM  


                                                   

[コンパイル]

CRTCLPGM QTROBJ/FAXSPLCL SRCFILE(QTRSRC/QCLSRC) AUT(*ALL)

[解説]

0071.00              OVRDBF     FILE(HATTUL1) TOFILE(QTRFIL/HATTUL1) +           
0072.00                           SECURE(*YES) OVRSCOPE(*JOB)               
0073.00              CALL       PGM(QTROBJ/FAXSPL) PARM(&SIRFROM &SIREND +  
0074.00                           &DATEFROM &DATEEND &SRNMJ &LR)            
0075.00              DLTOVR     FILE(*ALL) LVL(*JOB) 

で注文書を印刷出力すると

0078.00 /*( スプールの FAX 番号を検索 )*/                                   
0079.00              SPOOLWTR/RTVSPLF SPLF(QPRINT) JOB(*) SPLNO(*LAST) +    
0080.00                           POSITION(4 1 15) RTNVAR(&RTNVAR)          
0081.00              CHGVAR     VAR(&FAXNO) VALUE(%SST(&RTNVAR 1 15))

によって 4行目1桁目から15バイトのFAX番号をRTVSPLFコマンドによって取得します。
次に CVTSPLFコマンドによって

0082.00 /*( CVTSPLF で FAX 送信する )*/                                     
0083.00              CVTSPLF    SPLF(QPRINT) JOB(*) SPLNO(*LAST) +          
0084.00                           OUTPUT(*PDF) OPTION(*FAX) +               
0085.00                           RECIPIENT((&FAXNO &SRNMJ)) +              
0086.00                           FROM(0669938746) FAX_SUBJ(' 注文書 ') +   
0087.00                           FAXFROM(' 株式会社オフィスクアトロ ') +   
0088.00                           COVERPAGE(*NO)

でスプールをFAX送信します。

0097.00  /*-----------------------------------------------------*/              
0098.00  /*  LR- 終了でなければ次の仕入先の処理へ戻る           */              
0099.00              IF         COND(&LR *NE '*') THEN(DO)                      
0100.00              GOTO       NXTHAT                                          
0101.00              ENDDO                                                      
0102.00  /*-----------------------------------------------------*/

LR終了でなければ次の仕入先の注文データを処理します。

{ RPG : SPLFAX サンプル・ソース ]

ソースはこちらから

0001.00 H DFTNAME(FAXSPL) DATEDIT(*YMD/) BNDDIR('QC2LE')                         
0002.00 F********** スプールの FAX 番号で送信 *********************************  
0003.00 FHATTUL1   IF   E           K DISK                                       
0004.00 FSIREMT    IF   E           K DISK                                       
0005.00 FBUHINM    IF   E           K DISK                                       
0006.00 FQPRINT    O    F  132        PRINTER OFLIND(*INOF)                      
0007.00 F                                     FORMLEN(66)                        
0008.00 F                                     FORMOFL(62)                        
0009.00 F**********************************************************************  
0010.00                                                                          
0011.00  * CRTBNDRPG  PGM(QTROBJ/FAXSPL)  SRCFILE(QTRSRC/QRPGLESRC)              
0012.00  * DFTACTGRP(*NO) ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)                
0013.00                                                                          
0014.00  *-------------------------------------------------------------------*   
0015.00  *  2020/12/23 : 作成                                                    
0016.00  *-------------------------------------------------------------------*   
0017.00  *( 作業変数 )                                                           
0018.00 D AR              S              1A   DIM(256)                           
0019.00 D N               S              4S 0                                    
0020.00 D TRUE            S              1A   DIM(256)                           
0021.00 D TRUE#           S              4B 0 INZ(0)                             
0022.00 D FALSE#          S              4B 0 INZ(-1)                            
0023.00 D QUOT            C                   CONST(X'7D')                       
0024.00 D OE              C                   CONST(X'0E')                                    
0025.00 D OF              C                   CONST(X'0F')                                    
0026.00 D NULL            C                   CONST(X'00')                                    
0027.00                                                                                       
0028.00 D HDR             S             32    DIM(1) CTDATA PERRCD(1)               見出し    
0029.00 D LIN             S              1    DIM(132)                                        
0030.00                                                                                       
0031.00                                                                                       
0032.00 C*-------------------------------------------------------------------------+          
0033.00 C     *ENTRY        PLIST                                                  |          
0034.00 C                   PARM                    FROMSIR           4            |          
0035.00 C                   PARM                    TOSIR             4            |          
0036.00 C                   PARM                    DATEFROM          8 0          |          
0037.00 C                   PARM                    DATEEND           8 0          |          
0038.00 C                   PARM                    SRNMJ_           32            |          
0039.00 C                   PARM                    LR                1            |          
0040.00 C*-------------------------------------------------------------------------+          
0041.00 C*----------------------------------------------------+                               
0042.00 C     SETKEY        KLIST                                                             
0043.00 C                   KFLD                    HTSRCD                                    
0044.00 C                   KFLD                    HTDATE                                    
0045.00 C                   KFLD                    HTHTNO                                    
0046.00 C                   KFLD                    HTGYO                                     
0047.00 C*----------------------------------------------------+                               
0048.00 C                   MOVEA     *ALL'-'       LIN                                           
0049.00 C                   MOVEL     FROMSIR       HTSRCD                                        
0050.00 C                   MOVEL     DATEFROM      HTDATE                                        
0051.00 C                   MOVE      *LOVAL        HTHTNO                                        
0052.00 C                   MOVE      *LOVAL        HTGYO                                         
0053.00 C     SETKEY        SETGT     HATTUL1                                                     
0054.00 C                   DO        *HIVAL                                       DO-*HIVAL      
0055.00 C                   SETOFF                                       50                       
0056.00 C                   READ      HATTUL1                                50                   
0057.00 C   50              MOVE      '*'           LR                                            
0058.00 C   50              LEAVE                                                                 
0059.00 C     SETKEY        SETLL     HATTUL1                                                     
0060.00 C*----------------------------------------------------+                                   
0061.00 C     EQLKEY        KLIST                                                                 
0062.00 C                   KFLD                    HTSRCD                                        
0063.00 C                   KFLD                    HTDATE                                        
0064.00 C*----------------------------------------------------+                                   
0065.00  *( 次の仕入先を READ )                                                                   
0066.00 C                   DO        *HIVAL                                         DO-*HIVAL-EQL
0067.00 C                   SETOFF                                       50                       
0068.00 C     EQLKEY        READE     HATTUL1                                50                   
0069.00 C   50              MOVE      '*'           LR                                            
0070.00 C   50              LEAVE                                                                 
0071.00 C     HTSRCD        IFGT      TOSIR                                                       
0072.00 C                   MOVE      '*'           LR                                             
0073.00 C                   LEAVE                                                                  
0074.00 C                   ENDIF                                                                  
0075.00 C                   SETOFF                                       99                        
0076.00 C     HTSRCD        CHAIN     SIREMT                             99                        
0077.00 C                   MOVEL(P)  SRNMJ         SRNMJ_                                         
0078.00 C                   SETOFF                                       99                        
0079.00 C     HTBHCD        CHAIN     BUHINM                             99                        
0080.00 C*( 明細印刷 )                                                                             
0081.00 C*-------------------------------------------------------------------------+               
0082.00 C                   SETON                                        42        |               
0083.00 C                   EXSR      OUTPUT                                       |               
0084.00 C*-------------------------------------------------------------------------+               
0085.00 C                   ADD       1             KENSU             7 0           件数           
0086.00 C                   ENDDO                                                    DO-*HIVAL-EQL 
0087.00 C                   MOVEL     HTSRCD        FROMSIR                                        
0088.00  *( 連続 READ はしないで CLP に戻す )                                                      
0089.00 C                   LEAVE                                                                  
0090.00  *                                                                                         
0091.00 C                   ENDDO                                                  DO-*HIVAL       
0092.00 C                   SETON                                        LR                        
0093.00 C                   RETURN                                                                 
0094.00 C******************************************************                                    
0095.00 C     OUTPUT        BEGSR                                                                  
0096.00 C******************************************************                                    
0097.00 C  N40              SETON                                        4041                      
0098.00 C                   EXCEPT                                                                 
0099.00 C   OF              SETOFF                                       40OF                      
0100.00 C                   SETOFF                                       414243                    
0101.00 C                   SETOFF                                       444546                    
0102.00 C                   SETOFF                                       474849                    
0103.00 C                   ENDSR                                                                  
0104.00 OQPRINT    E    41                     1 04                                                
0105.00 O                       SRFAX               15                             FAX 番号埋め込み
0106.00 O          E    41                     2                                                   
0107.00 O                       UDATE         Y      8                                             
0108.00 O                                           14 ' 作成 '                                    
0109.00 O                       HDR(1)              82                                             
0110.00 O                                          128 'PAGE.'                                     
0111.00 O                       PAGE          Z    131                                             
0112.00 O          E    41                     1                                                   
0113.00 O                       HTSRCD               4                                             
0114.00 O                       SRNMJ               38                                             
0115.00 O                                           42 ' 様 '                                      
0116.00 O          E    41                     1                                                   
0117.00 O                       LIN                132                                             
0118.00 O          E    41                     1                                                   
0119.00 O                                            8 ' コード '                                  
0120.00 O                                           20 ' 品 名 ' 
0121.00 O                                           42 ' 単価 '   
0122.00 O                                           60 ' 発注数 ' 
0123.00 O                                           80 ' 金額 '   
0124.00 O          E    41                     1                  
0125.00 O                       LIN                132            
0126.00 O          E    42                     2                  
0127.00 O                       HTBHCD              12            
0128.00 O                       BHNAME              33            
0129.00 O                       HTTANK        J     44            
0130.00 O                       HTSUR         J     60            
0131.00 O                       HTKING        J     80            
0132.00 **  HDR
0133.00  注文書


   

[コンパイル]

CRTBNDRPG QTROBJ FAXSPL SRCFILE(QTRSRC/QRPGLESRC) DFTACTGRP(*NO) ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)

[解説]

このRPG: FAXSPLはCLPによって複数回LOOPによって呼び出される場合があります。
ただし一回の呼び出しのときに処理するのはひとつの仕入先だけです。
これは出力されるスプール毎にFAXが必要なのでひとつのスプールに
異なる仕入先の注文書が混在してはならないからです。
  そのためひとつの仕入先の出力が終わればこのプログラムもその都度終了して
CLPに戻ります。
CLPにはどの仕入先まで処理したかを伝えるためにSIRFROMに処理した仕入先のコードを
入れてCLPに戻します。
次回の処理ではSIRFROMより大きな仕入先コードがSETGTによって選択されることに
注意してください。

[注]

スプールにFAX/メールの識別を入れておけば仕入先毎に次の処理を変えて
メール送信とすることも可能です。