Pseudokommentare in ABAP

Pseudokommentare und Pragmas sind in der Programmiersprache ABAP im Rahmen von ATC-Prüfungen enorm wichtig. Als Programmierer verwendet man Pseudokommentare und Pragmas, wenn man ATC-Warnungen oder -Fehler bewusst akzeptiert. In diesem Artikel möchte ich gerne erläutern, was man unter einem Pseudokommentar und einem Pragma versteht und wie man sie verwendet.

Was ist eine ATC-Prüfung?

Um zu verstehen, was ein Pseudokommentar und ein Pragma sind, muss man vorerst verstehen, was ATC und eine ATC-Prüfung sind.

Die Abkürzung ATC steht für ABAP Test Cockpit. Hierbei handelt es sich um ein Programm für die Analyse von ABAP-Programmen, das mit der Transaktion ATC aufgerufen wird. Ruft man diese Transaktion auf, hat man die Möglichkeit, diverse Aktionen und Einstellungen rund um das ABAP Test Cockpit auszuführen.

ABAP Test Cockpit - ATC

In dem Knoten “Befreiungs-Browser” kann man die Ausnahmen einer ATC-Prüfung genehmigen.

Man hat nun die Möglichkeit, ABAP-Entwicklungen einer ATC-Prüfung zu unterziehen. Dabei werden die ABAP-Objekte anhand einer Prüfvariante untersucht. Im Object Navigator (Transaktion SE80) kann man in der Objektliste die ATC-Prüfung ausführen. Hierzu wählt man mit einem Rechtsklick auf das ABAP-Objekt “Prüfen > ABAP Test Cockpit (ATC)” oder “Prüfen > ABAP Test Cockpit (ATC) mit …”.

ATC-Prüfung

Bei der Funktion “ABAP Test Cockpit (ATC)” wird das ABAP-Objekt analysiert und untersucht. Die Ergebnisse der ATC-Prüfung werden daraufhin im Anschluss angezeigt. Dabei wird jeder Verstoß der definierten ATC-Regeln in der Liste angezeigt.

Ergebnis einer ATC-Prüfung

Wenn man auf eine Zeile klickt, erhält man in den Details Detailinformationen über den Verstoß der ATC-Prüfung. Klickt man in der Zeile auf den Objektnamen, springt man direkt in den ABAP Editor in die Zeile, in der der Verstoß entsteht. Das ist sehr praktisch, um den ABAP-Code zu analysieren und zu verbessern.

Mit der Funktion “ABAP Test Cockpit (ATC) mit …” kann man im Tabreiter “Optionen” die Code-Inspector-Prüfvariante angeben.

ATC-Prüfung mit

Möchte man bspw. den ABAP-Code auf die Kompatibilität auf eine HANA-Datenbank untersuchen, verwendet man die Prüfvariante FUNCTIONAL_DB.

Bei den ATC-Prüfungen gibt es bestimmte Prioritäten. Diese reichen von 1 bis 4. Hierbei stellt die Priorität 1 den schwerwiegendsten ATC-Verstoß dar und muss behoben werden. Meistens kann das Programm nicht ausgeführt werden, wenn diese Fehler nicht behoben werden (z.B. Syntaxfehler). Oft kann man hier keine Pseudokommentare, Pragmas oder Ausnahmen anwenden. Mit aufsteigender Priorität wird die Schwere des Verstoßes geringer. So stellt die Priorität 4 lediglich Warnungen dar, die man mit einem Pseudokommentar, Pragma oder einer Ausnahme akzeptieren kann.

Was ist ein Pseudokommentar?

Ein Pseudokommentar ist ein Kommentar im ABAP-Code, der eine fehlgeschlagene ATC-Prüfung bewusst akzeptiert und umgeht. Das Transportwesen kann z.B. so eingerichtet werden, dass nur bei erfolgreichen ATC-Prüfungen ein Transport freigegeben und damit transportiert werden darf. Das macht auch durchaus Sinn und sollte eingerichtet werden, um die Qualität der ABAP-Programme zu gewährleisten.

