49
Bonn Boston ABAP für InfoSets zum Buch »Praxishandbuch SAP ® Query-Reporting« von Stephan Kaleske, Karin Bädekerl und Heinz Forsthuber © Galileo Press 2014 ISBN 978-3-8362-1840-5 Online-Kapitel

ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Bonn � Boston

ABAP für InfoSets

zum Buch »Praxishandbuch SAP® Query-Reporting«von Stephan Kaleske, Karin Bädekerl und Heinz Forsthuber

© Galileo Press 2014ISBN 978-3-8362-1840-5

Online-Kapitel

Page 2: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Dieses Kapitel unterstützt Sie beim täglichen Einsatz der SAP-Werk-zeuge SAP Query und QuickViewer, in denen Sie SAP InfoSets ver-wenden können.

ABAP für InfoSets

Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AGentwickelten Programmiersprache ABAP geschrieben, die ihren Ursprung inder Programmiersprache COBOL hat. Anfangs wurden vor allem Sprachele-mente zur Erstellung von Drucklisten integriert. Davon zeugt die ursprüngli-che Bezeichnung Allgemeiner Berichtsaufbereitungsprozessor. Inzwischen sindunterschiedliche Sprachelemente eingeflossen.

Quelltexteditor

Der Quelltexteditor (siehe Abbildung 1) ist eine mit ABAP erstellte Dialog-anwendung. Seine Oberfläche ist ebenfalls ein Dynpro und deshalb zeilen-orientiert. Jedoch wurden inzwischen viele Funktionen moderner, seitenori-entierter Editoren aufgenommen.

Abbildung 1 Quelltexteditor

Programmaufbau

Jedes Programm besteht aus einem Deklarationsteil und einem Operations-teil. Im Deklarationsteil werden alle Datenstrukturen, Tabellen und Parame-ter vereinbart. Der Operationsteil enthält die auszuführenden Programm-anweisungen. ABAP-Befehle beginnen in der Regel mit einem Schlüsselwort

1

Page 3: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Definition von Datenfeldern, Typen und Konstanten

und werden mit einem Punkt ».« abgeschlossen. Wörter werden durch min-destens ein Leerzeichen voneinander getrennt. Die Anweisungen könnenformatfrei eingegeben werden. Mehrere Anweisungen pro Zeile und ein-zelne Anweisungen über mehrere Zeilen sind erlaubt.

Es ist möglich, mehrere aufeinanderfolgende Anweisungen mit dem gleichenSchlüsselwort zu Kettensätzen zusammenzufassen. Nach dem Schlüsselwortmuss dann ein Doppelpunkt »:« eingegeben werden. Die geketteten Anwei-sungsteile werden durch Kommata »,« getrennt. Vor und hinter den Trenn-zeichen können Leerzeichen stehen.

Die Anweisungen

WRITE ’Name: ’.WRITE NAME.

sind identisch mit dem Kettensatz

WRITE: ’Name: ’, NAME.

Kommentare können auf zwei unterschiedliche Arten im Programm hinter-legt werden. Ein Stern »*« in Spalte 1 kennzeichnet eine gesamte Zeile alsKommentar. Nach einem Anführungszeichen »“« innerhalb einer Zeile wirdder Text bis zum Zeilenende als Kommentar interpretiert.

* Das ist eine KommentarzeileDATA NAME. "Vereinbarung der Variablen NAME

Definition von Datenfeldern, Typen und Konstanten

Datenfelder (Variablen) müssen vor ihrer erstmaligen Verwendung imDeklarationsteil des Programms definiert werden. Dazu ist neben demSchlüsselwort DATA die Angabe eines Datentyps und der Feldlänge oder einerReferenz erforderlich.

Feldnamen können bis zu 30 Zeichen lang sein und Sonderzeichen sowie Zif-fern enthalten. Das erste Zeichen sollte ein Buchstabe sein. Die Zeichen »(«,»)«, »+«, ».«, »,« und »:« sind nicht erlaubt. Der Bindestrich »-« sollte nicht ver-wendet werden, da er als Trennstrich für die Bestandteile zusammengesetz-ter Feldnamen vorgesehen ist. Empfehlenswert ist, zusammengesetzte Feld-namen mit einem Unterstrich »_« zu unterteilen und darüber hinaus aufSonderzeichen im Feldnamen zu verzichten. Einige Namen sind in ABAP vor-definiert. Dazu gehören die Systemvariablen, die generell mit SY oder SYSTbeginnen. Tabelle 1 zeigt einige Beispiele.

2

Page 4: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Die DATA-Anweisung verfügt über eine Reihe von Zusätzen, von denen nureinige dargestellt werden können. Eine einfache Datendeklaration hat fol-genden Aufbau:

DATA <Variablenname>[(<Länge>)] {TYPE <Typ>| LIKE <Var>}[VALUE<Standardwert>].

Dabei gilt:

� <Variablenname> ist eine Zeichenkette von bis zu 30 Buchstaben, die dieVariable symbolisiert.

� <Länge> ist die Länge des Feldes, wenn eine andere als die Standardlängegewünscht ist. Dies ist insbesondere für Zeichenketten interessant, daderen Standardlänge nur ein Zeichen beträgt. Eine Längenangabe ist nurfür die Typen C, P und N zulässig.

� <Typ> ist einer der in Tabelle 2 aufgelisteten Typen.

Der Typ gibt an, wie der Feldinhalt bei Berechnungen und Ausgaben inter-pretiert wird. Er legt darüber hinaus Länge, einen Initialwert und den erlaub-

Systemvariable Bedeutung

SY-UNAME Name des Benutzers, der das Programm startet

SY-DATUM aktuelles Datum in der Form YYYYMMTT

SY-UZEIT aktuelle Uhrzeit in der Form HHMMSS

SY-SUBRC Returncode

SY-LANGU Anmeldesprache

Tabelle 1 Systemvariablen

Typ Bedeutung Standardlänge Initialwert

C Text (Zeichenkette) 1 Leerzeichen

N numerischer Text 1 ‚000...0’

D aktuelles Datum in der Form YYYYMMTT

8 ‚00000000’

T aktuelle Uhrzeit in der Form HHMMSS 6 ‚000000’

I ganze Zahl (Integer) 4 0

P gepackte Zahl 8 0

Tabelle 2 Datentypen

3

Page 5: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Definition von Datenfeldern, Typen und Konstanten

ten Zeichenvorrat fest. Während der Typ C alle Zeichen enthalten kann, sindfür den Typ N nur Ziffern als Eingabe möglich. Hier einige Beispiele:

* Definition eines Feldes vom Typ Datum.DATA DATUM1 TYPE D.* Definition einer Zeichenkette der Länge 10.DATA NAME(10) TYPE C.* Definition einer Zeichenkette der Länge 1.DATA ZEICHEN.* Definition von 3 ganzen Zahlen.DATA: I1,I2,I3 TYPE I.* Definition einer gepackten Zahl mit 8 Vor- und 2 Nachkommastellen.DATA VAL(10) TYPE P DECIMALS 2.

Soll eine Variable den gleichen Typ wie eine bereits deklarierte Variablebesitzen, kann dies über den Zusatz LIKE definiert werden.

* Definition einer Zeichenkette der Länge 10.DATA NAME(10) TYPE C.* Definition einer Zeichenkette der Länge 10.DATA NAME_2 LIKE NAME.* Definition einer Variablen vom gleichen Typ wie SY-DATUM.DATA DATUM LIKE SY-DATUM.* Definition einer Variablen vom Typ wie das Tabellenfeld LFA1-NAME1.DATA NAME LIKE LFA1-NAME1.

Außerdem besteht die Möglichkeit, direkt Konstanten mit dem Schlüssel-wort CONSTANTS zu vereinbaren:

CONSTANTS DATUM TYPE D VALUE ‘20090416’.

Bei der Zuweisung von Initialwerten und der Konstantenvereinbarungensind für die Typen C und N in Apostrophe eingeschlossene Textliterale (etwa’Name’) anzugeben. Für die Typen P und I sind Zahlenliterale ohne Apo-stroph (etwa 2340) zu schreiben. Für alle anderen Typen sind Textliteraleanzugeben, die vom SAP-System automatisch konvertiert werden.

Zum Abschluss der Definition von Datenfeldern möchte ich noch die Feldleis-ten erwähnen. Dabei handelt es sich um logische Blöcke von Variablen. Sieentsprechen einer Struktur. Definiert wird eine Feldleiste mithilfe einerDATA-Anweisung.

DATA: BEGIN OF name,feld1(5) TYPE C,feld2 TYPE I,feld3 (20) TYPE C,

END OF name.

4

Page 6: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Ausgabe und Formatierung

Mit Ausgabeanweisungen können die Inhalte von Datenfeldern auf ein Aus-gabemedium übertragen werden. Standardmäßig erfolgt eine Ausgabe alsListe in der Bildschirmmaske. Es ist aber auch möglich, die Ausgabe auf einenDrucker umzuleiten. Mit der WRITE-Anweisung werden Feldinhalte ausgege-ben. Dabei gilt folgende Syntax:

WRITE [AT] [/][<Spalte>][(<Ausgabelänge>)] <Wert> [<Format>].

Ein Schrägstrich »/« heißt, die Ausgabe startet in einer neuen Zeile, sofern dieaktuelle nicht leer ist. Ist eine Spalte angegeben, fängt dort der Schreibvor-gang an. Mit <Ausgabelänge> kann die Länge des Strings begrenzt werden.Alle drei Angaben müssen, soweit vorhanden, ohne trennendes Leerzeichenangegeben werden. So schreibt die Anweisung WRITE /5(20) NAME. denNamen in eine neue Zeile, in die fünfte Spalte und mit einer maximalen Aus-gabelänge von 20 Zeichen.

