37
Jürgen Schwaninger ABAP -Programmierung für die SAP ® -Materialwirtschaft – User-Exits und BAdIs Bonn Boston

ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Embed Size (px)

Citation preview

Page 1: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Jürgen Schwaninger

ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs

Bonn � Boston

1537.book Seite 3 Freitag, 2. Juli 2010 8:40 08

Page 2: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

5

Inhalt

Vorwort ................................................................................................... 9

1 Einleitung ............................................................................. 11

2 Allgemeines zu User-Exits und BAdIs .................................. 15

2.1 Verwendung von User-Exits ..................................................... 152.1.1 Erweiterungen finden und anschauen .......................... 162.1.2 Projekt anlegen und Erweiterungen zuordnen ............. 162.1.3 Komponenten des Projektes verwenden ..................... 172.1.4 Projekte aktivieren und deaktivieren ........................... 19

2.2 Verwendung von klassischen BAdIs ......................................... 202.2.1 BAdIs finden und anschauen ....................................... 202.2.2 BAdI-Implementierung anlegen .................................. 222.2.3 Arbeiten mit Methoden .............................................. 232.2.4 BAdIs aktivieren und deaktivieren ............................... 252.2.5 Erweiterte Bearbeitungsmöglichkeiten ........................ 25

2.3 Verwendung von neuen BAdIs (Erweiterungsspots) ................. 262.3.1 SAP Enhancement Framework ..................................... 262.3.2 Erweiterungsspots finden und anschauen .................... 272.3.3 Erweiterungsimplementierung anlegen ........................ 282.3.4 Arbeiten mit Methoden .............................................. 302.3.5 BAdIs aktivieren und deaktivieren ............................... 31

3 User-Exits und BAdIs im Einkauf ......................................... 33

3.1 Kundeneigene Felder in Bestellungen ...................................... 333.1.1 Überblick über die Implementierung ........................... 343.1.2 Implementierung eigener Bestelldaten und der

Funktionsgruppe ......................................................... 383.1.3 Integration der eigenen Felder in die BAdIs ................. 503.1.4 Anbindung der Kundenfelder an die Geschäftslogik .... 573.1.5 Initialisierung, Lesen und Verbuchung der Daten ........ 643.1.6 Ausgabe von Fehlermeldungen ................................... 66

3.2 Anpassung der Belegübersicht in Bestellanforderungen oder Bestellungen ............................................................................ 683.2.1 Entfernung einer Standardselektionsvariante ............... 693.2.2 Eigene Selektionsvarianten einfügen ........................... 71

1537.book Seite 5 Freitag, 2. Juli 2010 8:40 08

Page 3: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Inhalt

6

4 User-Exits und BAdIs in der Dienstleistungsabwicklung .... 79

4.1 Kontierung für Leistungszeilen vorbelegen ............................... 794.2 Eingabeüberprüfung der Leistungszeilen .................................. 82

4.2.1 Felder in EXIT_SAPLMLSP_030 vorbelegen ................. 834.2.2 Eingabeüberprüfung in EXIT_SAPLMLSP_031 .............. 84

4.3 Vorbelegung der Kopfdaten im Erfassungsblatt ........................ 85

5 User-Exits und BAdIs in der Bestandsführung .................... 89

5.1 Eigene Felder in Transaktion MIGO ......................................... 895.1.1 Kundeneigene Felder – ein Überblick .......................... 905.1.2 Vorbereitungen im Dictionary ..................................... 935.1.3 Vorbereitung der Funktionsgruppe .............................. 945.1.4 Vorbereitung und Statusverwaltung in

MB_MIGO_BADI ........................................................ 1015.1.5 Aktivierung der eigenen Kopfdaten ............................. 1065.1.6 Aktivierung der eigenen Positionsdaten ...................... 1095.1.7 Verbuchung der Daten ................................................ 113

5.2 Weitere Funktionen des BAdIs MB_MIGO_BADI ..................... 1155.2.1 Merken der eigenen Daten ......................................... 1155.2.2 Eingabeüberprüfungen in Transaktion MIGO ............... 120

5.3 Standardfelder prüfen und vorbelegen ..................................... 1225.3.1 Vorbelegung von Lagerort und Positionstext ............... 1235.3.2 Prüfung der Standardfelder ......................................... 123

5.4 Prüfung des frühesten Lieferdatums ......................................... 1245.5 Toleranzgrenzen zu Lieferplänen .............................................. 126

5.5.1 Überlieferungsmenge überschreiben ........................... 1275.5.2 Vorschlagsmenge überschreiben ................................. 129

5.6 Erweiterung von Reservierungen .............................................. 1315.6.1 Felder vorbelegen ....................................................... 1325.6.2 Überprüfung der Eingabe ............................................ 135

6 User-Exits und BAdIs im Bereich Bewertung und Kontierung ........................................................................... 137

6.1 WE/RE-Verrechnungskonto ..................................................... 1376.2 Übersteuerung der Kontenfindung im User-Exit ....................... 139

1537.book Seite 6 Freitag, 2. Juli 2010 8:40 08

Page 4: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Inhalt

7

7 User-Exits und BAdIs in der Logistik-Rechnungsprüfung ... 143

7.1 Kundeneigene Felder in Transaktion MIRO .............................. 1437.1.1 Überblick über die Lösung per BAdI ............................ 1447.1.2 BAdI im Detail – Anpassungen im Dictionary .............. 1467.1.3 Eigenes Dynpro mit Table Control erstellen ................. 1497.1.4 Vorbereitung der Daten im BAdI ................................. 1537.1.5 Zurück im Dynpro ....................................................... 157

7.2 Toleranzprüfungen übersteuern ............................................... 1637.2.1 Toleranzgrenzen im Customizing ................................. 1637.2.2 Nutzung der Erweiterung ............................................ 164

8 Validierung und Substitution von Buchhaltungsbelegen .... 169

8.1 Validierung von Buchhaltungsbelegen ..................................... 1708.1.1 Zeitpunkte .................................................................. 1708.1.2 Schritte ....................................................................... 1718.1.3 Beispiel ohne Exit-Routine .......................................... 1728.1.4 Beispiel mit Exit-Routine ............................................. 175

8.2 Substitution von Buchhaltungsbelegen .................................... 1808.2.1 Substitution ohne Exit-Routine ................................... 1828.2.2 Substitution mit Exit-Routine ...................................... 1838.2.3 Lesender Zugriff auf Daten des Ursprungsbelegs .......... 187

Anhang

A User-Exits und BAdIs in der SAP-Materialwirtschaft ........................... 191A.1 Einkauf .................................................................................... 192

A.1.1 Bestellanforderungen allgemein .................................. 192A.1.2 Bestellungen allgemein ............................................... 197A.1.3 Rahmenverträge (Lieferpläne/Kontrakte) ..................... 202A.1.4 Preisfindung ................................................................ 206A.1.5 Obligofunktionen ........................................................ 207A.1.6 Belegübergreifend ....................................................... 209A.1.7 Lieferantenbeurteilung ................................................ 212A.1.8 IDoc-Verarbeitung ...................................................... 213A.1.9 Logistik-Informationssystem ........................................ 214A.1.10 Archivierung ............................................................... 215

A.2 Dienstleistungsabwicklung ....................................................... 218A.3 Bestandsführung ...................................................................... 224

A.3.1 Materialbelege allgemein ............................................ 224A.3.2 Wareneingang ............................................................. 229

1537.book Seite 7 Freitag, 2. Juli 2010 8:40 08

Page 5: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Inhalt

8

A.3.3 Reservierungen ........................................................... 232A.3.4 Archivierung ............................................................... 233

A.4 Bewertung und Kontierung ...................................................... 235A.5 Logistik-Rechnungsprüfung ...................................................... 237

A.5.1 Allgemein ................................................................... 237A.5.2 Archivierung ............................................................... 250A.5.3 Herkömmliche Rechnungsprüfung ............................... 251

B Der Autor ........................................................................................... 253

Index ........................................................................................................ 255

1537.book Seite 8 Freitag, 2. Juli 2010 8:40 08

Page 6: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

89

5 User-Exits und BAdIs in der Bestands-führung

Unter dem Begriff der Bestandsführung werden in der SAP-Materialwirt-schaft – grob betrachtet – die wert- und mengenmäßige Verwaltung allerLagerbestände sowie die zugehörigen Warenbewegungen zusammengefasst.Da die in diesem Kernbereich denkbaren Prozesse sehr umfangreich sind,gibt es auch im System entsprechend viele Einstellmöglichkeiten. Dies spie-gelt sich auch in der Anzahl der möglichen programmtechnischen Erweite-rungen wider. In diesem Kapitel lernen Sie die wichtigsten Erweiterungender Bestandsführung kennen.

5.1 Eigene Felder in Transaktion MIGO

Mit der Einführung der zentralen Transaktion MIGO für alle Warenbewe-gungen steht auch ein mächtiges BAdI zur Verfügung – MB_MIGO_BADI. Mitdiesem BAdI können Sie kundeneigene Felder als eigene Karteireiter aufKopf- und Positionsebene einbinden und verbuchen, auch können Sie Einga-beüberprüfungen auf Ihre eigenen Felder durchführen oder manche Stan-dardfelder mit Vorgabewerten belegen.

Anzeige der eigenen Daten

Wenn Sie das folgende Beispiel ausführen, werden Sie unter Umständen feststel-len, dass die nachträgliche Anzeige der Daten eines gebuchten Materialbelegs aufPositionsebene nicht funktioniert. Dies ist dann der Fall, wenn sich der SAP-Hin-weis 1029951 entweder durch manuelles Einspielen oder durch Einspielen vonSupport Packages in Ihrem System befindet.

Durch die Änderungen aus diesem Hinweis, wird die eigentlich zum Lesen derPositionsdaten aus der Datenbank vorgesehene Methode LINE_MODIFY bei derAnzeige von Materialbelegen nicht mehr durchlaufen. Es ist leider nicht möglich,eine andere Methode dafür zu verwenden, da in allen anderen relevanten Metho-den die zugehörigen Standardpositionsdaten (Struktur GOITEM) nicht zur Verfü-gung stehen und Sie daher keine Zuordnung Ihrer Daten zu einer bestimmtenBelegzeile vornehmen können.