Leider kommt es jedoch vor, dass man diese fehlgeschlagenen ABAP-Prüfungen bewusst akzeptieren möchte, da die gewählte Programmierung am besten für den Anwendungsfall ist.

Ein Pseudokommentar wird mit dem Kürzel “#EC eingeleitet. Hierbei gibt es verschiedene Pseudokommentare für verschiedene ATC-Prüfungen.

Pseudokommentare werden oft durch Pragmas ersetzt. Nur die Pseudokommentare für den Code Inspector wurden bisher nicht durch andere Sprachelemente ersetzt.

Es kann unter Umständen vorkommen, dass man eine ABAP-Anweisung mit mehreren Pseudokommentaren versehen möchte. Es ist dabei nur möglich, einen Pseudokommentar pro Zeile zu verwenden. Möchte man also mehrere Pseudokommentare verwenden, muss man die ABAP-Anweisung auf mehrere Zeilen aufteilen.

Man sollte sich immer mit den Warnungen und Fehlern der Programmprüfung auseinandersetzen und nicht willkürlich einen Pseudokommentar, Pragma oder eine Ausnahme anwenden. Vor allem sollte die Anweisung “SET EXTENDED CHECK OFF.” niemals verwendet werden. Diese ABAP-Anweisung unterdrückt sämtliche Meldungen der erweiterten Programmprüfung für den gesamten Quelltextabschnitt.

Liste der wichtigsten Pseudokommentare

PseudokommentarBeschreibung
“EC CI_ALL_FIELDS_NEEDEDUnbenutzte Spalten bei einer SELECT-Abfrage
“EC CI_CMPLX_WHEREKomplexe WHERE-Bedingung bei SELECT-Abfrage
“EC CI_SUBMITAusführbares Programm ausführen
“EC CI_SEL_NESTEDVerschachtelte Abfragen bzw. Schleifen
“EC CI_TABL_EXCEPTNTechnische Ausnahme mit Tabelle
“EC FM_SUBRC_OKUndefinierter Rückgabecode nach CALL FUNCTION
“EC CI_FLDEXT_OKProblem mit Konvertierung von Variablen (z.B. MATNR in SAP S/4HANA)
“EC CI_SORTEDNicht sortierte interne Tabelle
“EC CI_NOORDERKein ORDER in SQL-Abfrage
“EC CI_USAGE_OKProblem mit Verwendung bzw. Aufruf
“EC CI_SUBRCKeine Prüfung auf die Systemvariable sy-subrc
“EC CI_VALPARParameter wird als Wert und nicht Referenz übergeben

Beispiel für einen Pseudokommentar

Es gibt verschiedene Pseudokommentare. Pseudokommentare werden nach einer ABAP-Anweisung verwendet. Wenn eine ABAP-Anweisung sich über mehrere Zeilen erstreckt, kann man einen Pseudokommentar am Ende einer Zeile in einer ABAP-Anweisung verwenden. Da es sich bei einem Pseudokommentar auch um einen Kommentar handelt, kann man einen Pseudokommentar nicht in einer ABAP-Anweisung verwenden, da die restlichen Befehle nach dem Kommentar in der Zeile auskommentiert werden.

In diesem Beispiel verwendet man den Pseudokommentar #EC CI_SUBRC. Dadurch akzeptiert man die Warnung, dass man nicht auf die Systemvariable sy-subrc reagiert, nachdem man eine Abfrage auf die Tabelle EKKO durchgeführt hat.

   SELECT afnam
     FROM ekko
     INTO @lv_afnam
     WHERE ebeln = @ebeln. "#EC CI_SUBRC

   IF lv_afnam IS NOT INITIAL.
      "Mache etwas
   ENDIF.

***************************************
*** Auch möglich, Pseudokommentar am Ende der Zeile,
*** aber innerhalb einer Anweisung.
***************************************
   SELECT afnam "#EC CI_SUBRC
     FROM ekko
     INTO @lv_afnam
     WHERE ebeln = @ebeln. 

   IF lv_afnam IS NOT INITIAL.
      "Mache etwas
   ENDIF.

Was ist ein Pragma?

