the comparison report with policy in different MC.(不同系统之间的RFC调用)

*&---------------------------------------------------------------------*
*& Report  ZDM_ICM_PFO_COMPARISON
*&---------------------------------------------------------------------*
*&Created by James on 2018/05/30
*&---------------------------------------------------------------------*
*& the comparison report with policy in different MC.
*&---------------------------------------------------------------------*

REPORT  ZDM_ICM_PFO_COMPARISON.
TABLES:ZDM_COMM_CONTR.
*&---------------------------------------------------------------------*
*&  DATA DEFINE
*&---------------------------------------------------------------------*
TYPES:
  BEGIN OF TY_POLNR,
    POLNR TYPE CHAR10,
  END OF TY_POLNR,
  TT_POLNR TYPE TABLE OF TY_POLNR,

  BEGIN OF TY_COMM_CONTR,
    POLNR            TYPE   CHAR10,
    COVNR            TYPE   CHAR10,
    COMM_CONTRNR     TYPE   CHAR20,
    COMM_ROLE        TYPE   CHAR4,
    MC               TYPE   CHAR5,
    DIR_PERC         TYPE   DEC5,
    INDIR_PERC       TYPE   DEC5,
    VALID_FR         TYPE   DATS,
    VALID_TO         TYPE   DATS,
    OWNER_FLG        TYPE   CHAR1,
    PREV_CONTRNR     TYPE   CHAR20,
  END OF TY_COMM_CONTR,
  TT_COMM_CONTR TYPE SORTED TABLE OF TY_COMM_CONTR WITH UNIQUE KEY POLNR
                                                                   COMM_CONTRNR
                                                                   COMM_ROLE.
DATA:
  POLNR TYPE CHAR10,
  GT_I  TYPE TABLE OF TY_COMM_CONTR,
  GT_D  TYPE TABLE OF TY_COMM_CONTR.
*&---------------------------------------------------------------------*
*&  PARAMETERS DEFINITION
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME TITLE TEXT-B01.
SELECT-OPTIONS:
  P_POLNR FOR POLNR OBLIGATORY.
PARAMETERS:
  P_MC_D  TYPE CHAR10 OBLIGATORY,
  P_MC_I  TYPE CHAR10 OBLIGATORY,
  P_DEST  TYPE RFCDES-RFCDEST.
SELECTION-SCREEN END OF BLOCK B01.
*&---------------------------------------------------------------------*
*&  INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
  CLEAR:
    GT_I,
    GT_D.
*&---------------------------------------------------------------------*
*&  START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM COMPARE_DATA.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
  DATA:
    LT_MC_D TYPE  TT_COMM_CONTR,
    LT_MC_I TYPE  TT_COMM_CONTR.

  SELECT POLNR
         COVNR
         COMM_CONTRNR
         COMM_ROLE
         MC
         DIR_PERC
         INDIR_PERC
         VALID_FR
         VALID_TO
         OWNER_FLG
         PREV_CONTRNR
    INTO CORRESPONDING FIELDS OF TABLE LT_MC_D
    FROM ZDM_COMM_CONTR
    WHERE MC     =  P_MC_D
    AND   POLNR  IN P_POLNR.

  SELECT POLNR
         COVNR
         COMM_CONTRNR
         COMM_ROLE
         MC
         DIR_PERC
         INDIR_PERC
         VALID_FR
         VALID_TO
         OWNER_FLG
         PREV_CONTRNR
     INTO CORRESPONDING FIELDS OF TABLE LT_MC_I
    FROM  ZDM_COMM_CONTR
    WHERE MC     =  P_MC_I
    AND   POLNR  IN P_POLNR.

   IF LT_MC_I IS NOT INITIAL AND
      LT_MC_D IS NOT INITIAL.
     GT_I = LT_MC_I.
     GT_D = LT_MC_D.
   ELSE.
    MESSAGE 'Can not found any data' TYPE 'E'.
   ENDIF.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  COMPARE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM COMPARE_DATA .
  DATA:
    LT_MC_D  TYPE TT_COMM_CONTR,
    LT_MC_I  TYPE TT_COMM_CONTR,
    LT_POLNR TYPE TABLE OF TY_POLNR,
    LS_POLNR TYPE TY_POLNR.

  FIELD-SYMBOLS:
    <FS_D> TYPE TY_COMM_CONTR,
    <FS_I> TYPE TY_COMM_CONTR.

  CLEAR:
   LT_MC_D,
   LT_MC_I,
   LT_POLNR,
   LS_POLNR.
  UNASSIGN:
    <FS_D>,
    <FS_I>.

  LT_MC_I = GT_I.
  LT_MC_D = GT_D.

  LOOP AT LT_MC_I ASSIGNING <FS_I>.
    READ TABLE LT_MC_D ASSIGNING <FS_D>
      WITH TABLE KEY POLNR         = <FS_I>-POLNR
                     COMM_CONTRNR  = <FS_I>-COMM_CONTRNR
                     COMM_ROLE     = <FS_I>-COMM_ROLE.
    IF SY-SUBRC = 0 .

