SAP Query – 10 nützliche Tricks

SAP Query ermöglicht es, in SAP ERP bzw. SAP S/4HANA ohne ABAP-Programmierkenntnisse Listausgaben von Datenbanktabellen zu erstellen. SAP Query unterstützt verschiedene Berichtsformen: Grundlisten, Statistiken und Ranglisten. Über die Transaktion SQ01 kann man die Ausgaben (SAP Querys) ausführen, erstellen, ändern oder löschen.

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 verwalten. Infosets werden aus einer oder mehreren unterschiedlichen Datenbanktabellen zusammengesetzt (Joins). Um SAP Querys erstellen und nutzen zu können, muss man vorher zwingend das passende 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 Queries kann man einem Standard- oder globalen Bereich zuordnen.

Ohne ABAP-Kenntnisse kann man die Listen erstellen und verwalten. Es ist zusätzlich möglich, einen ABAP-Quellcode in SAP Query einzubinden, um komplexe Sachverhalte ebenfalls abbilden zu können, die über die reinen Selektionen nicht möglich sind.

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

In diesem Artikel werden zehn nützliche Tipps und Tricks rund um SAP Query vorgestellt.

Was ist Dein bester Tipp für SAP-Queries? Kommentiere gerne mit Deinem Lieblingstrick.

Vorwärtsnavigation zu Transaktion

Man kann in der Listausgabe von SAP-Queries eine Vorwärtsnavigation zu einer Transaktion einstellen. Das bedeutet, dass man in einer beliebigen Zeile in der Ausgabe doppelt klicken kann und man folglich in eine andere Transaktion springt, wobei der Inhalt der Zeile (z.B. Kreditor-ID) in die Zieltransaktion übernommen wird.

Das kann man einfach über die Berichtszuordnung durchführen. Zuerst startet man die Transaktion SQ01 und geht in den Änderungsmodus der gewünschten Query. Anschließend nutzt man die Menüfunktion „Springen > Berichtszuordnung“.

SAP Query - Berichtszuordnung

Daraufhin erscheint ein neues Fenster mit der Auflistung der Berichte. Hier wählt man den Button „Zeile einfügen“ oder die F6-Taste. Anschließend klickt man im neuen Fenster auf den Button „Anderer Berichtstyp“ oder nutzt die Tastenkombination „Umschalt + F1“.

Berichte zuordnen, anderer Berichtstyp in SQ01

Da wir eine Transaktion an den Bericht zuordnen möchten, wählen wir als Berichtstyp „Transaktion“ aus.

Berichtstyp der Bericht-Bericht-Schnittstelle

Nun geben wir in dem Feld „Transaktionscode“ den gewünschten Transaktionscode an. In unserem Beispiel ist das die Transaktion zum Anzeigen von Kreditoren (XK03). Hier kann man die F4-Hilfe nutzen, um einfach und schnell seine gewünschte Transaktion zu suchen.

Wenn wir die Eingabe bestätigen, taucht der zugeordnete Berichtstyp (die Transaktion) in der Auflistung der Berichtszuordnung auf.

Führt man jetzt die SAP Query in der Transaktion SQ01 aus und drückt doppelt auf eine Zeile, springt man von der Listausgabe in die angegebene Zieltransaktion.

Ist trotz des Änderungsmodus die Menüfunktion Berichtszuordnung nicht auswählbar? Dann liegt das vermutlich an den globalen Einstellungen, das man in jedem System einstellen muss. Rufe hierfür einfach die Transaktion SQ02 auf und nutze die Menüfunktion „Einstellungen > Globale Einstellungen…“. Deaktiviere anschließend die Checkbox „keine Pflege der Bericht-Bericht-Schnittstelle zulassen“ und bestätige die Einstellung.

Keine Pflege der Bericht-Bericht-Schnittstelle zulassen.

Transaktionscode erstellen

Report SAP_QUERY_CALL

