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