<Format> kann sehr vielschichtige Zusätze umfassen, die wichtigsten zeigtTabelle 3

Für die benutzerspezifische Ausgabe des Datums muss dessen Form in derTransaktion zur Festlegung der Benutzerfestwerte SU50 ausgewählt werden.Zur Formatierung der Ausgabe steht eine Reihe von Befehlen zur Verfügung.Nachfolgend sind die wichtigsten Ausgabeoperationen und -klauseln mit Bei-spielen aufgelistet:

Zusatz Bedeutung

DD/MM/YYYY Datum im benutzerspezifischen Format

USING EDIT MASK <Maske>

Formatierung gemäß Maske, wobei »_« für ein Zeichen des einfachen Ausgabe-Strings steht: z.B. ZEIT USING EDIT MASK »__:__:__«

DECIMALS <Anz> Limitieren der Dezimalstellen einer nicht ganzen Zahl

NO-GAP keinen Abstand (= Leerzeichen) hinter dem Feld ausgeben

LEFT-JUSTIFIED linksbündig ausgeben

CENTERED zentriert ausgeben (entsprechend der definierten Länge)

RIGHT-JUSTIFIED rechtsbündig ausgeben

Tabelle 3 Zusatzformatierungen

5

Page 7: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Wertzuweisung und Operationen

* Ausgabe der Variablen NAME.WRITE NAME.* Ausgabe mehrerer Variablen in einer Zeile.WRITE: NAME, NAME_ALT, NAME_ZUSATZ.Ausgabe eines Textes in einer neuen Zeile.WRITE / ’Name: ’, NAME.* Ausgabe von maximal 20 Zeichen der Variablen NAME in eine neue* Zeile ab der Spalte 10.WRITE /10(20) NAME.* Ausgabe von NAME_ALT ab derselben Spalte wie NAME.WRITE / NAME_ALT UNDER NAME.* Benutzerspezifische Datumsausgabe.WRITE DATUM TT/MM/JJJJ.* Ausgabe einer Leerzeile.SKIP.* Ausgabe von fünf Leerzeilen.SKIP 5.* Ausgabe einer Linie.ULINE.* Erzwingt den Anfang einer neuen Seite.NEW-PAGE.

Außerdem gibt es die Möglichkeit, Icons und Symbole mit WRITE anzuzeigen.Genaueres über die Zusätze AS ICON und AS SMBOL finden Sie in der Online-Hilfe zum Befehl WRITE.

Wertzuweisung und Operationen

Sollen Werte an Variablen (Datenfelder) übergeben werden, müssen diesezugewiesen werden. Bei Verwendung des Zuweisungsoperators »=« ist keineSteuerungsanweisung notwendig.

* Übertragung der Variablen NAME_ALT auf die Variable NAME.NAME = NAME_ALT.

In vielen ABAP-Programmen wird das Schlüsselwort MOVE verwendet. Es hatdieselbe Bedeutung.

* Übertragung der Variablen NAME_ALT auf die Variable NAME.MOVE NAME_ALT TO NAME.

Wertzuweisungen können Operationen enthalten. Als Standardoperatorenstehen +, -, / (Division), * (Multiplikation), ** (Potenzierung), DIV (ganzzah-lige Division) und MOD (Rest der ganzzahligen Division) zur Verfügung. Wei-tere mathematische Funktionen können der Online-Hilfe entnommen wer-den. Klammersetzung ist erlaubt. Vor und nach jedem Operator und jederKlammer muss ein Leerzeichen stehen.

6

Page 8: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

* V1 erhält den Wert 4.V1 = 12 / ( 7 – 4 ).* Für V2 ergibt sich der Wert 3.V2 = 7 MOD 4.* Die Operation ergibt den Wert 7.V3 = V1 + V2.Die hier angegebene Schreibweise ist die Kurzform der Wertzuweisung mit dem optionalen Schlüsselwort COMPUTE. Die vollständige Syntax lautet:

COMPUTE <Feld> = <Ausdruck>.

Alternativ können die Anweisungen ADD TO, SUBTRACT FROM, MULTIPLY BY undDIVIDE BY verwendet werden. Zu beachten ist, dass dabei kein Ausdruck ver-wendet werden darf und die Ergebnisvariable am Ende der Anweisung steht:

ADD >Wert> TO <Feld>.

Das Operationszeichen »+« wird auch als Offsetangabe für Zeichenketten ver-wendet.

* Das dritte bis siebte Zeichen von C wird an C1 übergeben.C1 = C+2(5).

Da nur die fehlenden Leerzeichen eine Addition von einer solchen Zeichen-kettenoperation unterscheiden, führt V1 = C+3. anstelle von V1 = C + 3.nicht zu einem Syntaxfehler, aber zu einem falschen Ergebnis. Die Anwei-sung CLEAR setzt Variablen auf ihren durch den Typ festgelegten Initialwertzurück.

* Die Variable V1 wird auf 0, die Variable DATUM auf ’00000000’ zurückgesetzt.CLEAR: V1, DATUM.

Textelemente

In diesem Abschnitt zeige ich Ihnen, wie Sie mithilfe von Textelementen, dieaußerhalb des Quelltextes hinterlegt werden, eine Trennung der Texte vomProgrammablauf erreichen können. Der Vorteil besteht darin, dass die Aus-gaben in der Bildschirmmaske leichter an unterschiedliche Sprachen ange-passt werden können. In Abbildung 2 sehen Sie, wie die Textelemente zen-tral gepflegt werden.

Die Textelemente sind dreistellig nummeriert und werden mit der VariablenTEXT-yyy angesprochen.

* Ausgabe der Zeichenkette ‚Programm:’WRITE TEXT-001.

7

Page 9: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Textelemente

Abbildung 2 Pflege der Textelemente

Eine Ausgabe von Textelementen kann nur erfolgen, wenn sie in der Anmel-desprache des Anwenders erfasst wurden. Es ist jedoch möglich, einenDefault-Wert anzugeben, der nur verwendet wird, wenn dies nicht der Fall ist.

WRITE / 'Report:'(001).

In Abbildung 3 sehen Sie abschließend noch auszugsweise ein kurzes An-wendungsbeispiel. ABAP Z_BSP_TEXTELEMENTE greift auf die in Abbildung 2hinterlegten Textsymbole zu und übernimmt die hinterlegten Werte, wie inAbbildung 4 zu sehen ist.

Abbildung 3 Beispiel zu Textelementen

8

Page 10: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

In Abbildung 4 sehen Sie das Ergebnis unseres kleinen Programms mit Text-elementen.

Abbildung 4 Ausgabe des Programms zu Textelementen aus Abbildung 3

Datenbankabfragen

Am häufigsten werden ABAP-Programme zur Verarbeitung von im SAP-Sys-tem gespeicherten Datenbeständen genutzt. Alle Daten sind in Tabellen derangeschlossenen relationalen Datenbank gespeichert.

Deklarieren von Datenbanktabellen

Die Namen der Tabellen, die im Programm verwendet werden, müssen imDeklarationsteil in einer TABLES-Anweisung aufgelistet werden.

TABLES: LFA1, LFB1, LFBK.

Diese Deklaration ist mit einer Definition eines Datenaustauschbereichszwischen Programm und Tabelle verbunden. Die einzelnen Felder werdenüber <Tabellenname>-<Feldname> angesprochen. LFA1-NAME1 bezeichnetdas Feld NAME1 in der Tabelle LFA1.

Lesen von Werten aus einer Datenbanktabelle

Die SELECT-Anweisung dient dem Auslesen von Daten aus der Datenbank.Sie kann im Programm auf jede Datenbanktabelle angewendet werden, diemit TABLES deklariert wurde. Es gibt zwei grundlegende Ausprägungen derAnweisung, die gebräuchlichere hat die folgende Form:

SELECT * FROM <Tabelle> [WHERE <Bedingungen>][ORDER BY <Felder>]

9

Page 11: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Datenbankabfragen

[UP TO <n> ROWS].<Verarbeitung des Datensatzes>ENDSELECT.

Die Anweisung arbeitet in einer Schleife alle Datensätze ab, die den Bedin-gungen der WHERE-Klausel genügen. Innerhalb der Schleife, die durch dasSchlüsselwort ENDSELECT beendet wird, kann der jeweils aktuelle Datensatzverarbeitet werden. Die einzelnen Felder werden dabei über <Tabelle>-<Feldname> angesprochen.

Für die Zusätze der SELECT-Anweisung gilt Folgendes: Die WHERE-Klauselerlaubt, den Datenbestand durch Bedingungen einzuschränken. Das hateinen erheblichen Performancevorteil gegenüber einer eigenen Einschrän-kung innerhalb der SELECT-Schleife. Innerhalb einer WHERE-Klausel müssendie Felder der aktuellen Tabelle ohne den Zusatz <Tabelle>- angegebenwerden.

Mit der ORDER BY-Klausel können die selektierten Daten nach einem odermehreren Feldern sortiert werden. Bei Angabe mehrerer Felder werden dieDaten zunächst nach dem ersten Feld sortiert, innerhalb der Gruppen mitdemselben Feldinhalt nach dem zweiten etc. Die Syntax für die Angabe einesFeldes lautet jeweils

