*&---------------------------------------------------------------------* *& Report ZDM_ICM_POLICY_WITH_POL *&Created by James on 2018/07/16 *&---------------------------------------------------------------------* *& the report for query the dirty data with policy *& 1 policy has been been released but doesn't have POL/PAC *& 2 policy haven't be released but have POL/PAC *& 3 policy have pol/pac but no policy released. *&---------------------------------------------------------------------* REPORT ZDM_ICM_POLICY_WITH_POL. *&---------------------------------------------------------------------* *& DATA DEFINE *&---------------------------------------------------------------------* TYPES: BEGIN OF TY_RANGE, SIGN(1) type C, OPTION(2) type C, LOW type MATNR, HIGH type MATNR, END OF TY_RANGE, BEGIN OF TY_POLNR_RFC, POLICYNR_TT TYPE CHAR30, TMP_DEL_FG TYPE CHAR3, END OF TY_POLNR_RFC, BEGIN OF TY_POLNR_RFC_PM, POLICYNR_TT TYPE CHAR17, TMP_DEL_FG TYPE CHAR1, END OF TY_POLNR_RFC_PM, BEGIN OF TY_CAS, BUSOBJ_TYPE TYPE CHAR3, BUSOBJ_ID TYPE CHAR30, END OF TY_CAS. DATA: GT_CAS_NO_RE TYPE TABLE OF TY_CAS, GT_CAS_YE_RE TYPE TABLE OF TY_CAS, GT_CAS_HAVE_PO TYPE TABLE OF TY_CAS, GT_FIELDCAT TYPE lVC_T_FCAT, GS_FIELDCAT TYPE lVC_S_FCAT, GS_LAYOUT TYPE lVC_S_LAYO, * temporary storage GT_POLNR_YE_RFC TYPE TABLE OF TY_POLNR_RFC, GT_POLNR_NO_RFC TYPE TABLE OF TY_POLNR_RFC. *&---------------------------------------------------------------------* *& PARAMETERS DEFINITION *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-B01. PARAMETERS: P_RELE RADIOBUTTON GROUP RD1 TYPE CHAR1, P_NULL RADIOBUTTON GROUP RD1 TYPE CHAR1 DEFAULT 'X', P_POL RADIOBUTTON GROUP RD1 TYPE CHAR1, P_DEST TYPE RFCDES-RFCDEST. SELECTION-SCREEN END OF BLOCK B01. *&---------------------------------------------------------------------* *& INITIALIZATION *&---------------------------------------------------------------------* INITIALIZATION. CLEAR: GT_CAS_NO_RE, GT_CAS_YE_RE, GT_CAS_HAVE_PO, GT_FIELDCAT, GS_FIELDCAT, GS_LAYOUT. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. PERFORM CALL_RFC. PERFORM EDIT_POLNR. IF GT_CAS_NO_RE IS INITIAL AND GT_CAS_YE_RE IS INITIAL AND GT_CAS_HAVE_PO IS INITIAL. EXIT. ENDIF. PERFORM ALV_SHOW. *&---------------------------------------------------------------------* *& Form CALL_RFC *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <-- GT_POLNR_YE_RFC Released yes * <-- GT_POLNR_NO_RFC Released no *----------------------------------------------------------------------* FORM CALL_RFC . DATA: LT_RFC TYPE TABLE OF TY_POLNR_RFC_PM, LT_POLNR_YE_RFC TYPE TABLE OF TY_POLNR_RFC, LT_POLNR_NO_RFC TYPE TABLE OF TY_POLNR_RFC, LS_POLNR_YE_RFC TYPE TY_POLNR_RFC, LS_POLNR_NO_RFC TYPE TY_POLNR_RFC. FIELD-SYMBOLS: <FS_RFC> TYPE TY_POLNR_RFC_PM. CLEAR: LT_RFC, LT_POLNR_YE_RFC, LT_POLNR_NO_RFC, LS_POLNR_YE_RFC, LS_POLNR_NO_RFC. UNASSIGN: <FS_RFC>. * Call RFC CALL FUNCTION 'ZDM_ICM_GET_POLICY' DESTINATION P_DEST TABLES TT_POLNR_RCF = LT_RFC. * divide policy as released and not yet IF LT_RFC IS NOT INITIAL. * has been released IF P_RELE = ABAP_TRUE. SORT LT_RFC BY TMP_DEL_FG DESCENDING. LOOP AT LT_RFC ASSIGNING <FS_RFC> WHERE TMP_DEL_FG = ABAP_TRUE. LS_POLNR_YE_RFC-POLICYNR_TT = <FS_RFC>-POLICYNR_TT. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LS_POLNR_YE_RFC-POLICYNR_TT IMPORTING OUTPUT = LS_POLNR_YE_RFC-POLICYNR_TT. LS_POLNR_YE_RFC-TMP_DEL_FG = <FS_RFC>-TMP_DEL_FG. APPEND LS_POLNR_YE_RFC TO LT_POLNR_YE_RFC. CLEAR LS_POLNR_YE_RFC. ENDLOOP. MOVE-CORRESPONDING LT_POLNR_YE_RFC TO GT_POLNR_YE_RFC. IF GT_POLNR_YE_RFC IS INITIAL. MESSAGE 'Can not find Policy which already be released from /PM0/ABDQMIGJOUR ' TYPE 'E'. EXIT. ENDIF. * hasn't be released ELSEIF P_NULL = ABAP_TRUE OR P_POL = ABAP_TRUE. SORT LT_RFC BY TMP_DEL_FG ASCENDING. LOOP AT LT_RFC ASSIGNING <FS_RFC> WHERE TMP_DEL_FG = ABAP_FALSE. LS_POLNR_NO_RFC-POLICYNR_TT = <FS_RFC>-POLICYNR_TT. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LS_POLNR_NO_RFC-POLICYNR_TT IMPORTING OUTPUT = LS_POLNR_NO_RFC-POLICYNR_TT. LS_POLNR_NO_RFC-TMP_DEL_FG = <FS_RFC>-TMP_DEL_FG. APPEND LS_POLNR_NO_RFC TO LT_POLNR_NO_RFC. CLEAR LS_POLNR_NO_RFC. ENDLOOP. MOVE-CORRESPONDING LT_POLNR_NO_RFC TO GT_POLNR_NO_RFC. IF GT_POLNR_NO_RFC IS INITIAL. MESSAGE 'Can not find Policy which has not be released from /PM0/ABDQMIGJOUR ' TYPE 'E'. EXIT. ENDIF. ENDIF. ELSE. MESSAGE 'Can not get any Polict from /PM0/ABDQMIGJOUR ' TYPE 'E'. EXIT. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form EDIT_POLNR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> GT_POLNR_YE_RFC Released yes * --> GT_POLNR_NO_RFC Released no * <-- GT_CAS_YE_RE policy has been been released but doesn't have POL/PAC * <-- GT_CAS_NO_RE policy haven't be released but have POL/PAC * <-- GT_CAS_HAVE_PO policy have pol/pac but no policy released. *----------------------------------------------------------------------* FORM EDIT_POLNR . DATA: LT_CAS_NO_RE TYPE TABLE OF TY_CAS, LT_CAS_YE_RE TYPE TABLE OF TY_CAS, LT_CAS_HAVE_PO TYPE TABLE OF TY_CAS, LT_RANGE TYPE TABLE OF TY_RANGE, LS_RANGE TYPE TY_RANGE, LT_POLNR_NO_RE TYPE TABLE OF TY_POLNR_RFC, " Released yes LT_POLNR_YE_RE TYPE TABLE OF TY_POLNR_RFC, " Released no LS_POLNR_YE_RE TYPE TY_CAS, *----------start add by james in 2018/08/02 DE1K9A028J----------- LV_PACKGE TYPE I VALUE '500000', LV_COUNT TYPE i, LV_START TYPE i VALUE '1', LV_END TYPE I. *----------end add by james in 2018/08/02 DE1K9A028J----------- FIELD-SYMBOLS: <FS_POLNR_YE_RE> TYPE TY_POLNR_RFC, <FS_CAS_YE_RE> TYPE TY_CAS. CLEAR: LT_CAS_NO_RE, LT_CAS_YE_RE, LT_CAS_HAVE_PO, LT_RANGE, LS_RANGE, LT_POLNR_NO_RE, LT_POLNR_YE_RE. UNASSIGN: <FS_POLNR_YE_RE>, <FS_CAS_YE_RE>. * define range LS_RANGE-sign = 'I'. LS_RANGE-option = 'EQ'. LS_RANGE-low = 'POL'. APPEND LS_RANGE TO LT_RANGE. CLEAR LS_RANGE. LS_RANGE-sign = 'I'. LS_RANGE-option = 'EQ'. LS_RANGE-low = 'PAC'. APPEND LS_RANGE TO LT_RANGE. * case1 for released IF P_RELE = ABAP_TRUE. *----------start add by james in 2018/08/02 DE1K9A028J----------- DESCRIBE TABLE GT_POLNR_YE_RFC LINES LV_COUNT. WHILE LV_START <= LV_COUNT. LV_END = LV_START + LV_PACKGE - 1 . APPEND LINES OF GT_POLNR_YE_RFC FROM LV_START TO LV_END TO LT_POLNR_YE_RE . LV_START = LV_END + 1. * IF SY-TABIX MOD LV_PACKGE = 0 OR SY-TABIX = LV_COUNT. IF LT_POLNR_YE_RE IS NOT INITIAL. SELECT BUSOBJ_TYPE BUSOBJ_ID INTO CORRESPONDING FIELDS OF TABLE LT_CAS_YE_RE FROM ZICNSL_CAS FOR ALL ENTRIES IN LT_POLNR_YE_RE WHERE BUSOBJ_ID = LT_POLNR_YE_RE-POLICYNR_TT AND BUSOBJ_TYPE IN LT_RANGE. * policy has been been released but doesn't have POL/PAC IF LT_CAS_YE_RE IS NOT INITIAL. SORT LT_CAS_YE_RE BY BUSOBJ_ID. DELETE ADJACENT DUPLICATES FROM LT_CAS_YE_RE COMPARING BUSOBJ_ID. SORT LT_POLNR_YE_RE BY POLICYNR_TT. SORT LT_CAS_YE_RE BY BUSOBJ_ID . LOOP AT LT_POLNR_YE_RE ASSIGNING <FS_POLNR_YE_RE>. READ TABLE LT_CAS_YE_RE ASSIGNING <FS_CAS_YE_RE> WITH KEY BUSOBJ_ID = <FS_POLNR_YE_RE>-POLICYNR_TT BINARY SEARCH. IF SY-SUBRC <> 0. LS_POLNR_YE_RE-BUSOBJ_ID = <FS_POLNR_YE_RE>-POLICYNR_TT. LS_POLNR_YE_RE-BUSOBJ_TYPE = 'No'. APPEND LS_POLNR_YE_RE TO GT_CAS_YE_RE. CLEAR:LS_POLNR_YE_RE. ENDIF. ENDLOOP. ENDIF. ENDIF. CLEAR: LT_POLNR_YE_RE, LT_CAS_YE_RE. ENDWHILE. IF GT_CAS_YE_RE IS INITIAL . MESSAGE 'according to released policy, haven not find pol/pac' TYPE 'E'. EXIT. ENDIF. *----------end add by james in 2018/08/02 DE1K9A028J----------- ENDIF. * case2 for haven't be released IF P_NULL = ABAP_TRUE. *----------start add by james in 2018/08/02 DE1K9A028J----------- DESCRIBE TABLE GT_POLNR_NO_RFC LINES LV_COUNT. WHILE LV_START <= LV_COUNT. LV_END = LV_START + LV_PACKGE - 1 . APPEND LINES OF GT_POLNR_NO_RFC FROM LV_START TO LV_END TO LT_POLNR_NO_RE . LV_START = LV_END + 1. * IF SY-TABIX MOD LV_PACKGE = 0 OR SY-TABIX = LV_COUNT. IF LT_POLNR_NO_RE IS NOT INITIAL. SELECT BUSOBJ_TYPE BUSOBJ_ID INTO CORRESPONDING FIELDS OF TABLE LT_CAS_NO_RE FROM ZICNSL_CAS FOR ALL ENTRIES IN LT_POLNR_NO_RE WHERE BUSOBJ_ID = LT_POLNR_NO_RE-POLICYNR_TT AND BUSOBJ_TYPE IN LT_RANGE. * policy haven't be released but have POL/PAC IF LT_CAS_NO_RE IS NOT INITIAL. SORT LT_CAS_NO_RE BY BUSOBJ_TYPE BUSOBJ_ID. DELETE ADJACENT DUPLICATES FROM LT_CAS_NO_RE COMPARING BUSOBJ_TYPE BUSOBJ_ID. APPEND LINES OF LT_CAS_NO_RE TO GT_CAS_NO_RE . ENDIF. ENDIF. CLEAR: LT_POLNR_NO_RE, LT_CAS_NO_RE. ENDWHILE. IF GT_CAS_NO_RE IS INITIAL. MESSAGE ' do not have the policy already be released but still have POL/PAC' TYPE 'S'. EXIT. ENDIF. *----------end add by james in 2018/08/02 DE1K9A028J----------- ENDIF. * case3 for have pol/pac but no policy released. IF P_POL = ABAP_TRUE. LT_POLNR_NO_RE = GT_POLNR_NO_RFC. FREE:GT_POLNR_NO_RFC. SELECT BUSOBJ_TYPE BUSOBJ_ID INTO CORRESPONDING FIELDS OF TABLE LT_CAS_HAVE_PO FROM ZICNSL_CAS FOR ALL ENTRIES IN LT_POLNR_NO_RE WHERE BUSOBJ_ID = LT_POLNR_NO_RE-POLICYNR_TT AND BUSOBJ_TYPE IN LT_RANGE. IF LT_CAS_HAVE_PO IS NOT INITIAL. SORT LT_CAS_HAVE_PO BY BUSOBJ_TYPE BUSOBJ_ID. DELETE ADJACENT DUPLICATES FROM LT_CAS_HAVE_PO COMPARING BUSOBJ_TYPE BUSOBJ_ID. GT_CAS_HAVE_PO = LT_CAS_NO_RE. ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form ALV_SHOW *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> GT_CAS_YE_RE policy has been been released but doesn't have POL/PAC * --> GT_CAS_NO_RE policy haven't be released but have POL/PAC * --> GT_CAS_HAVE_PO policy have pol/pac but no policy released. *----------------------------------------------------------------------* FORM ALV_SHOW . GS_LAYOUT-CWIDTH_OPT = 'X'. GS_LAYOUT-ZEBRA = 'X'. GS_LAYOUT-SEL_MODE = 'D'. gs_fieldcat-fieldname = 'BUSOBJ_TYPE'. gs_fieldcat-coltext = 'BUSOBJ_TYPE'. gs_fieldcat-outputlen = '20'. APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat. gs_fieldcat-fieldname = 'BUSOBJ_ID'. gs_fieldcat-coltext = 'BUSOBJ_ID'. gs_fieldcat-outputlen = '20'. APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat. IF P_RELE = ABAP_TRUE . 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 = GT_CAS_YE_RE EXCEPTIONS program_error = 1 OTHERS = 2. ELSEIF P_NULL = ABAP_TRUE. 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 = GT_CAS_NO_RE EXCEPTIONS program_error = 1 OTHERS = 2. ELSEIF P_POL = ABAP_TRUE. 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 = GT_CAS_HAVE_PO EXCEPTIONS program_error = 1 OTHERS = 2. ENDIF. ENDFORM.