1537.book Seite 89 Freitag, 2. Juli 2010 8:40 08

Page 7: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

90

5.1.1 Kundeneigene Felder – ein Überblick

Die Mächtigkeit des BAdIs MB_MIGO_BADI bringt jedoch eine gewisse Komple-xität mit sich; es existieren 17 Methoden, die zu unterschiedlichsten Zeit-punkten aufgerufen werden. Um das nachfolgende Beispiel dennoch über-sichtlich zu halten, werden Sie zunächst nur den Einbau von eigenen Feldernauf Kopf- und Positionsebene betrachten (siehe Abbildung 5.1). Dies redu-ziert das BAdI auf elf Methoden, mit denen die Minimalanforderungenerfüllt werden können. In einem zweiten Schritt lernen Sie dann die Funk-tion der übrigen Methoden in einem kurzen Überblick kennen.

Funktionsgruppe zur Verwaltung der Dynpros

Ähnlich wie bei den kundeneigenen Feldern in der Bestellung (sieheAbschnitt 3.1, »Kundeneigene Felder in Bestellungen«) benötigen Sie auchhier zunächst wieder eine Funktionsgruppe zur Aufnahme der Dynprossowie einiger Funktionsbausteine zum Datenaustausch und zum Verbuchen

Mit dem SAP-Hinweis 1477221 wird die Methode LINE_MODIFY wieder durchlau-fen. Sollte dieser Hinweis noch nicht für Kunden freigegeben sein, wenn Sie dieseZeilen lesen, können Sie die für den Aufruf der Methode relevante Programmstelle– wie in SAP-Hinweis 1136344 beschrieben – modifizieren. In beiden Fällen wirddas hier abgedruckte Beispiel voll funktionsfähig sein.

Abbildung 5.1 Eigene Felder in Transaktion MIGO

1537.book Seite 90 Freitag, 2. Juli 2010 8:40 08

Page 8: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Eigene Felder in Transaktion MIGO 5.1

91

der eigenen Felder. Doch diese Funktionsgruppe kann für das BAdI MB_MIGO_BADI deutlich einfacher realisiert werden und muss weniger Aufgaben über-nehmen.

In der Bestellung mussten Sie mit zwei BAdIs arbeiten, um die kundeneige-nen Felder zu aktivieren. Die Funktionsgruppe musste daher nicht nur dieKommunikation mit den Dynpros übernehmen, sondern auch die Kommu-nikation zwischen den BAdIs abbilden. Für Transaktion MIGO können Siejedoch alle notwendigen Schritte direkt im BAdI MB_MIGO_BADI ausführen,und die zusätzliche Kommunikation mit einem anderen BAdI entfällt. Esreicht somit aus, wenn Sie in der Funktionsgruppe je ein Dynpro für dieKopf- und Positionsdaten anlegen und für jedes Dynpro zwei Funktionsbau-steine erstellen, um die Daten ins Dynpro zu stellen und zurückzuholen.Darüber hinaus ist ein Verbuchungsbaustein erforderlich, um Ihre eigenenDaten zu sichern. Für die Buchung Ihrer eigenen Daten müssen Sie eigeneTabellen im Dictionary definieren.

Nutzung des BAdIs MB_MIGO_BADI

Sobald Sie die Funktionsgruppe erstellt haben, können Sie mit der Imple-mentierung des BAdIs beginnen. Die Daten zu den eigenen Feldern haltenSie zur Laufzeit in den Attributen des BAdIs, sodass diese zunächst definiertwerden müssen.

MB_MIGO_BADI kann mehrfach implementiert werden, es existieren jedochnur je fünf eigene Karteireiter für Kopf- und Positionsebenen. Aus diesemGrund sind genau fünf aktive Implementierungen zulässig. Die MethodeINIT wird einmalig beim Start von Transaktion MIGO aktiviert und dientdazu, eine Implementierung zu registrieren und somit einen Karteireiter zubelegen.

Mit der Initialisierung eines Belegs (neuer Beleg oder Anzeige eines vorhan-denen Belegs) werden die Methoden aus Tabelle 5.1 durchlaufen. DieMethoden MODE_SET und STATUS_AND_HEADER werden auch angestoßen,wenn sich der Belegstatus ändert.

Methode Beschreibung

RESET Diese Methode dient der Initialisierung aller eigenen Daten in den Attributen der BAdI-Implementierung.

Tabelle 5.1 Initialisierung eines Belegs und Statusänderung

1537.book Seite 91 Freitag, 2. Juli 2010 8:40 08

Page 9: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

92

Des Weiteren werden bei jedem Dialogschritt zu Kopfdaten die Methodenaus Tabelle 5.2 und bei jedem Dialogschritt zu Positionsdaten die Methodenaus Tabelle 5.3 ausgeführt. Die Methode LINE_MODIFY wird zusätzlich auchausgeführt, wenn eine Zeile hinzugefügt wird, entweder in der Erfassungdurch den Anwender oder beim Lesen eines vorhandenen Materialbelegsaus der Datenbank.

MODE_SET In dieser Methode erhalten Sie Informationen zu der vom Benutzer gewählten Aktion (Wareneingang, Warenaus-gang etc.) und der gewählten Referenz (Bestellung, Reser-vierung etc.), das heißt den beiden Feldern, die immer links oben in Transaktion MIGO vorhanden sind. Sie kön-nen diese Informationen auswerten und in den Attributen der Implementierung speichern, um diese später zu ver-wenden.

STATUS_AND_HEADER Diese Methode wird hauptsächlich verwendet, um die eigenen Kopfdaten beim Lesen eines vorhandenen Belegs zu füllen.

Methode Beschreibung

PBO_HEADER Die Methode wird aufgerufen, bevor die Kopfdaten ange-zeigt werden. Sie müssen hier die anzuzeigenden Daten an Ihre Funktionsgruppe übertragen und das anzuzei-gende Dynpro bekannt machen. Auch die Überschrift des Karteireiters wird hier festgelegt.

PAI_HEADER Nach der Eingabe durch den Benutzer wird diese Methode durchlaufen, und Sie müssen die eventuell geänderten Daten aus der Funktionsgruppe zurückholen.

Tabelle 5.2 Methoden im Dialogschritt zu Kopfdaten

Methode Beschreibung

PBO_DETAIL Die Methode wird aufgerufen, bevor die Positionsdaten angezeigt werden. Sie erhalten im Parameter I_LINE_ID die aktuelle Position und müssen die zugehörigen Daten in die Funktionsgruppe übertragen. Auch hier müssen Sie das anzuzeigende Dynpro sowie die Überschrift des Kar-teireiters festlegen.

Tabelle 5.3 Methoden im Dialogschritt zu Positionsdaten

Methode Beschreibung

Tabelle 5.1 Initialisierung eines Belegs und Statusänderung (Forts.)

1537.book Seite 92 Freitag, 2. Juli 2010 8:40 08

Page 10: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Eigene Felder in Transaktion MIGO 5.1

93

Zu guter Letzt müssen Sie die Methode POST_DOCUMENT verwenden, um Ihreeigenen Daten aufzubereiten und den Verbuchungsbaustein aus Ihrer Funk-tionsgruppe aufzurufen. Erst in dieser Methode steht für jede Belegzeile dieendgültige Zeilennummer fest, wie sie in Tabelle MSEG enthalten ist – also inder Tabelle, in der die Standard-Positionsdaten gespeichert werden. Ich emp-fehle Ihnen, Ihre eigenen Daten entsprechend umzuschlüsseln, damit spätereine leichtere Zuordnung möglich ist.

5.1.2 Vorbereitungen im Dictionary

Es ist sinnvoll, wenn Sie sich zunächst wieder den allgemeinen Datendefini-tionen im Dictionary zuwenden. In diesem Beispiel sollen sowohl Kopf- alsauch Positionsdaten implementiert werden; um die Daten zu speichern, sinddaher zwei passende Datenbanktabellen erforderlich. Das folgende Beispielverwendet hierfür wieder nur eine einfache Variante, es soll jeweils nur einTextfeld als kundeneigenes Feld eingesetzt werden.

1. Wechseln Sie ins Dictionary (Transaktion SE11), und erstellen Sie zunächstdie Tabelle für die Kopfdaten. Neben dem eigentlichen Textfeld ZK_FELD1benötigen Sie auch die Schlüsselfelder, das heißt Materialbelegnummer

PAI_DETAIL Sie holen hier, nach der Eingabe durch den Benutzer, die Daten vom Dynpro zurück. Prüfen Sie zunächst, ob sich Daten geändert haben, und setzen Sie gegebenenfalls den Parameter E_FORCE_CHANGE. Nur wenn der Parameter gesetzt wurde, wird anschließend die Methode LINE_MODIFY gestartet.

LINE_MODIFY Diese Methode wird gestartet, wenn eine Zeile geändert wurde (siehe PAI_DETAIL) oder wenn eine neue Zeile ein-gefügt wird. Sie müssen beim Hinzufügen von neuen Zei-len Ihre eigenen Felder initialisieren, oder falls der Beleg gerade im Anzeigemodus gelesen wird, die Daten aus der Datenbank nachlesen.

Falls erforderlich, haben Sie hier die Möglichkeit, Stan-dardfelder, die Sie eventuell auf Ihrem Dynpro zusätzlich eingebunden haben, in die Standardpositionsdaten zurückzuschreiben.

LINE_DELETE Diese Methode wird durchlaufen, wenn der Anwender eine Zeile des Materialbelegs gelöscht hat. Sie müssen in diesem Fall auch die zugehörigen eigenen Daten löschen.

Methode Beschreibung

Tabelle 5.3 Methoden im Dialogschritt zu Positionsdaten (Forts.)

1537.book Seite 93 Freitag, 2. Juli 2010 8:40 08

Page 11: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

94

und Buchungsjahr. Im Beispiel wurde der Tabellenname ZMB_MIGOHEADverwendet, die zugehörigen Felder sehen Sie in Tabelle 5.4.

2. Erstellen Sie nun die Tabelle für die Positionsdaten. Neben den zuvorverwendeten Schlüsselfeldern ist zusätzlich eine Zeilennummer erforder-lich. Das kundeneigene Feld soll hier ZP_FELD1 heißen. Im Beispiel wirdder Tabellenname ZMB_MIGOITEM verwendet, die zugehörigen Feldersehen Sie in Tabelle 5.5.

