Overblog
Edit post Folge diesem Blog Administration + Create my blog
SAPManDoo - SAP Resource

Der vorliegende Blog enthält von mir im Laufe meiner beruflichen Tätigkeit als SAP-Berater zusammengetragene Informationen / Beispiel-Codings zum Themenkreis SAP, speziell FI/CO.

Bestellpositionsfelder in Nachrichtenfindung verwenden

Veröffentlicht am 11. November 2021 von sapmandoo in MM

Lt. Hinweis 2398371 - Verwendung von Feldern auf Positionsebene (z.B. Werk) für die Nachrichtenfindung, ist es zwar grundsätzlich möglich, Felder aus der Bestellposition in die Zugriffsfolgen der Nachrichtenfindung einzufügen, jedoch werden diese nicht befüllt und sind somit zur Findung von Nachrichtenkonditionen unbrauchbar. 

Auszug aus HW 2398371:

Symptom

für die Nachrichtenfindung im MM-Einkaufsbereich möchten Sie Felder auf Positionsebene verwenden, z.B. Werk, Warengruppe usw. Sie fügen das entsprechende Feld zur Zugriffsfolge hinzu und pflegen dafür einen Konditionssatz, aber der Nachrichtensatz wird weiterhin nicht gefunden.

Ursache

Bei der Nachrichtenfindung wird nicht auf die Daten der einzelnen Positionen des Einkaufsbelegs (z.B. Tabelle EKPO oder EKET) zugegriffen, da die Werte in den positionsbezogenen Tabellenfeldern (z.B. EKPO-WERKS) von Position zu Position unterschiedlich sein können. Daher füllt das System das Feld auf Positionsebene (z.B. Werk usw.) nicht, so dass es den darauf basierenden Konditionssatz nicht finden kann.

Auflösung

In der SAP-Standardsoftware gibt es keine direkt unterstützte Lösung. 

Bei der Lösung handelt es sich um ein Beratungsthema. Die folgenden Informationen sollen Ihnen die Richtung geben, aber keine konkrete Beratungslösung bereitstellen und diese für Ihre eigene Verantwortung verwenden:

Folgen Sie z.B. einer ähnlichen Logik wie im SAP-Hinweis 39462 erwähnt und RVCOMFZZ FORM USEREXIT_KOMKBEA_FILL für benutzerdefiniertes ABAP-Coding, z.B. Speicherzuordnung ( '(SAPLMEPO)POT[]' ) oder ein direktes SQL-Lesen von EKPO-Daten aus der Datenbank.

Eine solche "Beraterlösung" soll im folgenden kurz vorgestellt werden. Folgendes Szenario sei gegeben:

Die Nachrichtenfindung soll in Abhängigkeit des Lieferwerkes erfolgen. Da dieses - wie richtig im o.g. Hinweis beschrieben - von Position zu Position unterschiedlich sein kann, soll es explizit aus der ersten Position der Bestellung gezogen werden.

Eine entsprechende Zugriffsfolge inkl. Nachrichten-Konditionstabelle sei bereits im Customizing angelegt worden und das Feld in der für die Bestellnachrichten relevanten Kommunikationsstruktur KOMKBEA heiße WERKS.

Das Customizing zur Nachrichtenfindung in der Bestellung findet sich im IMG unter Materialwirtschaft - Einkauf - Nachrichten - Ausgabesteuerung

Um nun das Feld WERKS in der Kommunikationsstruktur KOMKBEA im Rahmen der Nachrichtenfindung zu befüllen, muss es über einen Userexit versorgt werden. Hierzu sind gewisse Grundkenntnisse in der ABAP/4-Entwicklung vonnöten. Der entsprechende Userexit befindet sich im Programm RVCOMFZZ, Form USEREXIT_KOMKBEA_FILL.

Ein Mustercoding zur Bedienung der oben beschriebenen Anforderung könnte so aussehen:

*---------------------------------------------------------------------*
*       FORM USEREXIT_KOMKBEA_FILL                                    *
*---------------------------------------------------------------------*
*       This userexit can be used to move additional fields into the  *
*       communication table which is used for application EA          *
*---------------------------------------------------------------------*
FORM userexit_komkbea_fill.

* Werk aus der ersten Bestell-Position holen und in

* passendes Feld in Struktur KOMKBEA abfüllen

SELECT WERKS FROM EKPO INTO COM_KBEA-WERKS  "Feldname aus Zugriffsfolge

        WHERE EBELN = COM_EKKO-EBELN UP TO 1 ROWS

        ORDER BY EBELP ASCENDING.

ENDSELECT.

*  COM_KBEA-ZZFIELD1 = COM_EKKO-field.
ENDFORM.

 

Im Ergebnis wird das Feld WERKS im Zuge der Nachrichtenfindung befüllt und der Zugriff auf werksabhängige Nachrichtenkonditionen ist möglich.

Kommentiere diesen Post
M
Wie würde das Coding aussehen wenn man auf Lagerort Ebene die Zugriffsfolge aufbaut? BG
Antworten
S
Der Lagerort ist ja auch ein Feld innerhalb der Bestellposition. Dehalb funktioniert das analog zum Werk, Man fügt das Feld Lagerort in der Struktur KOMKBEA ein und versorgt es über den im Artikel genannten Userexit mit einem Wert.
M
Warum INTO COM_KBEA-WERKS und nicht INTO KOMKBEA-WERKS?<br /> Woher kommt die Sturktur COM_*** plötzlich?
Antworten
S
Weil die Struktur im rufenden Funktionsbaustein KOMKBEA_FILL nun mal so heißt...