ABAP Code in SAP Query

In SAP Query kann ABAP Code direkt eingebunden werden, um Abfragen und Listen gezielt zu erweitern und individuell anzupassen. Dabei stehen verschiedene Optionen zur Verfügung, mit denen Daten verarbeitet, gefiltert oder die Ausgabe modifiziert werden können. Dieser Artikel gibt Dir einen Überblick, wie ABAP Code in SAP Query integriert wird und welche Einsatzmöglichkeiten er bietet. Grundsätzlich lässt sich SAP Query auch komplett ohne ABAP-Code nutzen, doch für komplexe Anforderungen ermöglicht das Tool, eigenen ABAP-Code flexibel einzusetzen.

SAP Query – Was ist das?

SAP Query ist ein Werkzeug bzw. Tool in SAP ERP, mit dem man benutzereigene Listen erstellen kann. Über die Transaktion SQ01 kann man SAP Querys erstellen, ändern, löschen oder sogar ausführen. Mit SAP Query kann man verschiedene Berichtsformen (Grundlisten, Statistiken, Ranglisten) erstellen.

Die Grundlage jeder SAP Query bilden die sogenannten Infosets. In der Transaktion SQ01 kann man über „Umfeld > InfoSets“ oder direkt über die Transaktion SQ02 die Infosets aufrufen. Infosets werden aus einem oder mehreren unterschiedlichen Datenbanktabellen zusammengesetzt. Um SAP Querys erstellen und nutzen zu können, muss man vorher zwingend den passenden Infoset erstellen.

Aber alleine mit Infosets lassen sich noch keine SAP Querys erstellen. Man muss zusätzlich noch eine sogenannte Benutzergruppe erstellen. Auch diese kann man in der Transaktion SQ01 über „Umfeld > Benutzergruppen“ oder direkt über die Transaktion SQ03 erstellen, ändern oder gar löschen. Eine Benutzergruppe grenzt verschiedene Anwendungsbereiche voneinander ab und ordnet die relevanten Datenmengen zu.

SAP Querys kann man auch in ein Folgesystem exportieren bzw. importieren. (siehe auch Transport von SAP Querys).

ABAP Code in SAP Query im Überblick

Den ABAP Code in SAP Query fügt man direkt im InfoSet ein. Dazu öffnet man als Erstes die Transaktion SQ02, wählt das gewünschten InfoSet aus und geht in den Änderungsmodus durch Klick auf „Ändern“. Durch Klick auf den „Coding“-Button oder „Umschalt+F8“ gelangt man in den Codingabschnitt. Alternativ kann man auch auf „Zusätze“ klicken und dann den Reiter „Coding“ auswählen.

Es stehen insgesamt mehrere Codingabschnitte zur Verfügung. Wenn man über den Dropdown das gewünschten Codingabschnitt auswählt, kann man den entsprechenden ABAP Code in SAP Query einfügen und ausführen lassen. Der in dem Codebereich geschriebene Code wird an den automatisch generierten Abfragebericht übertragen.

Den ABAP Code in SAP Query fügt man direkt im InfoSet ein. Dazu öffnet man als Erstes die Transaktion SQ02, wählt das gewünschten InfoSet aus und geht in den Änderungsmodus durch Klick auf "Ändern". Durch Klick auf den "Coding"-Button oder "Umschalt+F8" gelangt man in den Codingabschnitt. Alternativ kann man auch auf "Zusätze" klicken und dann den Reiter "Coding" auswählen.

Es stehen insgesamt mehrere Codingabschnitte zur Verfügung. Wenn man über den Dropdown das gewünschten Codingabschnitt auswählt, kann man den entsprechenden ABAP Code in SAP Query einfügen und ausführen lassen. Der in dem Codebereich geschriebene Code wird an den automatisch generierten Abfragebericht übertragen.

DATA

Hier kann man seine globalen Variablen deklarieren. Die in diesem Abschnitt deklarierten Variablen stehen in allen anderen Codeabschnitten zur Verfügung.

INITIALIZATION

Dieser Abschnitt wird verwendet, um Variablen mit einem Anfangswert zu initialisieren.

AT SELECTION-SCREEN OUTPUT

Dieser Codeabschnitt löst den ABAP Code vor der Ausgabe auf dem Selektionsbild aus.

START-OF-SELECTION

