Folgeaufträge in Auftragstabellen finden & per Funktionsbaustein auslesen [Howto]
Kennen Sie schon die Möglichkeit, Ihre Instandhaltungsaufträge als Folgeaufträge anzulegen? Mit diesem praktischen Feature können Sie aufeinander aufbauende Aufträge im SAP einfach kennzeichnen. Wie aber sieht das benötigte ABAP-Coding aus, um diese Beziehung auszulesen? Im folgenden Artikel zeige ich Ihnen, in welchen Tabellen die Relation der Folgeaufträge gespeichert wird und mit welchen Funktionsbausteinen Sie diese auslesen können.
Einführung: Folgeaufträge anlegen
Falls Sie bisher noch keine Folgeaufträge genutzt haben, möchte ich Ihnen kurz zeigen, wie Sie diese anlegen und einsehen können. Die Voraussetzung ist dabei, dass bei Ihnen die Business Function Enterprise Asset Management 7 im SAP-System aktiv ist. Ob das der Fall ist, können Sie beispielsweise in der Transaktion SFW5 einsehen – dort hat die Business Function die Bezeichnung LOG_EAM_CI_7.
Wenn die Funktion aktiv ist, sollten Sie beim Öffnen der IW31 etwa das folgende Bild sehen:
Um den neu anzulegenden Auftrag als Folgeauftrag zu kennzeichnen, setzen Sie den Haken bei “Folgeauftrag anlegen” und geben die Auftrags- und Vorgangsnummer des Vorgängerauftrags ein. Sobald Sie den neu angelegten Auftrag in der IW33 öffnen, können Sie Folgeeinträge einsehen, indem Sie im Menü Zusätze > Belege zum Auftrag > Belegfluss auswählen. Wenn der Belegfluss geöffnet ist, klicken Sie direkt unter „Belegfluss anzeigen“ auf Folgeaufträge und Sie sehen folgendes Bild:
Diese Ansicht visualisiert die Beziehung zwischen Vorgänger- und Folgeauftrag hierarchisch.
So sind die Tabellen aufgebaut
Nun stellt sich jedoch die Frage, wie die Beziehung zwischen Vorgänger- und Folgeauftrag im SAP-System intern gespeichert wird. Die üblichen Tabellen für Aufträge und Vorgänge wie AFKO (Auftragsköpfe) und AFVC (Auftragsvorgänge) enthalten keine Felder für diese Beziehung. Stattdessen ist die Information in zwei weiteren Tabellen gespeichert:
SRRELROLES | Zuordnung von Rollen zu Aufträgen und Vorgängen |
SMZB_BINREL | Binäre Relation zwischen zwei Rollen |
Im Folgenden demonstriere ich Ihnen den Aufbau der Tabellen und ihre Nutzung an einem Beispiel. Angenommen, Sie kennen die Auftragsnummer Ihres Folgeauftrags und möchten den Vorgängerauftrag dazu in der Datenbank finden. Dazu können Sie beispielweise die Tabellenanzeige SE16N nutzen.
Als Tabelle geben Sie zunächst SRRELROLES an und bestätigen. Im Auswahldialog geben Sie nun als Schlüssel die Auftragsnummer an (dabei sind entweder führende Nullen zu berücksichtigen oder ein * vor der Auftragsnummer anzugeben) sowie den Objekttyp BUS2007 für Aufträge und den Rollentyp NACHFOLGER. Der ausgefüllte Dialog sollte wie folgt aussehen:
Das Suchergebnis zeigt Ihnen nun neben der bereits bekannten Rollenart – es handelt sich um einen Folgeauftrag – auch die GUID dieser Rolle und den Zeitstempel der Anlagezeit an:
Mithilfe dieser GUID können Sie nun in der Tabelle SMZB_BINREL nach der Relation suchen, welche dem Folgeauftrag zugeordnet ist. Dazu nutzen Sie wieder die SE16N und tragen die gefundene GUID im 2. Feld „Rollen-GUID“ mit dem technischen Namen ROLE_B ein. Das Suchergebnis sollte etwa wie folgt aussehen:
Der angezeigte Tabelleneintrag enthält die GUID für beide Rollen sowie die GUID der Verknüpfung, den Zeitstempel und den Typen (FWUP für Follow-Up, also Nachfolge). Mithilfe der linken GUID können Sie nun wieder in der Tabelle SRRELROLES nach der Rollenzuordnung des Vorgängers suchen, und erhalten folgendes Ergebnis:
Diesmal ist der Rollentyp VORGAENGER statt NACHFOLGER und der Objekttyp AFVC_PM – dieser Typ bezeichnet Auftragsvorgänge. Der Schlüssel dieses Eintrags ist nicht die Auftragsnummer, sondern setzt sich aus zwei Komponenten zusammen. Die ersten 10 Ziffern beinhalten den Schlüssel der Plannummer von Vorgängen und die letzten 8 Ziffern den sogenannten allgemeinen Zähler des Auftrags. Diese entsprechen damit genau den beiden Schlüsselkomponenten AUFPL und APLZL der Tabelle für Auftragsvorgänge AFVC. Damit können Sie nun in der SE16N nach dem Auftragsvorgang suchen:
So sieht das Ergebnis aus
Eine mögliche SQL-Query, um mithilfe einer gegebenen Auftragsnummer gv_aufnr den dazugehörigen Vorgängerauftrag zu finden, ist etwa Folgende:
SELECT substring( role_left~objkey, 1, 10 ) as aufpl, substring( role_left~objkey, 11, 4 ) as aplzl FROM SRRELROLES as role_right INNER JOIN smzb_binrel as rel ON role_right~roleid = rel~role_b AND rel~breltyp = 'FWUP' INNER JOIN srrelroles as role_left ON role_left~roleid = rel~role_a INNER JOIN afvc as oper_left ON oper_left~aufpl = substring( role_left~objkey, 1, 10 ) WHERE role_right~objkey = @gv_aufnr AND role_right~objtype = 'BUS2007' AND role_left~objtype = 'AFVC_PM' INTO TABLE @DATA(lt_result).
Nutzen Sie den Funktionsbaustein SREL_GET_NEXT_RELATIONS
Einfacher als mit einer SQL-Query können Sie jedoch einen Vorgängerauftrag mit dem von der SAP bereitgestellten Funktionsbaustein SREL_GET_NEXT_RELATIONS erstellen. Der einzige Pflichtparameter, den Sie angeben müssen, heißt OBJECT und hat den Typen BORIDENT – eine Struktur, die den Objektschlüssel (also die Auftragsnummer) und den Objekttypen BUS2007 enthält. Zusätzlich sollten Sie als Parameter RELATIONTYPE noch FWUP angeben, um nur Rollen und Relationen für die gewünschte Beziehung des Vorgänger- und Nachfolgerauftrags zu erhalten. Den Funktionsbaustein können Sie in der SE37 testen. Um die Rollen und Relationen zu suchen, die wir oben mithilfe der Tabellen gefunden haben, sieht das Eingabebild zum Beispiel wie folgt aus:
Als Ausgabe erhalten wir zwei interne Tabellen, die die oben gefundenen Rollen und Relationen beinhalten:
Die Nutzung dieses Funktionsbausteins macht es also sehr einfach, Vorgänger- und Nachfolgeaufträge zu finden. Mithilfe des Parameters MAX_HOPS können Sie außerdem die Anzahl an Suchschritten einstellen und so mehrstufige Hierarchien von Vorgänger- und Nachfolgebeziehungen auslesen.
Noch Fragen?
Haben Sie noch Probleme bei der Erstellung von Folgeaufträgen oder haben Sie noch weitere Fragen? Melden Sie sich gerne bei mir!
Ein Kommentar zu "Folgeaufträge in Auftragstabellen finden & per Funktionsbaustein auslesen [Howto]"
Vielen Dank für diesen hilfreichen Beitrag!