SAP Remote Table Comparison: Full ABAP Program

SAP MASS

SAP Remote Table Comparison: The following ABAP Program will remote compare table.

SAP Remote Table Comparison ABAP Code

Here the full ABAP Source to enable compare remotely the Some SAP Table.
First step is to Compare the Table Structure between two distant SAP Systems.
The Second Step is to compare local SAP Table Data and the Remote SAP Table.

For all the detail about this?Step-step Guide how to SAP remote table comparison with ABAP Code

  
DATA: lv_str TYPE string.

DATA: lt_dfies_t     TYPE STANDARD TABLE OF dfies.
DATA: lt_dfies_s     TYPE STANDARD TABLE OF dfies.
DATA: l_i            TYPE i.
DATA: ls_field       TYPE rfc_db_fld,
      lt_field       TYPE TABLE OF rfc_db_fld.

DATA: lt_option      TYPE TABLE OF RFC_DB_OPT.
DATA: lt_keyfield    TYPE ugmd_t_fieldname,
      l_keylen       TYPE i.

DATA: lt_data        TYPE STANDARD TABLE OF tab512.

FIELD-SYMBOLS:    TYPE ANY,
                TYPE ANY TABLE,
                TYPE ANY TABLE,
                TYPE ANY TABLE,
                TYPE ANY TABLE,
                      TYPE ANY,
                 TYPE dfies,
                like LINE OF lt_option.
 
  " Get Fields List of Table ( Target )
  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    DESTINATION p_target
    EXPORTING
      tabname        = p_table
    TABLES
      dfies_tab      = lt_dfies_t
    EXCEPTIONS
      not_found      = 1
      internal_error = 2
      OTHERS         = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    RETURN.
  ENDIF.

  " Get Fields List of Table ( Source )
  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      tabname        = p_table
    TABLES
      dfies_tab      = lt_dfies_s
    EXCEPTIONS
      not_found      = 1
      internal_error = 2
      OTHERS         = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    RETURN.
  ENDIF.

  " Check if Tables Metadata is the same between Target & Source
  IF lt_dfies_t[] NE lt_dfies_s[].
    CALL FUNCTION 'POPUP_TO_INFORM'
      EXPORTING
        titel = 'Processing terminated'(001)
        txt1  = 'The metadata of the tables does not agree'(002)
        txt2  = space.
    EXIT.
  ENDIF.

  " Build List of Fields to be retrieved
  LOOP AT lt_dfies_s ASSIGNING <ls_dfies>.
    IF <ls_dfies>-keyflag NE space.
      INSERT <ls_dfies>-fieldname INTO TABLE lt_keyfield.
      ADD <ls_dfies>-leng TO l_keylen.
    ENDIF.
    l_i = <ls_dfies>-offset + <ls_dfies>-leng.
    IF l_i GT 512.
      EXIT.
    ENDIF.
    ls_field-fieldname = <ls_dfies>-fieldname.
    ls_field-offset    = <ls_dfies>-offset.
    ls_field-length    = <ls_dfies>-leng.
*  ls_field-TYPE      = <ls_dfies>-DATATYPE.
    ls_field-type      = <ls_dfies>-inttype.
    ls_field-fieldtext = <ls_dfies>-fieldtext.
    INSERT ls_field INTO TABLE lt_field.
  ENDLOOP.

  
  " Optionnal !
  " Build WHERE Clause 
  CLEAR: lv_str . CONCATENATE '''' <fs_file>-kunnr ''''  INTO lv_str.
  APPEND INITIAL LINE TO lt_option ASSIGNING <fs_option>.

  " Example which table KNA1 : we filter on KUNNR
  CONCATENATE 'KUNNR = ' lv_str INTO <fs_option> SEPARATED BY space.

  " Read Data from Remote Table
  CALL FUNCTION 'RFC_READ_TABLE'
    DESTINATION p_target
    EXPORTING
      query_table          = p_table
      no_data              = ' '
      rowskips             = 0
      rowcount             = 0
    TABLES
      OPTIONS              = lt_option
      fields               = lt_field
      data                 = lt_data
    EXCEPTIONS
      table_not_available  = 1
      table_without_data   = 2
      option_not_valid     = 3
      field_not_valid      = 4
      not_authorized       = 5
      data_buffer_exceeded = 6
      OTHERS               = 7.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    EXIT.
  ENDIF.