Vor dem Beginn der Datenbankzugriffe wird das Coding in diesem Abschnitt ausgeführt. Dieser Abschnitt ist vor allem für die Datenbeschaffung relevant.

Satzverarbeitung

Bei InfoSets ohne eine logische Datenbank werden alle JOIN-Tabellen angesprochen. Man kann diesen Codingabschnitt vergleichen mit dem GET-Coding im InfoSet.

END-OF-SELECTION (vor Liste)

Dieser ABAP-Code wird vor der Listausgabe verwendet. Hier eignet es sich vor allem, die interne Datenstruktur (%G00) zu verändern, um die Ausgabe zu beeinflussen. Es ist also vor allem für aggregierte Berechnungen und Aktionen relevant.

Hier muss man besonders vorsichtig sein, da das Coding bei älteren SAP-Versionen nie erreicht wird, wenn man das Format des SAP List Viewer verwendet. Wenn man die Art der Ausgabe verändert, wird das Ereignis erreicht (z.B. ABAP Liste oder Dateiablage). Bei einem RFC-Aufruf hingegen wird das Ereignis schon ausgeführt und übermittelt die gewünschten Daten. Doch nur bei der Ausgabe in der Transaktion SQ01 im SAP List Viewer kann es nicht ausgeführt werden.

END-OF-SELECTION (nach Liste)

Dieser ABAP-Code wird nach der Listausgabe verwendet. Hier eignet es sich ebenfalls dafür, die interne Datenstruktur (%G00) zu verändern, um die Ausgabe zu beeinflussen. Es ist also vor allem für aggregierte Berechnungen und Aktionen relevant.

Hier muss man besonders vorsichtig sein, da das Coding bei älteren SAP-Versionen nie erreicht wird, wenn man das Format des SAP List Viewer verwendet. Wenn man die Art der Ausgabe verändert, wird das Ereignis erreicht (z.B. ABAP Liste oder Dateiablage). Bei einem RFC-Aufruf hingegen wird das Ereignis schon ausgeführt und übermittelt die gewünschten Daten. Doch nur bei der Ausgabe in der Transaktion SQ01 im SAP List Viewer kann es nicht ausgeführt werden.

TOP-OF-PAGE

Dieser Codeabschnitt wird dann ausgeführt, wenn der SAP-Benutzer eine neue Seite beginnt.

AT SELECTION-SCREEN

Dieser Codeabschnitt löst den ABAP Code vor der Ausgabe auf dem Selektionsbild aus. Hier kann man im Reiter „Abgrenzungen“ das Feld angeben für das das Ereignis ausgelöst werden soll.

Freies Coding

Der Code unter diesem Ereignis wird ausgeführt, nachdem alle Ereignisse ausgelöst wurden. Das ist also der Codeabschnitt, der als letztes ausgeführt wird.

Finale Ausgabe verändern – SAP Query

In der automatisch generierten Tabelle %G00 ist es dadurch auch möglich im ABAP Code in SAP Query die Ausgabe generell zu verändern. Wenn man dabei auf einzelne Spalten bzw. Attribute zugreifen muss man zwingen „ASSIGN COMPONENT“ benutzen, da die Tabelle %G00 erst zur Laufzeit die entsprechende Struktur bzw. die Spalten besitzt.

In der Loop kann man nun alles gewünschte ausführen.

*----------------------------------------------------------------------
* Codingabschnitt -  DATA
*----------------------------------------------------------------------
DATA: str             TYPE string,
      lv_spalte_ebeln TYPE c LENGTH 20.

FIELD-SYMBOLS: <f_ebeln>   TYPE any,
               <f_ebeln_v> TYPE any,
               <g00>       TYPE table,
               <s_g00>     TYPE any.

*----------------------------------------------------------------------
* Codingabschnitt -  END-OF-SELECTION (nach Liste)
*----------------------------------------------------------------------

" %G00 - Tabelle für finale Ausgabe
str = '%G00[]'.
ASSIGN (str) TO <g00>.

" Spalte für Auswertung zuweisen
lv_spalte_ebeln = 'EKKO-EBELN'.
ASSIGN lv_spalte_ebeln TO <f_ebeln>.

IF <g00> IS ASSIGNED.
  LOOP AT <g00> ASSIGNING <s_g00>.
    ASSIGN COMPONENT <f_ebeln> OF STRUCTURE <s_g00> TO <f_ebeln_v>.

    " In <f_ebeln_v> ist nun der Wert in der Spalte EKKO-EBELN

  ENDLOOP.
