
REPORT ztbcvi_prechk.
PARAMETERS: p_equal TYPE xflag RADIOBUTTON GROUP r1, "Which numbers are overlapping, but not linked with each other?
p_ref TYPE xflag RADIOBUTTON GROUP r1, "Which entites are linked multiple times?
p_r1367 TYPE xflag RADIOBUTTON GROUP r1 DEFAULT 'X'. "2716945 - CVI: Consistency error - Message no. R1367
START-OF-SELECTION.
IF p_equal = abap_true.
PERFORM same_number_no_link.
ELSEIF p_ref = abap_true.
PERFORM multi_links.
ELSEIF p_r1367 = abap_true.
PERFORM missmatch_general_data.
ENDIF.
*&---------------------------------------------------------------------*
*& Form MULTI_LINKS
*&---------------------------------------------------------------------*
FORM multi_links.
SELECT k~kunnr,
l~name1 AS lif_name1,
k~name1 AS kun_name1,
k~loevm AS kun_loevm,
l~lifnr,
l~loevm AS lif_loevm,
' ' as multi
FROM lfa1 AS l
INNER JOIN kna1 AS k ON l~kunnr = k~kunnr
UNION
SELECT k~kunnr,
l~name1 AS lif_name1,
k~name1 AS kun_name1,
k~loevm AS kun_loevm,
l~lifnr,
l~loevm AS lif_loevm,
' ' as multi
FROM kna1 AS k
INNER JOIN lfa1 AS l ON k~lifnr = l~lifnr
INTO TABLE @DATA(linked_CVs).
DATA(cpy_linked_cv) = linked_CVs.
LOOP AT cpy_linked_cv ASSIGNING FIELD-SYMBOL(<li>).
LOOP AT cpy_linked_cv TRANSPORTING NO FIELDS WHERE kunnr = <li>-kunnr AND lifnr <> <li>-lifnr.
<li>-multi = abap_true.
ENDLOOP.
LOOP AT linked_CVs TRANSPORTING NO FIELDS WHERE kunnr <> <li>-kunnr AND lifnr = <li>-lifnr.
<li>-multi = abap_true.
ENDLOOP.
ENDLOOP.
cl_demo_output=>display( cpy_linked_cv ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form MISSMATCH_GENERAL_DATA
*&---------------------------------------------------------------------*
FORM missmatch_general_data.
TYPES: BEGIN OF output_structure,
tablename TYPE tabname,
fieldname TYPE feldname,
kunnr TYPE kunnr,
kun_loevm TYPE loevm,
kun_field TYPE char100,
lifnr TYPE lifnr,
lif_loevm TYPE loevm,
lif_field TYPE char100,
END OF output_structure.
DATA: difference_cv TYPE output_structure,
differences_cv TYPE TABLE OF output_structure,
venddescr TYPE REF TO cl_abap_structdescr,
custdescr TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS:
<vend_comp> TYPE abap_compdescr,
<cust_comp> TYPE abap_compdescr,
<vend_field> TYPE any,
<cust_field> TYPE any.
SELECT k~kunnr,
k~loevm AS kun_loevm,
l~lifnr,
l~loevm AS lif_loevm,
k~adrnr AS cust_adrnr,
l~adrnr AS vend_adrnr
FROM lfa1 AS l
INNER JOIN kna1 AS k ON l~kunnr = k~kunnr
UNION
SELECT k~kunnr,
k~loevm AS kun_loevm,
l~lifnr,
l~loevm AS lif_loevm,
k~adrnr AS cust_adrnr,
l~adrnr AS vend_adrnr
FROM lfa1 AS l
INNER JOIN kna1 AS k ON l~lifnr = k~lifnr
INTO TABLE @DATA(linked_CVs).
* compare address data
LOOP AT linked_CVs ASSIGNING FIELD-SYMBOL(<link>).
SELECT SINGLE * FROM adrc WHERE addrnumber = @<link>-cust_adrnr INTO @DATA(cust_adrc).
SELECT SINGLE * FROM adrc WHERE addrnumber = @<link>-vend_adrnr INTO @DATA(vend_adrc).
* Initialize data not to be compared.
CLEAR: vend_adrc-adrc_uuid, cust_adrc-adrc_uuid,
vend_adrc-addrnumber, cust_adrc-addrnumber,
vend_adrc-date_from, cust_adrc-date_from,
vend_adrc-nation, cust_adrc-nation,
vend_adrc-fax_number, cust_adrc-fax_number ,
vend_adrc-fax_extens, cust_adrc-fax_extens,
vend_adrc-flagcomm2, cust_adrc-flagcomm2,
vend_adrc-flagcomm3, cust_adrc-flagcomm3,
vend_adrc-flagcomm4, cust_adrc-flagcomm4,
vend_adrc-flagcomm5, cust_adrc-flagcomm5,
vend_adrc-flagcomm6, cust_adrc-flagcomm6,
vend_adrc-flagcomm7, cust_adrc-flagcomm7,
vend_adrc-flagcomm8, cust_adrc-flagcomm8,
vend_adrc-flagcomm9, cust_adrc-flagcomm9,
vend_adrc-flagcomm10, cust_adrc-flagcomm10,
vend_adrc-flagcomm11, cust_adrc-flagcomm11,
vend_adrc-flagcomm12, cust_adrc-flagcomm12,
vend_adrc-flagcomm13, cust_adrc-flagcomm13,
vend_adrc-tel_number, cust_adrc-tel_number,
vend_adrc-tel_extens, cust_adrc-tel_extens.
venddescr ?= cl_abap_typedescr=>describe_by_data( vend_adrc ).
ASSIGN vend_adrc TO FIELD-SYMBOL(<vend>).
custdescr ?= cl_abap_typedescr=>describe_by_data( vend_adrc ).
ASSIGN cust_adrc TO FIELD-SYMBOL(<cust>).
* compare fields
IF vend_adrc <> cust_adrc.
LOOP AT venddescr->components ASSIGNING <vend_comp>.
LOOP AT custdescr->components ASSIGNING <cust_comp> WHERE name = <vend_comp>-name.
ASSIGN COMPONENT <vend_comp>-name OF STRUCTURE <vend> TO <vend_field>.
ASSIGN COMPONENT <cust_comp>-name OF STRUCTURE <cust> TO <cust_field>.
IF <cust_field> <> <vend_field>.
CLEAR difference_cv.
difference_cv-tablename = 'ADRC'.
difference_cv-fieldname = <vend_comp>-name.
difference_cv-kunnr = <link>-kunnr.
difference_cv-kun_loevm = <link>-kun_loevm.
difference_cv-kun_field = <cust_field>.
difference_cv-lifnr = <link>-lifnr.
difference_cv-lif_loevm = <link>-lif_loevm.
difference_cv-lif_field = <vend_field>.
APPEND difference_cv TO differences_cv.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
ENDLOOP.
cl_demo_output=>display( differences_cv ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SAME_NUMBER_NO_LINK
*&---------------------------------------------------------------------*
FORM same_number_no_link.
SELECT k~kunnr,
k~loevm AS kun_loevm,
k~name1 AS kun_name1,
k~ktokd,
l~lifnr,
l~loevm AS lif_loevm,
l~name1 AS lif_name1,
l~ktokk
FROM lfa1 AS l
INNER JOIN kna1 AS k ON l~kunnr <> k~kunnr AND l~lifnr = k~kunnr
INTO TABLE @DATA(same_number_no_link).
cl_demo_output=>display( same_number_no_link ).
ENDFORM.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
3 | |
3 | |
3 | |
3 | |
2 | |
2 | |
2 | |
2 | |
2 | |
2 |