Document ABAP product division mapping reports
This commit is contained in:
@@ -70,6 +70,70 @@ Sinnvolle technische Bausteine:
|
|||||||
- Export-/Excel-Spalten fuer die drei neuen Klassifikationen.
|
- Export-/Excel-Spalten fuer die drei neuen Klassifikationen.
|
||||||
- Pruefansicht fuer nicht zugeordnete Materialnummern.
|
- Pruefansicht fuer nicht zugeordnete Materialnummern.
|
||||||
|
|
||||||
|
## Nachtrag 2026-05-28 SAP-/ABAP-Zielbild
|
||||||
|
|
||||||
|
Nach weiterer Analyse mit Andreas-/SAP-Kontext ist das fuehrende Zielbild:
|
||||||
|
|
||||||
|
- SAP TR AG bleibt Quelle der Wahrheit fuer die Artikelzuordnung.
|
||||||
|
- Die Dashboard-App baut die KEDR-/KE30-Ableitungslogik nicht direkt in C# nach.
|
||||||
|
- Stattdessen wird eine flache Referenztabelle aus SAP bereitgestellt:
|
||||||
|
- `MATNR`
|
||||||
|
- `MAKTX`
|
||||||
|
- `PAPH1`
|
||||||
|
- `PAPH1_TEXT`
|
||||||
|
- `WWPFA`
|
||||||
|
- `WWPFA_TEXT`
|
||||||
|
- `WWPSP`
|
||||||
|
- `WWPSP_TEXT`
|
||||||
|
- `IS_ASSIGNED`
|
||||||
|
- Das Dashboard mappt spaeter Umsatzzeilen ueber `Material`/`MATNR` gegen diese Referenz.
|
||||||
|
- Falls die Materialnummer nicht in der Referenz enthalten ist oder keine eindeutige Ableitung existiert, wird die Zeile unter `Nicht zugeordnet` gefuehrt.
|
||||||
|
|
||||||
|
SAP-Felder / Annahmen:
|
||||||
|
|
||||||
|
- Materialnummer: `MATNR`
|
||||||
|
- Produkthierarchie aus Vertriebssicht: `MVKE-PRODH`
|
||||||
|
- CO-PA Merkmal fuer erste Produkthierarchieebene: `PAPH1`
|
||||||
|
- Produktfamilie: `WWPFA`
|
||||||
|
- Produktsparte: `WWPSP`
|
||||||
|
- Reale Ableitung kommt aus CO-PA/KEDR und ist in `CE11000` sichtbar.
|
||||||
|
|
||||||
|
ABAP-Artefakte wurden als Arbeitsstand im Repo abgelegt:
|
||||||
|
|
||||||
|
| Datei | Zweck |
|
||||||
|
| --- | --- |
|
||||||
|
| `docs/abap/ZCL_PRODSPARTE_PROVIDER.abap` | Globale Provider-Klasse fuer ALV und spaeter OData |
|
||||||
|
| `docs/abap/Z_PRODSPARTE_REPORT.abap` | ALV-Testreport, ruft Provider-Klasse |
|
||||||
|
| `docs/abap/Z_PRODSPARTE_MAP_BUILD.abap` | Baut `ZPRODSPARTE_MAP` aus eindeutigen CO-PA-Kombinationen |
|
||||||
|
| `docs/abap/README_PRODSPARTE.md` | Hinweise zu DDIC-Objekten und Pruefpunkten |
|
||||||
|
|
||||||
|
Vorgeschlagene SAP-Architektur:
|
||||||
|
|
||||||
|
1. `Z_PRODSPARTE_MAP_BUILD` liest eindeutige Kombinationen `PAPH1 -> WWPFA -> WWPSP` aus `CE11000`.
|
||||||
|
2. Mehrdeutige `PAPH1` werden protokolliert und nicht in die Mapping-Tabelle geschrieben.
|
||||||
|
3. Eindeutige Zuordnungen werden in `ZPRODSPARTE_MAP` geschrieben.
|
||||||
|
4. `ZCL_PRODSPARTE_PROVIDER` liest verkaufsrelevante Materialien aus `MVKE`, Texte aus `MAKT`/`T179T`/`T25A0`/`T25A1` und verbindet sie mit `ZPRODSPARTE_MAP`.
|
||||||
|
5. `Z_PRODSPARTE_REPORT` dient als ALV-Test.
|
||||||
|
6. Ein spaeterer SAP-Gateway/OData-Service ruft dieselbe Provider-Klasse auf.
|
||||||
|
|
||||||
|
Bewusst korrigierte Punkte im ABAP-Arbeitsstand:
|
||||||
|
|
||||||
|
- Provider-Logik ist global auslagerbar, nicht nur lokale Reportklasse.
|
||||||
|
- `MAKT` wird per `LEFT OUTER JOIN` gelesen, damit Materialien ohne Text nicht verschwinden.
|
||||||
|
- `VTWEG` ist optionaler Selektionsparameter.
|
||||||
|
- Bei mehreren Vertriebswegen gewinnt aktuell bewusst der kleinste `VTWEG`; dies ist noch fachlich zu bestaetigen.
|
||||||
|
- Fallback setzt technischen Code `UNASS`, Text `Nicht zugeordnet` und `IS_ASSIGNED = abap_false`.
|
||||||
|
- Mapping-Build schreibt die Tabelle nicht leer, falls keine eindeutigen Saetze aufgebaut wurden.
|
||||||
|
|
||||||
|
Noch zu pruefen:
|
||||||
|
|
||||||
|
- Ist `PAPH1 = MVKE-PRODH(5)` im Trafag-System exakt korrekt?
|
||||||
|
- Sind `T25A0` und `T25A1` die richtigen Text-/Customizingtabellen fuer Produktfamilie und Produktsparte?
|
||||||
|
- Ist `CE11000` der richtige CO-PA-Einzelposten fuer den relevanten Ergebnisbereich?
|
||||||
|
- Ist der Fallback-Code `UNASS` in Feld `WWPSP` zulaessig/lang genug?
|
||||||
|
- Soll `VTWEG` zwingend vorgegeben werden, statt den kleinsten Vertriebsweg zu verwenden?
|
||||||
|
- Welche VKORG ist fuer TR AG im produktiven Lauf massgebend?
|
||||||
|
|
||||||
## Offene Fragen Fuer Andreas / Kendra
|
## Offene Fragen Fuer Andreas / Kendra
|
||||||
|
|
||||||
| Frage | Warum wichtig |
|
| Frage | Warum wichtig |
|
||||||
@@ -86,4 +150,3 @@ Sinnvolle technische Bausteine:
|
|||||||
## Abgrenzung
|
## Abgrenzung
|
||||||
|
|
||||||
Dieser Task ist keine Finance-Soll/Ist-Regel. Die Klassifikation kann spaeter Finance- und Management-Auswertungen ergaenzen, sollte aber fachlich getrennt von Net-Sales-Abgrenzungen bleiben.
|
Dieser Task ist keine Finance-Soll/Ist-Regel. Die Klassifikation kann spaeter Finance- und Management-Auswertungen ergaenzen, sollte aber fachlich getrennt von Net-Sales-Abgrenzungen bleiben.
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# ABAP Produktsparten-Mapping
|
||||||
|
|
||||||
|
Stand: 2026-05-28
|
||||||
|
|
||||||
|
## Dateien
|
||||||
|
|
||||||
|
| Datei | Zweck |
|
||||||
|
| --- | --- |
|
||||||
|
| `ZCL_PRODSPARTE_PROVIDER.abap` | Wiederverwendbare Provider-Klasse fuer ALV und spaeter OData |
|
||||||
|
| `Z_PRODSPARTE_REPORT.abap` | Schlanker ALV-Testreport |
|
||||||
|
| `Z_PRODSPARTE_MAP_BUILD.abap` | Baut `ZPRODSPARTE_MAP` aus eindeutigen CO-PA-Kombinationen |
|
||||||
|
|
||||||
|
## Benoetigte SAP-Objekte
|
||||||
|
|
||||||
|
- Transparente Tabelle `ZPRODSPARTE_MAP`
|
||||||
|
- `MANDT`
|
||||||
|
- `PAPH1`
|
||||||
|
- `WWPFA`
|
||||||
|
- `WWPSP`
|
||||||
|
- `CRDATE`
|
||||||
|
- `CRUSER`
|
||||||
|
- Klasse `ZCL_PRODSPARTE_PROVIDER`
|
||||||
|
- Report `Z_PRODSPARTE_REPORT`
|
||||||
|
- Report `Z_PRODSPARTE_MAP_BUILD`
|
||||||
|
|
||||||
|
Optional fuer Gateway/DDIC:
|
||||||
|
|
||||||
|
- Struktur `ZSTR_PRODSPARTE_OUT`
|
||||||
|
- Tabellentyp `ZTT_PRODSPARTE_OUT`
|
||||||
|
|
||||||
|
## Gepruefte Anpassungen Gegenueber Erstentwurf
|
||||||
|
|
||||||
|
- Provider-Logik aus Report in globale Klasse ausgelagert.
|
||||||
|
- `MAKT` als `LEFT OUTER JOIN`, damit Materialien ohne Text nicht verloren gehen.
|
||||||
|
- `VTWEG` als optionaler Parameter.
|
||||||
|
- Bei mehreren Vertriebswegen gewinnt bewusst der kleinste `VTWEG`.
|
||||||
|
- Fallback setzt technischen Code `UNASS`, Text `Nicht zugeordnet` und `IS_ASSIGNED = abap_false`.
|
||||||
|
- `gt_ambig` im Mapping-Build ist korrekt als `ty_combo` typisiert.
|
||||||
|
- `p_erkrs` wurde entfernt, weil der Report fix aus `CE11000` liest.
|
||||||
|
- Leerschreiben von `ZPRODSPARTE_MAP` wird verhindert, wenn keine eindeutigen Saetze aufgebaut wurden.
|
||||||
|
|
||||||
|
## Noch Fachlich/Technisch Zu Pruefen
|
||||||
|
|
||||||
|
- Ist `PAPH1 = MVKE-PRODH(5)` im Trafag-System exakt korrekt?
|
||||||
|
- Sind `T25A0` fuer Produktfamilie und `T25A1` fuer Produktsparte die richtigen Texttabellen?
|
||||||
|
- Ist `CE11000` der richtige CO-PA-Einzelposten fuer den relevanten Ergebnisbereich?
|
||||||
|
- Ist Fallback-Code `UNASS` in Feld `WWPSP` lang genug/zulässig?
|
||||||
|
- Soll `VTWEG` zwingend selektiert werden statt "kleinster VTWEG gewinnt"?
|
||||||
|
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
CLASS zcl_prodsparte_provider DEFINITION
|
||||||
|
PUBLIC
|
||||||
|
FINAL
|
||||||
|
CREATE PUBLIC.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
TYPES: BEGIN OF ty_out,
|
||||||
|
matnr TYPE matnr,
|
||||||
|
maktx TYPE maktx,
|
||||||
|
paph1 TYPE ce11000-paph1,
|
||||||
|
paph1_text TYPE vtext,
|
||||||
|
wwpfa TYPE ce11000-wwpfa,
|
||||||
|
wwpfa_text TYPE bezek,
|
||||||
|
wwpsp TYPE ce11000-wwpsp,
|
||||||
|
wwpsp_text TYPE bezek,
|
||||||
|
is_assigned TYPE abap_bool,
|
||||||
|
END OF ty_out.
|
||||||
|
TYPES tt_out TYPE STANDARD TABLE OF ty_out WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
METHODS get_data
|
||||||
|
IMPORTING
|
||||||
|
iv_vkorg TYPE vkorg
|
||||||
|
iv_vtweg TYPE vtweg OPTIONAL
|
||||||
|
iv_spras TYPE spras DEFAULT sy-langu
|
||||||
|
iv_fallback TYPE bezek DEFAULT 'Nicht zugeordnet'
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_out) TYPE tt_out.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS zcl_prodsparte_provider IMPLEMENTATION.
|
||||||
|
METHOD get_data.
|
||||||
|
TYPES: BEGIN OF ty_base,
|
||||||
|
matnr TYPE mvke-matnr,
|
||||||
|
vtweg TYPE mvke-vtweg,
|
||||||
|
prodh TYPE mvke-prodh,
|
||||||
|
maktx TYPE makt-maktx,
|
||||||
|
END OF ty_base.
|
||||||
|
|
||||||
|
DATA lt_base TYPE STANDARD TABLE OF ty_base WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
IF iv_vtweg IS INITIAL.
|
||||||
|
SELECT mvke~matnr,
|
||||||
|
mvke~vtweg,
|
||||||
|
mvke~prodh,
|
||||||
|
makt~maktx
|
||||||
|
FROM mvke
|
||||||
|
LEFT OUTER JOIN makt
|
||||||
|
ON makt~matnr = mvke~matnr
|
||||||
|
AND makt~spras = @iv_spras
|
||||||
|
INTO TABLE @lt_base
|
||||||
|
WHERE mvke~vkorg = @iv_vkorg
|
||||||
|
AND mvke~prodh <> @space. "#EC CI_NOFIELD
|
||||||
|
ELSE.
|
||||||
|
SELECT mvke~matnr,
|
||||||
|
mvke~vtweg,
|
||||||
|
mvke~prodh,
|
||||||
|
makt~maktx
|
||||||
|
FROM mvke
|
||||||
|
LEFT OUTER JOIN makt
|
||||||
|
ON makt~matnr = mvke~matnr
|
||||||
|
AND makt~spras = @iv_spras
|
||||||
|
INTO TABLE @lt_base
|
||||||
|
WHERE mvke~vkorg = @iv_vkorg
|
||||||
|
AND mvke~vtweg = @iv_vtweg
|
||||||
|
AND mvke~prodh <> @space. "#EC CI_NOFIELD
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lt_base IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
"Falls mehrere Vertriebswege gelesen werden, gewinnt bewusst der kleinste VTWEG.
|
||||||
|
SORT lt_base BY matnr vtweg.
|
||||||
|
DELETE ADJACENT DUPLICATES FROM lt_base COMPARING matnr.
|
||||||
|
|
||||||
|
SELECT paph1, wwpfa, wwpsp
|
||||||
|
FROM zprodsparte_map
|
||||||
|
INTO TABLE @DATA(lt_map). "#EC CI_NOWHERE
|
||||||
|
SORT lt_map BY paph1.
|
||||||
|
|
||||||
|
SELECT prodh, vtext
|
||||||
|
FROM t179t
|
||||||
|
INTO TABLE @DATA(lt_h)
|
||||||
|
WHERE spras = @iv_spras. "#EC CI_NOFIELD
|
||||||
|
SORT lt_h BY prodh.
|
||||||
|
|
||||||
|
SELECT wwpfa, bezek
|
||||||
|
FROM t25a0
|
||||||
|
INTO TABLE @DATA(lt_fam)
|
||||||
|
WHERE spras = @iv_spras. "#EC CI_NOFIELD
|
||||||
|
SORT lt_fam BY wwpfa.
|
||||||
|
|
||||||
|
SELECT wwpsp, bezek
|
||||||
|
FROM t25a1
|
||||||
|
INTO TABLE @DATA(lt_spa)
|
||||||
|
WHERE spras = @iv_spras. "#EC CI_NOFIELD
|
||||||
|
SORT lt_spa BY wwpsp.
|
||||||
|
|
||||||
|
LOOP AT lt_base INTO DATA(ls_base).
|
||||||
|
DATA(ls_out) = VALUE ty_out(
|
||||||
|
matnr = ls_base-matnr
|
||||||
|
maktx = ls_base-maktx
|
||||||
|
paph1 = ls_base-prodh(5)
|
||||||
|
wwpsp = 'UNASS'
|
||||||
|
wwpsp_text = iv_fallback
|
||||||
|
is_assigned = abap_false ).
|
||||||
|
|
||||||
|
READ TABLE lt_h INTO DATA(ls_h)
|
||||||
|
WITH KEY prodh = ls_base-prodh BINARY SEARCH.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ls_out-paph1_text = ls_h-vtext.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_map INTO DATA(ls_m)
|
||||||
|
WITH KEY paph1 = ls_out-paph1 BINARY SEARCH.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ls_out-wwpfa = ls_m-wwpfa.
|
||||||
|
ls_out-wwpsp = ls_m-wwpsp.
|
||||||
|
ls_out-is_assigned = abap_true.
|
||||||
|
|
||||||
|
READ TABLE lt_fam INTO DATA(ls_f)
|
||||||
|
WITH KEY wwpfa = ls_m-wwpfa BINARY SEARCH.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ls_out-wwpfa_text = ls_f-bezek.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE lt_spa INTO DATA(ls_s)
|
||||||
|
WITH KEY wwpsp = ls_m-wwpsp BINARY SEARCH.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
ls_out-wwpsp_text = ls_s-bezek.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
APPEND ls_out TO rt_out.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
@@ -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.
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Report Z_PRODSPARTE_REPORT
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Zweck: ALV-Testreport fuer die flache Referenztabelle:
|
||||||
|
*& MATNR, MAKTX, PAPH1, PAPH1_TEXT,
|
||||||
|
*& WWPFA, WWPFA_TEXT, WWPSP, WWPSP_TEXT, IS_ASSIGNED.
|
||||||
|
*&
|
||||||
|
*& Kernlogik liegt in ZCL_PRODSPARTE_PROVIDER->GET_DATA( ).
|
||||||
|
*& Ein spaeterer SAP-Gateway/OData-Service soll dieselbe Methode nutzen.
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
REPORT z_prodsparte_report.
|
||||||
|
|
||||||
|
PARAMETERS p_vkorg TYPE vkorg OBLIGATORY.
|
||||||
|
PARAMETERS p_vtweg TYPE vtweg.
|
||||||
|
PARAMETERS p_spras TYPE spras DEFAULT sy-langu.
|
||||||
|
PARAMETERS p_fallb TYPE bezek DEFAULT 'Nicht zugeordnet'.
|
||||||
|
|
||||||
|
START-OF-SELECTION.
|
||||||
|
|
||||||
|
DATA(lo_provider) = NEW zcl_prodsparte_provider( ).
|
||||||
|
DATA(lt_result) = lo_provider->get_data(
|
||||||
|
iv_vkorg = p_vkorg
|
||||||
|
iv_vtweg = p_vtweg
|
||||||
|
iv_spras = p_spras
|
||||||
|
iv_fallback = p_fallb ).
|
||||||
|
|
||||||
|
IF lt_result IS INITIAL.
|
||||||
|
MESSAGE 'Keine Daten - VKORG/VTWEG pruefen.' TYPE 'I'.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
cl_salv_table=>factory(
|
||||||
|
IMPORTING
|
||||||
|
r_salv_table = DATA(lo_alv)
|
||||||
|
CHANGING
|
||||||
|
t_table = lt_result ).
|
||||||
|
|
||||||
|
lo_alv->get_functions( )->set_all( abap_true ).
|
||||||
|
lo_alv->get_columns( )->set_optimize( abap_true ).
|
||||||
|
lo_alv->display( ).
|
||||||
@@ -8,6 +8,7 @@ Stand: 2026-05-27
|
|||||||
- Zentrale Persistenz ueber `CentralSalesRecords`.
|
- Zentrale Persistenz ueber `CentralSalesRecords`.
|
||||||
- Finance-Auswertung und zentrale Excel sollen dieselbe Regelengine verwenden.
|
- Finance-Auswertung und zentrale Excel sollen dieselbe Regelengine verwenden.
|
||||||
- Produktsparten-Mapping ist als eigene Mapping-Schicht vorgesehen, nicht als versteckte Finance-Regel.
|
- Produktsparten-Mapping ist als eigene Mapping-Schicht vorgesehen, nicht als versteckte Finance-Regel.
|
||||||
|
- Produktsparten-Referenz soll ueber SAP/ABAP bzw. Gateway als flache Tabelle geliefert werden.
|
||||||
- Diagramme und Anwenderdokus existieren fuer Keyuser-Prozess und technische Architektur.
|
- Diagramme und Anwenderdokus existieren fuer Keyuser-Prozess und technische Architektur.
|
||||||
|
|
||||||
## Rohquellen Nur Bei Bedarf
|
## Rohquellen Nur Bei Bedarf
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ Stand: 2026-05-27
|
|||||||
|
|
||||||
- Neue Anforderung: Artikel aus dem Group Sales Report sollen anhand der TR-AG-Zuordnung klassifiziert werden.
|
- Neue Anforderung: Artikel aus dem Group Sales Report sollen anhand der TR-AG-Zuordnung klassifiziert werden.
|
||||||
- Ziel-Felder: `Produkthierarchie`, `Produktfamilie`, `Produktsparte`.
|
- Ziel-Felder: `Produkthierarchie`, `Produktfamilie`, `Produktsparte`.
|
||||||
- Produkthierarchie kommt direkt aus TR-AG-Artikelstammdaten.
|
- SAP TR AG bleibt Quelle der Wahrheit.
|
||||||
- Produktfamilie und Produktsparte kommen danach ueber separate Mapping-Tabelle.
|
- Dashboard soll KEDR-/KE30-Ableitung nicht in C# nachbauen.
|
||||||
- Nicht gefundene Materialnummern laufen unter `Sonstige/ohne Zuordnung`.
|
- ABAP/Gateway soll eine flache Referenz liefern: `MATNR -> PAPH1 -> WWPFA -> WWPSP`.
|
||||||
|
- Nicht gefundene oder nicht eindeutig ableitbare Materialnummern laufen unter `Nicht zugeordnet`.
|
||||||
|
|
||||||
## Aktueller Code-Stand
|
## Aktueller Code-Stand
|
||||||
|
|
||||||
@@ -17,6 +18,21 @@ Stand: 2026-05-27
|
|||||||
- SAP-Seed-Mapping nutzt aktuell `Z.Matnr` -> `Material` und `Z.Prodh` -> `ProductGroup`.
|
- SAP-Seed-Mapping nutzt aktuell `Z.Matnr` -> `Material` und `Z.Prodh` -> `ProductGroup`.
|
||||||
- Zu klaeren: Ist `Z.Prodh` fachlich die Produkthierarchie?
|
- Zu klaeren: Ist `Z.Prodh` fachlich die Produkthierarchie?
|
||||||
|
|
||||||
|
## ABAP-Arbeitsstand
|
||||||
|
|
||||||
|
- `docs/abap/ZCL_PRODSPARTE_PROVIDER.abap`: Provider fuer ALV und spaeter OData.
|
||||||
|
- `docs/abap/Z_PRODSPARTE_REPORT.abap`: ALV-Testreport.
|
||||||
|
- `docs/abap/Z_PRODSPARTE_MAP_BUILD.abap`: baut `ZPRODSPARTE_MAP` aus `CE11000`.
|
||||||
|
- `docs/abap/README_PRODSPARTE.md`: DDIC- und Pruefhinweise.
|
||||||
|
|
||||||
|
## SAP-Zielbild
|
||||||
|
|
||||||
|
- `Z_PRODSPARTE_MAP_BUILD` liest reale CO-PA-Ableitungen aus `CE11000`.
|
||||||
|
- Eindeutige `PAPH1 -> WWPFA -> WWPSP` werden in `ZPRODSPARTE_MAP` gespeichert.
|
||||||
|
- Mehrdeutige PAPH1 werden protokolliert und nicht geschrieben.
|
||||||
|
- `ZCL_PRODSPARTE_PROVIDER` liest `MVKE-PRODH`, Texte und Mapping.
|
||||||
|
- OData-Service ruft spaeter dieselbe Provider-Klasse.
|
||||||
|
|
||||||
## Offene Punkte Fuer Sitzung
|
## Offene Punkte Fuer Sitzung
|
||||||
|
|
||||||
- Quelle und Format des TR-AG-Artikelstamms.
|
- Quelle und Format des TR-AG-Artikelstamms.
|
||||||
@@ -25,8 +41,10 @@ Stand: 2026-05-27
|
|||||||
- Matching-Regeln: exakt, Prefix, Range, Prioritaet.
|
- Matching-Regeln: exakt, Prefix, Range, Prioritaet.
|
||||||
- Historisierung der Zuordnung fuer reproduzierbare Reports.
|
- Historisierung der Zuordnung fuer reproduzierbare Reports.
|
||||||
- Pruefansicht fuer nicht zugeordnete Artikel.
|
- Pruefansicht fuer nicht zugeordnete Artikel.
|
||||||
|
- `PAPH1 = MVKE-PRODH(5)` fachlich/technisch bestaetigen.
|
||||||
|
- Richtige Texttabellen fuer `WWPFA`/`WWPSP` bestaetigen.
|
||||||
|
- VKORG/VTWEG fuer TR-AG-Referenzlauf bestaetigen.
|
||||||
|
|
||||||
## Rohquelle Nur Bei Bedarf
|
## Rohquelle Nur Bei Bedarf
|
||||||
|
|
||||||
- Detaildoku: `docs/PRODUCT_SPARTEN_MAPPING_2026-05-27.md`
|
- Detaildoku: `docs/PRODUCT_SPARTEN_MAPPING_2026-05-27.md`
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,31 @@ Diese Datei ist fuer tokenarme RAG-Nutzung komprimiert.
|
|||||||
- Neu dokumentiert: Produktsparten-Mapping fuer Group Sales Report ueber TR-AG-Artikelstamm und separate Mapping-Tabelle.
|
- Neu dokumentiert: Produktsparten-Mapping fuer Group Sales Report ueber TR-AG-Artikelstamm und separate Mapping-Tabelle.
|
||||||
- Neu dokumentiert: Upgreat-Firewall-Freigabe muss fuer den publizierten Webserver `10.120.1.17` erfolgen, nicht fuer den lokalen Entwicklungs-PC.
|
- Neu dokumentiert: Upgreat-Firewall-Freigabe muss fuer den publizierten Webserver `10.120.1.17` erfolgen, nicht fuer den lokalen Entwicklungs-PC.
|
||||||
- Neu umgesetzt: `Management Analyse` im Finance Cockpit hat zusaetzliche Reiter fuer Laender, Datenstatus, Abweichungen, Gutschriften-Kandidaten und Datenqualitaet.
|
- Neu umgesetzt: `Management Analyse` im Finance Cockpit hat zusaetzliche Reiter fuer Laender, Datenstatus, Abweichungen, Gutschriften-Kandidaten und Datenqualitaet.
|
||||||
|
- Neu erstellt: ABAP-Arbeitsstand fuer Produktsparten-Mapping mit Provider-Klasse, ALV-Report und Mapping-Build-Report.
|
||||||
|
|
||||||
|
## Nachtrag 2026-05-28 ABAP Produktsparten-Mapping
|
||||||
|
|
||||||
|
Erstellt:
|
||||||
|
|
||||||
|
- `docs/abap/ZCL_PRODSPARTE_PROVIDER.abap`
|
||||||
|
- `docs/abap/Z_PRODSPARTE_REPORT.abap`
|
||||||
|
- `docs/abap/Z_PRODSPARTE_MAP_BUILD.abap`
|
||||||
|
- `docs/abap/README_PRODSPARTE.md`
|
||||||
|
|
||||||
|
Dokumentierter Zielansatz:
|
||||||
|
|
||||||
|
- SAP TR AG bleibt Quelle der Wahrheit fuer `MATNR -> PAPH1 -> WWPFA -> WWPSP`.
|
||||||
|
- Mapping-Build liest reale CO-PA-Ableitungen aus `CE11000` und schreibt eindeutige Saetze in `ZPRODSPARTE_MAP`.
|
||||||
|
- Provider liest verkaufsrelevante Materialien aus `MVKE`, Texte aus SAP-Texttabellen und Mapping aus `ZPRODSPARTE_MAP`.
|
||||||
|
- ALV-Report und spaeter OData sollen dieselbe Provider-Methode verwenden.
|
||||||
|
- Nicht zugeordnete Materialien erhalten Fallback `UNASS` / `Nicht zugeordnet`.
|
||||||
|
|
||||||
|
Offen:
|
||||||
|
|
||||||
|
- `PAPH1 = MVKE-PRODH(5)` bestaetigen.
|
||||||
|
- Texttabellen `T25A0`/`T25A1` bestaetigen.
|
||||||
|
- Relevante `VKORG`/`VTWEG` fuer TR AG festlegen.
|
||||||
|
- `CE11000` als richtige CO-PA-Quelle bestaetigen.
|
||||||
|
|
||||||
## Nachtrag 2026-05-28 Finance Management Analyse Reiter
|
## Nachtrag 2026-05-28 Finance Management Analyse Reiter
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user