5.1.3 Vorbereitung der Funktionsgruppe

Als Nächstes sollten Sie sich um die Funktionsgruppe und somit um die Dyn-pros kümmern. In diesem Beispiel sollen sowohl Kopf- als auch Positionsda-ten implementiert werden, daher wird hier jeweils ein Dynpro benötigt. DesWeiteren sind jeweils zwei Funktionsbausteine zur Datenkommunikationund ein Verbuchungsbaustein erforderlich. Ein weiterer Baustein soll dieFunktionsgruppe über den aktuellen Zustand von Transaktion MIGO infor-mieren; wenn diese sich im Anzeigemodus befindet, sollen die Felder aufden Dynpros nicht eingabebereit sein.

1. Wechseln Sie in Transaktion SE80. Wählen Sie im Repository Browser dieOption Funktionsgruppe aus, und geben Sie ZMB_MIGO als Name vor. Drü-cken Sie auf (¢). Bestätigen Sie den Dialog, dass diese Funktionsgruppenun erzeugt werden soll.

Feldname Key-Feld Datenelement

MANDT Ja MANDT

MBLNR Ja MBLNR

MJAHR Ja MJAHR

ZK_FELD1 CHAR32

Tabelle 5.4 Felder der Tabelle ZMB_MIGOHEAD

Feldname Key-Feld Datenelement

MANDT Ja MANDT

MBLNR Ja MBLNR

MJAHR Ja MJAHR

ZEILE Ja MBLPO

ZP_FELD1 CHAR32

Tabelle 5.5 Felder der Tabelle ZMB_MIGOITEM

1537.book Seite 94 Freitag, 2. Juli 2010 8:40 08

Page 12: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Eigene Felder in Transaktion MIGO 5.1

95

2. Legen Sie zunächst das Dynpro für die Kopfdaten an. Klicken Sie nununten im Objekt-Browser mit der rechten Maustaste auf ZMB_MIGO, undwählen Sie Anlegen � Dynpro aus dem Kontextmenü aus. Als Dynpro-Nummer soll 0100 verwendet werden. In den Eigenschaften müssen SieSubscreen als Dynprotyp einstellen, da andere Typen nicht auf Karteirei-tern eingebunden werden können und Sie bei der Ausführung einen Kurz-dump erhalten würden.

3. Klicken Sie dann auf die Schaltfläche Layout, um in den Screen Painter zuwechseln. Wählen Sie dort im Menü Springen � Sekundärfenster �

Dict/Programmfelder oder drücken Sie auf (F6). Im erscheinenden Fens-ter geben Sie ZMB_MIGOHEAD als Tabellenname an und drücken auf (¢).Markieren Sie das Feld ZK_FELD1, und drücken Sie wieder auf (¢) (sieheAbbildung 5.2). Platzieren Sie nun das Feld mit der Maus in der linkenoberen Ecke des Dynpros. Sichern und aktivieren Sie das Dynpro, und ver-lassen Sie anschließend den Screen Painter.

Dynpro-Variationen

In diesem Beispiel wird für Kopf- und Positionsdaten jeweils ein Dynpro definiert.Sie haben jedoch durchaus die Möglichkeit, für unterschiedliche Situationen auchunterschiedliche Dynpros vorzubereiten. So kann zum Beispiel Ihre Anforderungbei einem Wareneingang anders sein als bei einem Warenausgang. Welches Dyn-pro tatsächlich angezeigt wird, entscheiden Sie erst zur Laufzeit durch Ihre Pro-grammierung.

In der Methode MODE_SET des BAdIs MB_MIGO_BADI erfahren Sie, welche Aktion(Anzeigen, Wareneingang, Warenausgang etc.) gerade ausgewählt ist. Sie könnensich diese Information in einem Attribut der Klasse merken und abhängig davon inMethode PBO_HEADER oder PBO_DETAIL das Dynpro dynamisch setzen.

Abbildung 5.2 Dict/Programmfelder-Fenster

1537.book Seite 95 Freitag, 2. Juli 2010 8:40 08

Page 13: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

96

4. Legen Sie nun das Dynpro 0200 für die Positionsdaten an. Wählen Sie hierdas Feld ZP_FELD1 aus der Tabelle ZMB_MIGOITEM, verfahren Sie im Übrigenwie im vorstehenden Schritt.

5. Damit Sie später die Felder auf diesen Dynpros mit Daten füllen können,müssen namensgleiche Felder in den globalen Daten vorhanden sein.Diese legen Sie am besten mit dem Schlüsselwort TABLES an. Darüber hin-aus sollen die Felder nur dann eingabebereit sein, wenn der Beleg sichnicht in einem reinen Anzeigemodus befindet. Der Modus soll später übereinen Funktionsbaustein gesetzt werden, Sie können ihn aber jetzt schonals Flag (gv_outputonly, Datentyp C) in den globalen Daten anlegen.

In die globalen Daten wechseln Sie über den Objekt-Browser, indem Sieim Abschnitt Includes in den Include LZMB_MIGOTOP gehen. Ein Beispielfinden Sie in Listing 5.1.

FUNCTION-POOL ZMB_MIGO. "MESSAGE-ID ..* Arbeitsstrukturen für DynprosTABLES: zmb_migohead,

zmb_migoitem.

* Anzeigemodus?DATA gv_outputonly TYPE c.

Listing 5.1 Globale Daten in LZMB_MIGOTOP

6. Ist das Flag gv_outputonly gesetzt, sollen die Felder auf dem Dynpro nichteingabebereit sein. Wechseln Sie daher in die Ablauflogik des Dynpros0100. Entfernen Sie im Zeitpunkt PROCESS BEFORE OUTPUT den Kommentarvor dem Modul STATUS_0100. Doppelklicken Sie auf den Modulnamen,um das Modul zu erzeugen, verwenden Sie den vorgeschlagenen Include-Namen.

Setzen Sie mit einem LOOP AT SCREEN den Wert von SCREEN-INPUT abhän-gig von dem Feld gv_outputonly. Ein Beispiel finden Sie in Listing 5.2.

*------------------------------------------------------------****INCLUDE LZMB_MIGOO01 .*------------------------------------------------------------*MODULE status_0100 OUTPUT.LOOP AT SCREEN.IF gv_outputonly IS INITIAL.screen-input = 1.

ELSE.screen-input = 0.

ENDIF.

1537.book Seite 96 Freitag, 2. Juli 2010 8:40 08

Page 14: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Eigene Felder in Transaktion MIGO 5.1

97

MODIFY SCREEN.ENDLOOP.

ENDMODULE. " STATUS_0100 OUTPUT

Listing 5.2 Ablauflogik zu Dynpro 0100

7. Auch Dynpro 0200 soll im Anzeigemodus nicht eingabebereit sein.Wechseln Sie zu Dynpro 0200, und verfahren Sie im Übrigen wie imSchritt zuvor.

Als Nächstes können Sie mit den Funktionsbausteinen beginnen.

1. Eine Übersicht der erforderlichen Bausteine finden Sie in Tabelle 5.6.Beginnen Sie mit dem Baustein ZMB_MIGO_SETSTATUS. Sie benötigen nurein Flag als Eingangsparameter und überschreiben daraus das globale Feldgv_outputonly (siehe Listing 5.3).

FUNCTION ZMB_MIGO_SETSTATUS.*"------------------------------------------------------------*"*"Lokale Schnittstelle:*" IMPORTING*" REFERENCE(I_OUTPUTONLY) TYPE C*"------------------------------------------------------------* Ausgabestatus setzengv_outputonly = i_outputonly.

ENDFUNCTION.

Listing 5.3 Coding zu ZMB_MIGO_SETSTATUS

2. Als Zweites legen Sie die Bausteine ZMB_MIGO_HEAD_SET und ZMB_MIGO_HEAD_GET an. Sie benötigen eine Struktur mit Tabelle ZMB_MIGOHEAD alsDatentyp, um sie als Import- bzw. Exportparameter verwenden zu kön-nen. Darüber hinaus nehmen Sie einfach eine Zuweisung in die entspre-

Funktionsbaustein Beschreibung

ZMB_MIGO_SETSTATUS Setzen des Flags gv_outputonly

ZMB_MIGO_HEAD_SET Daten für Dynpro 100 setzen

ZMB_MIGO_HEAD_GET Daten aus Dynpro 100 zurückliefern

ZMB_MIGO_ITEM_SET Daten für Dynpro 200 setzen

ZMB_MIGO_ITEM_GET Daten aus Dynpro 200 zurückliefern

ZMB_MIGO_POST Verbuchen von Kopf- und Positionsdaten

Tabelle 5.6 Funktionsbausteine zum Datenaustausch

1537.book Seite 97 Freitag, 2. Juli 2010 8:40 08

Page 15: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

98

chende Richtung zwischen den Parametern und den zuvor mit TABLESdefinierten Arbeitsstrukturen vor (siehe Listing 5.4 und Listing 5.5).

FUNCTION ZMB_MIGO_HEAD_SET.*"------------------------------------------------------------*"*"Lokale Schnittstelle:*" IMPORTING*" REFERENCE(I_HEAD) TYPE ZMB_MIGOHEAD*"------------------------------------------------------------* Daten bereitstellen für Dynprozmb_migohead = i_head.

ENDFUNCTION.

Listing 5.4 Coding zu ZMB_MIGO_HEAD_SET

FUNCTION zmb_migo_head_get.*"------------------------------------------------------------*"*"Lokale Schnittstelle:*" EXPORTING*" REFERENCE(E_HEAD) TYPE ZMB_MIGOHEAD*"------------------------------------------------------------* Daten aus Dynpro zurückgebene_head = zmb_migohead.

ENDFUNCTION.

Listing 5.5 Coding zu ZMB_MIGO_HEAD_GET

3. Für die Funktionsbausteine ZMB_MIGO_ITEM_SET und ZMB_MIGO_ITEM_GETverfahren Sie wieder identisch, nur dass Sie hier ZMB_MIGOITEM als Refe-renz verwenden (siehe Listing 5.6 und Listing 5.7).

