ich verarbeite Feinplanabrufe per DELINS IDoc. Am Ende der Eingangsverarbeitung (IDOC) wird die VA32 aufgerufen. Im weiteren Verlauf der Verarbeitung wird in die Preisfindung abgesprungen und dabei geht der Nettopreis ZPR0 'verloren' bzw. diese Preiskondition fehlt dann und muss manuell nachgepflegt werden.
Was könnte die Ursache für dieses Systemverhalten sein?
Callstack:
1.) Module (PBO) XMKOMV_LESEN_N46
2.) FORM XKOMV_LESEN_N46
3.) Function 'PRICING_SELECT_LINE'
Preisfindungsart: E
TKOMV[] enthält alle relevanten Kondition für Pos 10 + 20 (Anmerk. In meinem Beispiel habe ich nur Pos 10 + 20):
-> FB 'PRICING_SELECT_LINE'
exporting
I_TKOMK[] = 1 Eintrag
I_TKOMP[] = 0 Eintrag
I_KPOSN = enthält die aktuelle Position
importing
...
E_KOMP = wird leer zurück geliefert!
laut Kunde existiert das gemeldete Problem mit den fehlenden ZPR0 Preisen nicht mehr.
Wenn ich mir aber das Coding und das Systemverhalten so anschaue, habe ich Zweifel, wie das funktionieren kann. Nachdem das IDOC (Typ: DELINS) im Verarbeitet wurde, wird eine CA32 aufgerufen. Diese TA gehört zum Modulpool SAPMV45A. Auf dem Dynpro 4916 werden dann die im IDOC vorhandenen Abrufe verarbeitet. Das Coding an dieser Stelle sieht ja auch recht trivial aus:
PBO:
...
Loop with Control TCTRL_U_ERF_LPZULI.
Module XVBAP_LESEN
-> Es wird die aktuelle Zeile nach XVBAP / VBAP gestellt
Module XKOMV_LESEN_N46
-> Perf. XKOMV_LESEN_N46(SAPFV45P)
-> FB 'PRICING_SELECT_LINE'
<- TKOMK[] "gefüllt
<- TKOMP[] "leer
<- KOMV-KSCHL "=ZPR0
<- LV_KPOSN "=aktuelle Pos.zeile
-> KOMV-KSCHL
-> KOMV-KBETR
-> KOMV-WAERS
-> TKOMK
-> TKOMP "leer
Der Baustein funktioniert vom Prinzip her, wie man es im Pricingumfeld kennt, ohne Probleme. Was will dieser Baustein auf Positionsebene zurückliefern, wenn die Tabelle TKOMP[] leer übergeben wird? - Irgendwo müsste es doch eine Wertübergaben von XVBAP/VBAP nach TKOMP geben, oder nicht?
Hat jm. irgendeine Idee, was dieses Phänomen verursacht?
Da wird so oft an unterschiedlichsten Stellen was nachgelesen, geändert, gelöscht, hinzugefügt und am Ende funktioniert es meistens trotzdem.
Wenn nicht, dann kann es buchstäblich alles mögliche sein.