ABAP Code in SAP Query

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.

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> INTO <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

Andreas Geiger

Schön, dass Du Dich für SAP ERP 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

Schreibe einen Kommentar