Im SAP-Hinweis 2185998 wird beschrieben, wie man eine Transaktion für eine SAP Query erstellen kann.

Ab Release 6.10 liefert SAP zu diesem Zweck eine Vorlage mit dem Report SAP_QUERY_CALL aus. Die ausgelieferte Vorlage hat ein Selektionsbild mit Parametern für Query-Workspace, Benutzergruppe und Query-Name sowie für Query-Varianten, mit denen man die SAP Query starten kann. Nach Eingabe der Werte wird ein Modul zur Ausführung der Abfrage aufgerufen.

Report SAP_QUERY_CALL

Zur besseren Erklärung nehmen wir an, dass die SAP-Query S der Benutzergruppe B im Standardbereich mit der Variante V gestartet wird. Folgendes Vorgehen muss dabei ausgeführt werden:

  1. Transaktion SE93 aufrufen
  2. Reporttransaktion (ZReportQuery) mit dem Programm SAP_QUERY_CALL anlegen
  3. Parametertransaktion (ZParameterQuery) anlegen
    1. Transaktion: ZReportQuery
    2. Feld ‚Einstiegsbild überspringen‘ markieren
    3. Vorschlagswerte
      1. P_UGROUP: B
      2. P_VARI: V
      3. P_QUERY: S
      4. P_WSID: leer (G für globalen Bereich)

Nach dem Sichern wird die SAP Query S mit der Transaktion ZReportQuery gestartet. Dabei kann man natürlich die Namen der Transaktionen nach Belieben verändern. Die Variablen S, B und V müssen mit den eigenen Werten ausgetauscht werden.

Zugeordneter Report in Reporttransaktion

Man muss nicht zwingend die Transaktion SQ01 nutzen, um eine SAP Query auszuführen. Es gibt auch die Möglichkeit, einen eigenen Transaktionscode für eine SAP Query zu definieren.

Zuerst müssen wir den Reportnamen der SAP Query ermitteln. Das kann man einfach über folgende Menüfunktion herausfinden: Query > Weitere Funktionen > Reportnamen anzeigen.

Zugeordneter Report einer SAP Query

Nun markiert man den angezeigten Reportnamen und kopiert ihn in die Zwischenablage über die Tastenkombination „Strg + C“.

Daraufhin erstellt man einen eigenen Transaktionscode in der Transaktion SE93. Man gibt den Transaktionscode ein und drückt auf den Anlegen-Button. Nachdem man den Kurztext angegeben hat, wählt man „Programm und Selektionsbild (Reporttransaktion)“ aus und bestätigt die Eingabe.

Nun gibt man im Eingabefeld „Programm“ den angezeigten Reportnamen an und speichert die Eingaben.

Reporttransaktion für SAP Query anlegen

Von nun an kann man direkt mit dem erstellen Transaktionscode die SAP Query aufrufen und muss nicht mehr zwingend über die Transaktion SQ01 gehen.

Man muss hierbei generell vorsichtig sein. Es kann sehr gut vorkommen, dass sich der Programmname der SAP-Query nach einem Upgrade ändert. Anschließend funktioniert die Transaktion nicht mehr. Siehe SAP-Hinweis 393160.

ABAP in SAP Query

SAP Query ist prinzipiell darauf aufgelegt, schnell und einfach ohne ABAP-Kenntnisse Listausgaben zu erstellen. Doch in manchen Fällen ist es notwendig, dass man bei der Ausgabe ABAP-Quellcode benutzt, um komplexe Logiken abzubilden.

Im Infoset (Transaktion SQ02) kann man das Coding hinzufügen. Hierzu öffnet man die Transaktion SQ02, wählt das gewünschte Infoset im Änderungsmodus aus und klickt auf den Button „Coding“ oder nutzt die Tastenkombination (Umschalt + F8).

Coding in der SQ02

Nun kann man in verschiedenen Codingabschnitten seinen gewünschten ABAP-Code einfügen.

