121 lines
3.9 KiB
ABAP
121 lines
3.9 KiB
ABAP
*&---------------------------------------------------------------------*
|
|
*& Report Z_PRODSPARTE_MAP_BUILD
|
|
*&---------------------------------------------------------------------*
|
|
*& Zweck: Einmal-/periodischer Lauf. Zieht die eindeutige Zuordnung
|
|
*& PAPH1 -> WWPFA (Produktfamilie) -> WWPSP (Produktsparte)
|
|
*& aus den CO-PA-Einzelposten CE11000 und schreibt sie in
|
|
*& ZPRODSPARTE_MAP.
|
|
*&
|
|
*& Quelle der Wahrheit: CO-PA-Belege, in denen KEDR bereits abgeleitet hat.
|
|
*& PAPH1 mit mehreren Familie/Sparte-Kombinationen wird protokolliert und
|
|
*& nicht geschrieben.
|
|
*&
|
|
*& Hinweis: Dieser Report ist bewusst fix fuer CE11000 geschrieben.
|
|
*& Falls der Ergebnisbereich variabel sein soll, muss die CE1xxxx-Tabelle
|
|
*& dynamisch aus ERKRS gebildet werden.
|
|
*&---------------------------------------------------------------------*
|
|
REPORT z_prodsparte_map_build.
|
|
|
|
PARAMETERS p_test TYPE abap_bool DEFAULT 'X' AS CHECKBOX.
|
|
|
|
TYPES: BEGIN OF ty_combo,
|
|
paph1 TYPE ce11000-paph1,
|
|
wwpfa TYPE ce11000-wwpfa,
|
|
wwpsp TYPE ce11000-wwpsp,
|
|
END OF ty_combo.
|
|
|
|
TYPES: BEGIN OF ty_map,
|
|
paph1 TYPE ce11000-paph1,
|
|
wwpfa TYPE ce11000-wwpfa,
|
|
wwpsp TYPE ce11000-wwpsp,
|
|
cnt TYPE i,
|
|
END OF ty_map.
|
|
|
|
DATA gt_combo TYPE SORTED TABLE OF ty_combo
|
|
WITH UNIQUE KEY paph1 wwpfa wwpsp.
|
|
DATA gt_map TYPE STANDARD TABLE OF ty_map WITH DEFAULT KEY.
|
|
DATA gt_ambig TYPE STANDARD TABLE OF ty_combo WITH DEFAULT KEY.
|
|
|
|
START-OF-SELECTION.
|
|
|
|
SELECT DISTINCT paph1, wwpfa, wwpsp
|
|
FROM ce11000
|
|
INTO TABLE @gt_combo
|
|
WHERE paph1 <> @space
|
|
AND wwpfa <> @space
|
|
AND wwpsp <> @space. "#EC CI_NOFIELD
|
|
|
|
IF gt_combo IS INITIAL.
|
|
WRITE: / 'Keine Kombinationen in CE11000 gefunden. Abbruch.'.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
LOOP AT gt_combo INTO DATA(ls_combo).
|
|
READ TABLE gt_map INTO DATA(ls_map)
|
|
WITH KEY paph1 = ls_combo-paph1.
|
|
IF sy-subrc <> 0.
|
|
ls_map = VALUE ty_map(
|
|
paph1 = ls_combo-paph1
|
|
wwpfa = ls_combo-wwpfa
|
|
wwpsp = ls_combo-wwpsp
|
|
cnt = 1 ).
|
|
APPEND ls_map TO gt_map.
|
|
ELSEIF ls_map-wwpfa <> ls_combo-wwpfa
|
|
OR ls_map-wwpsp <> ls_combo-wwpsp.
|
|
ls_map-cnt = ls_map-cnt + 1.
|
|
MODIFY gt_map FROM ls_map TRANSPORTING cnt WHERE paph1 = ls_combo-paph1.
|
|
APPEND ls_combo TO gt_ambig.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
|
|
IF gt_ambig IS NOT INITIAL.
|
|
WRITE: / '=== WARNUNG: mehrdeutige PAPH1 (mehrere Familie/Sparte) ==='.
|
|
WRITE: / 'Diese werden NICHT in die Mapping-Tabelle geschrieben:'.
|
|
ULINE.
|
|
LOOP AT gt_ambig INTO ls_combo.
|
|
WRITE: / ls_combo-paph1, 12 ls_combo-wwpfa, 22 ls_combo-wwpsp.
|
|
ENDLOOP.
|
|
ULINE.
|
|
ENDIF.
|
|
|
|
DATA lt_insert TYPE STANDARD TABLE OF zprodsparte_map WITH DEFAULT KEY.
|
|
|
|
LOOP AT gt_map INTO ls_map WHERE cnt = 1.
|
|
APPEND VALUE zprodsparte_map(
|
|
paph1 = ls_map-paph1
|
|
wwpfa = ls_map-wwpfa
|
|
wwpsp = ls_map-wwpsp
|
|
crdate = sy-datum
|
|
cruser = sy-uname ) TO lt_insert.
|
|
ENDLOOP.
|
|
|
|
WRITE: / '=== Eindeutige Zuordnungen ==='.
|
|
WRITE: / 'PAPH1', 12 'Familie', 22 'Sparte'.
|
|
ULINE.
|
|
LOOP AT lt_insert INTO DATA(ls_insert).
|
|
WRITE: / ls_insert-paph1, 12 ls_insert-wwpfa, 22 ls_insert-wwpsp.
|
|
ENDLOOP.
|
|
ULINE.
|
|
WRITE: / 'Eindeutige Saetze :', lines( lt_insert ).
|
|
WRITE: / 'Mehrdeutige PAPH1 :', lines( gt_ambig ).
|
|
|
|
IF lt_insert IS INITIAL.
|
|
WRITE: / 'Keine eindeutigen Saetze, Tabelle wird nicht geloescht.'.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
IF p_test = abap_true.
|
|
WRITE: / 'TESTLAUF - keine DB-Aenderung. Haken entfernen zum Schreiben.'.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
DELETE FROM zprodsparte_map. "#EC CI_NOWHERE
|
|
INSERT zprodsparte_map FROM TABLE lt_insert.
|
|
IF sy-subrc = 0.
|
|
COMMIT WORK.
|
|
WRITE: / lines( lt_insert ), 'Saetze in ZPRODSPARTE_MAP geschrieben.'.
|
|
ELSE.
|
|
ROLLBACK WORK.
|
|
WRITE: / 'Fehler beim Schreiben, sy-subrc=', sy-subrc.
|
|
ENDIF.
|