Montag, 11. März 2013

ABAP - Makros im HR wie z.B. RP-PROVIDE-FROM-LAST

Schon einmal gefragt was in einem Programm passiert wenn der Befehl: RP-PROVIDE-FROM-LAST P0000 0000 PN-BEGDA PN-ENDDA ausgeführt wird?
Hier wird ein Makro in der Tabelle TRMAC aufgerufen. Dies ist eine HR Besonderheit, funktioniert aber in allen ABAP Programmen. In der TRMAC steht Folgendes:

Name des Makros                    Zeile     Makrotext

RP-PROVIDE-FROM-LAST       001       ****************************************
RP-PROVIDE-FROM-LAST       002       * RP-PROVIDE-LAST INFTY SUBTY BEG END  *
RP-PROVIDE-FROM-LAST       003       ****************************************
RP-PROVIDE-FROM-LAST       004       * SORT &1
RP-PROVIDE-FROM-LAST       005       PNP-SW-FOUND = '0'
RP-PROVIDE-FROM-LAST       006       CLEAR PNP-SY-TABIX
RP-PROVIDE-FROM-LAST       007       LOOP AT &1
RP-PROVIDE-FROM-LAST       008       IF &2 NE SPACE
RP-PROVIDE-FROM-LAST       009       CHECK &1-SUBTY EQ &2
RP-PROVIDE-FROM-LAST       010       ENDIF
RP-PROVIDE-FROM-LAST       011       IF &1-BEGDA LE &4 AND &1-ENDDA GE &4
RP-PROVIDE-FROM-LAST       012       PNP-SW-FOUND = '1'
RP-PROVIDE-FROM-LAST       013       EXIT
RP-PROVIDE-FROM-LAST       014       ENDIF
RP-PROVIDE-FROM-LAST       015       IF &1-BEGDA LE &4 AND &1-ENDDA GE &3
RP-PROVIDE-FROM-LAST       016       PNP-SY-TABIX = SY-TABIX
RP-PROVIDE-FROM-LAST       017       ENDIF
RP-PROVIDE-FROM-LAST       018       ENDLOOP
RP-PROVIDE-FROM-LAST       019       IF PNP-SW-FOUND EQ '0'
RP-PROVIDE-FROM-LAST       020       IF PNP-SY-TABIX NE 0
RP-PROVIDE-FROM-LAST       021       PNP-SW-FOUND = '1'
RP-PROVIDE-FROM-LAST       022       READ TABLE &1 INDEX PNP-SY-TABIX
RP-PROVIDE-FROM-LAST       023       ELSE
RP-PROVIDE-FROM-LAST       024       CLEAR &1
RP-PROVIDE-FROM-LAST       025       ENDIF
RP-PROVIDE-FROM-LAST       026       ENDIF

Wie man sieht gibt es hier nichts Geheimnisvolles, sondern es handelt sich um einen normalen Loop mit IF Abfragen. Trotzdem ist der RP-PROVIDE-FROM-LAST wohl das meistgebrauchte TRMAC Makro im HR Umfeld. Diese Makros funktionieren genau wie Funktionsbausteine oder im Programm definierte Makros mit dem ABAP Befehl DEFINE. Der Nachteil gegenüber einem Funktionsbaustein ist, dass man ein TRMAC Makro nicht debuggen kann und auch mit einem Doppelklick nicht weiterkommt. Die Lesbarkeit des Programms wird dadurch eingeschränkt. Deshalb sollte man - obwohl es prinzipiell möglich ist - nicht unbedingt eigene Makros in die Tabelle aufnehmen, sondern lieber einen Funktionsbaustein erstellen.

Keine Kommentare:

Kommentar veröffentlichen