• PD org comparison between datain and target(分批处理数据,异步调用多线程处理)


    
    
    FUNCTION /NSL/_ICM_ORG_COMPARISON_P.
    *"----------------------------------------------------------------------
    *"*"Local Interface:
    *"  IMPORTING
    *"     VALUE(P_DATE) TYPE  DATS
    *"  TABLES
    *"      TT_EFF_CONT STRUCTURE  ZDM_EFF_CONT_FM
    *"      TT_HRP1000 STRUCTURE  ZDM_HRP_FM
    *"      GT_EXCEL STRUCTURE  ZDM_EXCEL_FM
    *"  EXCEPTIONS
    *"      INPUT_PARAMETER_EMPTY
    *"----------------------------------------------------------------------
    TYPES:
      BEGIN OF TY_SHOW,
        CTRTBU_ID       TYPE ISIS_CONTRACT_ID,
        CTRTST_ID       TYPE CACS_CTRTST_ID,
        CTRTBU_ID_UP    TYPE ISIS_CONTRACT_ID,
        SHORT           TYPE SHORT_D,
        BUSI_BEGIN      TYPE CHAR20,
        BUSI_END        TYPE CHAR20,
    *    BUSI_BEGIN      TYPE CACS_BUSITIME_B,
    *    BUSI_END        TYPE CACS_BUSITIME_E,
      END OF TY_SHOW,
      TT_SHOW TYPE STANDARD TABLE OF TY_SHOW,
    
      BEGIN OF TY_EXCEL,
        AGT_AGY_NO      TYPE CHAR10,
        START_DT        TYPE CHAR20,
        REL_AGY_NO      TYPE CHAR5,
        REL_AGY_LEADER  TYPE CHAR10,
      END OF TY_EXCEL,
      TT_EXCEL TYPE SORTED TABLE OF TY_EXCEL WITH UNIQUE KEY
                                             AGT_AGY_NO
                                             START_DT,
      BEGIN OF TY_ALV,
        MANDT           TYPE  MANDT,
        AGT_AGY_NO      TYPE  ISIS_CONTRACT_ID,
        CTRTST_ID       TYPE  CACS_CTRTST_ID,
        CTRTBU_ID_UP    TYPE  HROBJID,
        SHORT           TYPE  SHORT_D,
    *    BUSI_BEGIN      TYPE  BEGDATUM,
        BUSI_BEGIN      TYPE  CHAR20,
        BUSI_END        TYPE  ENDDATUM,
        REL_AGY_NO      TYPE  CHAR5,
        REL_AGY_LEADER  TYPE  CHAR10,
      END OF TY_ALV,
      TT_ALV TYPE STANDARD TABLE OF TY_ALV.
    
      DATA:
       LV_CURSOR         TYPE CURSOR,
       LT_SHOW           TYPE TT_SHOW,
       LS_SHOW           TYPE TY_SHOW,
       LS_CTRTBU_TMP     TYPE CACS_CTRTBU,
       LS_HRP1000        TYPE ZDM_HRP_FM,
       LV_TEMP_C         TYPE CHAR20,
       LV_C              TYPE CHAR10,
       LV_TEMP_T         TYPE CHAR20,
       LV_YEAR           TYPE CHAR4,
       LV_MM             TYPE CHAR4,
       LV_DD             TYPE CHAR4,
    
       lt_test           TYPE TT_EXCEL,
       LT_EXCEL          TYPE TABLE OF TY_EXCEL,
       LT_EXCEL_SORT     TYPE TT_EXCEL,
       LT_ALV            TYPE STANDARD TABLE OF TY_ALV,
       LS_ALV            TYPE TY_ALV.
    
    
      FIELD-SYMBOLS:
        <FS_EFF_CONT>    TYPE ZDM_EFF_CONT_FM,
    
        <FS_TARGET>   TYPE TY_SHOW,
        <FS_EXCEL>    TYPE TY_EXCEL.
    
      CLEAR:
        LV_CURSOR,
        LT_SHOW,
        LS_SHOW,
        LV_TEMP_C,
        LV_C,
        LV_TEMP_T,
        LV_YEAR,
        LV_MM,
        LV_DD,
        LT_EXCEL,
        LT_EXCEL_SORT,
        LT_ALV,
        LS_ALV.
    
    
      UNASSIGN:
        <FS_EFF_CONT>,
        <FS_TARGET>,
        <FS_EXCEL>.
    
      LOOP AT TT_EFF_CONT[] ASSIGNING <FS_EFF_CONT>.
       READ TABLE TT_HRP1000[] INTO LS_HRP1000
          WITH KEY OBJID = <FS_EFF_CONT>-OBJID.
    *   get short
        IF SY-SUBRC = 0.
          <FS_EFF_CONT>-SHORT = LS_HRP1000-SHORT.
        ENDIF.
        CLEAR: LS_HRP1000.
    
    *   get CTRTBU_ID
        CALL FUNCTION '/NSL/ICM_GET_REP_MANAGER'
          EXPORTING
           IV_OTYPE               = 'S'
           IV_OBJID               = <FS_EFF_CONT>-OBJID
           IV_BEGDA               = P_DATE
           IV_CCTR_ID             = <FS_EFF_CONT>-CTRTBU_ID
         IMPORTING
            E_MGR_CONTRACT        = LS_CTRTBU_TMP
         EXCEPTIONS
           INVALID_INPUT          = 1
           ERROR_OCCURED          = 2
           OTHERS                 = 3
                  .
        IF SY-SUBRC <> 0.
    
        ELSE.
          IF <FS_EFF_CONT>-CTRTBU_ID IS NOT INITIAL OR
             <FS_EFF_CONT>-BEGDA     IS NOT INITIAL.
    
    *       Change the format
            LV_TEMP_C         = <FS_EFF_CONT>-CTRTBU_ID.
            LV_C              = LV_TEMP_C+10(10).
            LS_SHOW-CTRTBU_ID = LV_C.
    
    *       change time
    *        LV_TEMP_T    = <FS_EFF_CONT>-BEGDA.
            LV_YEAR           = <FS_EFF_CONT>-BEGDA+0(4).
            LV_MM             = <FS_EFF_CONT>-BEGDA+4(2).
            LV_DD             = <FS_EFF_CONT>-BEGDA+6(2).
            CONCATENATE LV_YEAR'/'LV_MM'/'LV_DD INTO LV_TEMP_T.
            LS_SHOW-BUSI_BEGIN   = LV_TEMP_T.
    
          ENDIF.
    
    *      LS_SHOW-CTRTBU_ID    = <FS_EFF_CONT>-CTRTBU_ID.
          LS_SHOW-CTRTST_ID    = <FS_EFF_CONT>-CTRTST_ID.
          LS_SHOW-CTRTBU_ID_UP = LS_CTRTBU_TMP-CTRTBU_ID+10(10).
          LS_SHOW-SHORT        = <FS_EFF_CONT>-SHORT.
    *      LS_SHOW-BUSI_BEGIN   = <FS_EFF_CONT>-BEGDA.
          LS_SHOW-BUSI_END     = <FS_EFF_CONT>-ENDDA.
          APPEND LS_SHOW TO LT_SHOW.
          CLEAR:
            LS_SHOW,
            LS_CTRTBU_TMP,
            LV_TEMP_C,
            LV_C,
            LV_TEMP_T,
            LV_YEAR,
            LV_MM,
            LV_DD.
        ENDIF.
    
      ENDLOOP.
    
      SORT GT_EXCEL BY AGT_AGY_NO
                       START_DT.
    
      LT_EXCEL_SORT[]  = gt_excel[].
      FREE: GT_EXCEL.
    
    * compare
      LOOP AT LT_SHOW ASSIGNING <FS_TARGET>.
        READ TABLE LT_EXCEL_SORT[] ASSIGNING <FS_EXCEL>
         WITH TABLE KEY AGT_AGY_NO    = <FS_TARGET>-CTRTBU_ID
                        START_DT      = <FS_TARGET>-BUSI_BEGIN.
        IF SY-SUBRC = 0.
    
          IF <FS_TARGET>-CTRTBU_ID_UP <> <FS_EXCEL>-REL_AGY_LEADER OR
             <FS_TARGET>-SHORT        <> <FS_EXCEL>-REL_AGY_NO.
    
            LS_ALV-AGT_AGY_NO         = <FS_TARGET>-CTRTBU_ID    .
            LS_ALV-CTRTST_ID          = <FS_TARGET>-CTRTST_ID    .
            LS_ALV-CTRTBU_ID_UP       = <FS_TARGET>-CTRTBU_ID_UP .
            LS_ALV-SHORT              = <FS_TARGET>-SHORT        .
            LS_ALV-BUSI_BEGIN         = <FS_TARGET>-BUSI_BEGIN   .
            LS_ALV-BUSI_END           = <FS_TARGET>-BUSI_END     .
            LS_ALV-REL_AGY_NO         = <FS_EXCEL>-REL_AGY_NO    .
            LS_ALV-REL_AGY_LEADER     = <FS_EXCEL>-REL_AGY_LEADER.
            APPEND LS_ALV TO LT_ALV.
            CLEAR:LS_ALV.
          ENDIF.
    
        ELSE.
    
          LS_ALV-MANDT                = SY-MANDT.
          LS_ALV-AGT_AGY_NO           = <FS_TARGET>-CTRTBU_ID    .
          LS_ALV-CTRTST_ID            = <FS_TARGET>-CTRTST_ID    .
          LS_ALV-CTRTBU_ID_UP         = <FS_TARGET>-CTRTBU_ID_UP .
          LS_ALV-SHORT                = <FS_TARGET>-SHORT        .
          LS_ALV-BUSI_BEGIN           = <FS_TARGET>-BUSI_BEGIN   .
          LS_ALV-BUSI_END             = <FS_TARGET>-BUSI_END     .
          LS_ALV-REL_AGY_NO           = 'none'   .
          LS_ALV-REL_AGY_LEADER       = 'none'.
          APPEND LS_ALV TO LT_ALV.
          CLEAR:LS_ALV.
    
        ENDIF.
    
      ENDLOOP.
    
      IF LT_ALV IS NOT INITIAL.
        MODIFY ZDM_RESULT FROM TABLE LT_ALV.
        IF sy-subrc = 0.
          COMMIT WORK.
        ELSE.
          ROLLBACK WORK.
          MESSAGE 'have error when save to db!' TYPE 'E'.
        ENDIF.
      ENDIF.
    
    ENDFUNCTION.
    
    
    
    *&---------------------------------------------------------------------*
    *& Report  ZDM_ICM_PD_ORG_COMPARISON_TEST
    *&---------------------------------------------------------------------*
    *&Created by James on 2018/06/22
    *&---------------------------------------------------------------------*
    *& PD org comparison between datain and target
    *&---------------------------------------------------------------------*
    REPORT ZDM_ICM_PD_ORG_COMPARISON_P.
    TYPE-POOLS TRUXS.
    *&---------------------------------------------------------------------*
    *&  DATA DEFINE
    *&---------------------------------------------------------------------*
    TYPES:
      BEGIN OF TY_SHOW,
        CTRTBU_ID       TYPE ISIS_CONTRACT_ID,
        CTRTST_ID       TYPE CACS_CTRTST_ID,
        CTRTBU_ID_UP    TYPE ISIS_CONTRACT_ID,
        SHORT           TYPE SHORT_D,
        BUSI_BEGIN      TYPE CHAR20,
        BUSI_END        TYPE CHAR20,
      END OF TY_SHOW,
      TT_SHOW TYPE STANDARD TABLE OF TY_SHOW,
    
      BEGIN OF TY_EFF_CONT,
        CTRTBU_ID       TYPE ISIS_CONTRACT_ID,
        CTRTST_ID       TYPE CACS_CTRTST_ID,
        OBJID           TYPE HROBJID,
        SHORT           TYPE SHORT_D,
        BEGDA           TYPE BEGDATUM,
        ENDDA           TYPE ENDDATUM,
      END OF TY_EFF_CONT,
      TT_EFF_CONT TYPE STANDARD TABLE OF TY_EFF_CONT,
    
      BEGIN OF TY_HRP1000,
      OBJID             TYPE HROBJID,
      SHORT             TYPE SHORT_D,
      END OF TY_HRP1000,
      TT_HRP1000 TYPE STANDARD TABLE OF TY_HRP1000,
    
      BEGIN OF TY_EXCEL,
        AGT_AGY_NO      TYPE CHAR10,
        START_DT        TYPE CHAR20,
        REL_AGY_NO      TYPE CHAR5,
        REL_AGY_LEADER  TYPE CHAR10,
      END OF TY_EXCEL,
      TT_EXCEL TYPE SORTED TABLE OF TY_EXCEL WITH UNIQUE KEY
                                             AGT_AGY_NO
                                             START_DT,
      BEGIN OF TY_ALV,
        AGT_AGY_NO      TYPE  ISIS_CONTRACT_ID,
        CTRTST_ID       TYPE  CACS_CTRTST_ID,
        CTRTBU_ID_UP    TYPE  HROBJID,
        SHORT           TYPE  SHORT_D,
        BUSI_BEGIN      TYPE  CHAR20,
        BUSI_END        TYPE  ENDDATUM,
        REL_AGY_NO      TYPE  CHAR5,
        REL_AGY_LEADER  TYPE  CHAR10,
      END OF TY_ALV,
      TT_ALV TYPE STANDARD TABLE OF TY_ALV.
    
    TYPES:
      BEGIN OF gty_pol,
        batch       TYPE i,
        tb_EFF_CONT TYPE REF TO data,
      END OF gty_pol.
    
    CONSTANTS:
      C_SPACE           TYPE CHAR1 VALUE ' ',
      C_TPE_S           TYPE CHAR1 VALUE 'S',
      C_TPE_O           TYPE CHAR1 VALUE 'O',
      C_01              TYPE CHAR2 VALUE '01',
      C_ZICNSL          TYPE CHAR6 VALUE 'ZICNSL'.
    
    DATA:
      GV_HAVE_ERROR     TYPE CHAR1,
      GT_RAW            TYPE TRUXS_T_TEXT_DATA,
      GT_EXCEL          TYPE TABLE OF TY_EXCEL,
      GS_EXCEL          TYPE TY_EXCEL,
      GT_FIELDCAT       TYPE lVC_T_FCAT,
      GS_FIELDCAT       TYPE lVC_S_FCAT,
      GS_LAYOUT         TYPE lVC_S_LAYO,
      GT_EFF_CONT       TYPE STANDARD TABLE OF TY_EFF_CONT.
    
    DATA:
      BEGIN OF it_field OCCURS 0 ,
        field(100),
      END OF it_field.
    
    DATA:
      gv_lines    TYPE i,
      gv_batch    TYPE i,
      lv_batch    TYPE i,
      gt_pol      TYPE STANDARD TABLE OF gty_pol,
      gs_pol      TYPE gty_pol,
      s_date1     TYPE datum.
    
    DATA:
      r_pol          TYPE RANGE OF cacs_ctrtbu-ctrtbu_id,
      r_pol_line     LIKE LINE OF r_pol,
      lv_cursor      TYPE cursor,
      g_running      TYPE i,
      g_taskno       TYPE string,
      lv_packet_size TYPE i.
    *&---------------------------------------------------------------------*
    *&  INITIALIZATION
    *&---------------------------------------------------------------------*
    INITIALIZATION.
      CLEAR:
        GV_HAVE_ERROR,
        GT_RAW,
        GT_EXCEL,
        GS_EXCEL,
        GT_FIELDCAT,
        GS_FIELDCAT,
        GS_LAYOUT.
    *&---------------------------------------------------------------------*
    *&  PARAMETERS DEFINITION
    *&---------------------------------------------------------------------*
    SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-b01.
    PARAMETERS:
      P_INTER RADIOBUTTON GROUP RD1 TYPE CHAR1,
      P_EXTER RADIOBUTTON GROUP RD1 TYPE CHAR1 DEFAULT 'X',
      FILEPATH TYPE STRING DEFAULT 'C:/TEST.XLS',
      P_DATE   TYPE DATS DEFAULT SY-DATUM,
      P_DOW    TYPE CHAR1 AS CHECKBOX.
    *  P_COM    TYPE CHAR1 AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK b01.
    
    SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE text-b02.
    PARAMETERS:
    *  P_COM    TYPE CHAR1 AS CHECKBOX,
      P_FILE   LIKE RLGRAP-FILENAME OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK b02.
    
    SELECTION-SCREEN BEGIN OF BLOCK bk3 WITH FRAME.
    PARAMETERS: p_pll    AS CHECKBOX,
                p_prcno  TYPE i DEFAULT 50 OBLIGATORY,
                p_maxpol TYPE i DEFAULT 2000 OBLIGATORY,
                p_pksz   TYPE i DEFAULT '2000000' OBLIGATORY.
    SELECTION-SCREEN END OF BLOCK bk3.
    
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
    CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
     EXPORTING
       PROGRAM_NAME        = SYST-REPID
       DYNPRO_NUMBER       = SYST-DYNNR
       STATIC              = 'X'
       MASK                = ',*.XLS,*.XLS'
      CHANGING
        FILE_NAME          = P_FILE
     EXCEPTIONS
       MASK_TOO_LONG       = 1
       OTHERS              = 2.
    
      IF SY-SUBRC <> 0.
    *   Implement suitable error handling here
        MESSAGE 'have error when reading excel!' TYPE 'E'.
        EXIT.
      ENDIF.
    
    CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
      EXPORTING
    *   I_FIELD_SEPERATOR          =
        I_LINE_HEADER              = 'X'
        I_TAB_RAW_DATA             = GT_RAW
        I_FILENAME                 = P_FILE
      TABLES
        I_TAB_CONVERTED_DATA       = GT_EXCEL
     EXCEPTIONS
       CONVERSION_FAILED          = 1
       OTHERS                     = 2.
    
      IF SY-SUBRC <> 0.
    *   Implement suitable error handling here
        MESSAGE 'have error when reading excel!' TYPE 'E'.
        EXIT.
      ENDIF.
    *&---------------------------------------------------------------------*
    *&  START-OF-SELECTION
    *&---------------------------------------------------------------------*
    START-OF-SELECTION.
    *内勤
    IF P_INTER = ABAP_TRUE.
    
    *外勤
    ELSEIF P_EXTER = ABAP_TRUE.
    
      PERFORM SET_EFFICTIVE_CONTRACT.
    
      IF GV_HAVE_ERROR = ABAP_TRUE.
        MESSAGE ' CAN NOT FOUND ANY DATA IN TABLE!' TYPE 'E'.
      ENDIF.
    
      PERFORM ALV_SHOW.
    ENDIF.
    *&---------------------------------------------------------------------*
    *&      Form  SET_EFFICTIVE_CONTRACT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM SET_EFFICTIVE_CONTRACT .
      DATA:
       LV_CURSOR         TYPE CURSOR,
       LT_EFF_CONT       TYPE STANDARD TABLE OF TY_EFF_CONT,
       LT_EFF_CONT_TEMP  TYPE STANDARD TABLE OF TY_EFF_CONT,
       LT_SHOW           TYPE TT_SHOW,
       LS_SHOW           TYPE TY_SHOW,
       LT_HRP1000        TYPE STANDARD TABLE OF TY_HRP1000,
       LS_HRP1000        TYPE TY_HRP1000,
       LS_CTRTBU_TMP     TYPE CACS_CTRTBU,
       LV_TEMP_C         TYPE CHAR20,
       LV_C              TYPE CHAR10,
       LV_TEMP_T         TYPE CHAR20,
       LV_YEAR           TYPE CHAR4,
       LV_MM             TYPE CHAR4,
       LV_DD             TYPE CHAR4.
    
      FIELD-SYMBOLS:
        <FS_EFF_CONT>    TYPE TY_EFF_CONT.
    
      CLEAR:
        LV_CURSOR,
        LT_EFF_CONT,
        LT_EFF_CONT_TEMP,
        LT_SHOW,
        LS_SHOW,
        LS_CTRTBU_TMP,
        LV_TEMP_C,
        LV_C,
        LV_TEMP_T,
        LV_YEAR,
        LV_MM,
        LV_DD.
    
      UNASSIGN:
        <FS_EFF_CONT>.
    
      OPEN CURSOR WITH HOLD LV_CURSOR FOR
      SELECT A~CTRTBU_ID
             A~CTRTST_ID
             B~OBJID
             B~BEGDA
             B~ENDDA
          FROM CACS_CTRTBU   AS A
         INNER JOIN HRVPADIC AS B
         ON   A~CTRTBU_ID       = B~CONTRACT_ID
        WHERE A~FLG_CANCEL_OBJ  = C_SPACE  AND
              A~FLG_CANCEL_VERS = C_SPACE  AND
              A~CTRTBU_ID       <> C_SPACE AND
              A~BUSI_BEGIN      <= P_DATE  AND
              A~BUSI_END        >= P_DATE  AND
              B~OTYPE           = C_TPE_S  AND
              B~PLVAR           = C_01     AND
              B~BEGDA           <= P_DATE  AND
              B~ENDDA           >= P_DATE  AND
              B~CONTRACT_APPL   = C_ZICNSL.
    
      CLEAR gv_batch.
      DO.
        FETCH NEXT CURSOR LV_CURSOR INTO CORRESPONDING FIELDS OF GT_EFF_CONT
         PACKAGE SIZE p_pksz.
        IF SY-SUBRC <> 0.
          CLOSE CURSOR LV_CURSOR.
          EXIT.
        ELSE.
          SORT GT_EFF_CONT BY CTRTBU_ID.
          DELETE ADJACENT DUPLICATES FROM GT_EFF_CONT COMPARING CTRTBU_ID .
        ENDIF.
        gv_batch = gv_batch + 1.
        CLEAR gs_pol.
        gs_pol-batch = gv_batch.
        CREATE DATA gs_pol-tb_EFF_CONT TYPE STANDARD TABLE OF TY_EFF_CONT.
        ASSIGN gs_pol-tb_EFF_CONT->* TO FIELD-SYMBOL(<lfs_tb>).
        <lfs_tb> = GT_EFF_CONT[].
        APPEND gs_pol TO gt_pol.
      ENDDO.
    
      CLEAR lv_batch.
      FIELD-SYMBOLS <lfs_temp> TYPE ANY TABLE.
      DO gv_batch TIMES.
        lv_batch = lv_batch + 1.
        CLEAR GT_EFF_CONT.
        READ TABLE gt_pol INTO gs_pol WITH KEY batch = lv_batch.
        IF sy-subrc = 0.
          ASSIGN gs_pol-tb_EFF_CONT->* TO <lfs_temp>.
          GT_EFF_CONT = <lfs_temp>.
        ENDIF.
    
        IF p_pll = 'X' AND GT_EFF_CONT IS NOT INITIAL.
          PERFORM parallel_processing.
        ELSE.
        ENDIF.
      ENDDO.
    
      IF GT_EFF_CONT IS INITIAL.
       GV_HAVE_ERROR = ABAP_TRUE.
       RETURN.
      ENDIF.
    
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  PARALLEL_PROCESSING
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM PARALLEL_PROCESSING .
      TYPES:
        BEGIN OF TY_HRP1000,
        OBJID             TYPE HROBJID,
        SHORT             TYPE SHORT_D,
        END OF TY_HRP1000,
        TT_HRP1000 TYPE STANDARD TABLE OF TY_HRP1000,
    
        BEGIN OF TY_HRP1001,
          SOBID TYPE HROBJID,
          objid TYPE HROBJID,
        END OF TY_HRP1001,
        TT_HRP1001 TYPE STANDARD TABLE OF TY_HRP1001,
    
        BEGIN OF TY_HRP1001_chan,
          SOBID TYPE SOBID,
          OBJID TYPE HROBJID,
        END OF TY_HRP1001_chan,
        TT_HRP1001_chan TYPE STANDARD TABLE OF TY_HRP1001_chan,
    
        BEGIN OF TY_HRP1001_temp,
          SOBID TYPE num8,
          OBJID TYPE HROBJID,
        END OF TY_HRP1001_temp,
        TT_HRP1001_temp TYPE STANDARD TABLE OF TY_HRP1001_temp.
    
      DATA: l_last,
            l_rec_cnt        TYPE i,
            l_task_idx(5)    TYPE n.
    
      DATA: lo_cx_root       TYPE REF TO cx_root,
            l_exception      TYPE        string,
            l_error_msg(100),
            ls_EFF_cont      TYPE TY_EFF_CONT.
    
      DATA: lt_contract_pall TYPE STANDARD TABLE OF TY_EFF_CONT,
            ls_contract_pall TYPE TY_EFF_CONT,
            lt_hrp1001       TYPE TABLE OF TY_HRP1001,
            lv_no_of_pp      TYPE i ,
            LT_HRP1000       TYPE STANDARD TABLE OF TY_HRP1000,
            LT_HRP1000_temp  TYPE STANDARD TABLE OF TY_HRP1000,
            LS_HRP1000       TYPE TY_HRP1000,
            lt_hrp1001_temp  TYPE TABLE OF TY_HRP1001_temp,
            ls_hrp1001_temp  TYPE TY_HRP1001_temp,
            lt_hrp1001_chan  TYPE TABLE OF TY_HRP1001_chan,
            LT_SHOW          TYPE TT_SHOW,
            LS_SHOW          TYPE TY_SHOW,
            LS_CTRTBU_TMP    TYPE CACS_CTRTBU,
            LV_TEMP_C        TYPE CHAR20,
            LV_C             TYPE CHAR10,
            LV_TEMP_T        TYPE CHAR20,
            LV_YEAR          TYPE CHAR4,
            LV_MM            TYPE CHAR4,
            LV_DD            TYPE CHAR4,
            lv_chan_forma    TYPE num8.
    
      FIELD-SYMBOLS:
        <FS_EFF_CONT>      TYPE TY_EFF_CONT,
        <fs_hrp1001>       TYPE TY_HRP1001,
        <fs_HRP1000>       TYPE TY_HRP1000,
        <fs_HRP1000_temp>  TYPE TY_HRP1000,
        <fs_hrp1001_temp>  TYPE TY_HRP1001_temp,
        <fs_HRP1001_chan>  TYPE TY_HRP1001_chan.
    
      CLEAR:
        l_rec_cnt,
        lt_contract_pall,
        ls_eff_cont.
    
      lv_no_of_pp  = p_prcno.
    
      LOOP AT GT_EFF_CONT INTO ls_eff_cont.
        APPEND ls_eff_cont TO lt_contract_pall.
        l_rec_cnt = l_rec_cnt + 1.
    
        AT LAST.
          l_last = 'X'.
    
    *     get ID of Related Object from hrp1001
          SELECT SOBID OBJID INTO CORRESPONDING FIELDS OF TABLE LT_HRP1001_chan
            from HRP1001
            FOR ALL ENTRIES IN GT_EFF_CONT
            WHERE OBJID = GT_EFF_CONT-OBJID
            AND   PLVAR = '01'
            AND   RSIGN = 'A'
            AND   RELAT = '003'
            AND   SCLAS = 'O'
            AND   BEGDA <= P_DATE
            AND   ENDDA >  P_DATE.
    
          IF lt_hrp1001_chan IS INITIAL.
            RETURN.
          ENDIF.
    
          SORT lt_hrp1001_chan BY SOBID objid. "#EC CI_SORTLOOP
          DELETE ADJACENT DUPLICATES FROM lt_hrp1001_chan COMPARING SOBID objid.
          MOVE-CORRESPONDING lt_hrp1001_chan to lt_hrp1001.
    
    *     get agency_code from hrp1000
          SELECT objid
                 SHORT INTO CORRESPONDING FIELDS OF TABLE LT_HRP1000_temp
            FROM HRP1000
            FOR ALL ENTRIES IN LT_HRP1001
            WHERE OBJID = LT_HRP1001-SOBID
            AND   OTYPE = C_TPE_O
            AND   BEGDA <= P_DATE
            AND   ENDDA >  P_DATE.                      "CI_FAE_LINES_ENSURED
    
          IF SY-SUBRC = 0.
            SORT LT_HRP1000_temp BY OBJID SHORT . "#EC CI_SORTLOOP
            DELETE ADJACENT DUPLICATES FROM LT_HRP1000_temp COMPARING OBJID SHORT.
    
            LOOP AT lt_hrp1001 ASSIGNING <FS_HRP1001>.
              READ TABLE LT_HRP1000_temp ASSIGNING <FS_HRP1000_temp>
                WITH KEY objid = <FS_HRP1001>-sobid.
              IF  sy-subrc = 0.
                LS_HRP1000-objid = <FS_HRP1001>-objid.
                LS_HRP1000-short = <FS_HRP1000_temp>-short.
                APPEND LS_HRP1000 to LT_HRP1000.
                CLEAR:LS_HRP1000.
              ENDIF.
            ENDLOOP.
    
         ELSE.
           GV_HAVE_ERROR = ABAP_TRUE.
           RETURN.
          ENDIF.
        ENDAT.
    
        IF l_rec_cnt >= p_maxpol OR l_last = 'X'.
          l_task_idx = l_task_idx + 1.
          CONCATENATE 'ZDM_ICM_ACCBAL_TEST' l_task_idx INTO g_taskno.
          DO 1 TIMES.
            TRY.
               CALL FUNCTION '/NSL/_ICM_ORG_COMPARISON_P'
               STARTING NEW TASK g_taskno
               DESTINATION IN GROUP DEFAULT
               PERFORMING end_of_process ON END OF TASK
               EXPORTING
                P_DATE            = p_date
               TABLES
                TT_EFF_CONT       = lt_contract_pall
                TT_HRP1000        = LT_HRP1000
                GT_EXCEL          = GT_EXCEL
                EXCEPTIONS
                    communication_failure = 1 MESSAGE l_error_msg
                    system_failure        = 2 MESSAGE l_error_msg
                    resource_failure      = 3
                    other                 = 99.
    
                IF sy-subrc = 1.
                ELSEIF sy-subrc = 2.
                ELSEIF sy-subrc = 3.
                ENDIF.
              CATCH cx_root INTO lo_cx_root.
                l_exception = lo_cx_root->get_text( ).
            ENDTRY.
            CASE sy-subrc.
              WHEN 0.
                g_running = g_running + 1.
                EXIT.
              WHEN 1 OR 2 OR 99.
                IF l_exception NE space.
                  l_error_msg = l_exception.
                ENDIF.
    
                IF l_error_msg IS INITIAL.
                  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          INTO l_error_msg
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                ENDIF.
                WRITE:/ g_taskno, 'RFC call failed:', l_error_msg.
                EXIT.
              WHEN 3.
                WAIT UP TO 5 SECONDS.
                WAIT FOR ASYNCHRONOUS TASKS UNTIL g_running < lv_no_of_pp.
                IF sy-index = 10.
                  WRITE:/ g_taskno, 'RFC call failed: Waited resource for more than 10 times'.
                  EXIT.
                ENDIF.
    * check number of available resource with SPBT_INITIALIZE
            ENDCASE.
          ENDDO.
          CLEAR: l_rec_cnt, lt_contract_pall.
        ENDIF.
        WAIT FOR ASYNCHRONOUS TASKS UNTIL g_running < lv_no_of_pp.
        CLEAR:
        ls_eff_cont.
      ENDLOOP.
    
    * wait until all jobs finished
      WAIT FOR ASYNCHRONOUS TASKS UNTIL g_running = 0.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  END_OF_PROCESS
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM end_of_process  USING    p_taskno.
    
      DATA: l_msg(100).
    
      RECEIVE RESULTS FROM FUNCTION '/NSL/_ICM_ORG_COMPARISON_P'
        EXCEPTIONS
          communication_failure = 1 MESSAGE l_msg
          system_failure        = 2 MESSAGE l_msg
          OTHERS                = 3.
      IF sy-subrc = 0.
      ELSE.
        WRITE:/ p_taskno, 'RFC call failed(Receive):', l_msg.
      ENDIF.
      g_running = g_running - 1.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  ALV_SHOW
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM ALV_SHOW .
      DATA:
        lt_alv TYPE STANDARD TABLE OF TY_ALV.
      GS_LAYOUT-CWIDTH_OPT = 'X'.
      GS_LAYOUT-ZEBRA      = 'X'.
      GS_LAYOUT-SEL_MODE   = 'D'.
    
      gs_fieldcat-fieldname = 'AGT_AGY_NO'.
      gs_fieldcat-coltext   = 'AGT_AGY_NO'.
      gs_fieldcat-outputlen = '20'.
      APPEND gs_fieldcat TO gt_fieldcat.
      CLEAR gs_fieldcat.
    
      gs_fieldcat-fieldname = 'CTRTST_ID'.
      gs_fieldcat-coltext   = 'CTRTST_ID'.
      gs_fieldcat-outputlen = '20'.
      APPEND gs_fieldcat TO gt_fieldcat.
      CLEAR gs_fieldcat.
    
      gs_fieldcat-fieldname = 'CTRTBU_ID_UP'.
      gs_fieldcat-coltext   = 'CTRTBU_ID_UP'.
      gs_fieldcat-outputlen = '20'.
      APPEND gs_fieldcat TO gt_fieldcat.
      CLEAR gs_fieldcat.
    
      gs_fieldcat-fieldname = 'SHORT'.
      gs_fieldcat-coltext   = 'SHORT'.
      gs_fieldcat-outputlen = '20'.
      APPEND gs_fieldcat TO gt_fieldcat.
      CLEAR gs_fieldcat.
    
      gs_fieldcat-fieldname = 'BUSI_BEGIN'.
      gs_fieldcat-coltext   = 'BUSI_BEGIN'.
      gs_fieldcat-outputlen = '20'.
      APPEND gs_fieldcat TO gt_fieldcat.
      CLEAR gs_fieldcat.
    
      gs_fieldcat-fieldname = 'BUSI_END'.
      gs_fieldcat-coltext   = 'BUSI_END'.
      gs_fieldcat-outputlen = '20'.
      APPEND gs_fieldcat TO gt_fieldcat.
      CLEAR gs_fieldcat.
    
      gs_fieldcat-fieldname = 'REL_AGY_NO'.
      gs_fieldcat-coltext   = 'REL_AGY_NO'.
      gs_fieldcat-outputlen = '20'.
      APPEND gs_fieldcat TO gt_fieldcat.
      CLEAR gs_fieldcat.
    
      gs_fieldcat-fieldname = 'REL_AGY_LEADER'.
      gs_fieldcat-coltext   = 'REL_AGY_LEADER'.
      gs_fieldcat-outputlen = '20'.
      APPEND gs_fieldcat TO gt_fieldcat.
      CLEAR gs_fieldcat.
    
    
      SELECT * FROM ZDM_RESULT INTO CORRESPONDING FIELDS OF TABLE LT_alv.  "#EC CI_NOWHERE
    
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          i_callback_program = sy-repid
          is_layout_lvc      = gs_layout
          it_fieldcat_lvc    = gt_fieldcat
         I_SAVE             = 'A'
        TABLES
          t_outtab           = LT_ALV
        EXCEPTIONS
          program_error      = 1
          OTHERS             = 2.
    ENDFORM.

    The FM for

    /NSL/_ICM_ORG_COMPARISON_P

  • 相关阅读:
    docker
    手动处理datanode磁盘间使用不均的问题
    Hadoop op 1)
    Python class and function json
    scala Basic 第三课
    spark streaming kafka example
    hadoop io PART1
    elasticsearch 集群搭建
    Scala编程第二课
    scala 第一课
  • 原文地址:https://www.cnblogs.com/HARU/p/9294700.html
Copyright © 2020-2023  润新知