FUNCTION zmb_migo_item_set.*"------------------------------------------------------------*"*"Lokale Schnittstelle:*" IMPORTING*" REFERENCE(I_ITEM) TYPE ZMB_MIGOITEM*"------------------------------------------------------------* Daten bereitstellen für Dynprozmb_migoitem = i_item.

ENDFUNCTION.

Listing 5.6 Coding zu ZMB_MIGO_ITEM_SET

FUNCTION ZMB_MIGO_ITEM_GET.*"------------------------------------------------------------

1537.book Seite 98 Freitag, 2. Juli 2010 8:40 08

Page 16: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Eigene Felder in Transaktion MIGO 5.1

99

*"*"Lokale Schnittstelle:*" EXPORTING*" REFERENCE(E_ITEM) TYPE ZMB_MIGOITEM*"------------------------------------------------------------* Daten aus Dynpro zurückgebene_item = zmb_migoitem.

ENDFUNCTION.

Listing 5.7 Coding zu ZMB_MIGO_ITEM_GET

4. Legen Sie nun den Funktionsbaustein ZMB_MIGO_POST an. Der Bausteinmuss in den Eigenschaften im Abschnitt Ablaufart als Verbuchungsbau-stein (Start sofort) gekennzeichnet werden (siehe Abbildung 5.3).

Legen Sie einen Importparameter (Vorschlag I_HEAD) als Struktur zurTabelle ZMB_MIGOHEAD an. Aktivieren Sie für diesen Parameter die OptionWertübergabe, da in Verbuchungsbausteinen keine Referenzparameterzugelassen sind. Definieren Sie zudem einen Tabellenparameter (Vor-schlag T_ITEMS) mit Referenz auf Tabelle ZMB_MIGOITEM.

5. Es empfiehlt sich, bei Verbuchungsbausteinen immer einige logische Prü-fungen einzubauen, um fehlerhafte Verbuchungen möglichst zu verhin-

Abbildung 5.3 Eigenschaften des Verbuchungsbausteins

1537.book Seite 99 Freitag, 2. Juli 2010 8:40 08

Page 17: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

100

dern. Es soll geprüft werden, ob alle Schlüsselfelder der Kopf- und Positi-onsdaten gefüllt sind, anderenfalls soll eine Ausnahme ausgelöst werden.Legen Sie hierfür auf dem Karteireiter Ausnahmen die Ausnahme DATA_ERROR an.

Sollte das Schreiben der Daten dennoch fehlschlagen, soll ebenfalls eineAusnahme ausgelöst werden, diese legen Sie als INSERT_ERROR an. DasAuslösen einer Ausnahme wird zu einem Verbuchungsabbruch führen,sodass im Fehlerfall der komplette Materialbeleg nicht gebucht wird.

6. Wechseln Sie dann zum Quelltext, und beginnen Sie mit der Program-mierung. Zunächst einmal prüfen Sie, ob die Schlüsselfelder der Kopfda-ten gefüllt sind (Parameter I_HEAD, Felder MBLNR und MJAHR). In einerSchleife über die Positionsdaten (Tabelle T_ITEMS) verfahren Sie identisch,prüfen jedoch zusätzlich noch die Zeilennummer (Feld ZEILE). Im Fehler-fall lösen Sie jeweils die Ausnahme DATA_ERROR aus, hierzu verwenden Sieden Befehl RAISE.

7. Lag kein Fehler vor, verbuchen Sie die Daten mit dem Befehl INSERT. Tritthier ein Fehler auf (SY-SUBRC <> 0), lösen Sie die Ausnahme INSERT_ERRORaus (siehe Listing 5.8).

FUNCTION zmb_migo_post.*"------------------------------------------------------------*"*"Verbuchungsfunktionsbaustein:*"*"*"Lokale Schnittstelle:*" IMPORTING*" VALUE(I_HEAD) TYPE ZMB_MIGOHEAD*" TABLES*" T_ITEMS STRUCTURE ZMB_MIGOITEM*" EXCEPTIONS*" INSERT_ERROR*" DATA_ERROR*"------------------------------------------------------------

* Übergebene Daten prüfenIF i_head-mblnr IS INITIAL OR

i_head-mjahr IS INITIAL.RAISE data_error.

ENDIF.

LOOP AT t_items.IF t_items-mblnr IS INITIAL OR

t_items-mjahr IS INITIAL ORt_items-zeile IS INITIAL.

1537.book Seite 100 Freitag, 2. Juli 2010 8:40 08

Page 18: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Eigene Felder in Transaktion MIGO 5.1

101

RAISE data_error.ENDIF.

ENDLOOP.

* Kopfdaten schreibenINSERT zmb_migohead FROM i_head.IF sy-subrc <> 0.RAISE insert_error.

ENDIF.

* Positionsdaten schreibenINSERT zmb_migoitem FROM TABLE t_items.IF sy-subrc <> 0.RAISE insert_error.

ENDIF.ENDFUNCTION.

Listing 5.8 Coding zu ZMB_MIGO_POST

8. Sichern Sie alle Änderungen, und prüfen Sie, ob alle Bestandteile IhrerFunktionsgruppe aktiviert wurden.

5.1.4 Vorbereitung und Statusverwaltung in MB_MIGO_BADI

Ab jetzt können Sie sich voll und ganz dem BAdI widmen, alle Vorbereitun-gen sind getroffen. Wie zuvor besprochen, sollen alle erforderlichen Datenin den Attributen der Klasse gehalten werden, daher werden diese als Erstesangelegt.

1. Wechseln Sie in Transaktion SE19, und legen Sie eine neue Implementie-rung zum BAdI MB_MIGO_BADI an. Doppelklicken Sie auf den Namen derimplementierenden Klasse ZCL_IM_MB_MIGO_BADI, und wechseln Sie aufden Karteireiter Attribute.

2. Legen Sie nun die Attribute gemäß Tabelle 5.7 an, beachten Sie dabei auchfolgende Hinweise:

� GC_CLASS

Jede Implementierung des BAdIs MB_MIGO_BADI muss sich gegenüberTransaktion MIGO eindeutig bekannt machen. Dies geschieht übereine Konstante vom Typ MIGO_CLASS_ID, die Sie am besten in denAttributen definieren, da Sie diese an mehreren Stellen verwendenmüssen. Im Beispiel wurde die Konstante mit dem Initialwert 'MIGO_OWN' festgelegt, beachten Sie dabei die notwendigen einfachen Hoch-kommas.

1537.book Seite 101 Freitag, 2. Juli 2010 8:40 08

Page 19: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

102

� GV_LINEID

In dieser Zeilennummer merken Sie sich immer die zuletzt auf dasDynpro übertragene Position.

� GV_ACTION

Dieses Attribut soll die aktuell gewählte Aktion (siehe auch Tabelle5.8) enthalten.

� GV_REFDOC

Dieses Attribut soll die aktuell gewählte Referenzbelegart (siehe auchTabelle 5.9) enthalten.

� GS_HEADER

Diese Struktur beinhaltet die aktuellen Kopfdaten zu Ihrem Karteirei-ter.

� GT_ITEM

Diese interne Tabelle beinhaltet alle Positionen zum aktuellen Beleg.In den Attributen können Sie interne Tabellen nur definieren, wennSie sich entweder auf einen im Dictionary definierten Tabellentypbeziehen oder einen lokalen Typ anlegen. Hier wurde ein lokaler Typ(TT_MIGOITEM) verwendet, der jedoch zurzeit noch unbekannt ist.

Attribut Art Sichtbarkeit Bezugstyp

GC_CLASS Constant Private MIGO_CLASS_ID

GV_LINEID Instance Attribute Private GOITEM-GLOBAL_COUNTER

GV_ACTION Instance Attribute Private GOACTION

GV_REFDOC Instance Attribute Private REFDOC

GS_HEADER Instance Attribute Private ZMB_MIGOHEAD

GT_ITEM Instance Attribute Private TT_MIGOITEM

Tabelle 5.7 Attribute der implementierenden Klasse

Aktion/Vorgang Beschreibung

A01 Wareneingang

A02 Rücklieferung

A03 Storno

A04 Anzeigen

A05 WE-Sperrbestand freigeben

A06 Nachlieferung

Tabelle 5.8 Liste der Aktionen in Transaktion MIGO

1537.book Seite 102 Freitag, 2. Juli 2010 8:40 08

Page 20: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Eigene Felder in Transaktion MIGO 5.1

103

3. Wechseln Sie nun zum Karteireiter Typen, um den Datentyp TT_MIGOITEMzu erstellen. Für die Definition einer internen Tabelle benötigen Sie diedirekte Typeingabe (siehe Abbildung 5.4).

A07 Warenausgang

A08 Umbuchung

A09 Auslagern

A10 Einlagern

A11 Nachverrechnung

Referenzbeleg Beschreibung

R01 Bestellung

R02 Materialbeleg

R03 Lieferschein

R04 Anlieferung

R05 Auslieferung

R06 Transport

R07 Transportidentifikation

R08 Auftrag

R09 Reservierung

R10 Sonstige

Tabelle 5.9 Liste der möglichen Referenzbelege in Transaktion MIGO

Aktion/Vorgang Beschreibung

Tabelle 5.8 Liste der Aktionen in Transaktion MIGO (Forts.)

Abbildung 5.4 Erweiterte Typdefinition in Klassen

1537.book Seite 103 Freitag, 2. Juli 2010 8:40 08

Page 21: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

104

Hierzu gehen Sie wie folgt vor:

� Erfassen Sie den Namen des Datentyps, das heißt TT_MIGOITEM.

� Wählen Sie in der Spalte Sichtbarkeit den Eintrag Private, da dieserTyp nur innerhalb der Klasse verwendet wird.

� Klicken Sie dann auf den gelben Pfeil rechts neben dem Bezugstyp(direkte Typeingabe). Sie landen nun im ABAP Editor und können denTyp frei definieren.

� Die interne Tabelle benötigt neben den eigentlichen Daten aus TabelleZMB_MIGOITEM ein weiteres Feld LINE_ID, das die interne Zeilennum-mer während der Erfassung darstellt. Hierzu erstellen Sie zunächsteinen Typ, der sich aus dem Feld LINE_ID (Typ MB_LINE_ID) und ZMB_MIGOITEM zusammensetzt. Nennen Sie diesen Typ TS_MIGOITEM.