Pseudokommentare sind weitestgehend obsolet und werden durch Pragmas ersetzt. Eine Ausnahme bilden die Pseudokommentare im Code Inspector.

Ein Pragma ist ebenfalls eine Programmdirektive, die sich nicht auf den Programmablauf, sondern auf die Laufzeitumgebung auswirkt. Dabei sollen vor allem Warnungen vor verschiedenen Prüfwerkzeugen ausgeblendet und bewusst akzeptiert werden.

Ein Pragma hat folgenden Aufbau: ##code[par][par]

Dabei ist der Pragma-Code (code) nicht case-sensitive. Das bedeutet, dass er groß- oder kleingeschrieben werden kann. Der Code legt die Wirkung fest und die Parameter (par) grenzen die Wirkung ein. Dabei gibt es obligatorische und optionale Parameter. Die obligatorischen Parameter müssen mit eckigen Klammern angegeben werden. Die optionalen Parameter dürfen angegeben werden oder mit leeren eckigen Klammern oder komplettem Weglassen nicht angewendet werden.

Ein Pragma gilt für die Anweisung, die mit dem nächsten Punkt (.) oder Komma (,) endet. Platziert man ein Pragma vor einem Doppelpunkt (:), also vor einer verketteten Anweisung, gilt das Pragma für die gesamte verkettete Anweisung. Pragmas vor einem Aufruf eines Makros gelten für alle Anweisungen des Makros.

Bei der Verwendung von Pragmas muss man folgende Voraussetzungen beachten:

  • Am Anfang einer Zeile nach beliebigen Leerzeichen dürfen Pragmas platziert werden
  • Am Ende einer Zeile dürfen nach einem Pragma höchstens ein Punkt (.), Komma (,) oder Doppelpunkt (:) folgen
  • Ein Pragma darf nicht hinter einem Punkt (.), Komma (,) oder Doppelpunkt (:) stehen
  • Mehrere Pragmas dürfen nacheinander durch Leerzeichen getrennt platziert werden

Werden diese Bedingungen nicht eingehalten, unbekannte Pragmas oder Pragmas mit formalen Fehlern verwendet, entstehen Syntaxwarnungen. Pragmas an der falschen Position werden für die Prüfung von Syntaxwarnungen ignoriert.

Eine Übersicht über alle Pragmas für die erweiterte Programmprüfung erhältst Du mit dem Report ABAP_SLIN_PRAGMAS, der mit der Transaktion SE38 oder SA38 aufgerufen werden kann. Alternativ kann man direkt die Tabelle SLIN_DESC im Data Browser (Transaktion SE16N) untersuchen.

Beispiel für einen Pragma

"Pragma ##NEEDED bei einer verketteten Anweisung
DATA ##NEEDED:
   ls_ekko TYPE ekko,
   lt_ekko TYPE TABLE OF ekko.

"Pragma ##NEEDED
DATA: lv_test TYPE string ##NEEDED.
"Pragma ##NO_TEXT
lv_test = 'Test'      ##NO_TEXT.
WRITE: / lv_test.

Liste der wichtigsten Pragmas

PragmaBeschreibung
##CALLEDFORM oder METHOD nicht aufgerufen
##CATCH_ALLAusnahmebehandlung mit CX_ROOT
##FM_SUBRC_OKZugriff auf undefinierten Returncode nach CALL FUNCTION
##NEEDEDUnbenutzte Datendeklaration
##NO_TEXTHartcodierter Text
##NO_HANDLERKeine Ausnahmebehandlung

Über den Autor

Andreas Geiger

Schön, dass Du Dich für SAP ERP bzw. SAP S/4HANA interessierst.

Mein Name ist Andreas Geiger und ich bin der Gründer von ERP-UP.de. Mein Ziel ist es, so viel nützliches Wissen wie möglich über das SAP ERP-System zu vermitteln. Ich möchte Dir damit einen Mehrwert bieten. Es freut mich, wenn ich Dir damit helfen kann.

Mehr zu ERP UP

ERP UP unterstützen

Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.

Schreibe einen Kommentar