ibmi-brunch-learn

Announcement

Collapse
No announcement yet.

CL program

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • CL program

    Hi,

    How can we modify below CL program in such a way that it should run for all the possible values of BRNOs and we want to keep CTCD and GMAB to have static values (2 and 4 characters fixed values) in it and program should pickup system's date and should run everyday for previous day's date at some fixed time.

    Thanks
    1. DCL VAR (&WSCCR1 &WSCCR2 & CTCD &GMAB &BRNO +
    2. &REPORT &FRMTME &TOTME &W1DATE)
    3. DCL VAR(&WSCCR1) TYPE(*CHAR) LEN(512)
    4. DCL VAR(&WSCCR2) TYPE(*CHAR) LEN(2048)
    5. DCL VAR(&CTCD) TYPE(*CHAR) LEN(2)
    6. DCL VAR(&GMAB) TYPE(*CHAR) LEN(4)
    7. DCL VAR(&BRNO) TYPE(*CHAR) LEN(3)
    8. DCL VAR(&REPORT) TYPE(*CHAR) LEN(1)
    9. DCL VAR(&REPOPT) TYPE(*CHAR) LEN(1)
    10. DCL VAR(&FRMTME) TYPE(*CHAR) LEN(6)
    11. DCL VAR(&TOTME) TYPE(*CHAR) LEN(6)
    12. DCL VAR(&SELT1) TYPE(*CHAR) LEN(175)
    13. DCL VAR(&WSPVCV) TYPE(*CHAR) LEN(10)
    14. DCL VAR(&WSPVPG) TYPE (*CHAR) LEN(10)
    15. DCL VAR(&WSNXCV) TYPE(*CHAR) LEN(10)
    16. DCL VAR(&WSNXFT) TYPE(*CHAR) LEN(5)
    17. DCL VAR(&WSNXPG) TYPE(*CHAR) LEN(10)
    18. DCL VAR(&W1CV) TYPE(*CHAR) LEN(10)
    19. DCL VAR(&W1FT) TYPE(*CHAR) LEN(5)
    20. DCL VAR(&W1PG) TYPE(*CHAR) LEN(10)
    21. DCL VAR(&JOB) TYPE(*CHAR) LEN(10)
    22. DCL VAR(&BLANK) TYPE(*CHAR) LEN(1) VALUE (' ')
    23. DCL VAR(&TDDT) TYPE(*CHAR) LEN(8)
    24. DCL VAR(&W1DATE1) TYPE(*CHAR) LEN(6)
    25. DCL VAR (&W1DAATE2) TYPE(*CHAR) LEN(6)
    26. DCL VAR(&W1DATE3) TYPE(*CHAR) LEN(8)
    27. DCL VAR(&WADATE4) TYPE(*CHAR) LEN(8)
    28. DCL VAR(&DATFMT) TYPE(*CHAR) LEN(3)
    29. DCL VAR (&W1YY) TYPE(*DEC) LEN(4 0) /* Year YYYY*/
    30. DCL VAR (&W1YYC) TYPE(*CHAR) LEN(4) /*Char Year YYYY*/
    31. DCL VAR(&LIB) TYPE(*CHAR) LEN(5)
    32. DCL VAR(&LIB1) TYPE(*CHAR) LEN(8)
    33. DCL VAR(&QRY) TYPE (*CHAR) LEN(350)
    34. DCL VAR(&P0QRY1) TYPE(*CHAR) LEN(2) VALUE('Q1')
    35. DCL VAR(&P0QRY2) TYPE (*CHAR) LEN(2) VALUE('Q2')
    36. DCL VAR(&P0QRY3) TYPE(*CHAR) LEN(2) VALUE('Q3')
    37. RTVJOBA JOB(&JOB)
    38. CHGVAR VAR(&WSNXCV) VALUE(&WSCCR1 1 10))
    39. CHGVAR VAR(&WSNXFT) VALUE(&WSCCR1 11 5)
    40. CHGVAR(&WSNXPG) VALUE(%SST(&WSCCR1 41 10)
    41. CHGVAR VAR(&LIB) VALUE(QTEMP)
    42. RTVDTAARA DTAARA(HSSDTAAR002 (1 8) ) RTNVAR(&DTDT)
    43. RTVDTAARA DTAARA(HSSDTAR045 (1 8) RTNVAR(&LIB1)
    44. RTVSYSVAL SYSVAL(QDAT) RTNVAR(&W1DATE1)
    45. RTVSYSVAL SYSVAL(QDATFMT) RTNVAR(&DATFMT)
    46. IF COND(&DATFMT *EQ 'YMD') THEN (DO)
    47. CHGVAR VAR(&W1DATE2) VALUE(%SST(&W1DATE1 1 6)
    48. ENDDO
    49. IF COND(&DATFMT *EQ 'MDY' ) THEN (DO)
    50. CHGVAR VAR(&W1DATE2) VALUE(%SST(&W1DATE1 5 2) *TCAT +
    51. %SST(&W1DATE1 1 4))
    52. ENDDO
    53. IF COND(&DATFMT *EQ 'DMY') THEN (DO)
    54. CHGVAR VAR(&W1DATE2) VALUE(%SST(&W1DATE1 5 2) *TCAT +
    55. %SST(&W1DATE1 3 2) *TCAT %SST(&W1DATE1 1 2))
    56. ENDDO
    57. /*Format the system date from YYMMDD to YYYYMMDD */
    58. IF COND(%SST(&W1DATE2 3 2) *LE %SST(&TDDT 5 +
    59. 2)) THEN (DO)
    60. CHGVAR VAR(&W1DATE3) VALUE (%SST (&TDDT 1 2) *TCAT +
    61. %SST(&W1DATE2 1 6)
    62. ENDDO
    63. /* Determine selection criteria */
    64. IF COND (&REPOPT = 'F' ) THEN (DO)
    65. IF COND (&BRNO *NE ' ') THEN (CHGVAR +
    66. VAR(&SELT1) VALUE('L@CTCD *EQ " ' || &CTCD +
    67. || ' " *AND L@GMAB *EQ " ' || &GMAB || ' " +
    68. *AND L@BRNO *EQ ' || &BLANK || ' " '))
    69. ELSE CMD(CHGVAR VAR(&SELT1) VALUE ('L@CTCD *EQ " ' +
    70. || &CTCD || ' " *AND L@GMAB *EQ " '|| &BLANK || +
    71. &GMAB || ' " *AND L@ACKG *EQ " '|| &BLANK || +
    72. ' " '))
    73. ENDDO
    74. ELSE CMD(DO)
    75. IF COND(&BRNO *NE ' ') THEN(CHGVAR +
    76. VAR(&SELT1) VALUE('L@CTCD *EQ " ' || &CTCD +
    77. || ' " *AND L@GMAB *EQ " ' || &GMAB || ' " +
    78. *AND L@BRNO *EQ ' || &BRNO || ' *AND +
    79. L@ACKG *EQ " ' || &BLANK || ' " *AND +
    80. L@XMDT *EQ '|| &W1DATE || ' *AND L@XMTM +
    81. *GE ' || &FRMTME || ' *AND L@XMTM *LE '+
    82. || &TOTME || ' '))
    83. ELSE CMD(CHGVAR VAR(&SELT1) VALUE ('L@CTCD *EQ " ' +
    84. || &CTCD || ' " *AND L@GMAB *EQ " ' || +
    85. &GMAB || '" *AND L@ACKG *EQ " ' || &BLANK +
    86. || ' " *AND L@XMDT *EQ '|| &W1DATE || ' +
    87. *AND L@XMTM *GE ' || &FRMTME || ' *AND +
    88. L@XMTM *LE ' || &TOTME || ' '))
    89. OVRPRTF FILE(INBA71R1) SAVE(*YES) SPLFNAME(INBA76R1)
    90. ENDDO
    91. IF COND (&W1DATE *EQ &W1DATE3) THEN (DO) +
    92. CHKOBJ OBJ(QTEMP/BA@IMTP) OBJTYPE(*FILE)
    93. MONMSG MSGID(CPF9801) EXEC (DO)
    94. CRTDUPOBJ OBJ(BA@IMTP) FROMLIB (*LIBL) OBJTYPE(*FILE) +
    95. TOLIB(QTEMP) NEWOBJ(BA@IMTP) CST(*NO) +
    96. TRG(*NO) ACCTL(*NONE)
    97. ENDDO
    98. CALL PGM(INBA071M) PARM(&W1DATE &P0QRY1)
    99. OVRDBF FILE(BA@IMTP) TOFILE(QTEMP/BA@IMTP) +
    100. OVRSCOPE(*JOB) SHARE(*YES)
    101. OPNQRYF FILE((QTEMP/BA@IMTP)) QRYSLT(&SELT1) +
    102. KEYFLD(L@CTCD) (L@GMAB) (L@BRNO))
    103. CALL PGM(INBA071A) PAR(&REOPT &FRMTME &TOTME)
    104. CLOF OPNID(BA@IMTP)
    105. DLTOVR FILE(*ALL)
    106. RCLRSC
    107. CLRPFM FILE(QTEMP/BA@IMTP)
    108. ENDDO
    109. IF COND(&W1DATE *LE &W1DATE3) THEN(DO) +
    110. OVRPRTF FILE(INBA71R1) SAVE(*YES) SPLFNAME(INBA76R1)
    111. CHKOBJ OBJ(QTEMP/BA@IMHP) OBJTYPE(*FILE)
    112. MONMSG MSGID(CPF9801) EXEC (DO)
    113. CRTDUPOBJ OBJ(BA@IMHP) FROMLIB(*LIBL) OBJTYPE(*FILE) +
    114. TOLIB(QTEMP) NEWOBJ(BA@IMHP) CST(*NO)
    115. TRG(*NO) ACCTL(*NONE)
    116. ENDDO
    117. CALL PGM(INBA071M) PARM(&W1DATE &P0QRY2)
    118. CALL PGM(INBA071M) PARM(&W1DATE &P0QRY3)
    119. OVRDBF FILE(BA@IMHP) TOFILE(QTEMP/BA@IMHP) +
    120. OVRSCOPE(*JOB) SHARE(*YES)
    121. OPNQRYF FILE((QTEMP/BA@IMHP)) QRYSLT(&SELT1) +
    122. KEYFLD((L@CTCD) (L@GMAB) (L@BRNO))
    123. CALL PGM(INBA071B) PARM (&REOPT &FRMTME &TOTME)
    124. CLOF OPNID(BA@IMHP)
    125. DLTOVR FILE(*ALL)
    126. RCLRSC
    127. /* End of today date */
    128. CLRPFM FILE(QTEMP/BA@IMHP)
    129. CHGVAR VAR(&W1CV) VALUE(&WSNXCV)
    130. CHGVAR VAR(&W1FT) VALUE(&WSNXFT)
    131. CHGVAR VAR(&W1PG) VALUE(&WSNXPG)
    132. CHGVAR VAR(&WSNXPG) VALUE('*HIGHR')
    133. CHGVAR VAR(&WSPVCV) VALUE(&W1CV)
    134. CHGVAR VAR(&WSPVFT) VALUE(&W1FT)
    135. CHGVAR VAR(&WSPVPG) VALUE(&W1PG)
    136. CHGVAR VAR(%SST (&WSCCR1 1 10)) VALUE(&WSNXCV)
    137. CHGVAR VAR(%SST(&WSCCR1 11 5)) VALUE(&WSNXFT)
    138. CHGVAR VAR(%SST (&WSCCR1 16 10)) VALUE(&WSNXPG)
    139. CHGVAR VAR(%SST(&WSCCR1 26 10)) VALUE(&WSPVCV)
    140. CHGVAR VAR(%SST(&WSCCR1 36 5)) VALUE(&WSPVFT)
    141. CHGVAR VAR(%SST(&WSCCR1 41 10)) VALUE(&WSPVPG
    142. EXITPGM: RETURN
    143. ENDPGM

  • #2
    Hi, John.

    I gave your code a quick look. It doesn't seem to me that you need to modify this program. Instead, you would probably have to write another program to call this one once for each different value of &BRNO. It could pass whatever values you want into &CTCD and &GMAB. If the date you refer to is the one in parameter &W1DATE, the caller would need to determine the previous day's date and load it into that parameter.

    Also, are you sure this is the correct source code? It has syntax errors in it -- extra blanks in places, and the DO in line 109 does not have a matching ENDDO.

    HTH.

    Ted

    Comment


    • #3
      Hi John,

      Looks like you tried really hard to format your code, put it in a box, etc. I appreciate the effort! For future reference, what works best is to simply put copy/paste your code as-is from RDI, then put [code] before the first line of code, and [/code] after the last line. It may not look perfect in the editor, but it'll look good when we view it.


      Also, as Ted mentioned, there were some problems with this code that would prevent it from compiling, etc. Syntax errors, extra blanks, a missing ENDDO, that sort of thing.

      I took a few minutes to try to fix this stuff to make it easier to read/understand. Since there were missing elements, I had to "guess" at what these should be, so this code may not be quite right. But, this is what I came up with:

      Code:
      PGM PARM(&WSCCR1 &WSCCR2 &CTCD  &GMAB   &BRNO +
               &REPORT &FRMTME &TOTME &W1DATE )
      
        DCL VAR(&WSCCR1)   TYPE(*CHAR) LEN(512)
        DCL VAR(&WSCCR2)   TYPE(*CHAR) LEN(2048)
        DCL VAR(&CTCD)     TYPE(*CHAR) LEN(2)
        DCL VAR(&GMAB)     TYPE(*CHAR) LEN(4)
        DCL VAR(&BRNO)     TYPE(*CHAR) LEN(3)
        DCL VAR(&REPORT)   TYPE(*CHAR) LEN(1)
        DCL VAR(&REPOPT)   TYPE(*CHAR) LEN(1)
        DCL VAR(&FRMTME)   TYPE(*CHAR) LEN(6)
        DCL VAR(&TOTME)    TYPE(*CHAR) LEN(6)
        DCL VAR(&SELT1)    TYPE(*CHAR) LEN(175)
        DCL VAR(&WSPVCV)   TYPE(*CHAR) LEN(10)
        DCL VAR(&WSPVPG)   TYPE(*CHAR) LEN(10)
        DCL VAR(&WSNXCV)   TYPE(*CHAR) LEN(10)
        DCL VAR(&WSNXFT)   TYPE(*CHAR) LEN(5)
        DCL VAR(&WSNXPG)   TYPE(*CHAR) LEN(10)
        DCL VAR(&W1CV)     TYPE(*CHAR) LEN(10)
        DCL VAR(&W1FT)     TYPE(*CHAR) LEN(5)
        DCL VAR(&W1PG)     TYPE(*CHAR) LEN(10)
        DCL VAR(&JOB)      TYPE(*CHAR) LEN(10)
        DCL VAR(&BLANK)    TYPE(*CHAR) LEN(1) VALUE(' ')
        DCL VAR(&TDDT)     TYPE(*CHAR) LEN(8)
        DCL VAR(&W1DATE1)  TYPE(*CHAR) LEN(6)
        DCL VAR(&W1DAATE2) TYPE(*CHAR) LEN(6)
        DCL VAR(&W1DATE3)  TYPE(*CHAR) LEN(8)
        DCL VAR(&WADATE4)  TYPE(*CHAR) LEN(8)
        DCL VAR(&DATFMT)   TYPE(*CHAR) LEN(3)
        DCL VAR(&W1YY)     TYPE(*DEC)  LEN(4 0) /* Year YYYY*/
        DCL VAR(&W1YYC)    TYPE(*CHAR) LEN(4)   /*Char Year YYYY*/
        DCL VAR(&LIB)      TYPE(*CHAR) LEN(5)
        DCL VAR(&LIB1)     TYPE(*CHAR) LEN(8)
        DCL VAR(&QRY)      TYPE(*CHAR) LEN(350)
        DCL VAR(&P0QRY1)   TYPE(*CHAR) LEN(2) VALUE('Q1')
        DCL VAR(&P0QRY2)   TYPE(*CHAR) LEN(2) VALUE('Q2')
        DCL VAR(&P0QRY3)   TYPE(*CHAR) LEN(2) VALUE('Q3')
      
        RTVJOBA JOB(&JOB)
      
        CHGVAR VAR(&WSNXCV) VALUE(&WSCCR1 1 10))
        CHGVAR VAR(&WSNXFT) VALUE(&WSCCR1 11 5)
        CHGVAR VAR(&WSNXPG) VALUE(%SST(&WSCCR1 41 10)
        CHGVAR VAR(&LIB)    VALUE(QTEMP)
      
        RTVDTAARA DTAARA(HSSDTAAR002 (1 8) ) RTNVAR(&DTDT)
        RTVDTAARA DTAARA(HSSDTAR045 (1 8) RTNVAR(&LIB1)
        RTVSYSVAL SYSVAL(QDAT) RTNVAR(&W1DATE1)
        RTVSYSVAL SYSVAL(QDATFMT) RTNVAR(&DATFMT)
      
        IF COND(&DATFMT *EQ 'YMD') THEN (DO)
          CHGVAR VAR(&W1DATE2) VALUE(%SST(&W1DATE1 1 6)
        ENDDO
      
        IF COND(&DATFMT *EQ 'MDY' ) THEN (DO)
          CHGVAR VAR(&W1DATE2) VALUE(%SST(&W1DATE1 5 2) *TCAT +
                                     %SST(&W1DATE1 1 4))
        ENDDO
      
        IF COND(&DATFMT *EQ 'DMY') THEN (DO)
          CHGVAR VAR(&W1DATE2) VALUE(%SST(&W1DATE1 5 2) *TCAT +
                                     %SST(&W1DATE1 3 2) *TCAT +
                                     %SST(&W1DATE1 1 2))
        ENDDO
      
        /*Format the system date from YYMMDD to YYYYMMDD */
        IF COND(%SST(&W1DATE2 3 2) *LE %SST(&TDDT 5 2)) THEN (DO)
          CHGVAR VAR(&W1DATE3) VALUE (%SST (&TDDT 1 2) *TCAT +
                                      %SST(&W1DATE2 1 6)
        ENDDO
      
        /* Determine selection criteria */
        IF COND (&REPOPT = 'F' ) THEN(DO)
          IF COND (&BRNO *NE ' ') THEN(+
            CHGVAR VAR(&SELT1) VALUE('L@CTCD *EQ " ' || &CTCD || ' " +
                                 *AND L@GMAB *EQ " ' || &GMAB || ' " +
                                 *AND L@BRNO *EQ '  || &BLANK || ' " ')+
          )
          ELSE CMD(+
            CHGVAR VAR(&SELT1) VALUE ('L@CTCD *EQ " ' || &CTCD || ' " +
                                  *AND L@GMAB *EQ " '|| &BLANK || &GMAB || ' " +
                                  *AND L@ACKG *EQ " '|| &BLANK || ' " ')+
          )
        ENDDO
      
        ELSE CMD(DO)
          IF COND(&BRNO *NE ' ') THEN(+
            CHGVAR VAR(&SELT1) VALUE('L@CTCD *EQ " ' || &CTCD || ' " +
                                 *AND L@GMAB *EQ " ' || &GMAB || ' " +
                                 *AND L@BRNO *EQ '   || &BRNO || ' +
                                 *AND L@ACKG *EQ " ' || &BLANK || ' " +
                                 *AND L@XMDT *EQ ' || &W1DATE || ' +
                                 *AND L@XMTM *GE ' || &FRMTME || ' +
                                 *AND L@XMTM *LE ' || &TOTME || ' ')+
          )
          ELSE CMD(+
            CHGVAR VAR(&SELT1) VALUE ('L@CTCD *EQ " ' || &CTCD || ' " +
                                  *AND L@GMAB *EQ " ' || &GMAB || '" +
                                  *AND L@ACKG *EQ " ' || &BLANK  || ' "+
                                  *AND L@XMDT *EQ ' || &W1DATE || ' +
                                  *AND L@XMTM *GE ' || &FRMTME || ' +
                                  *AND L@XMTM *LE ' || &TOTME  || ' ')+
          )
          OVRPRTF FILE(INBA71R1) SAVE(*YES) SPLFNAME(INBA76R1)
        ENDDO
      
        IF COND (&W1DATE *EQ &W1DATE3) THEN (DO) +
      
          CHKOBJ OBJ(QTEMP/BA@IMTP) OBJTYPE(*FILE)
          MONMSG MSGID(CPF9801) EXEC (DO)
            CRTDUPOBJ OBJ(BA@IMTP) FROMLIB (*LIBL) OBJTYPE(*FILE) +
                      TOLIB(QTEMP) NEWOBJ(BA@IMTP) CST(*NO) +
                      TRG(*NO) ACCTL(*NONE)
          ENDDO
      
          CALL PGM(INBA071M) PARM(&W1DATE &P0QRY1)
      
          OVRDBF FILE(BA@IMTP) TOFILE(QTEMP/BA@IMTP) +
                 OVRSCOPE(*JOB) SHARE(*YES)
          OPNQRYF FILE((QTEMP/BA@IMTP)) QRYSLT(&SELT1) +
                  KEYFLD(L@CTCD) (L@GMAB) (L@BRNO))
          CALL PGM(INBA071A) PAR(&REOPT &FRMTME &TOTME)
          CLOF OPNID(BA@IMTP)
          DLTOVR FILE(*ALL)
      
          RCLRSC
          CLRPFM FILE(QTEMP/BA@IMTP)
      
        ENDDO
      
        IF COND(&W1DATE *LE &W1DATE3) THEN(DO) +
      
          OVRPRTF FILE(INBA71R1) SAVE(*YES) SPLFNAME(INBA76R1)
      
          CHKOBJ OBJ(QTEMP/BA@IMHP) OBJTYPE(*FILE)
          MONMSG MSGID(CPF9801) EXEC(DO)
            CRTDUPOBJ OBJ(BA@IMHP) FROMLIB(*LIBL) OBJTYPE(*FILE) +
                      TOLIB(QTEMP) NEWOBJ(BA@IMHP) CST(*NO)
                      TRG(*NO) ACCTL(*NONE)
          ENDDO
      
          CALL PGM(INBA071M) PARM(&W1DATE &P0QRY2)
          CALL PGM(INBA071M) PARM(&W1DATE &P0QRY3)
      
          OVRDBF FILE(BA@IMHP) TOFILE(QTEMP/BA@IMHP) +
                 OVRSCOPE(*JOB) SHARE(*YES)
          OPNQRYF FILE((QTEMP/BA@IMHP)) QRYSLT(&SELT1) +
                  KEYFLD((L@CTCD) (L@GMAB) (L@BRNO))
          CALL PGM(INBA071B) PARM (&REOPT &FRMTME &TOTME)
          CLOF OPNID(BA@IMHP)
          DLTOVR FILE(*ALL)
      
          RCLRSC
      
          CLRPFM FILE(QTEMP/BA@IMHP)
      
        ENDDO
      
        CHGVAR VAR(&W1CV)   VALUE(&WSNXCV)
        CHGVAR VAR(&W1FT)   VALUE(&WSNXFT)
        CHGVAR VAR(&W1PG)   VALUE(&WSNXPG)
        CHGVAR VAR(&WSNXPG) VALUE(*HIGHR)
        CHGVAR VAR(&WSPVCV) VALUE(&W1CV)
        CHGVAR VAR(&WSPVFT) VALUE(&W1FT)
        CHGVAR VAR(&WSPVPG) VALUE(&W1PG)
      
        CHGVAR VAR(%SST(&WSCCR1  1 10)) VALUE(&WSNXCV)
        CHGVAR VAR(%SST(&WSCCR1 11  5)) VALUE(&WSNXFT)
        CHGVAR VAR(%SST(&WSCCR1 16 10)) VALUE(&WSNXPG)
        CHGVAR VAR(%SST(&WSCCR1 26 10)) VALUE(&WSPVCV)
        CHGVAR VAR(%SST(&WSCCR1 36  5)) VALUE(&WSPVFT)
        CHGVAR VAR(%SST(&WSCCR1 41 10)) VALUE(&WSPVPG)
      
      ENDPGM
      I'm posting this in hopes that the reformatted code makes it easier for someone else to help you. I can't help you with this because I do not understand BRNO or how it works. I don't know how to tell what possible values it could have, or what you're asking about the dates. I think these involve familiarity with your application and how it works, and I just don't have that knowledge. Hopefully someone else does and can help.

      Comment


      • #4
        There are undefined fields and extraneous fields. I cleaned those up and grafted it on to some of Scott's code. It might get you closer to whatever it is you're trying to do.

        Code:
        PGM PARM(&WSCCR1 &WSCCR2 &CTCD &GMAB &BRNO &REPORT &FRMTME &TOTME &W1DATE)  
        
        /* DEFINE PARMS */
        DCL &WSCCR1     *CHAR 512 
          DCL &WSNXCV     *CHAR  10  STG(*DEFINED) DEFVAR(&WSCCR1  1)
          DCL &WSNXFT     *CHAR   5  STG(*DEFINED) DEFVAR(&WSCCR1 11)
          DCL &WSNXPG     *CHAR  10  STG(*DEFINED) DEFVAR(&WSCCR1 41)
        DCL &WSCCR2     *CHAR 2048
        DCL &CTCD       *CHAR    2
        DCL &GMAB       *CHAR    4
        DCL &BRNO       *CHAR    3
        DCL &REPORT     *CHAR    1
        DCL &FRMTME     *CHAR    6
        DCL &TOTME      *CHAR    6
        DCL &W1DATE     *CHAR    6    /* NOT DEFINED IN YOUR SOURCE, THIS DEFINITION IS A GUESS */
        
        /* FOR QRY SELECTION STRING */
        DCL &SELT1      *CHAR  175
        DCL &QRY        *CHAR  350 
        DCL &P0QRY1     *CHAR    2 VALUE('Q1')
        DCL &P0QRY2     *CHAR    2 VALUE('Q2')
        DCL &P0QRY3     *CHAR    2 VALUE('Q3')
        
        /* FOR CURRENT DATE */
        DCL &DATETIME   *CHAR   20
        DCL &W1DATE3    *CHAR    8
        
        
        /* START - ARE THESE REALLY NEEDED?  THEY'RE ONLY USED IN THAT MIXMASTER AT THE END OF THE PGM */
        DCL &WSPVCV     *CHAR   10   
        DCL &WSPVPG     *CHAR   10   
        DCL &WSPVFT     *CHAR    5   /* NOT DEFINED IN YOUR SOURCE, THIS DEFINITION IS A GUESS */     
        
        DCL &W1CV       *CHAR   10 
        DCL &W1FT       *CHAR    5   
        DCL &W1PG       *CHAR   10   
        /* END - ARE THESE REALLY NEEDED?  */
        
        
        /* GET CURRENT DATE IN YYYYMMDD FORMAT */
        RTVSYSVAL SYSVAL(QDATETIME) RTNVAR(&DATETIME)
        CHGVAR  &W1DATE3  VALUE(%SST(&DATETIME 1 8))
        
        
        
        /* Determine selection criteria */ 
          IF COND (&REPOPT = 'F' ) THEN(DO) 
            IF COND (&BRNO *NE ' ') THEN(+ 
              CHGVAR VAR(&SELT1) VALUE('L@CTCD *EQ " ' || &CTCD || ' " + 
                                   *AND L@GMAB *EQ " ' || &GMAB || ' " + 
                                   *AND L@BRNO *EQ '  || &BLANK || ' " ')+ 
            ) 
            ELSE CMD(+ 
              CHGVAR VAR(&SELT1) VALUE ('L@CTCD *EQ " ' || &CTCD || ' " + 
                                    *AND L@GMAB *EQ " '|| &BLANK || &GMAB || ' " + 
                                    *AND L@ACKG *EQ " '|| &BLANK || ' " ')+ 
            ) 
          ENDDO 
        
          ELSE CMD(DO) 
            IF COND(&BRNO *NE ' ') THEN(+ 
              CHGVAR VAR(&SELT1) VALUE('L@CTCD *EQ " ' || &CTCD || ' " + 
                                   *AND L@GMAB *EQ " ' || &GMAB || ' " + 
                                   *AND L@BRNO *EQ '   || &BRNO || ' + 
                                   *AND L@ACKG *EQ " ' || &BLANK || ' " + 
                                   *AND L@XMDT *EQ ' || &W1DATE || ' + 
                                   *AND L@XMTM *GE ' || &FRMTME || ' + 
                                   *AND L@XMTM *LE ' || &TOTME || ' ')+ 
            ) 
            ELSE CMD(+ 
              CHGVAR VAR(&SELT1) VALUE ('L@CTCD *EQ " ' || &CTCD || ' " + 
                                    *AND L@GMAB *EQ " ' || &GMAB || '" + 
                                    *AND L@ACKG *EQ " ' || &BLANK  || ' "+ 
                                    *AND L@XMDT *EQ ' || &W1DATE || ' + 
                                    *AND L@XMTM *GE ' || &FRMTME || ' + 
                                    *AND L@XMTM *LE ' || &TOTME  || ' ')+ 
            ) 
            OVRPRTF FILE(INBA71R1) SAVE(*YES) SPLFNAME(INBA76R1) 
          ENDDO 
        
          IF COND (&W1DATE *EQ &W1DATE3) THEN (DO) + 
        
            CHKOBJ OBJ(QTEMP/BA@IMTP) OBJTYPE(*FILE) 
            MONMSG MSGID(CPF9801) EXEC (DO) 
              CRTDUPOBJ OBJ(BA@IMTP) FROMLIB (*LIBL) OBJTYPE(*FILE) + 
                        TOLIB(QTEMP) NEWOBJ(BA@IMTP) CST(*NO) + 
                        TRG(*NO) ACCTL(*NONE) 
            ENDDO 
        
            CALL PGM(INBA071M) PARM(&W1DATE &P0QRY1) 
        
            OVRDBF FILE(BA@IMTP) TOFILE(QTEMP/BA@IMTP) + 
                   OVRSCOPE(*JOB) SHARE(*YES) 
            OPNQRYF FILE((QTEMP/BA@IMTP)) QRYSLT(&SELT1) + 
                    KEYFLD(L@CTCD) (L@GMAB) (L@BRNO)) 
            CALL PGM(INBA071A) PARM(&REOPT &FRMTME &TOTME)  
            CLOF OPNID(BA@IMTP) 
            DLTOVR FILE(*ALL) 
        
            RCLRSC 
            CLRPFM FILE(QTEMP/BA@IMTP) 
        
          ENDDO 
        
          IF COND(&W1DATE *LE &W1DATE3) THEN(DO) + 
        
            OVRPRTF FILE(INBA71R1) SAVE(*YES) SPLFNAME(INBA76R1) 
        
            CHKOBJ OBJ(QTEMP/BA@IMHP) OBJTYPE(*FILE) 
            MONMSG MSGID(CPF9801) EXEC(DO) 
              CRTDUPOBJ OBJ(BA@IMHP) FROMLIB(*LIBL) OBJTYPE(*FILE) + 
                        TOLIB(QTEMP) NEWOBJ(BA@IMHP) CST(*NO) 
                        TRG(*NO) ACCTL(*NONE) 
            ENDDO 
        
            CALL PGM(INBA071M) PARM(&W1DATE &P0QRY2) 
            CALL PGM(INBA071M) PARM(&W1DATE &P0QRY3) 
        
            OVRDBF FILE(BA@IMHP) TOFILE(QTEMP/BA@IMHP) + 
                   OVRSCOPE(*JOB) SHARE(*YES) 
            OPNQRYF FILE((QTEMP/BA@IMHP)) QRYSLT(&SELT1) + 
                    KEYFLD((L@CTCD) (L@GMAB) (L@BRNO)) 
            CALL PGM(INBA071B) PARM (&REOPT &FRMTME &TOTME) 
            CLOF OPNID(BA@IMHP) 
            DLTOVR FILE(*ALL) 
        
            RCLRSC 
        
            CLRPFM FILE(QTEMP/BA@IMHP) 
        
          ENDDO
        
        
        /* START - SEEMS LIKE A LOT OF CIRCULAR MOTION HERE */
        CHGVAR VAR(&W1CV)   VALUE(&WSNXCV) 
        CHGVAR VAR(&W1FT)   VALUE(&WSNXFT) 
        CHGVAR VAR(&W1PG)   VALUE(&WSNXPG) 
        CHGVAR VAR(&WSNXPG) VALUE(*HIGHR) 
        CHGVAR VAR(&WSPVCV) VALUE(&W1CV) 
        CHGVAR VAR(&WSPVFT) VALUE(&W1FT) 
        CHGVAR VAR(&WSPVPG) VALUE(&W1PG) 
        CHGVAR VAR(%SST(&WSCCR1  1 10)) VALUE(&WSNXCV) 
        CHGVAR VAR(%SST(&WSCCR1 11  5)) VALUE(&WSNXFT) 
        CHGVAR VAR(%SST(&WSCCR1 16 10)) VALUE(&WSNXPG) 
        CHGVAR VAR(%SST(&WSCCR1 26 10)) VALUE(&WSPVCV) 
        CHGVAR VAR(%SST(&WSCCR1 36  5)) VALUE(&WSPVFT) 
        CHGVAR VAR(%SST(&WSCCR1 41 10)) VALUE(&WSPVPG)
        /* END - SEEMS LIKE A LOT OF CIRCULAR MOTION HERE */
        
        EXITPGM: RETURN
        
        ENDPGM

        Comment


        • #5
          program is almost correct might be some syntax errors in it ,but my main question is what changes should i make in it so that it could pickup current date from the system and then subtract one day from it so that we can run it for yesterday's date ,idea is to run it for previous day's report generation. also this 'BRNO' is a field of some file that should be read along with static values of CTCD and GMAB.
          Currently it's calling RPGLE programs which call some screen where we pass manually these CTCD,GMAB ,BRNO and Report Date fields instead of this this process should be automated and report should be generated for static values of CTCD(2 characters field)+GMAB(4 characters field) and varying values of BRNO (3 Characters) which comes after reading a specific file.

          Thanks

          Comment


          • #6
            Finding yesterday's date in RPG is extremely easy, because RPG has built-in ability to do date manipulation.

            Code:
                   dcl-s yesterday date;
            
                   yesterday = %date() - %days(1);
            CL is not so easy. I've seen a lot of people work around this using julian dates, et al, but that always gets tricky when you cross years. Personally, I try to do this in RPG whenever I can, but if I have to do it in CL I will use Lilian dates. The other mistake people make a LOT in CL is that they assume the date will always be in the date format that they're used to. Well, then what happens when a user changes their job to a different date format? Or when the code is moved to a different system? Or the company decides to standardize on a different format? So, the way I do dates in CL tends to work like this:
            1. Get the system date (QDATE system value).
            2. Use the CVTDAT command to convert it to the *ISO (YYYYMMDD) format, which is usually the best for programmatic work.
            3. Use the CEEDAYS API to convert it to Lilian. Now you can add/subtract days easily.
            4. Use the CEEDATE API to convert it back to *ISO. Now you can use it.
            5. If its displayed to the user, you can use CVTDAT to convert it back to the job's date format.


            Code:
            PGM
            
                 DCL VAR(&QDATE) TYPE(*CHAR) LEN(6)
                 DCL VAR(&YYMD)  TYPE(*CHAR) LEN(8)
                 DCL VAR(&LILIAN) TYPE(*CHAR) LEN(4)
            
                 /* GET THE CURRENT DATE IN YYYYMMDD FORMAT */
            
                 RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&QDATE)
                 CVTDAT     DATE(&QDATE) TOVAR(&YYMD) FROMFMT(*SYSVAL) +
                              TOFMT(*YYMD) TOSEP(*NONE)
            
            
                 /* USE THE CEEDAYS API TO CONVERT TO A LILIAN DATE,  +
                    SUBTRACT 1 DAY                                    +
                    USE THE CEEDATE API TO CONVERT BACK TO YYYYMMDD   */
            
                 CALLPRC PRC(CEEDAYS) PARM(&YYMD 'YYYYMMDD' &LILIAN *OMIT)
                 CHGVAR VAR(%BIN(&LILIAN)) VALUE(%BIN(&LILIAN) - 1)
                 CALLPRC PRC(CEEDATE) PARM(&LILIAN 'YYYYMMDD' &YYMD *OMIT)
            
            
                 /* SHOW THE RESULT */
            
                 SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                              MSGDTA('Yesterday was' *BCAT &YYMD) +
                              MSGTYPE(*COMP)
            
            ENDPGM
            With regards to the other stuff (BRNO, CTCD, GMAB) I'm not really sure what you're asking. Setting a variable to a static value can be done in several ways.
            • Using the VALUE() keyword on the DCL command.
            • Passing a static value as a parameter.
            • Setting the value in your program with CHGVAR
            • Replacing the variable with a literal.


            Is that what you are asking? I'm not really sure.

            Likewise, for BRNO, you say the values are in a file. So... read the file and get the values? Or change the code so that it doesn't do a QRYSLT on specific values? I guess I don't understand what you need help with, here.

            Comment


            • John192
              John192 commented
              Editing a comment
              when trying to call this program getting error 'CEE2525 received by procedure at statement number 7 ,Message Text for CEE2525 is : Timestamp picture mismatch. And cause is 'The timestamp picture string does not match the timestamp specified in the parameter.
              also what is the object type of this CEEDATE,CEEDAYS ,how to find their object type and presence in the system as unable to find using WRKOBJ for these CEEDATE and CEEDAYS.

              Thanks

          • #7
            Thanks ,but where is the program for CEEDATE I mean where is the source code for this API CEEDATE ?






            Comment


            • #8
              ..and where is source code program for this CEEDAYS API ?

              Thanks...

              Comment


              • #9
                CEEDATE and CEEDAYS are not programs, they are ILE procedures. They are provided by IBM with the operating system. IBM does not provide the source code.


                Comment


                • #10
                  CEEDATE and CEEDAYS are system APIs. They are documented here:

                  Comment


                  • #11
                    ..Also if using below CL program we need to subtract one day from the current system date and then we need subtracted date value in DDMMYYYY format then what changes are required further to it:-

                    DCL VAR(&D1) TYPE(*CHAR) LEN(6)
                    DCL VAR(&D2) TYPE(*CHAR) LEN(8)
                    RTVSYSVAL SYSVAL(QDATE) RTNVAR(&D1)
                    CVTDAT DATE(&D1) TOVAR(&D2) +
                    FROMFMT(*SYSVAL) TOFMT(*DMYY) TOSEP(*NONE)


                    ..Thanks



                    Comment


                    • #12
                      Originally posted by John192 View Post
                      ..Also if using below CL program we need to subtract one day from the current system date and then we need subtracted date value in DDMMYYYY format then what changes are required further to it:-

                      DCL VAR(&D1) TYPE(*CHAR) LEN(6)
                      DCL VAR(&D2) TYPE(*CHAR) LEN(8)
                      RTVSYSVAL SYSVAL(QDATE) RTNVAR(&D1)
                      CVTDAT DATE(&D1) TOVAR(&D2) +
                      FROMFMT(*SYSVAL) TOFMT(*DMYY) TOSEP(*NONE)
                      It is difficult to subtract one day from a string in a format like '11012021' using CL. It would be somewhat easy to handle the cases where the Day is greater than 1, but it would be much more difficult to handle all the cases where the Day is 1, especially when the Month is 3 or when the Month is 1. There are many opportunities to make errors if you try to write this code yourself. For example, if the current date is '03012021', the day before is '02282021', but if the current day is '03012020', the day before is '02292020'.

                      So I would use the code that Scott showed using the CEE APIs, or I would call an RPG program to use the code that Scott showed to return the previous day using %DATE and %DAYS.

                      If you want the RPG program to return a string in the form DDMMYYYY, use %CHAR to convert the true date to *eur0 format (that's a zero at the end of the format).
                      Code:
                             dcl-pi *n;                                 
                                outDate_ddmmyyyy char(8);               
                             end-pi;                                    
                             dcl-s tempDate date(*iso);                 
                      
                             tempDate = %date() - %days(1);             
                             outDate_ddmmyyyy = %char(tempDate : *eur0);
                             dsply outDate_ddmmyyyy;                    
                             return;

                      Comment


                      • #13
                        Thanks,
                        when trying to call below program then getting error 'CEE2525 received by procedure at statement number 7 ,Message Text for CEE2525 is : Timestamp picture mismatch. And cause is 'The timestamp picture string does not match the timestamp specified in the parameter.
                        also what is the object type of this CEEDATE,CEEDAYS ,how to find their object type and presence in the system as unable to find using WRKOBJ for these CEEDATE and CEEDAYS.
                        Does the procedures which come inbuilt from IBM operating systems can not be found even can we not find out their object type in the system?

                        GM DCL VAR(&QDATE) TYPE(*CHAR) LEN(6) DCL VAR(&YYMD) TYPE(*CHAR) LEN(8) DCL VAR(&LILIAN) TYPE(*CHAR) LEN(4) /* GET THE CURRENT DATE IN YYYYMMDD FORMAT */ RTVSYSVAL SYSVAL(QDATE) RTNVAR(&QDATE) CVTDAT DATE(&QDATE) TOVAR(&YYMD) FROMFMT(*SYSVAL) + TOFMT(*YYMD) TOSEP(*NONE) /* USE THE CEEDAYS API TO CONVERT TO A LILIAN DATE, + SUBTRACT 1 DAY + USE THE CEEDATE API TO CONVERT BACK TO YYYYMMDD */ CALLPRC PRC(CEEDAYS) PARM(&YYMD 'YYYYMMDD' &LILIAN *OMIT) CHGVAR VAR(%BIN(&LILIAN)) VALUE(%BIN(&LILIAN) - 1) CALLPRC PRC(CEEDATE) PARM(&LILIAN 'YYYYMMDD' &YYMD *OMIT) /* SHOW THE RESULT */ SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) + MSGDTA('Yesterday was' *BCAT &YYMD) + MSGTYPE(*COMP) ENDPGM

                        Thanks

                        Comment


                        • #14
                          Code:
                           
                           PGM       DCL VAR(&QDATE) TYPE(*CHAR) LEN(6)      DCL VAR(&YYMD)  TYPE(*CHAR) LEN(8)      DCL VAR(&LILIAN) TYPE(*CHAR) LEN(4)       /* GET THE CURRENT DATE IN YYYYMMDD FORMAT */       RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&QDATE)      CVTDAT     DATE(&QDATE) TOVAR(&YYMD) FROMFMT(*SYSVAL) +                   TOFMT(*YYMD) TOSEP(*NONE)        /* USE THE CEEDAYS API TO CONVERT TO A LILIAN DATE,  +         SUBTRACT 1 DAY                                    +         USE THE CEEDATE API TO CONVERT BACK TO YYYYMMDD   */       CALLPRC PRC(CEEDAYS) PARM(&YYMD 'YYYYMMDD' &LILIAN *OMIT)      CHGVAR VAR(%BIN(&LILIAN)) VALUE(%BIN(&LILIAN) - 1)      CALLPRC PRC(CEEDATE) PARM(&LILIAN 'YYYYMMDD' &YYMD *OMIT)        /* SHOW THE RESULT */       SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +                   MSGDTA('Yesterday was' *BCAT &YYMD) +                   MSGTYPE(*COMP)  ENDPGM
                          Reposting same code with
                          Code:
                           and
                          tags before first line and after last line of program which gave error ''CEE2525 received by procedure at statement number 7 ,Message Text for CEE2525 is : Timestamp picture mismatch. And cause is 'The timestamp picture string does not match the timestamp specified in the parameter.'

                          So How can we resolve this error for this program now?


                          Thanks.

                          Comment


                          • #15
                            Debug the program and put a breakpoint just before the call to CEEDAYS. What is the value of &YYMD at that point?

                            Comment

                            Working...
                            X