� Anschließend definieren Sie den Typ TT_MIGOITEM als interne Tabellezu TS_MIGOITEM. Der komplette Abschnitt sollte damit wie folgt ausse-hen:

PRIVATE SECTION.TYPES BEGIN OF ts_migoitem.TYPES line_id TYPE mb_line_id.INCLUDE TYPE zmb_migoitem.TYPES END OF ts_migoitem.

TYPES tt_migoitem TYPE TABLE OF ts_migoitem.

4. Sichern und aktivieren Sie Ihre Änderungen.

Nun können die ersten Methoden ausprogrammiert werden, beginnen Siemit der Methode INIT. Wie zuvor besprochen, dient diese Methode dazu,die Implementierung in Transaktion MIGO bekannt zu machen. Maximalfünf Implementierungen dürfen dabei gleichzeitig aktiv sein.

Auch die Methoden RESET und MODE_SET (siehe Tabelle 5.1) können Sie jetztschon vorbereiten. Der Methode STATUS_AND_HEADER werden Sie sich späterzuwenden.

1. Wechseln Sie auf den Karteireiter Methoden der Klasse ZCL_IM_MB_MIGO_BADI, und gehen Sie dann in die Methode INIT. Sie müssen hier nur die inden Attributen definierte Konstante GC_CLASS in die interne Tabelle CT_INIT übertragen. Diese Tabelle kann bereits weitere Implementierungenenthalten, überschreiben Sie daher nicht die Tabelle, sondern hängen SieIhre Konstante per APPEND an. Da die Tabelle CT_INIT nur aus einem Feldbesteht, können Sie die Konstante direkt anhängen, Sie benötigen keinelokale Struktur (siehe Listing 5.9).

1537.book Seite 104 Freitag, 2. Juli 2010 8:40 08

Page 22: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Eigene Felder in Transaktion MIGO 5.1

105

METHOD if_ex_mb_migo_badi~init.* Implementierung registrierenAPPEND gc_class TO ct_init.

ENDMETHOD.

Listing 5.9 Coding zur Methode INIT

2. Bearbeiten Sie als Nächstes die Methode RESET. Diese Methode wirdgerufen, wenn ein neuer Beleg erfasst oder geladen wird. InitialisierenSie hier die Instanzattribute Ihrer Klasse (siehe Listing 5.10).

METHOD if_ex_mb_migo_badi~reset.* Instanzattribute initialisierenCLEAR: gv_lineid,

gv_action,gv_refdoc,gs_header.

REFRESH gt_item.ENDMETHOD.

Listing 5.10 Coding zur Methode RESET

3. Wechseln Sie nun in die Methode MODE_SET. In dieser Methode erhaltenSie die aktuell gewählte Aktion (Parameter I_ACTION, siehe Tabelle 5.8)und die gewählte Referenzbelegart (Parameter I_REFDOC, siehe Tabelle5.9).

Ihre eigenen Felder sollen nur eingabebereit sein, wenn dies die aktuelleAktion erlaubt. Hierfür haben Sie bereits den Funktionsbaustein ZMB_MIGO_SETSTATUS vorbereitet, den Sie nun aufrufen. Setzen Sie den Parame-ter I_OUTPUTONLY, wenn die Aktion A04 (Anzeigen) oder A03 (Storno)ausgewählt ist. Merken Sie sich außerdem die aktuelle Aktion im AttributGV_ACTION und die Referenzbelegart im Attribut GV_REFDOC zur späterenVerwendung (siehe Listing 5.11).

METHOD if_ex_mb_migo_badi~mode_set.* Lokale DatendeklarationenDATA lv_outputonly TYPE c.

* Keine Eingabe für Aktion A04 oder A03IF i_action = 'A04' " Anzeige

OR i_action = 'A03'. "Stornolv_outputonly = 'X'.

ENDIF.

* Aktuellen Status setzenCALL FUNCTION 'ZMB_MIGO_SETSTATUS'

1537.book Seite 105 Freitag, 2. Juli 2010 8:40 08

Page 23: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

106

EXPORTINGi_outputonly = lv_outputonly.

* Action merkengv_action = i_action.

* Referenzbelegart merkengv_refdoc = i_refdoc.

ENDMETHOD.

Listing 5.11 Coding zur Methode MODE_SET

5.1.5 Aktivierung der eigenen Kopfdaten

Der nächste Teil beschäftigt sich mit den Kopfdaten, die relativ einfach zuhandhaben sind. An dieser Stelle soll Ihr Dynpro als Karteireiter eingeblen-det werden sowie der Datenaustausch zwischen BAdI und Ihrem Dynproerfolgen. Auch das Lesen der eigenen Daten, wenn ein bereits gebuchterBeleg geöffnet wird, wird bereits hier realisiert. Nur die Verbuchung derKopfdaten werden Sie später zusammen mit den Positionsdaten durchfüh-ren.

1. Wechseln Sie in die Methode PBO_HEADER. Beginnen Sie zunächst mit einerPflichtprüfung: Technisch bedingt, werden beim Aufruf einer BAdI-Methode zu einem BAdI mit mehreren aktiven Implementierungen immerdie Methoden aus allen Implementierungen in nicht definierter Reihen-folge aufgerufen. Gleichzeitig wird für jeden der fünf möglichen Karteirei-ter die Methode PBO_HEADER einmal gerufen, somit werden aber jedes Malalle implementierten Methoden gestartet. Aus diesem Grund wird Ihnenim Eingangsparameter I_CLASS_ID die Klassen-ID (Sie haben diese in derMethode INIT registriert) mitgeteilt (siehe auch Abbildung 5.5), die mitdiesem Aufruf gemeint ist. Sie müssen unbedingt überprüfen, ob derInhalt von I_CLASS_ID der in dieser Implementierung verwendeten Klas-sen-ID aus Konstante GC_CLASS entspricht, anderenfalls können unvorher-sehbare Nebeneffekte auftreten.

2. Als Nächstes wird das Dynpro registriert. Hierzu übergeben Sie den Para-metern E_CPROG und E_DYNNR den Programmnamen und die Dynpro-Num-mer. Im Parameter E_HEADING legen Sie die Beschriftung des Karteireitersfest. Im Beispiel wird das Dynpro 0100 in Programm SAPLZMB_MIGO ver-wendet.

Als Beispiel soll der Karteireiter nur dann angezeigt werden, wenn sichder Vorgang auf ein Bestelldokument bezieht. Dies können Sie über das

1537.book Seite 106 Freitag, 2. Juli 2010 8:40 08

Page 24: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

Eigene Felder in Transaktion MIGO 5.1

107

Attribut GV_REFDOC prüfen, das Sie in Methode MODE_SET gefüllt haben.Für Bestellungen gibt es den Referenzschlüssel R01 (siehe Tabelle 5.9).

3. Zuletzt müssen Sie noch den Funktionsbaustein ZMB_MIGO_HEAD_SET auf-rufen und den aktuellen Inhalt der Kopfdaten auf das Dynpro übertragen.Der aktuelle Stand befindet sich immer in Attribut GS_HEADER (siehe List-ing 5.12).

METHOD if_ex_mb_migo_badi~pbo_header.* Bezieht sich der Aufruf auf diese Implementierung?

CHECK i_class_id = gc_class.

* Dynpro registrieren, falls Referenz zu BestellungIF gv_refdoc = 'R01'.e_cprog = 'SAPLZMB_MIGO'.e_dynnr = '0100'.e_heading = 'Eigene Daten'.

* Aktuellen Stand der Kopfdaten auf Dynpro übertragenCALL FUNCTION 'ZMB_MIGO_HEAD_SET'EXPORTINGi_head = gs_header.

Abbildung 5.5 Schnittstelle der Methode PBO_HEADER

1537.book Seite 107 Freitag, 2. Juli 2010 8:40 08

Page 25: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

User-Exits und BAdIs in der Bestandsführung5

108

ENDIF.ENDMETHOD.

Listing 5.12 Coding zur Methode PBO_HEADER

4. Bearbeiten Sie nun die Methode PAI_HEADER. An dieser Stelle müssen Sienichts weiter tun, als die Daten vom Dynpro zurück in das Attribut GS_HEADER zu schreiben. Dies tun Sie durch einen Aufruf des Funktionsbau-steins ZMB_MIGO_HEAD_GET (siehe Listing 5.13).

METHOD if_ex_mb_migo_badi~pai_header.* Daten vom Dynpro abholenCALL FUNCTION 'ZMB_MIGO_HEAD_GET'IMPORTINGe_head = gs_header.

ENDMETHOD.

Listing 5.13 Coding zur Methode PAI_HEADER

5. Des Weiteren müssen Sie noch bei Bedarf die eigenen Daten aus derDatenbank lesen und in das Attribut GS_HEADER übertragen. Dies führenSie in Methode STATUS_AND_HEADER durch. Erforderlich ist das Nachlesennur, wenn ein bereits gebuchter Beleg angezeigt oder storniert werdensoll, Sie können daher hier wieder die Aktion (Attribut GV_ACTION) prüfen.

Die Daten lesen Sie aus der Tabelle ZMB_MIGOHEAD unter Verwendung derSchlüsselfelder MBLNR (Materialbelegnummer) und MJAHR (Buchungsjahr),die Sie dem Parameter IS_GOHEAD entnehmen können (siehe Listing 5.14).

METHOD if_ex_mb_migo_badi~status_and_header.* Falls ein bereits gebuchter Beleg angezeigt* oder storniert werden soll, eigene Felder* auch aus Datenbank lesen.

IF gv_action = 'A04' " AnzeigeOR gv_action = 'A03'. " Storno

* Daten aus Datenbank lesenSELECT SINGLE *

FROM ZMB_MIGOHEADINTO gs_headerWHERE mblnr = is_gohead-mblnrAND mjahr = is_gohead-mjahr.

ENDIF.ENDMETHOD.

Listing 5.14 Coding zur Methode STATUS_AND_HEADER

1537.book Seite 108 Freitag, 2. Juli 2010 8:40 08

Page 26: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

255

Index

A

