Man kann ABAP Code in SAP Query einfach einfügen, um die Abfragen für die Listen individuell zu erweitern. Dabei gibt es verschiedene Möglichkeiten und Erweiterungen mit ABAP Code in SAP Query. Wie das geht und welche Möglichkeiten es im Überblick gibt erfährst Du in diesem Artikel.
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.
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.
Über den Autor
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.
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.