Näheres ist im Artikel „ABAP Code in SAP Query“ beschrieben.

Allgemeine Selektionen

In der Grundliste kann man pro Feld der Feldgruppe auswählen, ob es Bestandteil des Selektionsbildschirms ist. Darüber kann man festlegen, ob durch ein Feld die Ausgabe eingegrenzt werden kann.

Zusätzlich zu dieser Möglichkeit kann man allgemeine Selektionen als Abgrenzung definieren. Im Infoset (Transaktion SQ02) kann man diese Abgrenzungen definieren.

Zuerst ruft man die Transaktion SQ02 auf, wählt das gewünschte Infoset aus und gelangt in den Änderungsmodus. Daraufhin wählt man den Button „Zusätze“ oder verwendet die F5-Taste. In dem Tabreiter „Abgrenzungen“ kann man durch den Anlegen-Button die Abgrenzung anlegen. Hier sind vor allem die beiden Felder „FOR“ und „Zusätze“ wichtig. Im ersten Feld gibt man das Datenbankfeld an, auf das die Abgrenzung anzuwenden ist. Im zweiten Feld gibt man die Zusätze für das Feld an (z.B. „OBLIGATORY“, wenn es sich um ein Pflichtfeld handelt).

Abgrenzungen in SQ02

Hier ist es ebenfalls möglich, ein Prüfcoding für das Element mit dem entsprechenden Button hinzuzufügen. Nachdem man das Infoset generiert, kann man das Selektionskriterium verwenden.

Folgende Zusätze sind hilfreich:

ZusatzBeschreibung
OBLIGATORYPflichtfeld
NO INTERVALSKeine Intervalle können angegeben werden (das „bis“-Feld wird entfernt)
NO-EXTENSIONKeine Mehrfachselektion
DEFAULT ‘XX’Macht ‚XX‘ als Standardwert des Feldes

Möchte man mehrere Zusätze verwenden, kann man diese einfach zusammen mit einem Leerzeichen getrennt angeben. Beispiel: OBLIGATORY NO INTERVALS NO-EXTENSION DEFAULT ‘XX’

Benutzerdefinierte Felder

Es ist in SAP Query möglich, benutzerdefinierte Felder anzulegen und in der Ausgabe zu verwenden. Das ist vor allem dann sehr nützlich, wenn man ein eigenes Feld für Berechnungen oder komplexe Logiken braucht.

Ein Zusatzfeld kann man einfach im Infoset (Transaktion SQ02) anlegen. Hierfür ruft man das gewünschte Infoset im Änderungsmodus auf und wählt den Button „Zusätze“ und den Tabreiter Zusätze. Dort klickt man auf den Anlegen-Button. Nachdem man den Namen eingegeben hat und das Feld als Zusatzfeld deklariert hat, kann man die technischen Eigenschaften des Feldes pflegen.

Zusatzfeld anlegen

Man kann in den Eigenschaften den internen ABAP-Typ, die Länge, die Ausgabelänge und eventuelle Dezimalstellen angeben. Außerdem ist eine LIKE-Referenz möglich.

Nachdem man das Zusatzfeld angelegt hat, kann man über den Button „Coding zum Zusatz“ eigenen ABAP-Code für das Zusatzfeld hinzufügen.

In der Baumansicht taucht das benutzerdefinierte Feld nun im Knoten „Zusatzfelder“ auf und kann in die Feldgruppe und in der SAP Query (SQ01) in die Ausgabe mit aufgenommen werden.

Feld als Checkbox

Man kann im Infoset (Transaktion SQ02) ein Selektionskriterium als Checkbox definieren. Hierzu definiert man über den Button „Zusätze“ oder die F5-Taste im Tabreiter „Abgrenzungen“ über den Anlegen-Button eine Abgrenzung als Parameter.

Abgrenzung als Parameter in SQ02

