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.