Erweiterung SQUE0001: Private Ablage von Daten 
SAP Query verfügt über mehrere Möglichkeiten, die von einer Query ermittelten Daten an andere Software-Produkte weiterzugeben. Zum Beispiel können diese Daten
In allen Fällen ist die Vorgehensweise ähnlich. Die ermittelten Daten werden in einer internen Tabelle (Datentabelle) bereitgestellt, deren Felder in Reihenfolge und Typ den Feldern entsprechen, die in der Liste ausgegeben werden. Eine weitere interne Tabelle (Beschreibungstabelle) enthält eine Beschreibung der einzelnen Felder der Datentabelle. Neben Typ und Position in der Liste sind z.B. Informationen über die Feldnamen enthalten. Diese beiden Tabellen werden an die oben genannten Produkte übergeben und von ihnen weiter verarbeitet.
SAP Query stellt diese Schnittstelle auch allgemein zur Verfügung, so daß jeder Kunde die Möglichkeit hat, eigene Software-Produkte anzuschließen. Dies ist das Ziel der Erweiterung SQUE0001.

Mit der Einführung der Erweiterten Ablage (siehe
Beachten Sie, daß die Funktionen der Erweiterten Ablage nur im online abgearbeitet werden können und demzufolge bei der Hintergrundverarbeitung nicht aufgerufen werden können. Die private Ablage kann dagegen auch bei der Hintergrundverarbeitung angesprochen werden.
Die Erweiterung SQUE0001 besteht aus zwei Komponenten:
Die Aktivierung der Erweiterung im Rahmen eines Projektes (Transaktion CMOD) bewirkt, daß in jedem von der Query erzeugten Report eine zusätzliche interaktive Funktion Private Ablage (Funktionscode: +DAT) zur Verfügung steht, durch deren Aktivierung der oben genannte Funktionsbaustein gerufen wird. Im wesentlichen werden dem Funktionsbaustein die oben erwähnten Tabellen (Datentabelle und Beschreibungstabelle) übergeben. Außerdem erscheint auf dem Selektionsbild ein zusätzlicher Parameter, der wie bei den anderen interaktiven Funktionen (EXCEL, Grafik, EIS, Dateiablage, Sichern usw.) die Möglichkeit bietet, die zusätzliche Funktion Private Ablage direkt auszuführen, d.h. ohne vorherige Anzeige der Liste. Da der Parameter auf dem Selektionsbild Private Ablage heißt, wird empfohlen, die Menüerweiterung ebenso zu benennen (entspricht dem Vorschlag von SAP).

Nach Aktivierung der Erweiterung sollten alle Queries neu generiert werden, da ansonsten der zusätzliche Parameter auf dem Selektionsbild nicht erscheint. Dies kann am einfachsten mit Hilfe der Funktion Springen
Funktionsbaustein EXIT_RSAQEXCE_001
Im folgenden wird beschrieben, welche Parameter dem Funktionsbaustein EXIT_RSAQEXCE_001 übergeben werden und wie die Werte dieser Parameter zu interpretieren bzw. zu verarbeiten sind. Dazu wird auf folgendes Beispiel zurückgegriffen:
Ein Nutzer hat im Mandanten 03 in der Benutzergruppe RX eine Query X1 angelegt, die aus einer einzeiligen Grundliste, einer Statistik und einer Rangliste besteht. In der Grundliste werden die Felder
KNA1-KUNNR |
Debitorennummer |
KNA1-NAME1 |
Name |
KNC1-GJAHR |
Geschäftsjahr |
KNC1-UM01U |
Umsatz in der Buchungsperiode 1 |
T001-WAERS |
Währungsschlüssel |
in dieser Reihenfolge ausgegeben. In der Statistik werden die Felder
KNA1-LAND1 |
Länderschlüssel |
KNC1-UM01U |
Umsatz in der Buchungsperiode 1 |
in dieser Reihenfolge ausgegeben, wobei für das Feld KNC1-UM01U außerdem Angaben über die Anzahl der gelesenen Sätze, den prozentualen Anteil und den Mittelwert gefordert werden. In der Rangliste werden die Felder
KNA1-KUNNR |
Debitorennummer |
KNA1-NAME1 |
Name |
KNC1-UM01U |
Umsatz in der Buchungsperiode 1 |
in dieser Reihenfolge ausgegeben.
Parameter des Funktionsbausteins EXIT_RSAQEXCE_001
Der Funktionsbaustein EXIT_RSAQEXCE_001 besitzt folgende Parameter:
PROGRAM |
Programm, das die Übergabe veranlaßt hat |
LIST_ID |
Id der übergebenen Teilliste |
LISTTEXT |
Titel der übergebenen Teilliste |
DATATAB |
Datentabelle |
LISTDESC |
Beschreibungstabelle für die Felder der Datentabelle |
Parameter PROGRAM
Dieser Parameter enthält den Namen des Query-Reports, der den Aufruf des Funktionsbausteines veranlaßt hat. Aus diesem Namen kann ermittelt werden, welche Query abgearbeitet wurde, da er stets folgenden Aufbau hat.
Aqmmb...bq...q
mm |
= Mandant bzw. ZZ im Globalen Bereich |
b…b |
= Name der Benutzergruppe |
q…q |
= Name der Query |
Im vorliegenden Beispiel lautet der Reportname deshalb
AQRX==========X1============ .Parameter LIST_ID
Dieser Parameter LIST_ID enthält ein dreistelliges Kürzel zur Identifizierung der übergebenen Datentabelle. Jede von einer Query erzeugte Liste kann aus mehreren Teillisten bestehen (eine Grundliste, mehrere Statistiken, mehrere Ranglisten). Die an den Funktionsbaustein übergebene Datentabelle (DATATAB) enthält jeweils nur die Daten einer Teilliste. Die Beschreibungstabelle (LISTDESC) enthält jedoch stets die Beschreibung für die Felder aller Teillisten.
Die möglichen Werte des Parameters sind
G00 |
wenn DATATAB die Daten der Grundliste enthält |
Txx |
wenn DATATAB die Daten der Statistik xx (01,02,...) enthält |
Rxx |
wenn DATATAB die Daten der Rangliste xx (01,02,...) enthält |
Damit besitzt der Parameter
LIST_ID zwei Funktionen. Einerseits kann über ihn ermittelt werden, welchen Typ die übergebene Teilliste hat, und andererseits können in der Beschreibungstabelle die zutreffenden Einträge bestimmt werden.Im vorliegenden Beispiel enthält der Parameter
LIST_ID den Wert G00 , falls die Daten der Grundliste übergeben werden. Werden die Daten der Statistik übergeben, ist der Wert T01 . Der Parameter enthält den Wert R01 , falls die Daten der Rangliste übergeben werden.Parameter LISTTEXT
Dieser Parameter enthält einen Text, der bei der Definition der Query der entsprechenden Teilliste zugeordnet wurde.
Parameter DATATAB
Diese Tabelle enthält die Daten der übergebenen Teilliste. Die Felder dieser Tabelle entsprechen in Reihenfolge und Typ den Feldern, die in der Teilliste ausgegeben wurden. Jeweils eine Tabellenzeile entspricht einer Listenzeile. Dabei werden eventuell vorhandene Zeilenumbrüche in Zeilen von Grundlisten nicht berücksichtigt, d.h. solche umgebrochenen Zeilen bilden trotzdem eine Tabellenzeile.
Da der Aufbau der Datentabelle von der Definition der übergebenen Teilliste abhängig ist, kann ihre Struktur nicht mit übergeben werden, sondern muß im Funktionsbaustein selbst bestimmt werden. Dazu kann die Beschreibungstabelle LISTDESC mit zu Hilfe genommen werden. Der Zugriff auf einzelne Felder der Datentabelle ist mit Hilfe von Feldsymbolen und der Anweisung ASSIGN COMPONENT möglich.
Wird im vorliegenden Beispiel die Grundliste übergeben, so besteht eine Zeile der Datentabelle aus 5 Feldern mit folgenden Typen, Längen und Dezimalstellen:
1. Feld: Typ C, Länge 10 |
(KNA1-KUNNR) |
2. Feld: Typ C, Länge 35 |
(KNA1-NAME1) |
3. Feld: Typ N, Länge 04 |
(KNC1-GJAHR) |
4. Feld: Typ P, Länge 08, Dez. 02 |
(KNC1-UM01U) |
5. Feld: Typ C, Länge 05 |
(T001-WAERS) |
Wird die Statistik übergeben, so besteht eine Zeile der Datentabelle aus 5 Feldern mit folgenden Typen, Längen und Dezimalstellen:
1. Feld: Typ C, Länge 03 |
(KNA1-LAND1) |
2. Feld: Typ P, Länge 16, Dez. 02 |
(Summe von KNC1-UM01U) |
3. Feld: Typ I, Länge 04 |
(Anz gelesene Sätze) |
4. Feld: Typ P, Länge 04, Dez. 03 |
(prozentualer Anteil) |
5. Feld: Typ P, Länge 16, Dez. 02 |
(Mittelwert von KNC1-UM01U) |
Wird die Rangliste übergeben, so besteht eine Zeile der Datentabelle aus 4 Feldern mit folgenden Typen, Längen und Dezimalstellen:
1. Feld: Typ C, Länge 06 |
(Rang in der Rangliste) |
2. Feld: Typ C, Länge 10 |
(KNA1-KUNNR) |
3. Feld: Typ C, Länge 35 |
(KNA1-NAME1) |
4. Feld: Typ P, Länge 16,Dez. 2 |
(Summe von KNC1-UM01U) |
Die Angaben über Typ, Länge und Dezimalstellenzahl können entweder mit Hilfe der ABAP-Anweisung DESCRIBE FIELD oder mit Hilfe der Beschreibungstabelle LISTDESC (siehe unten) ermittelt werden.
Parameter LISTDESC
Die Beschreibungstabelle LISTDESC enthält eine Beschreibung der Felder der Datentabelle DATATAB, die neben Typ, Länge und Dezimalstellenzahl auch Informationen umfaßt, die nicht mit Hilfe der ABAP-Anweisung DESCRIBE FIELD ermittelt werden können. Wenn eine Query aus mehreren Teillisten besteht (wie im vorliegenden Beispiel), so enthält die Beschreibungstabelle immer die Beschreibung für die Felder aller Datentabellen (aller Teillisten), die von dieser Query übergeben werden können. Über den Parameter LIST_ID können dann die passenden Einträge aus der Beschreibungstabelle besorgt werden.
Im vorliegenden Beispiel würde also die Beschreibungstabelle stets die Beschreibung für die Felder der Datentabelle der Grundliste, die Felder der Datentabelle der Statistik und die Felder der Datentabelle der Rangliste enthalten.
Die Beschreibungstabelle besitzt die Struktur RSAQLDESC. Diese Struktur besteht aus folgenden Feldern:
FNAMENEW |
TYP C, Länge 70 |
Feldname (Quellfeld)(Rel.4.0) |
FNAMEINT |
TYP C, Länge 30 |
Feldname (Datentabelle) |
FKEY |
TYP C, Länge 1 |
Flag für Schlüsselspalte |
FGTYPE |
TYP C, Länge 1 |
Flag für Grafiktyp |
FNZERO |
TYP C, Länge 1 |
Flag für Nullenausgabe |
FSUM |
TYP C, Länge 1 |
Summationsflag |
FSONLY |
TYP C, Länge 1 |
Sortierflag |
FSORT |
TYP N, Länge § |
Sortierstufe |
FSODS |
TYP C, Länge 1 |
Sortierrichtung |
FSUBT |
TYP C, Länge 1 |
Flag für Zwischensummen |
FLPOS |
TYP N, Länge 4 |
Position des Felds (wie FPOS) |
FNUMB |
TYP C, Länge 2 |
Kürzel der Feldgruppe |
FNUMBT |
TYP C, Länge 24 |
Feldgruppentext |
LID |
TYP C, Länge 03 |
Id der Teilliste |
FPOS |
TYP N, Länge 02 |
Position des Feldes |
FCONT |
TYP N, Länge 01 |
Nummer der Folgezeile |
FCURPOS |
TYP N, Länge 03 |
Listenposition des Feldes |
FGRAF |
TYP C, Länge 01 |
Textflag für Grafik |
FTYP |
TYP C, Länge 01 |
ABAP-Typ des Feldes |
FLEN |
TYP N, Länge 03 |
Länge des Feldes |
FDEC |
TYP N, Länge 02 |
Dezimalstellenzahl des Feldes |
FOLEN |
TYP N, Länge 03 |
Ausgabelänge des Feldes |
FCUR |
TYP C, Länge 01 |
Währungsflag |
FADD |
TYP C, Länge 01 |
Flag für internes Feld |
FDESC |
TYP C, Länge 40 |
Feldbeschreibung (Langtext) |
FNAME |
TYP C, Länge 30 |
Feldname (Quellfeld) |
FCOL |
TYP C, Länge 30 |
Spaltenüberschrift für Feld |
LID |
kennzeichnet, zu welcher Teilliste der Query das beschriebene Feld gehört. Es sind die gleichen Werte wie beim Parameter LIST_ID möglich (vgl. oben) | |
FPOS |
beschreibt die Position des Feldes in der durch LID gekennzeichneten Teilliste. Die Positionen werden fortlaufend ab 1 gezählt (01, 02,...). | |
FCONT |
beschreibt die Nummer der Fortsetzungzeile, in der das Feld ausgegeben wird (0, 1,...). Dies kann nur bei Grundlisten auftreten, die aufgrund einer zu geringen Listenbreite (LINE-SIZE) umgebrochen werden. Die Numerierung der Felder (gemäß FPOS) wird davon nicht betroffen, d.h. diese Numerierung erfolgt fortlaufend und unabhängig vom Wert des Feldes FCONT. Normalerweise wird dieses Feld für die private Ablage nicht benötigt. | |
FCURPOS |
beschreibt die Anfangsposition des Feldes in der Listenzeile, falls das Feld ein numerisches Feld ist (FTYP = P, I, F). Ansonsten hat FCURPOS den Wert 000. Normalerweise wird dieses Feld für die private Ablage nicht benötigt. | |
FGRAF |
besitzt den Wert X, falls der Wert des beschriebenen nichtnumerischen Feldes als Erläuterungstext für die Grafik verwendet werden soll. Normalerweise wird dieses Feld für die private Ablage nicht benötigt. | |
FTYP |
beschreibt den ABAP-Typ des Feldes und kann die Werte C, D, F, I, N, P, T oder X annehmen. | |
FLEN |
beschreibt die Länge des Feldes in Byte. | |
FDEC |
beschreibt die Anzahl der Dezimalstellen des Feldes. Diese Angabe ist nur von Interesse, wenn FTYP den Wert P besitzt. In allen anderen Fällen hat FDEC den Wert 00. | |
FOLEN |
beschreibt die Ausgabelänge des Feldes in der Teilliste, wie sie bei der Definition der Query festgelegt wurde. | |
FCUR |
kennzeichnet ein Feld als F Währungsbetragsfeld W Währungsschlüssel bzw. Währungsfeld M Mengenfeld E Einheitenfeld | |
FADD |
beschreibt, ob das Feld ein zusätzliches, von der Query selbst erzeugtes Feld ist. Folgende Werte sind möglich: R Rangangabe (nur in Ranglisten) C Anzahl der gelesenen Sätze (nur in Statistiken) P Prozentangabe (nur in Statistiken) M Mittelwert (nur in Statistiken) | |
FDESC |
enthält die Feldbeschreibung, d.h. die Bezeichnung für das Feld, die der Nutzer auch bei der Definition der Query zur Verfügung gestellt bekommt. | |
FNAME |
enthält den Namen des Feldes im Query-Report, aus dem die Information für die Datentabelle gewonnen wurde (bis Release 4.0) | |
FCOL |
enthält eine einzeilige Spaltenüberschrift für das Feld der Datentabelle, das durch einen Eintrag in der Tabelle LISTDESC beschrieben wird. | |
FNAMENEW |
wie FNAME (ab Release 4.0) | |
FNAMEINT |
enthält den Namen des Feldes in der Datentabelle. Dieser Name kann verwendet werden, um mit der Anweisung ASSIGN COMPONENT dynamisch auf das Feld in der Datentabelle zuzugreifen | |
FKEY |
besitzt den Wert X, falls das Feld in der Liste als Schlüsselfeld (Schlüsselspalte) ausgegeben wurde. | |
FGTYPE |
kennzeichnet den Inhalt des Feldes als | |
FNZERO |
besitzt den Wert X, falls das Feld in der Liste mit der Option NO-ZERO ausgegeben wurde. | |
FSUM |
besitzt den Wert X, falls über das Feld in der Liste summiert wurde | |
FSONLY |
besitzt den Wert X, wenn in der Liste nach diesem Feld sortiert wurde, das Feld selbst aber nicht ausgegeben wurde | |
FSORT |
enthält die Sortiernummer, falls nach dem Feld in der Liste sortiert wurde | |
FSODS |
besitzt den Wert X, wenn in der Liste nach dem Feld absteigend sortiert wurde | |
FSUBT |
besitzt den Wert X, wenn in der Listenach dem Feld sortiert wurde und bei dieser Sortierung Zwischensummen gebildet wurden | |
FLPOS |
wie FPOS | |
FNUMB |
Feldgruppe des Feldes, dessen Name in FNAMENEW steht | |
FNUMBT |
Langtext der Feldgruppe | |