Anschließend gibt man den Typ C, die Länge 1 und den Zusatz „AS CHECKBOX“ an.

Checkbox in SAP Query

Nachdem man den Parameter als Checkbox angelegt hat, kann man über den Button „Prüfcoding zum Element“ das gewünschte ABAP-Programm hinterlegen. So kann man darauf reagieren, wenn man die Checkbox auswählt.

IF erp_up = 'X'.
" Hier kommt die gewünschte Logik, wenn die Checkbox aktiv ist
ENDIF.

Die Änderungen sind natürlich nur dann in der SAP Query vorhanden, wenn man das Infoset generiert.

Man kann anstatt einer Checkbox auch Radiobuttons verwenden. Hier benötigen wir mindestens zwei Parameter. Mit dem Typ C und der Länge 1 ist der Zusatz des ersten Parameters folgender: radiobutton group g1 default ‚X‘. Beim zweiten Parameter gibt man folgenden Zusatz an: radiobutton group g1. Jeweils ohne den Punkt am Ende.

Feld als Ikone

In SAP Query ist es auch möglich, dass man unter bestimmten Bedingungen ein Ikon anzeigt. So kann man abhängig von bestimmten Werten oder Voraussetzungen ein Ikon zur visuellen Darstellung nutzen.

Ein Ikon ist ein lokales Feld, das wir anlegen müssen. Doch vorerst müssen wir festlegen, wann das Ikon erscheinen soll. Dafür benötigten wir Kurzbezeichnungen von den abhängigen Feldern.

Die Kurzbezeichnungen kann man einfach einschalten, indem man die Transaktion SQ01 aufruft, die gewünschte SAP-Query im Änderungsmodus öffnet und auf das Bild mit der Feldauswahl gelangt (zweimal F6-Taste oder entsprechenden Button nutzen).

SQ01 Kurzbezeichnungen ein

Daraufhin kann man die Kurzbezeichnungen der Felder angegeben, die wir benötigen. Anschließend legen wir das lokale Feld für das Ikon an. Das kann man über die Menüfunktion „Bearbeiten > Lokales Feld > Anlegen“ durchführen.

Feldauswahl Kurzbezeichnungen, lokales Feld anlegen

Im Anschluss gibt man die Kurzbezeichnung, die Feldbezeichnung und die Überschrift der Spalte an. Bei den Eigenschaften wählt man Ikone aus. Bei der Berechnungsvorschrift gibt man die gewünschte Ikone und die Bedingung an.

Felddefinition Ikon SQ01

In diesem Beispiel zeigen wir ein rotes X an, wenn die E-Mail-Adresse nicht gefüllt ist. Eine Übersicht der Ikonen in SAP ERP bzw. SAP S/4HANA findest Du im Artikel „ABAP – Übersicht über Icon„.

Natürlich muss dieses neue Feld dann in der Listausgabe mit aufgenommen werden, damit das Ikon angezeigt wird.

Farbliche Ausgabe

In der Grundliste ist es möglich, über den Werkzeugkasten farbliche Markierungen zu setzen. Ruft man in der Transaktion SQ01 die Grundliste der SAP Query auf, kann man mit dem Werkzeugkasten per Drag & Drop die einzelnen Felder farblich markieren. Die Farben werden auch in der ALV Grid Ausgabe übernommen.

Beim Drag & Drop ist Feingefühl gefragt. Denn klickt man auf eine Farbe in dem Werkzeugkasten muss man den umrahmten Bereich per Drag & Drop auf das gewünschte Feld ziehen. Die Umrahmung ist wie in der folgenden Abbildung zu sehen nicht gerade groß und reicht gerade über den ersten Buchstaben bei „Positiv“.

Felder farblich markieren in der SQ01

Left outer join

Stellt man fest, dass ein gewünschter Eintrag in der Listausgabe fehlt, obwohl dieser in der Datenbanktabelle vorhanden ist, kann das am Join im Infoset liegen.