ABAP-Liste 74Abgrenzung, freie 71Abladestelle 133, 135Ablaufart 99Ablauflogik 41, 96, 146, 155, 161Ablaufmodul 152Abnahme 86Abrufbestellung 204Abweichung 165

unbegrenzte 167AC03 219Aktion 92Aktivierungsgrad 175, 183Ändern, Nachrichtenklasse 172Änderungsbeleg 15, 202Anfrage 33Anlieferung 212, 213Anzahlung 244Anzeigemodus 96, 97, 159Anzeigetransaktion 50Append-Struktur 148Arbeitsbereich 72Arbeitsgebiet 175, 184ARC_MM_EBAN_CHECK 215ARC_MM_EBAN_PRECHECK 215ARC_MM_EBAN_WRITE 216ARC_MM_EINA_CHECK 216ARC_MM_EINA_WRITE 216ARC_MM_EKKO_WRITE 217ARC_MM_INVBEL_CHECK 234ARC_MM_INVBEL_WRITE 234ARC_MM_MATBEL_CHECK 233ARC_MM_MATBEL_WRITE 233ARC_MM_REBEL_CHECK 250ARC_MM_REBEL_WRITE 250Archivierung 215, 233, 250Archivierungsobjekt

MM_INVBEL 234MM_MATBEL 233

Attribut 26, 52, 59, 101Auftragsbestätigung 214Auswahlliste 78

B

B_RESULT 178BAdI 20, 89

Aktivieren 25, 31ARC_MM_EBAN_CHECK 215ARC_MM_EBAN_PRECHECK 215ARC_MM_EBAN_WRITE 216ARC_MM_EINA_CHECK 216ARC_MM_EINA_WRITE 216ARC_MM_EKKO_CHECK 217ARC_MM_EKKO_WRITE 217ARC_MM_INVBEL_CHECK 234ARC_MM_INVBEL_WRITE 234ARC_MM_MATBEL_CHECK 233ARC_MM_MATBEL_WRITE 233ARC_MM_REBEL_CHECK 250ARC_MM_REBEL_WRITE 250Deaktivieren 25, 31Definition 20Dokumentation 22, 27filterabhängiges 21Implementierung 20, 22klassisches 20, 26MB_ACCOUNTING_DISTRIBUTE 230MB_CHECK_LINE_BADI 226MB_DOCUMENT_BADI 224MB_GOODSMOVEMENT_DCI 230MB_INSMK_WIP_CHANGE 226MB_MIGO_BADI 25, 115, 225MB_MIGO_ITEM_BADI 225MB_RESERVATION_BADI 232ME_BAPI_PO_CUST 197ME_BAPI_PR_CUST 193ME_CHDOC_ACTIVE 209ME_CHECK_ALL_ITEMS 198ME_CIP_ALLOW_CHANGE 209ME_COMMITMENT_PLAN 208ME_COMMITMENT_RETURN 208ME_DEFINE_CALCTYPE 206ME_GUI_PO_CUST 25, 33, 199ME_HOLD_PO 20, 198ME_PO_PRICING_CUST 206ME_POHIST_DISP_CUST 27, 198ME_PROCESS_OUT_CUST 203

1537.book Seite 255 Freitag, 2. Juli 2010 8:40 08

Page 27: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

256

Index

BAdI (Forts.)ME_PROCESS_PO_CUST 33, 192, 199ME_PROCESS_REQ_CUST 34ME_PURCHDOC_POSTED 199ME_RELEASE_CREATE 204ME_REQ_HEADER_TEXT 194ME_REQ_OI_EXT 208ME_REQ_POSTED 194ME_TAX_FROM_ADDRESS 200mehrfach nutzbares 21MEOUT_BAPI_CUST 202MM_EDI_DESADV_IN 213MMSRV_SM_BAPI_CUST 218MMSRV_SM_MAIN 218MMSRV_SM_NOTIFY 218MRM_BLOCKREASON_DELETE_CUST

245MRM_DOWNPAYMENT 244MRM_ERS_HDAT_MODIFY 237MRM_ERS_IDAT_MODIFY 238MRM_HEADER_CHECK 238MRM_HEADER_DEFAULT 239MRM_INVOICE_UPDATE 243MRM_ITEM_CUSTFIELDS 143, 238MRM_MRIS_HDAT_MODIFY 239MRM_MRIS_IDAT_MODIFY 239MRM_MRKO_HDAT_MODIFY 240MRM_PARTNER_CHECK 244MRM_PAYMENT_TERMS 240MRM_RELEASE_CHECK 240MRM_RETENTIONS 245MRM_TOLERANCE_GROUP 241MRM_TRANSACT_DEFAULT 241MRM_UDC_DISTRIBUTE 241MRM_VARIANCE_TYPE 242MRM_WT_SPLIT_UPDATE 242neues 26SMOD_MRFLB001 204WRF_MRM_ASSIGN_TEST 242WRF_PREPAY_INVOICE 243

BAPIBAPI_CONTRACT_CHANGE 203BAPI_CONTRACT_CREATE 203BAPI_PO_CHANGE 197, 200BAPI_PO_CREATE1 197, 200BAPI_PR_CHANGE 193BAPI_PR_CREATE 193BAPI_PR_GETDETAIL 193BAPI_REQUISITION_CREATE 196

BAPI (Forts.)BAPI_SAG_CHANGE 203BAPI_SAG_CREATE 203BAPI_SERVICE_CHANGE 218BAPI_SERVICE_CREATE 218BAPI_USER_GET_DETAIL 80

BAPIRET2 120, 123BASO0001 219Beistellkomponente 231Belegnummer 49Belegposition 43Benutzergruppe 72Benutzerstamm 80Bestandsfindung 229Bestandsführung 224Bestellanforderung 34, 192

Selektionsvariante 68Bestellung 20, 33, 197

Belegübersicht 209Bestelldatum 125Bestellentwicklung 31, 198Bestellnummer 44Eingabeüberprüfung 36, 66Merken 20Nachrichtensammler 66Selektionsvariante 68

Bewertung 137, 235BEXCLUDE 181Bezugsnebenkosten 241Bezugsquellenfindung 210Bilanzbewertung 235BKPF 170BLAREL 214Boolesche Klasse 171, 181BSEG 170Buchhaltungsbeleg 169Buchungskreis 166Buchungsvorgang, WRX 138Business Add-In � BAdI

C

C_EXIT_PARAM_CLASS 177C_EXIT_PARAM_FIELD 177, 184C_EXIT_PARAM_NONE 177CALL FUNCTION ... IN UPDATE TASK

115CHAIN 162

1537.book Seite 256 Freitag, 2. Juli 2010 8:40 08

Page 28: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

257

Index

CHANGING-Parameter 47Chargenstamm 228CHECK 37, 67CHECK_HEADER 120CHECK_ITEM 120, 122CI_DRSEG_CUST 145CL_EXITHANDLER 157CLOSE 37CMOD 16, 19COBL_MRM 148COMMIT WORK 49CS_GOITEM 112CUSTOM_DATA_GET 146, 156CUSTOM_DATA_TRANSFER 156CUSTOMDATA_MODIFY 145, 155

D

DATA_CHECK 131DATA_MODIFY 131, 132Daten, globale 40, 165Datenaustausch 146Datenbank 47, 145Datenbanktabelle 42, 47Datenfeld, OK-CODE 41Datenkommunikation 157Datentyp 166Definition 20, 38DELFOR 214DELINS 214DELVRY01 213DESADV 213, 214Dictionary 41, 93, 146Dienstleistungsabwicklung 79, 218direkte Typeingabe 104DRSEG 145DRSEG_CI 145, 147Dynpro 35, 50, 90, 144

E

Einbehalt 245Eingabeüberprüfung 89, 120Eingangsrechnung 139Einkauf 33Einkaufsinfosatz 216

Einteilung 127Einteilungsdaten 67Enjoy-Bestellung 33Erfassungsblatt 85ERS-Verfahren 237Erweiterung 16, 33

BASO0001 219IQSM0007 229LIFO0040 235LMEKO001 206LMEKO002 207LMELA002 230LMELA010 213, 230LMEQR001 210LMEXF001 207LMR1M001 246LMR1M002 237LMR1M003 246LMR1M004 247LMR1M005 247LMR1M006 248LWBON001 215LWSUS001 210M06B0001 194M06B0002 195M06B0003 195M06B0004 196M06B0005 195M06E0004 201M06E0005 201MB_CF001 226MBCF0002 227MBCF0005 227MBCF0006 231MBCF0007 233MBCF0009 228MBCFC003 228MBCFC004 228ME590001 201MEETA001 205MEFLD004 231MEQUERY1 209MEREQ001 34, 196MEVME001 232MM06E001 214MM06E003 210MM06E004 202MM06E005 33, 211MM06E007 15, 202

1537.book Seite 257 Freitag, 2. Juli 2010 8:40 08

Page 29: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

258

Index

Erweiterung (Forts.)MM06E008 204MM06E009 211MM06E010 212MM06E011 197MM06L001 212MM08R001 251MM08R002 246, 251MMDA0001 212MMFAB001 205MRFLB001 205MRMH0001 248MRMH0002 249MRMH0003 249MRMN0001 250NIWE0000 235NIWE0001 235NIWE0002 236NIWE0003 236RMVKON00 248SRVDET 219SRVEDIT 220SRVESI 220SRVESKN 220SRVESLL 221SRVESSR 221SRVEUSCR 221SRVKNTTP 222SRVLIMIT 222SRVMAIL1 222SRVMSTLV 223SRVREL 223SRVSEL 223XMBF0001 229

Erweiterungsimplementierung 28Erweiterungskategorie 147Erweiterungspunkt 26Erweiterungsspot 26, 27

ES_BADI_INVOICE_UPDATE 243ES_BADI_ME_BAPI 193, 197, 202ES_BADI_ME_POHIST 27, 198ES_BADI_MRM_DOWNPAYMENT

244ES_BADI_MRM_PARTNER 244ES_BADI_MRM_RETENTION 245ES_COMMITMENT_PLAN 208MB_GOODSMOVEMENT 226, 230

Erweiterungsspot (Forts.)ME_PROCESS_OUT 203MRM_BLOCKREASON_DELETE 245

EXECUTE 36Exit, Substitution 182Exit-Routine