ENDIF.

Möchte man nun in der finalen Ausgabe (%G00) noch weitere Zeilen einfügen, so kann man einfach mit INSERT arbeiten. Man muss dabei darauf achten, dass wenn man <f_txz01_v> verändert, auch gleichzeitig die Zeile in der Ausgabetabelle %G00 mit geändert wird. Dann kann man aber einfach die zu viel vorhandene Zeile mit DELETE wieder löschen.

" Wert in EKKO-TXZ01 in aktueller Zeile verändern
    <f_txz01_v> = 'ERP UP'.
    INSERT <s_g00> INTO <g00> INDEX 1.

" Aktuelle Zeile löschen
    DELETE <g00>.

Duplikate in SAP Query entfernen

Mit diesen Codeabschnitten ist es also möglich, Duplikate in SAP Query in der Ausgabe zu entfernen.

*----------------------------------------------------------------------
* Codeabschnitt -  DATA
*----------------------------------------------------------------------
DATA: str      TYPE string.

FIELD-SYMBOLS : <g00> TYPE table.

*----------------------------------------------------------------------
* Codeabschnitt -  END-OF-SELECTION (nach Liste)
*----------------------------------------------------------------------

" %G00 - Ausgabe
str = '%G00[]'.

ASSIGN (str) TO <g00>.

IF <g00> IS ASSIGNED.
  SORT <g00>.
  DELETE ADJACENT DUPLICATES FROM <g00>.
ENDIF.

Zusammenfassung und Fazit

SAP Query ist ein leistungsstarkes Werkzeug in SAP ERP und SAP S/4HANA, mit dem Benutzer ohne tiefgehende Programmierkenntnisse individuelle Listen und Berichte aus den im System vorhandenen Daten erstellen können. Über die Transaktion SQ01 lassen sich Querys anlegen, ändern, ausführen oder löschen, wobei sie flexibel auf unterschiedliche Anforderungen zugeschnitten werden können. Die Grundlage jeder Query bilden sogenannte Infosets, die über die Transaktion SQ02 erstellt und verwaltet werden. Ein Infoset definiert, welche Tabellen und Felder für die Abfrage zur Verfügung stehen, und ermöglicht so die Verbindung unterschiedlicher Datenquellen innerhalb eines Berichts. Zusätzlich ist die Erstellung einer Benutzergruppe (SQ03) erforderlich, um Berechtigungen und Zugriffsbereiche zu definieren, sodass unterschiedliche Anwendergruppen auf passende Datensätze zugreifen können.

Allein mit Infosets und Benutzergruppen lassen sich jedoch noch keine komplexen Anforderungen abbilden. Hier kommt ABAP Code in SAP Query ins Spiel: Er ermöglicht es, die automatisch generierten Abfragen gezielt zu erweitern, Daten vor oder nach der Selektion zu bearbeiten, Berechnungen durchzuführen oder die finale Ausgabe individuell zu formatieren. ABAP Code kann direkt im Infoset hinterlegt werden, wobei verschiedene Codingabschnitte wie DATA, INITIALIZATION, START-OF-SELECTION, END-OF-SELECTION und TOP-OF-PAGE zur Verfügung stehen. Jeder Abschnitt erfüllt einen spezifischen Zweck – von der Initialisierung von Variablen, über die Datenverarbeitung bis hin zur finalen Manipulation der Ausgabe. Dadurch lassen sich beispielsweise Duplikate entfernen, zusätzliche Zeilen einfügen oder Werte in einzelnen Spalten dynamisch verändern.

Die Integration von ABAP Code bietet somit ein hohes Maß an Flexibilität, ohne dass ein komplett eigenständiger Bericht programmiert werden muss. Unternehmen können damit SAP Query an spezifische Anforderungen anpassen, komplexe Datenlogiken abbilden und gleichzeitig die Standardprozesse im SAP-System erhalten. Besonders wertvoll ist diese Möglichkeit, wenn Berichte über mehrere Tabellen verknüpft werden müssen, Daten aggregiert oder die Anzeige dynamisch gesteuert werden soll. ABAP Code in SAP Query ist daher ein zentrales Werkzeug für Anwender, die effiziente, individuelle und erweiterbare Berichte benötigen, ohne die SAP-Standardfunktionen zu überschreiben.

Über den Autor

Andreas Geiger

Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.

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