<Feld> [ASCENDING|DESCENDING].

Dabei steht der Zusatz ASCENDING für aufsteigende, DESCENDING für abstei-gende Sortierung. Ist keine Sortierung angegeben, wird aufsteigend sortiert.Der Zusatz PRIMARY KEY sortiert nach den Primärschlüsselfeldern der Tabelle.Mit dem Zusatz UP TO <n> ROWS kann die Bearbeitung auf die ersten n Daten-sätze beschränkt werden. Dazu zwei Beispiele. Im ersten Beispiel

SELECT * FROM LFA1 WHERE ORT01 = ’Berlin’ (...).

liest das Programm aus der Tabelle LFA1 alle Angaben über Lieferanten, diein Berlin ansässig sind. Im zweiten Beispiel

SELECT * FROM UMTAB1 ORDER BY UMSATZ DESCENDING UP TO 10 ROWS.

liest das Programm aus der fiktiven Tabelle UMTAB1 die zehn umsatzstärk-sten Kunden, absteigend nach UMSATZ sortiert. Es gibt auch die Möglichkeit,SELECT-Schleifen zu schachteln. Dies ist insbesondere für Tabellenhierar-chien mit 1:n-Beziehungen wichtig. Betrachten wir hierzu die beiden Tabel-len KUNDEN (mit den Feldern KUNDENNR und ORT) sowie UMSATZ (mit den Fel-dern KUNDENNR, GJAHR und UMSATZ), so könnte eine geschachtelte SELECT-Anweisung etwa so lauten:

10

Page 12: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

SELECT * FROM KUNDEN ORDER BY NAME.WRITE: / KUNDEN-NAME, KUNDEN-ORT.SELECT * FROM UMSATZ WHERE KUNDENNR = KUNDEN-KUNDENNR

ORDER BY GJAHR DESCENDING.WRITE: / UMSATZ-GJAHR, UMSATZ-UMSATZ.

ENDSELECT.ENDSELECT.

Die zweite Ausprägung von SELECT ist die SELECT SINGLE-Anweisung. DieSELECT SINGLE-Anweisung liest, wenn die Bedingung erfüllt ist, genau einenDatensatz. Sie hat die folgende Form:

SELECT SINGLE * FROM <Tabelle> WHERE <Bedingung>.

Ein ENDSELECT darf nicht geschrieben werden. SELECT SINGLE liest genaueinen Datensatz über seinen Schlüssel aus. Dazu müssen alle Felder, die zumSchlüssel gehören, über einen Vergleich als Bedingung angegeben werden.Betrachten wir hierzu die zeitabhängige Tabelle KUNDE (mit den Feldern KUN-DENNR, NAME, KONTAKT, DATAB, DATBIS). Es soll der aktuelle Satz zum Kunden»4711« ermittelt werden:

SELECT SINGLE * FROM KUNDE WHERE KUNDENNR = ‘4711’AND DATAB <= SY-DATUMAND DATBIS >= SY-DATUM.

Den Erfolg einer SELECT-Anweisung kann man mithilfe der SystemvariablenSY-SUBRC ermitteln. Ist der Wert 0, war die Suche erfolgreich und mindestensein Datensatz (bei SELECT SINGLE genau ein Datensatz) wurde gefunden. Istder Wert 4, wurde kein Datensatz selektiert, und der Wert 8 bedeutet, dass beieiner SELECT SINGLE-Anweisung mehrere Datensätze selektiert wurden.

Interne Tabellen

Interne Tabellen sind Tabellen, die nur während der Laufzeit des Programmsvorhanden sind. Dies bedeutet, dass deren Inhalt nicht auf der Datenbankgespeichert ist. Vorteil von internen Tabellen ist der deutlich schnellereZugriff, da diese nur die Informationen enthalten, die das Programm benötigt.

Um mit einer internen Tabelle zu arbeiten, benötigt man einen Arbeits-bereich (Workarea wa), der nichts anderes ist als eine Feldleiste.

Eine interne Tabelle wird im Wesentlichen wie eine Feldleiste definiert. Esmuss nur noch der Parameter OCCURS hinzugefügt werden. Dieser legt fest,wie viele Datensätze der internen Tabelle ständig im Speicher gehalten wer-den. Die interne Tabelle ist allerdings nicht auf diese Anzahl beschränkt.

11

Page 13: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Interne Tabellen

DATA: BEGIN OF it_tab OCCURS 10,feld1 TYPE I,feld2 LIKE knb1-kunnr,feld3(10) TYPE C,

END OF it_tab.

Um einen neuen Datensatz anzulegen oder einen bestehenden zu ändern,muss zunächst der dazugehörende Arbeitsbereich entsprechend gefüllt wer-den. Anschließend muss einer der Befehle APPEND oder INSERT gewählt wer-den. Der Arbeitsbereich zu einer internen Tabelle wird wie folgt definiert:

DATA: wa_it_tab like it_tab.

In Tabelle 4 sind die wichtigsten Anweisungen zusammengefasst, die zurBearbeitung von internen Tabellen benötigt werden.

Ergebnis Syntax

Wertzuweisung MOVE <wert> TO wa_it_tabelle-<feld>.

oder

wa_it_tabelle-<feld> = <wert>.

Neuen Datensatz anhängen APPEND wa_it_tab TO it_tab.

Satzweise lesen LOOP AT it_tab INTO wa_it_tab.<Verarbeitung>ENDLOOP.

Satz selektieren LOOP AT it_tab INTO wa_it_tabWHERE <Bedingung>AND <Bedingung>.

<Verarbeitung>ENDLOOP.

Gezielt einfügen INSERT wa_it_tab INTO it_tab INDEX <i>.

Ändern eines bestehenden Datensatzes

MODIFY it_tab INDEX <i> FROM wa_it_tab.

Löschen eines Datensatzes DELETE it_tab INDEX <i>.

Arbeitsbereich zurücksetzen CLEAR wa_it_tab

Löschen des gesamten Tabelleninhalts

REFRESH zzit_tab

Tabelle 4 Anweisungen zu internen Tabellen

12

Page 14: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Pflege von Datenbanktabellen

Zur Pflege von Datenbanktabellen stehen die vier Befehle INSERT, UPDATE,MODIFY und DELETE zur Verfügung:

� INSERTDer Befehl INSERT tab FROM wa_tab. fügt den Inhalt des Arbeitsbereichswa_tab als neuen Datensatz in die Tabelle tab ein. Dabei muss sicher-gestellt sein, dass noch kein Datensatz mit demselben Schlüssel vorhandenist. Falls dies der Fall ist, wird der Befehl INSERT nicht ausgeführt und derFehlercode sy-subrc größer null zurückgegeben.

� UPDATEMit dem Befehl UPDATE tab FROM wa_tab. kann ein Datensatz überschrie-ben werden. Hier muss sichergestellt sein, dass ein Satz mit diesem Schlüs-sel bereits vorhanden ist. Das Ergebnis ist wie beim Befehl INSERT am Feh-lercode sy-subrc zu erkennen.

UPDATE eignet sich auch zum Ändern mehrerer Datensätze. Die Anwei-sung hierfür lautet UPDATE tab FROM it_tab.

� MODIFYDer Befehl MODIFY tab FROM wa_tab. verbindet UPDATE und INSERT. Hier-bei wird jeweils geprüft, ob ein Datensatz mit demselben Schlüssel vor-handen ist. Ist das der Fall, wird geändert, sonst wird eingefügt. Aus die-sem Grund hat der Befehl MODIFY eine schlechtere Performance als UPDATEund INSERT.

Sollen mehrere Datensätze aus einer internen Tabelle in eine Datenbank-tabelle mit gleicher Struktur übernommen werden, kann die AnweisungMODIFY tab FROM it_tab. genutzt werden.

Elemente der Programmsteuerung

Soll der Programmablauf in Abhängigkeit von Werten und Ereignissenbeeinflusst werden, müssen Steuerstrukturen genutzt werden. ABAP bietetneben den auch in anderen Programmiersprachen verwendeten Grundstruk-turen (Verzweigung und Schleife) die Möglichkeit, den Programmablaufereignisgesteuert zu gestalten.

Grundlegende Steuerstrukturen

Mit ABAP lassen sich die in prozeduralen Sprachen üblichen Verzweigungenund Zyklen realisieren. Die Anweisung IF <Bedingung>. verzweigt entspre-

13

Page 15: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Elemente der Programmsteuerung

chend dem Resultat einer Bedingung. Ist die Bedingung erfüllt, werden dieAnweisungen im Ja-(IF-)Zweig ausgeführt, sonst die des Nein-(ELSE-)Zweigs.Soll die Abarbeitung des Nein-Zweigs durch eine weitere IF-Anweisung auf-gespalten werden, können ELSE. und IF <Bedingung>. zur AnweisungELSEIF <Bedingung>. verbunden werden. Die Anweisung ENDIF. schließtdie Verzweigung ab:

IF X > Y.WRITE / ’X ist größer als Y’.

ELSEIF X = Y.WRITE / ’X und Y sind gleich’.

ELSE.WRITE / ’Y ist größer als X’.

ENDIF.

Sollen mehr als zwei alternative Anweisungsfolgen in Abhängigkeit einesFeldinhalts ausgewählt werden, empfiehlt sich die CASE-Anweisung. Mit ihrwird der Feldinhalt mit mehreren Werten verglichen. Dann werden dieAnweisungen abgearbeitet, die auf WHEN <Wert>. mit dem übereinstimmen-den Wert folgen. WHEN OTHERS. bezeichnet die Anweisungen, die ausgeführtwerden sollen, wenn der Feldinhalt keinem der vorgegebenen Werte ent-spricht. ENDCASE. schließt die CASE-Anweisung ab.