Substitution 183Validierung 175

Expertenmodus 173expliziter Erweiterungspunkt 26EXPORT ... COMPRESSION ON 117EXPORT ... TO DATA BUFFER 116Exportparameter 156

F

Fehlermeldung 66Feld

BEXCLUDE 181Eigenschaft 41kundeneigenes 89SGTXT 225, 227, 247Status 55Symbol 189

Feld-Feld-Zuweisung, Substitution 182FIELDSELECTION_* 37Form, get_exit_titles 176, 184freie Abgrenzung 71Freigabestrategie 201Freigabeverfahren 194Funktionsbaustein 43, 45, 90

BAPI_USER_GET_DETAIL 80Funktionsgruppe 34, 90

G

GB01 181Geschäftslogik 57Geschäftspartner 244get_exit_titles 176, 184GET_INSTANCE_FOR_SUBSCREENS

157globale Daten 40, 165Grundliste 74GUID 116

1537.book Seite 258 Freitag, 2. Juli 2010 8:40 08

Page 30: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

259

Index

H

herkömmliche Rechnungsprüfung 251Hintergrundprüfung 149HOLD_DATA_DELETE 116, 119HOLD_DATA_LOAD 116, 118HOLD_DATA_SAVE 116, 117

I

I_CLASS_ID 106IDoc

Basistyp DELVRY01 213IDOC_INPUT_SRVMAS 219Verarbeitung 213

IF_PURCHASE_ORDER_ITEM_MM 58IF_PURCHASE_ORDER_MM 58, 63implementierende Klasse 30, 52, 54Implementierung 20, 22, 91, 153impliziter Erweiterungspunkt 26IMPORT ... ACCEPTING TRUNCATION

120IMPORT ... FROM DATA BUFFER 116Importdaten 202Importparameter 45, 49IN UPDATE TASK 49Include 18

LMEVIEWSF01 41InfoSet 72INIT 91, 104INITIALIZE 37INSERT 117Instanz 157Instanzattribut 105Interface 21, 27, 59, 154, 158

IF_PURCHASE_ORDER_ITEM_MM 58IF_PURCHASE_ORDER_MM 58, 63

interne Tabelle 44INVALIDATE 67Inventurbeleg 234INVOICE_DATA_GET 155, 158INVOICE_DATA_TRANSFER 145, 155IQSM0007 229ITEM_MODIFY 123

K

Karteireiter 35Klasse 154

Boolesche 171, 181CL_EXITHANDLER 157implementierende 30, 52, 54

Klassen-Interface 22klassisches BAdI 20, 26Kommunikation 143Komponente 16, 17Konfigurationsdaten 209Konsignationsabrechnung 240Konsignationsabwicklung 248Konstante

C_EXIT_PARAM_CLASS 177C_EXIT_PARAM_FIELD 177, 184C_EXIT_PARAM_NONE 177

konstanter Wert, Substitution 182Konto

Kontenfindung 138Kontenplan 138Kontierung 137, 235Kontierungsdaten 67Kontierungsfeld 144Kontoart 147Kontomodifikationskonstante 137, 237WE/RE-Konto 137

Kontrakt 202Kopfdaten 40kundeneigenes Feld 89Kundennamensraum 146, 165

L

Lagerort 122, 123, 228Laufzeitverhalten 31Leistungsblatt 219Leistungserfassungsblatt 220Leistungsspezifikation 220Leistungsstamm 218Leistungsverzeichnis 223Leistungszeile 79, 83Lieferant 124Lieferantenadresse 212Lieferantenbeurteilung 212Lieferavis 213Lieferdatum 124

1537.book Seite 259 Freitag, 2. Juli 2010 8:40 08

Page 31: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

260

Index

Lieferplan 126, 202Lieferplaneinteilung 127LIFO, Bewertung 235LIFO0040 235Limitprüfung 222LINE_DELETE 93LINE_MODIFY 93, 110LMEKO001 206LMEKO002 207LMELA002 230LMELA010 213, 230LMEQR001 210LMEVIEWSF01 41LMEXF001 207LMR1M001 246LMR1M002 237LMR1M003 246LMR1M004 247LMR1M005 247LMR1M006 248Logistik-Informationssystem 214Logistik-Rechnungsprüfung 143, 163,

173, 237Lohnbearbeitung 209, 231LOOP AT SCREEN 96Löschkennzeichen 75LWBON001 215LWSUS001 210

M

M06B0001 194M06B0002 195M06B0003 195M06B0004 196M06B0005 195M06E0004 201M06E0005 201MAP_DYNPRO_FIELDS 35, 53Marktpreisanalyse 235Materialbeleg 92, 224Materialbelegnummer 93Materialwirtschaft 33MB_ACCOUNTING_DISTRIBUTE 230MB_CF001 226MB_CHECK_LINE_BADI 226MB_DOCUMENT_BADI 224MB_GOODSMOVEMENT 226, 230

MB_GOODSMOVEMENT_DCI 230MB_INSMK_WIP_CHANGE 226MB_MIGO_BADI 25, 115, 225MB_MIGO_ITEM_BADI 225MB_RESERVATION_BADI 232MB21 131MB22 131MBCF0002 227MBCF0005 227MBCF0006 231MBCF0007 233MBCF0009 228MBCFC003 228MBCFC004 228ME_BAPI_PO_CUST 197ME_BAPI_PR_CUST 193ME_CHDOC_ACTIVE 209ME_CHECK_ALL_ITEMS 198ME_CIP_ALLOW_CHANGE 209ME_COMMITMENT_PLAN 208ME_COMMITMENT_RETURN 208ME_DEFINE_CALCTYPE 206ME_GUI_PO_CUST 25, 33, 199

MAP_DYNPRO_FIELDS 50SUBSCRIBE 50TRANSPORT_FROM_DYNP 58TRANSPORT_FROM_MODEL 58TRANSPORT_TO_DYNP 58TRANSPORT_TO_MODEL 58

ME_HOLD_PO 20, 198ME_PO_PRICING_CUST 206ME_POHIST_DISP_CUST 27, 198ME_PROCESS_OUT 203ME_PROCESS_OUT_CUST 203ME_PROCESS_PO_CUST 33, 199

CLOSE 65FIELDSELECTION_HEADER 50FIELDSELECTION_ITEM 50INITIALIZE 65OPEN 65POST 65

ME_PROCESS_REQ_CUST 34, 192ME_PURCHDOC_POSTED 199ME_RELEASE_CREATE 204ME_REQ_HEADER_TEXT 194ME_REQ_OI_EXT 208ME_REQ_POSTED 194ME_TAX_FROM_ADDRESS 200ME23N 50

1537.book Seite 260 Freitag, 2. Juli 2010 8:40 08

Page 32: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

261

Index

ME31K 207ME31L 207ME59 201ME590001 201ME84 204MEETA001 205MEFLD004 231Mehrfachkontierung 82Meldungsprotokoll 123Mengenabweichung 163MEOUT_BAPI_CUST 202MEQUERY1 209MEREQ001 34, 196MESSAGE 135Metafeld 50, 53, 55Methode 21, 23

CHECK_HEADER 120CHECK_ITEM 120, 122CUSTOM_DATA_GET 156CUSTOM_DATA_TRANSFER 156CUSTOMDATA_MODIFY 155DATA_CHECK 131DATA_MODIFY 131, 132GET_INSTANCE_FOR_SUBSCREENS

157HOLD_DATA_DELETE 116, 119HOLD_DATA_LOAD 116HOLD_DATA_SAVE 116, 117INIT 91, 104INVOICE_DATA_GET 155INVOICE_DATA_TRANSFER 155LINE_DELETE 93LINE_MODIFY 93, 110MODE_SET 91, 104PAI_DETAIL 93, 110PAI_HEADER 92PBO_DETAIL 92, 109PBO_HEADER 92POST_DOCUMENT 93, 113RESET 91, 104STATUS_AND_HEADER 91, 115TABPAGE_LABEL_SET 145, 156

MEVME001 232MIGO 89, 91, 225

Aktion 102Buchen 120Merken 109, 115Prüfen 120Referenzbeleg 103

MIGO_CLASS_ID 101MIR4 149MIR6 149MIR7 173MIRA 149MIRO 143, 145, 173ML81N 85ML86 220, 223ML87 220, 223MLS5 223MM_EDI_DESADV_IN 213MM_INVBEL 234MM_MATBEL 233MM_MESSAGES_MAC 66MM06E001 214MM06E003 210MM06E004 202MM06E005 33, 211MM06E007 15, 202MM06E008 204MM06E009 211MM06E010 212MM06E011 197MM06L001 212MM08R001 251MM08R002 246, 251MMDA0001 212MMFAB001 205MMMFD 54MMPUR_DYNAMIC_CAST 58MMPUR_MESSAGE_FORCED 67MMPUR_METAFIELD 54, 66MMSRV_SM_BAPI_CUST 218MMSRV_SM_MAIN 218MMSRV_SM_NOTIFY 218MODE_SET 91, 104Modifikation 27MODULE 158MODULE ... ON CHAIN-REQUEST 162Modulpool 149MOVE-CORRESPONDING 109MRBP 149MRBR 240MRFLB001 205MRIS 239MRKO 240MRM_BLOCKREASON_DELETE 245MRM_BLOCKREASON_DELETE_CUST

245

1537.book Seite 261 Freitag, 2. Juli 2010 8:40 08

Page 33: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

262

Index

MRM_DOWNPAYMENT 244MRM_ERS_HDAT_MODIFY 237MRM_ERS_IDAT_MODIFY 238MRM_HEADER_CHECK 238MRM_HEADER_DEFAULT 239MRM_INVOICE_UPDATE 243MRM_ITEM_CUSTFIELDS 143, 238MRM_MRIS_HDAT_MODIFY 239MRM_MRIS_IDAT_MODIFY 239MRM_MRKO_HDAT_MODIFY 240MRM_PARTNER_CHECK 244MRM_PAYMENT_TERMS 240MRM_RELEASE_CHECK 240MRM_RETENTIONS 245MRM_TOLERANCE_GROUP 241MRM_TRANSACT_DEFAULT 241MRM_UDC_DISTRIBUTE 241MRM_VARIANCE_TYPE 242MRM_WT_SPLIT_UPDATE 242MRMH0001 248MRMH0002 249MRMH0003 249MRMN0001 250MSEG 93MSEG-ZEILE 114