*     Has difference
      IF <FS_I>-COVNR        <> <FS_D>-COVNR        OR
         <FS_I>-DIR_PERC     <> <FS_D>-DIR_PERC     OR
         <FS_I>-INDIR_PERC   <> <FS_D>-INDIR_PERC   OR
         <FS_I>-VALID_FR     <> <FS_D>-VALID_FR     OR
         <FS_I>-VALID_TO     <> <FS_D>-VALID_TO     OR
         <FS_I>-OWNER_FLG    <> <FS_D>-OWNER_FLG    OR
         <FS_I>-PREV_CONTRNR <> <FS_D>-PREV_CONTRNR .

         LS_POLNR-POLNR      =  <FS_I>-POLNR.
         APPEND LS_POLNR TO LT_POLNR.
      ENDIF.
    ELSE.
      LS_POLNR-POLNR = <FS_I>-POLNR.
      APPEND LS_POLNR TO LT_POLNR.
    ENDIF.
    CLEAR LS_POLNR.
  ENDLOOP.

  LOOP AT LT_MC_D ASSIGNING <FS_D>.
    READ TABLE LT_MC_I ASSIGNING <FS_I>
      WITH TABLE KEY POLNR         = <FS_D>-POLNR
                     COMM_CONTRNR  = <FS_D>-COMM_CONTRNR
                     COMM_ROLE     = <FS_D>-COMM_ROLE.
    IF SY-SUBRC = 0 .
*     Has difference
      IF <FS_I>-COVNR        <> <FS_D>-COVNR        OR
         <FS_I>-DIR_PERC     <> <FS_D>-DIR_PERC     OR
         <FS_I>-INDIR_PERC   <> <FS_D>-INDIR_PERC   OR
         <FS_I>-VALID_FR     <> <FS_D>-VALID_FR     OR
         <FS_I>-VALID_TO     <> <FS_D>-VALID_TO     OR
         <FS_I>-OWNER_FLG    <> <FS_D>-OWNER_FLG    OR
         <FS_I>-PREV_CONTRNR <> <FS_D>-PREV_CONTRNR .

         LS_POLNR-POLNR      =  <FS_I>-POLNR.
         APPEND LS_POLNR TO LT_POLNR.
      ENDIF.
    ELSE.
      LS_POLNR-POLNR = <FS_D>-POLNR.
      APPEND LS_POLNR TO LT_POLNR.
    ENDIF.
    CLEAR LS_POLNR.
  ENDLOOP.

  DELETE ADJACENT DUPLICATES FROM LT_POLNR COMPARING POLNR.
* Call RFC
  CALL FUNCTION 'ZDM_PM_UPDATE_DELTA_SCOPE'
  DESTINATION p_dest
  EXPORTING
     mc = P_MC_D
*    so_polnr  = s_polnr[]
  TABLES
     T_POLICY = LT_POLNR.

ENDFORM.                    " COMPARE_DATA
原文地址:https://www.cnblogs.com/HARU/p/9295346.html