CASE X.WHEN 1.

WRITE / ’X ist 1’.WHEN 2.

WRITE / ’X ist 2’.WHEN 3.

WRITE / ’X ist 3’.WHEN OTHERS.

WRITE / ’X ist weder 1, 2 noch 3’.ENDCASE.

Die wiederholte Abarbeitung von Anweisungen wird mittels Zyklen reali-siert. ABAP unterscheidet Zählzyklen und abweisende Zyklen. Die DO-Anwei-sung wird gemeinsam mit einem Parameter und dem Zusatz TIMES als Zähl-schleife in der Form DO <Parameter> TIMES. verwendet. Der Parameter gibtdie Anzahl der Wiederholungen an. ENDDO. beendet den Zyklus. Die aktuelleAnzahl der bisherigen Schleifendurchläufe wird in der Systemvariablen SY-INDEX hinterlegt.

* Schleife mit 5 Durchläufen.DO 5 TIMES.

WRITE / SY-INDEX.ENDDO.

14

Page 16: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Eine Endlosschleife entsteht, wenn die DO-Anweisung ohne Parameter undTIMES verwendet wird. Diese kann nur durch eine Abbruchanweisung verlassenwerden. Diese Abbruchanweisungen sollten nur in Ausnahmefällen verwendetwerden. Die Anweisung CONTINUE bewirkt, dass der aktuelle Zyklus nicht zuEnde geführt wird; es beginnt sofort der nächste Schleifendurchlauf. CHECK<Bedingung> wirkt analog zu CONTINUE, wenn die <Bedingung> nicht erfüllt ist.Mit der Anweisung EXIT wird eine Schleife ohne Bedingung verlassen.

Die Abarbeitung eines WHILE-Zyklus ist von der Bedingung abhängig, die inder WHILE-Anweisung formuliert wird: WHILE <Bedingung>. Sie wird ausge-führt, sofern und solange diese Bedingung erfüllt ist. Ein abweisender Zykluswird mit ENDWHILE. abgeschlossen.

X = 2.WHILE X < 1000.

WRITE / X.X = X * 2.

ENDWHILE.

Die Ausführung vieler Anweisungen ist unabhängig von Bedingungen. Diesewerden durch logische Ausdrücke definiert. Eine Möglichkeit ist der Ver-gleich von zwei Feldinhalten oder eines Feldinhaltes mit einem festen Wert.Die Vergleichsoperatoren, die Sie im SAP-System nutzen können, sind inTabelle 5 dargestellt.

Hier einige Beispiele:

IF I <> 1.IF X GE Y.IF SY-UNAME = ’HFORSTHU’.

Kurzbezeichnung Zeichen Bedeutung

EQ = Gleich

NE <>, >< Ungleich

GT > Größer als

LT < Kleiner als

GE >=, => Größer gleich

LE <=, 0< Kleiner gleich

Tabelle 5 Vergleichsoperatoren

15

Page 17: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Elemente der Programmsteuerung

Mit der Klausel BETWEEN ... AND ... kann überprüft werden, ob der Inhalteines Feldes innerhalb eines vorgegebenen Intervalls liegt. Die Klausel ISINITIAL vergleicht den Feldinhalt mit dem Standardinitialwert des entspre-chenden Datentyps.

* anstelle von 10 <= X <= 20.IF X BETWEEN 10 AND 20.* enthält X seinen Initialwert ?IF X IS INITIAL.

Zeichenketten lassen sich mit den in Tabelle 6 aufgeführten Operatoren ver-gleichen.

Dem Größenvergleich zwischen Strings wird eine lexikografische Ordnungzugrunde gelegt. Bei der Verwendung von CP und NP steht das Symbol »+«für genau ein beliebiges Zeichen und »*« für eine beliebige Zeichenfolge. Das

Kurzbezeichnung Langbezeichnung Bedeutung

CO Contains Only Erfüllt, wenn der erste Operand nur Zeichen des zweiten Operanden enthält.

CN Contains Not Only Erfüllt, wenn der erste Operand nicht nur Zeichen des zweiten Operanden enthält.

CA Contains Any Erfüllt, wenn der erste Operand mindes-tens ein Zeichen des zweiten Operanden enthält.

NA Contains Not Any Erfüllt, wenn der erste Operand kein Zeichen des zweiten Operanden enthält.

CS Contains Strings Erfüllt, wenn der erste Operand die Zeichenfolge des zweiten Operanden enthält.

NS Contains No Strings Erfüllt, wenn der erste Operand nicht die Zeichenfolge des zweiten Operanden enthält.

CP Contains Pattern Erfüllt, wenn der erste Operand das Muster des zweiten Operanden enthält.

NP Contains No Pattern Erfüllt, wenn der erste Operand nicht das Muster des zweiten Operanden enthält.

Tabelle 6 Vergleichsoperatoren für Zeichenketten

16

Page 18: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Symbol »#« steht vor einem zeichengetreu zu vergleichenden Zeichen. CSund NS unterscheiden nicht zwischen Groß- und Kleinschreibung. Die ange-gebenen String-Vergleiche können bei der WHERE-Klausel allerdings nicht ein-gesetzt werden, diese sind nur bei IF- und CHECK-Anweisungen gültig.

Die einzelnen Bedingungen können über AND und OR logisch verknüpft wer-den. Sollte es nötig sein, einzelne Teile klar abzutrennen, ist eine Klamme-rung möglich. Die Verknüpfung AND hat zur Folge, dass der Datensatz nurdann selektiert wird, wenn beide verknüpften Bedingungen erfüllt sind. Beieiner Verknüpfung mit OR reicht es hingegen, wenn eine der beiden Bedin-gungen erfüllt ist.

Ereignisorientierte Programmsteuerung

ABAP-Programme werden verwendet, um Daten aus Datenbanktabellen zulesen, zu verarbeiten und auszugeben. Während der Abarbeitung dieser Pro-gramme tritt eine Reihe von Ereignissen auf. Beispiele dafür sind der Pro-grammbeginn, das Lesen eines Datensatzes oder das Beenden einer Eingabein die Bildschirmmaske. ABAP-Programme können diese Ereignisse auswer-ten und damit den Programmablauf steuern. Die Ereignisse werden überZeitpunkt- und Ereignisschlüsselwörter definiert. Diese teilen das Programmin mehrere Verarbeitungsblöcke auf. Ein Verarbeitungsblock beginnt miteinem Schlüsselwort.

Das Ereignis INITIALIZATION. tritt zu Programmbeginn ein. Mit den zuge-hörigen Anweisungen können Selektionskriterien und Parameter vor Aus-gabe des Selektionsbilds verändert werden.

Das Ereignis START-OF-SELECTION. findet nach der Bearbeitung des Selekti-onsbilds und vor der ersten Leseoperation auf Datenbanktabellen statt. SeineAngabe ist optional. Nach START-OF-SELECTION. können Initialisierungenfür die nachfolgenden Anweisungsblöcke programmiert werden.

END-OF-SELECTION. bezeichnet den Zeitpunkt nach dem Lesen und Verarbei-ten aller Tabellen.

TOP-OF-PAGE. und END-OF-PAGE. sind Ereignisse bei der Ausgabe von Listen.

Die Ereignisse GET und GET LATE setzen voraus, dass eine logische Datenbankausgewertet wird. Diese legt fest, in welcher Reihenfolge die enthaltenenTabellen bearbeitet werden, das heißt, sie übernimmt das Lesen der Datenund beinhaltet Standardselektionen, die im Selektionsbild enthalten sind.Sobald ein Datensatz der tabelle gelesen wurde, wird das Ereignis GET

17

Page 19: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Zeichenkettenbearbeitung

tabelle. ausgelöst. Zu diesem Zeitpunkt kann auf die Daten des selektiertenDatensatzes zugegriffen werden.

Um die Auswirkungen von GET tabelle zu verdeutlichen, verwende ich dasBeispiel der hierarchischen Tabellen KNA1 und KNB1. Zunächst wird einDatensatz in der Tabelle KNA1 selektiert und anschließend das Ereignis GETKNA1. ausgelöst. Danach werden alle abhängigen Daten aus der Tabelle KNB1selektiert und anschließend das Ereignis GET KNB1. ausgelöst. Zu diesem Zeit-punkt sind die Daten aus der KNA1 weiterhin im Zugriff.

Das Ereignis GET tabelle LATE. wird dann ausgelöst, wenn alle sich hierar-chisch darunter befindlichen Tabellen abgearbeitet wurden. In unserem Bei-spiel mit KNA1 und KNB1 bedeutet GET KNA1 LATE., dass im Fall, dass zu einembestimmten Datensatz aus KNA1 zwei abhängige Sätze in KNB1 vorhandenwären, GET KNA1 LATE. ausgelöst würde, nachdem der zweite Datensatz ausKNB1 gelesen wurde und bevor der nächste Datensatz aus KNA1 gelesen wird.

Zeichenkettenbearbeitung

Mit WRITE <Ausdruck> TO <Variable>[+<Off>] [(<Len>)]. kann ein Aus-druck, z.B. eine Variable oder ein Text, anstatt in die Bildschirmmaske ineine Variable an der Stelle <Off> mit der Maximallänge <Len> geschriebenwerden. Die meisten Formatzusätze von WRITE sind hierbei zugelassen.