N

Nachricht 171BLAREL 214DELFOR 214DELINS 214DESADV 214ORDCHG 214ORDERS 214ORDRSP 214REQOTE 214

Nachrichtenklasse, ändern 172Nebenkosten 237Niederstwertabgleich 235NIWE0000 235NIWE0001 235NIWE0002 236NIWE0003 236Nullzeile, vorschlagen 130Nummernkreis 195, 210, 246

O

OB28 170, 172OBBH 180Objekt 59Obligo 197

Funktion 207Plan 208

OBYC 138OK-CODE 41OPEN 37ORDCHG 214ORDERS 214ORDRSP 214OXK3 144

P

PAI_DETAIL 93, 110PAI_HEADER 92Parameter

CHANGING 47Schnittstelle 24, 27

ParameterartC_EXIT_PARAM_CLASS 177C_EXIT_PARAM_FIELD 177, 184C_EXIT_PARAM_NONE 177

Partnerrolle 244PBO_DETAIL 92, 109PBO_HEADER 92, 106Pipeline

Abrechnung 240Abwicklung 248

Positionsdaten 38Positionsnummer 161Positionstext 122, 123, 133, 172, 211,

225, 227, 247POST 37POST_DOCUMENT 93, 113Preisabweichung 163Preisfindung 198, 206PROCESS AFTER INPUT 146PROCESS BEFORE OUTPUT 146PROCESS_ACCOUNT 37, 67PROCESS_HEADER 37, 67PROCESS_ITEM 37, 67PROCESS_SCHEDULE 37, 67

1537.book Seite 262 Freitag, 2. Juli 2010 8:40 08

Page 34: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

263

Index

ProgrammRGGBR000 175RGGBS000 184RM06BD70 216RM06BV70 215RM06BW70 216RM06ED47 217RM06EFLB 205RM06EW47 217RM06ID47 217RM06IW47 216, 217RM07IARCS 234RM07IDELS 234RM07MADES 234RM07MARCS 233, 234SAPLMR1M 187

Programmtabelle 151Projekt 16, 18Prüfung 171

Q

Query 72Query Painter 72

R

Rahmenvertrag 202RAWSTRING 116, 119RBDRSEG 148RBMA 148Rechnung 164Rechnungsbeleg 143, 144, 145

Kopf 155Position 155

Rechnungsplanabrechnung 239Rechnungsprüfung 237

herkömmliche 251Referenz 59, 92Referenzschlüssel 182Report

RGUGBR00 172, 181RGUGBR28 172RM06EFAB 205RMMR1MRB 249

Repository Browser 94, 150

REQOTE 214Reservierung 131, 232RESET 91, 104Retourenposition 208Return-Tabelle 120RGGBR000 175RGGBS000 184RGUGBR00 172, 181RGUGBR28 172RM06BD47 216RM06BV70 215RM06BW47 216RM06BW70 216RM06ED47 217RM06EFAB 205RM06EFLB 205RM06EW47 217RM06ID47 217RM06IW47 216, 217RM07IARCS 234RM07IDELS 234RM07MADES 234RM07MARCS 233, 234RMMR1MRB 249RMVKON00 240, 248RSEG 148

S

Sachkontenreiter 143Sachkonto 133SAP Enhancement Framework 26SAP Query 71SAPLMR1M 187Schnittstelle 154, 158Schritt 171Screen Painter 95, 150SCREEN-NAME 161SE11 38, 117SE18 20, 27SE19 20, 22, 28, 153SE24 56SE80 40, 94Selektionsvariante 71Seriennummer 229SGTXT 225, 227, 247Sichtbarkeit 104Signatur 24

1537.book Seite 263 Freitag, 2. Juli 2010 8:40 08

Page 35: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

264

Index

SMOD 16SMOD_MRFLB001 204SQ01 72SQ02 72SRVDET 219SRVEDIT 220SRVESI 220SRVESKN 220SRVESLL 221SRVESSR 221SRVEUSCR 221SRVKNTTP 222SRVLIMIT 222SRVMAIL1 222SRVMSTLV 223SRVREL 223SRVSEL 223STATUS_AND_HEADER 91, 115Struktur 97

CI_DRSEG_CUST 145DRSEG 145DRSEG_CI 145, 147

Subscreen 95, 143, 150, 153SUBSCRIBE 35Substitution 169, 180

Exit 182Exit-Routine 183Feld-Feld-Zuweisung 182konstanter Wert 182Ursprungsbeleg 187

T

T80D 175, 184Tabelle

Arbeitsbereich 151BKPF 170BSEG 170GB01 181MSEG 93Parameter 47T80D 175, 184YDRSEG 187

Table Control 145, 149, 150, 158Wizard 151

TABLE_LINE 134

TABPAGE_LABEL_SET 145, 156Textfeld 93Textsymbol 156Toleranzgrenze 126, 163Toleranzprüfung 143, 163, 246Toleranzschlüssel 164Transaktion

AC03 219CMOD 16, 19MB21 131MB22 131ME23N 50ME31K 207ME31L 207ME59 201ME84 204MIGO 89, 102, 103, 109, 115, 225MIR4 149MIR6 149MIR7 173MIRA 149MIRO 143, 145, 173ML81N 85ML86 220, 223ML87 220, 223MRBP 149OB28 170, 172OBBH 180OBYC 138OXK3 144SE11 38, 117SE18 20, 27SE19 20, 22, 28, 153SE24 56SE80 94SMOD 16SQ01 72SQ02 72

TRANSPORT_FROM_DYNPRO 36TRANSPORT_FROM_MODEL 36TRANSPORT_TO_DYNPRO 36TRANSPORT_TO_MODEL 36Typ 26, 103

DESADV 213Typeingabe, direkte 104Typgruppe 54

1537.book Seite 264 Freitag, 2. Juli 2010 8:40 08

Page 36: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

265

Index

U

Überlieferungsmenge 127, 128unbegrenzte Abweichung 167Unterlieferungsmenge 128Upcast 59Ursprungsbeleg, Substitution 187User-Exit 15

Aktivieren 19Deaktivieren 19EXIT_RM06EFAB_001 205EXIT_RM06EFLB_001 205EXIT_RM06LBAT_001 213EXIT_RM06LBEW_001 213EXIT_RMMR1MRB_* 249EXIT_RMVKON00_* 248EXIT_SAPLBASO_* 219EXIT_SAPLEBND_* 195, 201, 223EXIT_SAPLEBNE_001 196EXIT_SAPLEBNF_* 194, 201EXIT_SAPLEINL_001 205EXIT_SAPLEINM_* 214EXIT_SAPLEINR_* 125, 126, 231, 232EXIT_SAPLIE01_007 229EXIT_SAPLKONT_011 139, 237EXIT_SAPLLIFS_* 235EXIT_SAPLMBMB_001 227EXIT_SAPLMDBF_* 229EXIT_SAPLME59_001 201EXIT_SAPLMEKO_* 207EXIT_SAPLMEL0_001 213EXIT_SAPLMEQR_001 210EXIT_SAPLMEQUERY_* 71, 76, 210EXIT_SAPLMEREQ_* 196EXIT_SAPLMEXF_001 207EXIT_SAPLMIGO_001 231EXIT_SAPLMLSK_001 79, 80, 220EXIT_SAPLMLSL_001 222EXIT_SAPLMLSP_* 83, 84, 219, 221,

224EXIT_SAPLMLSR_* 85, 220, 221, 222EXIT_SAPLMLST_001 223EXIT_SAPLMLSX_* 220, 222, 223EXIT_SAPLMMDA_001 212EXIT_SAPLMR1M_* 165, 246EXIT_SAPLMRM_BAPI_001 248EXIT_SAPLMRMC_* 165, 246, 247EXIT_SAPLMRME_003 247EXIT_SAPLMRMH_* 249

User-Exit (Forts.)EXIT_SAPLMRMN_* 250EXIT_SAPLMRMP_* 165, 246, 247EXIT_SAPLNIW0_* 236EXIT_SAPLNIW1_* 236EXIT_SAPLNIW3_* 236EXIT_SAPLNIWE_* 235, 236EXIT_SAPLWN08_001 215EXIT_SAPLWN12_001 215EXIT_SAPLWN35_001 215EXIT_SAPLWSUS_001 210EXIT_SAPM07DR_* 227EXIT_SAPMM06B_001 195EXIT_SAPMM06E_* 17, 197, 202,

204, 211, 212EXIT_SAPMM06L_001 213EXIT_SAPMM07M_* 227, 228, 231EXIT_SAPMM07R_001 233

V

Validierung 169, 170Ändern der Nachrichtenklasse 172Exit-Routine 175

Variable, B_RESULT 178Verarbeitung, IDoc 213Verbuchung 47, 113, 114Verbuchungsabbruch 100Verbuchungsbaustein 47, 91, 99Verteilungskennzeichen 82Voraussetzung 171, 180Vorerfassung 173Vorgabewert 89Vorschlagsmenge 126, 129Vorwärtsdeklaration 54

W

Warenausgang 92Warenbegleitschein 227Warenbewegung 89Wareneingang 92, 124, 127, 229Warenempfänger 133, 135Warengruppe 165WE/RE-Kontenfindung 237WE/RE-Konto 137

1537.book Seite 265 Freitag, 2. Juli 2010 8:40 08

Page 37: ABAP-Programmierung für die SAP-Materialwirtschaft – User ... Jürgen Schwaninger ABAP™-Programmierung für die SAP®-Materialwirtschaft – User-Exits und BAdIs Bonn Boston 1537.book

266

Index

Wertkontrakt 204Wertübergabe 47, 99WE-Sperrbestand 124WRF_MRM_ASSIGN_TEST 242WRF_PREPAY_INVOICE 243WRX 138

X

XMBF0001 229XML-Rechnung 248XSTRING 116

Y

YDRSEG 187

Z

Zeitpunkt 170zusammengesetzte Erweiterungsimple-

mentierung 28Zuweisungsoperator 59

1537.book Seite 266 Freitag, 2. Juli 2010 8:40 08