Document ABAP product division mapping reports

This commit is contained in:
2026-05-28 14:43:13 +02:00
parent da0f39235c
commit c638529dd0
8 changed files with 458 additions and 5 deletions
@@ -0,0 +1,120 @@
*&---------------------------------------------------------------------*
*& 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.