Bei einem Join wird das gewünschte Ergebnis in die Listausgabe übernommen, wenn in beiden Join-Tabellen ein gültiger Eintrag gefunden werden kann. Fehlt in einer Tabelle ein Eintrag und kommt es somit nicht zu einer Schnittmenge, wird für diese Bedingung/ diese Zeile gar kein Ergebnis übermittelt.

Es kann somit sehr gut vorkommen, dass die Adressdaten von einem Kreditor unvollständig oder gar nicht gepflegt sind. Verknüpft man nun die beiden Tabellen LFA1 und ADR6, gibt es in der Tabelle LFA1 für einen Kreditor einen Eintrag, aber nicht in der Tabelle ADR6. Somit taucht der eine Kreditor gar nicht in der Ausgabe auf.

Dieses Problem kann man einfach umgehen, indem man ein „left outer join“ verwendet. Dabei wird der Eintrag in der ersten Tabelle immer ausgegeben, auch wenn in der zweiten Tabelle kein Eintrag vorhanden ist. Wie im oberen Beispiel sind dann die Kreditordaten der Tabelle LFA1 vorhanden und die entsprechenden Felder aus der Tabelle ADR6 leer.

In der Join-Defintion (Strg + Umschalt + F6) im Infoset (Transaktion SQ02) kann man die Join-Bedingung einfach einstellen. Man klickt auf die Verbindungslinie mit der linken Maustaste und wählt „left outer join“ aus.

left outer join in der SQ02

Daraufhin erscheint der Text „left outer join“ auf der Verbindungslinie. Nach dem Speichern und Generieren ist die Änderung wirksam.

Nachricht in der Statusleiste

Im Infoset (Transaktion SQ02) kann man im Coding (Umschalt + F8) eine Nachricht in der Statusleiste erzeugen lassen. Hierbei gibt es zwei Zeitpunkte, zu denen die Nachricht in der Statusleiste erscheinen soll:

  1. Direkt nach Aufrufen der SAP Query
  2. Nach Ausführen der SAP Query (wenn die Listausgabe angezeigt wird)

Möchte man die erste Option nutzen, so muss man seinen ABAP-Code im Codingabschnitt „AT SELECTION-SCREEN OUTPUT“ einfügen.

Wählt man die zweite Option, so fügt man seinen ABAP-Quellcode im Codingabschnitt „END-OF-SELECTION (nach Liste)“ ein. Hierbei kann man den MESSAGE-Befehl verwenden.

Nachricht in Statusleiste

Ü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.

4 Gedanken zu „SAP Query – 10 nützliche Tricks“

  1. Hallo,
    zunächst mal Anerkennung für die vielen und wertvollen Inhalte der Web-Seite – ich weiß, wieviel Arbeit das erfordert.
    Bezüglich des Abschnittes „Transaktionscode erstellen“ hätte ich einen Einwand: es ist eine schlechte Idee, den Namen des generierten Programms zu verwenden. Nach einem Upgrade oder auch schon einem neuen Support-Package kann das generierte Programm einer Query einen anderen Namen haben, und dann funktioniert das nicht mehr (oder eine ganz andere Query wird gezogen). Siehe hier: https://launchpad.support.sap.com/#/notes/0393160/D
    oder hier: https://www.sap-corner.de/blog/index.php?job-abbrueche-bei-queries-nach-upgrade
    Viele Grüße

    Antworten
  2. Man könnte den Abschnitt „Transaktionscode erstellen“ auch komplett durch das Vorgehen ersetzen, wie es im HW 393160 beschrieben ist. Nämlich Erstellung von Parametertransaktion, die wiederum einen Transaktionscode des Reports SAP_QUERY_CALL aufrufen. Das funktioniert in allen einigermaßen aktuellen SAP-Releases wunderbar.
    Gruß
    Marc

    Antworten

Schreibe einen Kommentar