REPLACE <StrALT> WITH <StrNEU> INTO <Feld>. ersetzt im Feld <Feld> daserste Vorkommen der Zeichenkette <StrALT> mit der Zeichenkette<StrNEU>.

SHIFT <String> {[BY <Zahl> PLACES] {[LEFT]|[RIGHT} [CIRCULAR]|...}.verschiebt den String innerhalb des Feldes nach links oder rechts, wahlweiseum mehrere Zeichen oder rotierend.

OVERLAY <Feld1> WITH <Feld2>. setzt im <Feld1> an allen Stellen, an denensich ein Leerzeichen befindet, das entsprechende Zeichen aus <Feld2> ein.

<Variable> = STRLEN( <String> ). bestimmt die Länge des Strings in Zeichen.

CONDENSE <String> [NO-GAPS]. verdichtet den String so, dass Zwischen-räume nur noch ein Leerzeichen umfassen bzw. beim Zusatz alle Zwischen-räume gelöscht werden.

TRANSLATE <String> {TO UPPER CASE|TO LOWER CASE|...}. konvertiert denString in Groß- bzw. Kleinbuchstaben. Es gibt noch weitere Konvertierungs-möglichkeiten.

18

Page 20: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

CONCATENATE [<String1> <String2> ... <Stringn>] INTO <String> [SEPA-RATED BY <Zeichen>]. verkettet die angegebenen Strings zu einer in<String> gespeicherten Zeichenkette. Die einzelnen Teile können dabeidurch ein Zeichen <Zeichen> getrennt werden.

SPLIT <String> AT <Zeichen> INTO [<String1> <String2> ... <Stringn>|

TABLE <Tab>]. zerlegt einen String jeweils am Trennzeichen <Zeichen> undspeichert die einzelnen Teile wahlweise in eine Liste von Feldern (Strings)oder in eine »interne« Tabelle.

Unterprogramme

Parameter des Unterprogramms werden in Referenzparameter und Wertpa-rameter unterschieden. Bei einem Referenzparameter wird nur die Adressedes Aktualparameters an das Unterprogramm übermittelt. Wird der Werteines solchen Parameters im Unterprogramm verändert, wird die Änderungdirekt auf der Variablen im Hauptprogramm vollzogen. Die Definitionerfolgt mit dem Schlüsselwort USING.

FORM Unterprogramm1 USING FELD1 FELD2.

Wertparameter sind eigenständige Variablen des Unterprogramms. BeimAufruf werden die Werte der zugehörigen Aktualparameter an die Formalpa-rameter übergeben. Die Werte der Aktualparameter bleiben erhalten. Damitkönnen diese Wertparameter nur als Eingabe- und nicht als Ausgabeparame-ter des Unterprogramms genutzt werden.

Die Definition erfolgt mit USING VALUE.

FORM Unterprogramm1 USING VALUE(FELD1) VALUE(FELD2).

Eine Mischform ist die Definition von Parametern mit dem SchlüsselwortCHANGING VALUE(<Feld>). Mit CHANGING VALUE(<Feld>) wird ein Wertpara-meter vereinbart, dessen Wert am Ende des Unterprogramms wieder auf denzugehörigen Aktualparameter übertragen wird. Damit ist dieser Parametersowohl für Eingaben als auch für Ausgaben aus dem Unterprogrammanwendbar. Eine Wertübergabe erfolgt auch, wenn das Unterprogramm mitEXIT. abgebrochen wird. Sie erfolgt nicht bei einem Abbruch mit einer Feh-lernachricht.

FORM Unterprogramm1 CHANGING VALUE(FELD1) VALUE(FELD2).

Interne Tabellen können nicht mit USING übergeben werden. Für sie ist derZusatz TABLES <Tabellenname> notwendig. Dieser Zusatz muss als ersternach den Schlüsselwörtern FORM oder PERFORM angegeben werden.

19

Page 21: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Funktionsbausteine

FORM Unterprogramm1 TABLES TAB1.

Bei der Übergabe von Feldleisten und Tabellen an Unterprogramme ist esmöglich, zusätzlich deren Struktur mitzuteilen. Dazu ist in der FORM-Anwei-sung direkt hinter dem entsprechenden Parameternamen der Zusatz TYPE<Strukturangabe> anzufügen. Durch diesen Zusatz wird sichergestellt, dassdie Typen der Formalparameter mit den Typen der Aktualparameter kompa-tibel sind. Falsche Typangaben führen zu Syntaxfehlern. Typkonvertierun-gen werden nicht ausgeführt.

Ohne diese Angaben kann auf die Tabellen nur mit zeilenorientierten Ope-rationen wie APPEND oder READ zugegriffen werden. Auch auf Feldleistenkann nur als Ganzes zugegriffen werden. Ihr Inhalt wird als Zeichenketteinterpretiert. Mit der Strukturangabe kann wie gewohnt mit Einzelfeldernder Tabellen und Feldleisten gearbeitet werden.

TYPES:BEGIN OF TABTYP OCCURS 10,NAME(10) TYPE C,ORT(15) TYPE C,

END OF TABTYP.DATA TAB1 TYPE TABTYP....PERFORM Unterprogramm1 TABLES TAB1....FORM Unterprogramm1 TABLES TAB1 TYPE TABTYP....

Werden mehrere Parameter übergeben, müssen die Zusätze TABLES, USINGund CHANGING in folgender Reihenfolge angegeben werden:

FORM Unterprogramm1TABLES TAB1USING FELD1CHANGING VALUE(FELD2).

Soll im Unterprogramm auf Datenbanktabellen zugegriffen werden, müssendiese mit der Anweisung LOCAL <Tabellenname>. vereinbart werden.

FORM Unterprogramm1LOCAL USR03....ENDFORM.

Funktionsbausteine

Funktionsbausteine sind in einer Zentralbibliothek verwaltete, logisch abge-schlossene Unterprogramme mit einer fest definierten Schnittstelle zum

20

Page 22: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Benutzer. Aufgerufen werden Funktionsbausteine mit der CALL FUNCTION-Anweisung.

CALL FUNCTION <Baustein>{EXPORTING [<Formalparameter>=<Aktualparameter>]1: }{IMPORTING [<Formalparameter>=<Aktualparameter>]1: }{CHANGING [<Formalparameter>=<Aktualparameter>]1: }{TABLES [<Formalparameter>=<Aktualparameter>]1: }{EXCEPTIONS [<Ausnahme>=<Fehlercode>]1:

[OTHERS=<Fehlercode>]}.

Die Option EXPORTING wird für Eingabeparameter genutzt. Mit IMPORTINGwerden Ausgaben von Formal- an Aktualparameter deklariert. CHANGING defi-niert Ein- und Ausgabeparameter. Mit TABLES werden Tabellen übergeben.EXCEPTIONS dienen der Ausnahmebehandlung. Mit ihnen können bei vorzei-tigem Abbruch der Abarbeitung zusätzliche Verarbeitungsschritte eingeleitetwerden.

Da jeder Funktionsaufruf spezifische Optionen hat, ist auch dessen Aufruf spe-zifisch. Deshalb ist es am einfachsten, über die Funktion Muster und die Ein-gabe des Bausteinnamens den Aufruf in den aktuellen Programmcode einfü-gen zu lassen. Dabei müssen nur noch die Aktualparameter ergänzt werden.

Arbeit in Dateien

Die Arbeit mit Dateien hat innerhalb eines SAP-Systems in den meisten Fäl-len kaum eine Bedeutung. Sie sind jedoch zur Kommunikation mit externenSystemen von Bedeutung, das heißt für den Import und den Export vonDaten. Der Umgang mit einer Datei erfolgt immer nach demselben Schema.In diesem Abschnitt beschreiben wir die Vorgehensweise bei einem lesen-den Zugriff.

* Definition eines Arbeitsbereichs für den DatentransferDATA: BEGIN OF wa,

feld1(10) TYPE C,feld2 TYPE I,feld3 like knb1-kunnr,

END OD wa.* Definition der Variablen für die MeldungenDATA: wa_er(100) TYPE C.* Definition des Dateinamens im DateisystemDATA: dateiname(70) TYPE C.* Öffnen der Datei für zeilenweises LesenDateiname = ‚/temp/test.txt’.OPEN DATASET dateiname FOR INPUT IN TEXT MODE

MESSAGE wa_er.

21

Page 23: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Praxisbeispiele

* Wenn Fehler beim Öffnen, dann Meldung in wa_erIF sy-subrc <> 0.

WRITE: / ‚Fehler beim Öffnen – ‚, wa_er.ENDIF.* Lesen aller Datensätze in einer SchleifeREAD DATASET dateiname INTO wa.WHILE sy-subrc = 0.* Mache etwas mit den Daten

<Verarbeitung>* nächsten Datensatz lesen

READ DATASET dateiname INTO wa.ENDWHILE.* Datei wieder schließenCLOSE DATASET dateiname.

Weitere Befehle sind TRANSFER wa TO dateiname. zum Schreiben in eine zumSchreiben geöffnete Datei. Um eine Datei zum Schreiben zu öffnen, könnenSie den Befehl OPEN DATASET dateiname FOR OUTPUT IN TEXT MODE. verwen-den. Der Befehl DELETE DATASET dateiname. löscht eine Datei im Dateisys-tem des SAP-Systems.

Praxisbeispiele

Sie verfügen nun über die notwendigen Kenntnisse, um das SAP-Werkzeug SAPQuery auch weit über die reine Listenerstellung hinaus optimal einsetzen zukönnen. In diesem Abschnitt zeigen wir Ihnen, wie Sie dazu vorgehen können.

Saldo zum Kreditor (Funktionsbaustein)

Beginnen wir zunächst mit einem Praxisfall, der lediglich zur Listerstellungdient. Einige Informationen sind nicht direkt zugänglich, sodass ein Funktions-baustein verwendet werden muss.

Aufgabenstellung

Das Selektionsbild der Query soll die folgenden Felder enthalten:

� die Kontonummern der Lieferanten

� die Orte der Lieferanten

� die Abstimmkonten in den Lieferantenstammdaten

� die Buchungskreise

� die aktuellen Kontensalden der Lieferanten

22

Page 24: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Die mit den Selektionswerten erzeugte Liste soll als ABAP-Liste ausgegebenwerden und die folgenden Informationen enthalten:

� die Kontonummer des Lieferanten

� Name1 und Name2 aus den Stammdaten des Lieferanten

� Postleitzahl, Ort und Straße mit Hausnummer aus den Stammdaten

� den jeweiligen Buchungskreis

� den aktuellen Saldo des Lieferantenkontos

Die Liste soll zunächst nach den Abstimmkonten sortiert sein (erste Grup-pensummenstufe). Innerhalb der Abstimmkonten sind die Positionen nachden Kontonummern sortiert und enthalten die Kontensalden je Buchungs-kreis, in denen der Lieferant vorhanden ist. Die Liste soll eine Zwischen-summe über diese Buchungskreise je Lieferant ausgeben.

Datenquelle

Als Datenquelle dient ein Tabellen-Join aus den Tabellen LFB1 und LFA1, dieüber die Kontonummer des Lieferanten verbunden sind (siehe Abbildung 5).

Abbildung 5 Join-Definition

Feldgruppen

Die drei Feldgruppen 01 (Lieferantenstamm Buchungskreisdaten), 02 (Liefe-rantenstamm allgemeiner Teil) und 90 (Zusätze) sind anzulegen. Anschlie-ßend sind die Felder wie in Abbildung 6 den drei Feldgruppen zuzuordnen.

23

Page 25: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Saldo zum Kreditor (Funktionsbaustein)

Abbildung 6 Feldgruppen mit zugeordneten Feldern

Zusatzfelder

In diesem Beispiel benötigen wir ein Zusatzfeld, um den jeweiligen Saldo desLieferantenkontos ermitteln und ausgeben zu können. Dieses nennen wirSALDO und legen den Datentyp über eine LIKE-Referenz fest. Dabei beziehenwir uns auf das Übergabefeld BAPI3008_3-LC_BAL des Funktionsbausteins,den wir im Coding ansprechen (siehe Abbildung 7).

Abbildung 7 Zusatzfeld SALDO – Definition

24

Page 26: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Anschließend können wir das Coding hinterlegen. Wir nutzen in diesem Bei-spiel den Funktionsbaustein BAPI_AP_ACC_GETKEYDATEBALANCE, um die Kon-tensalden zu ermitteln. Dieser Funktionsbaustein gibt eine interne Tabellezurück. Aus diesem Grund müssen wir im DATA-Bereich eine interne Tabelledefinieren, deren Felder und Aufbau vom Funktionsbaustein vorgegebensind und in der Dokumentation des Funktionsbausteins ermittelt werdenmüssen. Dem Funktionsbaustein übergeben wir zur Laufzeit den Buchungs-kreis, die Lieferantennummer und das aktuelle Systemdatum, Letzteres mit-hilfe der Systemvariablen sy-datum. Der Funktionsbaustein liefert dann dieinterne Tabelle KEYBALANCE zurück. Die darin enthaltenen Werte übergibt eran die zuvor definierte interne Tabelle wa_saldo. Zuletzt erhält das Zusatz-feld SALDO den Wert des Feldes wa_saldo-lc_bal aus der internen Tabelle(siehe Abbildung 8).

Abbildung 8 Zusatzfeld SALDO – Coding

Query

Das fertige Selektionsbild ist in Abbildung 9 zu sehen.

25

Page 27: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Saldo zum Kreditor (Funktionsbaustein)

Abbildung 9 Selektionsbild

Mit den hinterlegten Werten aus Abbildung 9 wird die Liste aus Abbildung10 erzeugt.

Abbildung 10 Listausgabe

26

Page 28: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Saldo zur Kostenstelle und Download

Die erzeugte Liste dient im zweiten Beispiel nur Kontrollzwecken. Dereigentliche Clou an diesem Beispiel ist die Anforderung, dass eine Textdateierzeugt werden soll, die von einem nachgelagerten System verarbeitet wer-den kann. Dazu muss die Datei einen festen, vorher vereinbarten Inhalt undAufbau aufweisen. Diese Datei soll im Dateisystem des Applikationsserversabgelegt werden und folgenden Aufbau besitzen (die Angaben in Klammernbeziehen sich auf den Datentyp und die Länge der einzelnen Felder):

� Kostenstelle (Character, 10)

� Buchungskreis (Character, 4)

� Geschäftsbereich (Character, 4)

� Verantwortungsbereich (Character, 20)

� Profit-Center (Character, 10)

� Kurztext Kostenstelle (Character, 20)

� Langtext Kostenstelle (Character, 40)

� Saldo (Character, 15)

Die einzelnen Felder sollen durch ein Semikolon getrennt sein.

Datenquelle

Als Datenquelle dient ein Tabellen-Join aus den Tabellen CSKS (Kostenstel-lenstammsatz), CSKT (Kostenstellentexte) und TKA01 (Kostenrechnungskreis).Die beiden Tabellen CSKS und CSKT sind über die Schlüsselfelder Kostenrech-nungskreis, Kostenstelle und das Gültigkeitsdatum eindeutig verbunden.CSKT und TKA01 sind über den Kostenrechnungskreis verbunden (sieheAbbildung 11).

Abbildung 11 Join-Definition

27

Page 29: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Saldo zur Kostenstelle und Download

Feldgruppen

Die drei Feldgruppen 01 (Kostenstellenstammsatz), 02 (Kostenstellentexte)und 90 (Zusätze) sind anzulegen. Anschließend sind die Felder wie in Abbil-dung 12 den drei Feldgruppen zuzuordnen.

Abbildung 12 Feldgruppen mit zugeordneten Feldern

Zusatzfelder

In diesem Beispiel benötigen wir zwei Zusatzfelder, um den jeweiligen Saldoder Kostenstelle ermitteln und ausgeben zu können. Dazu benötigen wir diesogenannte Objektnummer, die wir zuvor bestimmen müssen. Wir nennendas Zusatzfeld für den Kostenstellensaldo SALDO, das Zusatzfeld für dieObjektnummer OBJECT (siehe Abbildung 13).

Abbildung 13 Zusätze

Die jeweiligen Datentypen legen wir über eine LIKE-Referenz fest. Bei derObjektnummer beziehen wir uns auf das Feld COEP-OBJNR (siehe Abbildung14), beim Saldo auf COSP-WKG001 (siehe Abbildung 16).

28

Page 30: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Abbildung 14 Zusatzfeld OBJECT – Definition

Der Wert der Objektnummer einer Kostenstelle setzt sich zusammen ausder Konstanten 'KS', der Konstanten '1000' für den Kostenrechnungskreis,der Ziffernfolge '000000'sowie der Kostenstellennummer csks-kostl. DieWertzuweisung auf das Zusatzfeld OBJECT erfolgt mithilfe des Schlüsselwor-tes concatenate (siehe Abbildung 15).

Abbildung 15 Zusatzfeld OBJECT – Coding

Abbildung 16 Zusatzfeld SALDO – Definition

29

Page 31: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Saldo zur Kostenstelle und Download

Zur Bestimmung des Saldos verwenden wir in diesem Beispiel den Funkti-onsbaustein K_BALANCE_GET. Wir übergeben diesem Funktionsbaustein dieObjektnummer über das zuvor erzeugte Zusatzfeld OBJECT sowie den Wert-typ '04' und erhalten den aktuellen Saldo des übergebenen Objekts, in unse-rem Beispiel einer Kostenstelle (siehe Abbildung 17).

Abbildung 17 Zusatzfeld SALDO – Coding

Datei-Download

Um eine Datei erzeugen und im Dateisystem ablegen zu können, müssenzunächst der Inhalt und der Aufbau definiert werden. Dies geschieht zumZeitpunkt DATA. Dort definieren wir die interne Tabelle wa_it mit den Fel-dern in der Reihenfolge aus der Aufgabenstellung. Zwischen jeweils zwei Fel-der der Aufgabenstellung wird ein Trennzeichen geschoben, das aus einemZeichen besteht. Diesen Feldern weisen wir später das Zeichen »;« (Semiko-lon) zu. Anschließend definieren wir den Arbeitsbereich wa, der den gleichenAufbau wie ein Datensatz der internen Tabelle wa_it hat.

Des Weiteren definieren wir die interne Tabelle wa_it_l, die aus genaueinem Feld besteht, das die Länge der Gesamtlänge aller Felder der internenTabelle wa_it hat. Auch hierzu benötigen wir einen Arbeitsbereich, den wirwa_l nennen. Vergleichen Sie hierzu Abbildung 18.

Zum Zeitpunkt der Satzverarbeitung weisen wir den einzelnen Feldern desArbeitsbereichs wa die aktuellen Werte aus dem vorliegenden Datensatz zu.Anschließend fügen wir den Inhalt des Arbeitsbereichs wa der internenTabelle wa_it hinzu. Danach fügen wir den Inhalt der Felder des Arbeits-bereichs mithilfe des Schlüsselworts concatenate in das einzige Feld des

30

Page 32: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Arbeitsbereichs wa_l – wa_l-line – ein. Der Arbeitsbereich wird abschlie-ßend an die interne Tabelle wa_it_l gehängt. In Abbildung 19 ist das dazu-gehörende Coding zu finden.

Abbildung 18 Zeitpunkt DATA

Abbildung 19 Zeitpunkt Satzverarbeitung

31

Page 33: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Auswertung sequenzieller Dateien

Zum Abschluss wird zum Zeitpunkt END-OF-SELECTION die Datei abgelegt.Zunächst muss hierzu die Datei im Dateisystem zum Schreiben geöffnet wer-den. Dazu dient das Schlüsselwort OPEN DATASET. Danach kann der Inhalt derinternen Tabelle in diese Datei geschrieben werden. Dies geschieht mit demSchlüsselwort transfer. Nach dem Datentransfer muss die erzeugte Dateimithilfe des Schlüsselworts close dataset wieder geschlossen werden (sieheAbbildung 20).

Abbildung 20 Zeitpunkt END-OF-SELECTION (vor Listausgabe)

Auswertung sequenzieller Dateien

Das dritte Beispiel beschreibt den Fall, dass Teile der auszuwertenden Datennicht innerhalb des SAP-Systems abgelegt, jedoch über den Zugriff auf eineexterne Textdatei zugänglich sind.

Ein gemeinnütziger Verband verwaltet die Daten von Studenten und Schülern,die von öffentlichen Stellen ein Stipendium erhalten. Die persönlichen Datender Stipendiaten werden in einem separaten System verwaltet, die Buchhal-tungsdaten hingegen in einem SAP-System. Die Daten zu einem Studentenkönnen in SAP mithilfe einer zehnstelligen Kennziffer ermittelt werden.

Innerhalb von SAP soll eine Liste erstellt werden, die neben den Daten ausden Datenbanktabellen des SAP-Systems einige persönliche Daten zu den Sti-pendiaten enthält. Die Daten aus dem Vorsystem sind im Dateisystem desSAP-Systems als .txt-Datei abgelegt. Die mit den Selektionswerten erzeugteListe soll als ABAP-Liste ausgegeben werden und die folgenden Informatio-nen enthalten:

� Name1 und Name2 aus den Stammdaten des Debitors (Zuschussgeber)

� die Kontonummer des Debitors

� der Ort aus den Stammdaten des Debitors

� den Namen, das Geburtsdatum und die Kennziffer des Stipendiaten

32

Page 34: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

� das Aktenzeichen zum jeweiligen Fall

� die ausgezahlten Beträge der Zuschussgeber

� die Akademie, an der der Stipendiat studiert

Die Liste soll nach den Studenten und den Zuschussgebern sortiert sein undjeweils Zwischensummen ausgeben.

Man kann Textdateien vereinfacht in zwei Gruppen einteilen: Dateien miteiner festen Satzlänge und Dateien mit Trennzeichen. Bei einer Datei mit fes-ter Satzlänge beginnen und enden alle Felder in jeder Zeile an der der glei-chen Stelle, wie in Abbildung 21 zu sehen ist.

Abbildung 21 Datei mit fester Satzlänge

Bei einer Datei mit Trennzeichen werden die einzelnen Felder von einemvereinbarten Zeichen getrennt. In Abbildung 22 ist dies das Semikolon ;.

Abbildung 22 Datei mit Trennzeichen

In den Dateien aus Abbildung 21 bzw. Abbildung 22 sind dieselben Datenauf unterschiedliche Arten abgelegt. Bei diesen Daten handelt es sich um:

� Nummer des Stipendiaten (Character, 10)

� Ordnungsnummer (Character, 4)Der erste Stipendiat einer Familie, der auch Mitglied des gemeinnützigenVerbands ist, erhält die Ordnungsnummer 0001. Die Geschwister des Sti-

33

Page 35: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Auswertung sequenzieller Dateien

pendiaten erhalten die Ordnungsnummer 0002. Die förderungswürdigenKinder erhalten die Ordnungsnummer 0010.

� Nachname des Empfängers von Zuwendungen (Character, 20), der Vor-name (Character, 10) sowie das Geburtsdatum (Character, 8, in der FormTTMMJJJJ)

� Debitorennummer, das heißt der Förderer

� Aktenzeichen des Mitglieds (Character, 10) und Aktenzeichen eines Fami-lienangehörigen (Character, 10)

In Abbildung 23 sehen Sie eine Liste der Einzelpostenanzeige Debitor mitden Daten, die in SAP abgelegt sind. Diese Daten sollen um die dazugehören-den Daten aus der Textdatei aus dem Dateisystem ergänzt und in einergemeinsamen Liste ausgegeben werden.

Abbildung 23 Listausgabe der Einzelpostenanzeige (FBL5N)

34

Page 36: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Datenquelle

Als Datenquelle dient ein Tabellen-Join aus den Tabellen BSID (Offene Pos-ten Debitoren), KNA1 (Kundenstamm allgemeiner Teil) und T001 (Buchungs-kreise). Die beiden Tabellen BSID und KNA1 sind über das Schlüsselfeld Kun-dennummer eindeutig verbunden. BSID und T001 sind über denBuchungskreis verknüpft (siehe Abbildung 24).

Abbildung 24 Join-Definition

Feldgruppen

Die vier Feldgruppen 01 (Offene Posten Debitoren), 02 (Kundenstamm), 03(Belegkopf) und 90 (Zusätze) sind anzulegen. Anschließend sind die Felderwie in Abbildung 25 den vier Feldgruppen zuzuordnen.

Abbildung 25 Feldgruppen mit zugeordneten Feldern

35

Page 37: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Auswertung sequenzieller Dateien

Zusatzfelder

In diesem Beispiel benötigen wir vier Zusatzfelder und die ZusatztabelleBKPF. Die einzelnen Zusatzfelder sind der Name (Vorname und Nachname),das Aktenzeichen, das Geburtsdatum und der Betrag mit Vorzeichen (sieheAbbildung 26).

Abbildung 26 Zusätze

Die Tabelle BKPF muss als Zusatztabelle ausgewertet werden, da sie nichteinem Tabellen-Join mit BSID hinzugefügt werden darf. Die Verbindungerfolgt über den Buchungskreis, die Belegnummer und das Geschäftsjahr(siehe Abbildung 27).

Abbildung 27 Zusatztabelle BKPF

Im Zusatzfeld ZNAME sollen Vor- und Nachname aus der externen Datei ent-halten sein. Dazu definieren wir das Zusatzfeld vom Typ C und der Länge 30(20 + 10). Im Coding selektieren wir den dazugehörenden Datensatz aus derinternen Tabelle wa_it, in der die Daten der externen Datei enthalten sind.Diesem Datensatz entnehmen wir den Vornamen und den Nachnamen.

36

Page 38: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Anschließend werden diese mithilfe des Schlüsselworts concatenate zusam-mengefügt, und durch den Zusatz separated by space wird erreicht, dass diebeiden Felder durch ein Leerzeichen getrennt sind (siehe Abbildung 28).

Abbildung 28 Zusatzfeld ZNAME

Das nächste Zusatzfeld ist ZAZ, das Aktenzeichen aus der externen Datei. Wirdefinieren das Zusatzfeld vom Typ C und der Länge 10. In Abhängigkeit vonder Ordnungsnummer wird der Wert einem von zwei Feldern entnommen.Ist wa-ornr = '0001', das heißt, es handelt sich um den Fall eines Mitglieds,ist das Feld wa-AZ_M maßgeblich. In allen anderen Fällen ist das Feld wa-AZ_A maßgeblich (siehe Abbildung 29).

Das nächste Zusatzfeld ist das Geburtsdatum, ZGEB_DAT. Das im selektiertenDatensatz enthaltene Feld mit dem Geburtsdatum hatte den Aufbau TTMM-JJJJ. Aus diesem Grund benötigen wir drei Hilfsvariablen: Tag, Monat undJahr. Der Variablen Tag weisen wir die ersten beiden Stellen des Geburts-datums zu, der Variablen Monat die dritte und vierte Stelle und der VariablenJahr die Stellen 5 bis 8. Anschließend verbinden wir die drei Variablen undsetzen zwischen Tag und Monat sowie Monat und Jahr einen Punkt. Das ent-sprechende Coding finden Sie in Abbildung 30.

37

Page 39: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Auswertung sequenzieller Dateien

Abbildung 29 Zusatzfeld ZAZ

Abbildung 30 Zusatzfeld ZGEB_DAT

38

Page 40: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Das letzte Zusatzfeld soll den ausbezahlten Betrag mit Vorzeichen enthalten.In Abhängigkeit vom Feld BSID-SHKZG (Soll- und Haben-Kennzeichen) wirdder Wert im Feld BSID-DMBTR mit (-1) multipliziert. Bei 'S' bleibt der Wert,wie er ist, bei 'H' erhält der Betrag ein Vorzeichen (siehe Abbildung 31).

Abbildung 31 Zusatzfeld DMBTR_VZ

Abbildung 32 Listausgabe

39

Page 41: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Auswertung sequenzieller Dateien

In Abbildung 32 ist die Listausgabe einer Query zu unserem Beispiel zusehen. Die Übernahme der Daten hängt von der Art der Textdatei im Datei-system ab. Entscheidend ist, ob es sich um eine Datei mit fester Satzlängeoder eine Datei mit Trennzeichen handelt.

ZJCL_SEQ01 (Datei mit fester Satzlänge)

Betrachten wir als Erstes den Fall einer Datei mit fester Satzlänge. In diesemFall benötigen wir eine interne Tabelle mit dem Aufbau und Inhalt der Dateiim Dateisystem. Wie bei jeder anderen Verwendung von internen Tabellendefinieren wir auch in diesem Fall noch einen Arbeitsbereich. Dies nehmenwir im Coding-Abschnitt DATA vor. Außerdem definieren wir die Hilfsvaria-blen Nachname, Vorname, Tag, Monat und Jahr (siehe Abbildung 33).

Abbildung 33 Zeitpunkt DATA

Zum Coding-Abschnitt INITIALIZATION öffnen wir die Datei im Dateisystemzum Lesen. Das Coding entnehmen Sie Abbildung 34.

40

Page 42: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Abbildung 34 Zeitpunkt INITIALIZATION

Zum Zeitpunkt START-OF-SELECTION übertragen wir den Inhalt der Datei indie interne Tabelle. Dazu verwenden wir eine DO-Schleife, in der wir dieDatei satzweise lesen und in den Arbeitsbereich schreiben. Solange ein neuerSatz gefunden wird, wird der Inhalt des Arbeitsbereichs an die interneTabelle gehängt. Falls kein neuer Satz gefunden wird, wird die DO-Schleifeverlassen (durch das Schlüsselwort exit). Abschließend muss die Dateigeschlossen werden (close dataset). Das gesamte Coding entnehmen SieAbbildung 35.

Abbildung 35 Zeitpunkt START-OF-SELECTION

ZJCL_SEQ02 (Datei mit Trennzeichen)

Betrachten wir als Nächstes den Fall einer Datei mit Trennzeichen. Auch indiesem Fall benötigen wir eine interne Tabelle mit dem Aufbau und Inhaltder Datei im Dateisystem. Wie jedes Mal bei internen Tabellen definierenwir noch einen Arbeitsbereich. Dies nehmen wir im Coding-Abschnitt DATAvor. Außerdem definieren wir auch hier die Hilfsvariablen Nachname, Vor-name, Tag, Monat und Jahr. Zusätzlich benötigen wir noch eine interne

41

Page 43: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Auswertung sequenzieller Dateien

Tabelle, die nur aus einem Feld besteht. Dieses Feld hat den Typ Characterund die Länge der Summe aller Felder der ersten internen Tabelle. Auchhierzu definieren wir einen Arbeitsbereich. Das Coding finden Sie in Abbil-dung 36.

Abbildung 36 Zeitpunkt DATA

Zum Coding-Abschnitt INITIALIZATION öffnen wir die Datei im Dateisystemzum Lesen. Das Coding entnehmen Sie Abbildung 37.

Abbildung 37 Zeitpunkt INITIALIZATION

Auch hier übertragen wir den Inhalt der Datei zum Zeitpunkt START-OF-SELECTION in die interne Tabelle. Dazu verwenden wir eine DO-Schleife, in

42

Page 44: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

der wir die Datei satzweise lesen und in den Arbeitsbereich schreiben.Solange ein neuer Satz gefunden wird, wird der Inhalt des Arbeitsbereichs andie interne Tabelle gehängt. Falls kein neuer Satz gefunden wird, wird die DO-Schleife verlassen (durch das Schlüsselwort exit). Abschließend muss dieDatei geschlossen werden (close dataset). Das gesamte Coding entnehmenSie Abbildung 38. Anschließend splitten wir einen Datensatz der zweiteninternen Tabelle anhand des Trennzeichens in die einzelnen Felder der ers-ten internen Tabelle (split ... at ... into).

Abbildung 38 Zeitpunkt START-OF-SELECTION

Überwachung der Liefertermine

Aufgabenstellung

Die mit den Selektionswerten erzeugte Liste soll als ALV-Liste ausgegebenwerden und die folgenden Informationen enthalten:

� die Nummer des Einkaufsbelegs sowie die Position

� das Lieferdatum sowie den Typ der Angabe des LieferdatumsDas Lieferdatum kann in drei Arten hinterlegt werden, als Tagesdatum, alsWochenangabe und als Monatsangabe.

� das späteste LieferdatumBei der Angabe als Tagesdatum ist das kein Problem. In diesen Fällen istdas späteste Lieferdatum das in der Tabelle hinterlegte Datum. Bei der

43

Page 45: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Überwachung der Liefertermine

Angabe als Kalenderwoche wie auch bei der Angabe als Kalendermonatsteht in der SAP-Tabelle der jeweils erste, das heißt der erste Tag derWoche (immer das Datum des Montags) bzw. der erste Tag des Monats.Das späteste Lieferdatum ist jedoch der jeweils letzte Tage, das heißt beieiner Kalenderwoche der Freitag und bei einem Kalendermonat der letztedes Monats.

� das Material, die gesamte davon bestellte Menge, die bereits gelieferteMenge und die noch offene Menge einer Bestellposition

� das Werk, die Einkaufsorganisation, die Einkäufergruppe und der jewei-lige Lieferant

Die Liste soll nach den Belegnummern der Einkaufsbelege (Bestellungen) sor-tiert sein.

Datenquelle

Als Datenquelle dient ein Tabellen-Join aus den Tabellen EKET (Lieferplanein-teilungen), EKPO (Einkaufsbelegposition) und EKKO (Einkaufsbelegkopf). DieTabellen sind jeweils über die Belegnummer des Einkaufsbelegs verbunden(siehe Abbildung 39).

Abbildung 39 Join-Definition

Feldgruppen

Die vier Feldgruppen 01 (Lieferplaneinteilungen), 02 (Einkaufsbelegposi-tion), 03 (Einkaufsbelegkopf) und 90 (Zusätze) sind anzulegen. Anschließendsind die Felder wie in Abbildung 40 den vier Feldgruppen zuzuordnen.

44

Page 46: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Abbildung 40 Feldgruppen mit zugeordneten Feldern

Zusatzfelder

In diesem Beispiel benötigen wir zwei Zusatzfelder: Die einzelnen Zusatzfel-der sind das späteste Lieferdatum und die noch offene Menge. Dazu definie-ren wir zunächst im Coding-Abschnitt DATA eine Hilfsvariable.

Abbildung 41 Zeitpunkt DATA

Das erste Zusatzfeld ist die offene Menge zu einer Bestellposition. Das Felddefinieren wir über eine Referenz auf das Datenbankfeld eket-menge. DerWert wird als Differenz zwischen bestellter Menge (eket-menge) und bereitsgelieferter Menge (eket-wemng) ermittelt. Das dazugehörende Coding findenSie in Abbildung 42.

45

Page 47: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Überwachung der Liefertermine

Abbildung 42 Zusatzfeld OFFEN

Das zweite Zusatzfeld ist das späteste Lieferdatum, das abhängig vom Typ desLieferdatums ermittelt wird. Bei Angabe des Kalendermonats wird derMonatsletzte mithilfe des Funktionsbausteins HR_HCP_GET_LAST_DAY_OF_MONTH bestimmt. Wir übergeben dem Funktionsbaustein das Datum eket-eindt aus der Tabelle eket und erhalten das Datum des letzten Tages desMonats zurück. Mithilfe der Hilfsvariablen, die im Coding-Abschnitt DATAdefiniert wurde, wird der Wert in das Zusatzfeld übertragen.

Bei Angabe der Kalenderwoche steht in der Tabelle eket das Datum desMontags, wir benötigen jedoch den Freitag. Somit müssen wir in diesen Fälleauf das angegebene Datum vier Tage addieren, um zum Freitag zu gelangen.Dazu nutzen wir den Funktionsbaustein ADD_TIME_TO_DATE. Diesem über-geben wir das Datum eket-eindt und die Anzahl der Tage, das heißt vier.Der Baustein liefert das Ergebnis, in diesem Fall also das Datum des Freitagszurück. Wieder unter Zuhilfenahme der Hilfsvariablen wird dieses Datumder Zusatzvariablen zugewiesen.

Bei Angabe als Tagesdatum ist das späteste Lieferdatum gerade das Datumaus der Tabelle eket. Das Coding ist in Abbildung 43 zu sehen.

46

Page 48: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

ABAP für InfoSets

Abbildung 43 Zusatzfeld L_DAT

Abschließend sehen Sie in Abbildung 44 die Listausgabe zu unserem Bei-spiel.

Damit sind Sie am Ende dieses Kapitels angelangt. Ich hoffe, dass Sie eineVorstellung davon bekommen haben, wie man durch Einsatz von SAPQueries auch Problemstellungen lösen kann, die Sie bisher einem Program-mierer übergeben hätten.

47

Page 49: ABAP für InfoSets - Amazon Simple Storage Service · 2014-05-28 · ABAP für InfoSets Das SAP-System R/3 wurde zum überwiegenden Teil in der von der SAP AG ... SY-UZEIT aktuelle

Überwachung der Liefertermine

Abbildung 44 Listausgabe

Drucken Sie das Kapitel aus, und legen Sie es in die oberste Schublade IhresSchreibtischs. So haben Sie es immer griffbereit, wenn Sie den einen oderanderen Begriff bzw. die genaue Syntax einer Anweisung nachschlagenmöchten. Viel Erfolg bei Ihren Herausforderungen!

48