Files

123 lines
4.7 KiB
Markdown

# 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`
## Anlage In SAP
- `ZCL_PRODSPARTE_PROVIDER.abap` ist eine globale Klasse bzw. ein Class Pool, kein ausfuehrbarer Report.
- In SE24 als Klasse `ZCL_PRODSPARTE_PROVIDER` anlegen und Definition/Implementation uebernehmen.
- Alternativ in SE38/ADT als Programtyp `Class Pool` anlegen; die Datei beginnt deshalb mit `CLASS-POOL zcl_prodsparte_provider`.
- `Z_PRODSPARTE_REPORT.abap` und `Z_PRODSPARTE_MAP_BUILD.abap` sind normale ausfuehrbare Reports.
Optional fuer Gateway/DDIC:
- Struktur `ZSTR_PRODSPARTE_OUT`
- Tabellentyp `ZTT_PRODSPARTE_OUT`
## DDIC-Hinweis Zu `ZSTR_PRODSPARTE_OUT`
Wenn `ZSTR_PRODSPARTE_OUT` in SE11 angelegt wird, duerfen `PAPH1`,
`WWPFA` und `WWPSP` nicht blind als Komponententypen eingetragen werden.
In manchen SAP-Systemen sind das keine aktiven globalen Datenelemente,
sondern nur Feldnamen in der CO-PA-Tabelle `CE11000`. Dann kann die
Nametab der Struktur nicht generiert werden.
Empfohlene Anlage:
| Komponente | Komponententyp / Alternative |
| --- | --- |
| `MATNR` | `MATNR` |
| `MAKTX` | `MAKTX` |
| `PAPH1` | eigenes Datenelement `ZDE_PAPH1` mit Laenge wie `CE11000-PAPH1`; aktuell fachlich erwartet: `CHAR 5` |
| `PAPH1_TEXT` | `VTEXT` oder eigenes Text-Datenelement |
| `WWPFA` | eigenes Datenelement `ZDE_WWPFA` mit exakt gleicher Laenge wie `CE11000-WWPFA` |
| `WWPFA_TEXT` | `BEZEK` oder eigenes Text-Datenelement |
| `WWPSP` | eigenes Datenelement `ZDE_WWPSP` mit exakt gleicher Laenge wie `CE11000-WWPSP` |
| `WWPSP_TEXT` | `BEZEK` oder eigenes Text-Datenelement |
| `IS_ASSIGNED` | `BOOLE_D` oder `XFELD` |
Alternativ kann die Struktur fuer den ersten ALV-Test entfallen, weil die
Provider-Klasse intern mit `CE11000-PAPH1`, `CE11000-WWPFA` und
`CE11000-WWPSP` typisiert. Fuer Gateway/OData ist eine globale Struktur
aber sinnvoll.
## 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"?
## Gateway-Stand 2026-05-29
Der bestehende Gateway-Service wurde erweitert, statt einen separaten
Service zu verwenden:
- Service: `ZPOWERBI_EINKAUF_SRV`
- Service Root: `http://travt762.sap.trafag.com:8000/sap/opu/odata/sap/ZPOWERBI_EINKAUF_SRV/`
- Entity Type: `ProductDivisionRef`
- Entity Set: `ProductDivisionRefSet`
- DDIC-Struktur fuer Entity Type: `ZSTR_PRODSPARTE_OUT`
Wichtig:
- `FINANZDATASCHWEI_GET_ENTITYSET` gehoert zum bestehenden Sales-EntitySet
und muss den bisherigen `SELECT * FROM zschweiz ...` behalten.
- Produktspartenlogik gehoert in die separat generierte/redefinierte Methode
`PRODUCTDIVISIONR_GET_ENTITYSET`.
- Wenn `/IWFND/MED/170` mit einem Servicenamen wie
`ZPOWERBI_EINKAUF_SRVPRODUCTDIVISIONRSET` erscheint, fehlt in der URL der
Slash zwischen Service und EntitySet.
Korrekte Test-URL:
```text
http://travt762.sap.trafag.com:8000/sap/opu/odata/sap/ZPOWERBI_EINKAUF_SRV/ProductDivisionRefSet
```
Gateway-Feldnamen, wie sie im Web-Mapping verwendet werden:
| Gateway-Feld | Web-Zielfeld |
| --- | --- |
| `Matnr` | Join gegen `Z.Matnr` |
| `Paph1` | `ProductHierarchyCode` |
| `Paph1Text` | `ProductHierarchyText` |
| `Wwpfa` | `ProductFamilyCode` |
| `WwpfaText` | `ProductFamilyText` |
| `Wwpsp` | `ProductDivisionCode` |
| `WwpspText` | `ProductDivisionText` |
| `IsAssigned` | `ProductMappingAssigned` |