Einstieg in ABAP - ReadingSample - Microsoft · 2018. 3. 24. · SAP PRESS Einstieg in ABAP Die...
Transcript of Einstieg in ABAP - ReadingSample - Microsoft · 2018. 3. 24. · SAP PRESS Einstieg in ABAP Die...
SAP PRESS
Einstieg in ABAP
Die Neuauflage von »Discover ABAP«.
Bearbeitet vonKarl-Heinz Kühnhauser, Thorsten Franz
4., aktualisierte und erweiterte Auflage 2015. Buch. 575 S. KartoniertISBN 978 3 8362 3803 8
Format (B x L): 17 x 23 cm
Weitere Fachgebiete > EDV, Informatik > Datenbanken, Informationssicherheit,Geschäftssoftware > SAP
schnell und portofrei erhältlich bei
Die Online-Fachbuchhandlung beck-shop.de ist spezialisiert auf Fachbücher, insbesondere Recht, Steuern und Wirtschaft.Im Sortiment finden Sie alle Medien (Bücher, Zeitschriften, CDs, eBooks, etc.) aller Verlage. Ergänzt wird das Programmdurch Services wie Neuerscheinungsdienst oder Zusammenstellungen von Büchern zu Sonderpreisen. Der Shop führt mehr
als 8 Millionen Produkte.
LeseprobeIn dieser Leseprobe üben Sie das Grundrechnen mit Variablen: Es handelt sich um das vollständige Kapitel 4 des Buches, »Felder und Berechnungen«. Sie betrachten die Eigenschaften von Datenobjek-ten und lernen den Unterschied zwischen Kompatibilität und Kon-vertibilität kennen. Gleichzeitig eignen Sie sich einige Kniffe für eine bessere Listaufbereitung an. Die Leseprobe umfasst darüber hinaus das Inhaltsverzeichnis sowie den Index des Buches.
Karl-Heinz Kühnhauser, Thorsten Franz
Einstieg in ABAP575 Seiten, broschiert, 4. Auflage 2015 39,90 Euro, ISBN 978-3-8362-3803-8
www.sap-press.de/3878
Kapitel 4: »Felder und Berechnungen«
Inhalt
Index
Die Autoren
Leseprobe weiterempfehlen
Wissen aus erster Hand.
107
Als Nächstes wenden wir uns der Welt der Zahlen zu. Erfahren Sie in diesem Kapitel, wie Sie Berechnungen in ABAP-Programmen durchführen.
4 Felder und Berechnungen
Sie sollten mit allem rechnen – im SAP-System können Sie das sogarmit Datumswerten und Zeichenketten. In diesem Kapitel beginnenwir jedoch mit dem Einfachsten: dem Rechnen mit Zahlen.
Vorbereitungen
Bevor wir beginnen, sollten Sie entscheiden, ob Sie für die ersten Berech-nungen in ABAP einen neuen Report anlegen oder diese einfach in unse-rem Report aus Kapitel 3, »Programmieren im ABAP Editor«, einbauen.Beides ist natürlich möglich – doch nicht zuletzt für eine bessere Über-sichtlichkeit sollten Sie mit einem frischen Report arbeiten. Die Neuanlageeines Reports wird in Abschnitt 3.1, »ABAP-Report anlegen«, beschrieben.Als Alternative können Sie aber auch einen bestehenden Report kopierenund ihn anschließend modifizieren. Auf diese Weise bleibt der alte Reporterhalten, und der neue wird unter einem eigenen Namen abgespeichert.
4.1 Report vorbereiten
Report kopieren und modifizieren
Starten Sie im Einstiegsbild für den ABAP Editor (SAP Menü � Werk-
zeuge � ABAP Workbench � Entwicklung � ABAP Editor). Im Start-bildschirm geben Sie als Programmnamen den Namen unseres letz-ten Reports ein, »Z_TEILNEHMERLISTE01«. Anschließend können
3803-8.book Seite 107 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
108
4
Sie entweder über Programm � Kopieren oder über den ButtonKopieren ( , (Strg) + (F5)) den Kopiervorgang starten (siehe Abbil-dung 4.1).
Abbildung 4.1 ABAP-Programm kopieren
Sie werden nach dem Namen des Zielprogramms gefragt (siehe Abbil-dung 4.2). Dieser muss sich vom Namen des Quellprogramms unter-scheiden, und es gelten für ihn selbstverständlich auch die Namens-konventionen, wie sie in Abschnitt 2.1.2, »Tabelle anlegen undpflegen«, beschrieben werden.
Abbildung 4.2 Namen eines Zielprogramms auswählen
Haben Sie den Namen des Zielprogramms eingetragen, setzen Sie denKopiervorgang über die Schaltfläche Kopieren oder die (¢)-Tastefort. Anschließend haben Sie die Wahl, neben dem Quellcode undden Textelementen auch andere Elemente des alten Programms mitzu kopieren (siehe Abbildung 4.3).
3803-8.book Seite 108 Freitag, 31. Juli 2015 3:10 15
Report vorbereiten
109
4.1
Abbildung 4.3 Elemente eines ABAP-Reports mit kopieren
Für den Anfang können Sie, ohne ein Häkchen zu setzen, einfachüber die Schaltfläche Kopieren den Prozess fortführen und unserenneuen Report als Lokales Objekt abspeichern. Das System zeigtIhnen anschließend wieder das Einstiegsbild des ABAP Editors mitdem neuen Programmnamen. Das alte Programm wurde mit allengewählten Elementen kopiert; beachten sollten Sie nur, dass der neueQuellcode noch inaktiv ist.
Elemente kopieren
Hätten Sie beispielsweise für den alten Quellcode eine Dokumentationhinterlegt, könnte diese ausgewählt und kopiert werden. Alle Elementedieses Fensters sind keine eigenen Objekte der Datenbank, sondern hän-gen fest am Report, d. h., dass beispielsweise die Dokumentation für denReport nicht mehrfach verwendbar ist (etwa für andere Reports), wie esbei einem Datenelement der Fall wäre. Ein Datenelement ist dagegen eineigenes Objekt und damit mehrfach verwendbar.
Über den Ändern-Button ( ) gelangen Sie in den Änderungsmodusfür den Quellcode. Was Sie jetzt sehen, ist nicht neu: Den alten Quell-code kennen Sie bereits. Auffallen könnte Ihnen aber, dass dieREPORT-Anweisung nicht mehr ganz korrekt ist. Sie wurde zwar rich-tig kopiert, doch da sich der Programmname im Operanden geänderthat, sollte es der erste Arbeitsschritt im neuen Quellcode sein, denNamen auf unseren neuen Programmnamen umzuschreiben: Z_TEIL-NEHMERLISTE02.
3803-8.book Seite 109 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
110
4
Zeilenblock in Kommentarzeilen umwandeln
Was machen Sie mit den Programmzeilen, die Sie nicht mehr benötigen?Es gibt zwei Möglichkeiten: Entweder Sie löschen die Zeilen, oder Sie wan-deln sie in Kommentarzeilen um (»auskommentieren«). Vorsichtige Ent-wickler werden sich zunächst für die zweite Möglichkeit entscheiden, ver-meintlich überflüssige Anweisungen in Kommentarzeilen umzuwandeln,die man vielleicht für die eine oder die andere Anweisung doch noch ein-mal braucht – man kann ja nie wissen.
Deshalb gehen auch wir so vor und wandeln vorsichtshalber zunächstdie alten Anweisungen in Kommentarzeilen um. Hierzu markieren Siemit dem Cursor den zu bearbeitenden Zeilenblock wie in jedem Editorüblich mit den Cursortasten oder mit der Maus. Der markierte Blockwird nun dunkelblau hinterlegt dargestellt (siehe Abbildung 4.4)
Abbildung 4.4 Block markieren
Anschließend wandeln Sie über Hilfsmittel � Block/Ablage � Kom-
mentar-* einfügen den gesamten Block in Kommentarzeilen um(siehe Abbildung 4.5). Als Ergebnis sind alle Zeilen des Blocks inSpalte 1 mit einem Stern als Kommentarzeilen gekennzeichnet. Wareine Zeile bereits vorher eine Kommentarzeile, hat sie jetzt zwei füh-rende Sterne.
3803-8.book Seite 110 Freitag, 31. Juli 2015 3:10 15
Report vorbereiten
111
4.1
Abbildung 4.5 Block in Kommentarzeilen umwandeln
Aus Abbildung 4.5 können Sie auch ableiten, wie Sie bei Bedarf einenBlock von Kommentarzeilen analog wieder in Anweisungszeilenumwandeln: Hierzu markieren Sie den Block sowie das Blockendeund wählen Hilfsmittel � Block/Ablage � Kommentar-* löschen.
Zeilenblock löschenDa wir für die Anweisungen ab Zeile 10 aber tatsächlich im Folgen-den keine Verwendung mehr haben, können Sie den Zeilenblockruhig löschen. Hierfür markieren Sie zunächst wieder den entspre-chenden Block und drücken dann die (Entf)-Taste auf Ihrer Tastatur.
Sichern nicht vergessen!
Vergessen Sie nicht, die Veränderung am Quellcode nach wichtigenArbeitsschritten oder vor Arbeitspausen über den Sichern-Button ( ) zuspeichern.
Spreu vomWeizen trennen
Wir können uns nun der eigentlichen Aufgabe dieses Kapitels zuwen-den: Wir verarbeiten nun zwei Zahlen mit ABAP mithilfe der vier
3803-8.book Seite 111 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
112
4
Grundrechenarten und schreiben das Ergebnis in eine Liste. Hierzusind drei Arbeitsschritte erforderlich:
1. die Felder für die Zahlen deklarieren
2. das Ergebnis berechnen
3. das Ergebnis ausgeben
4.2 Felder deklarieren
Wie in der Praxis müssen auch bei unserer TeilnehmerverwaltungInhalte einer oder mehrerer Tabellen im Report durch Berechnungenweiterverarbeitet, ergänzt oder ausgewertet werden. Hierzu benöti-gen wir im Report eigene Felder.
Felder verarbeiten Auch ABAP verfügt über Regeln, auf welche Weise Felder verarbeitetwerden. Das System muss die Zahlen in unserem Beispiel zwischen-speichern, ablegen und sie sich für folgende Verarbeitungsschrittewieder zurückholen. Hierzu werden die Werte an einem Ort bzw.einer Datenadresse im Speicher temporär abgelegt.
In ABAP heißen diese Orte Felder oder Datenobjekte. Sind die Inhalteder Datenobjekte durch ABAP-Anweisungen veränderbar, sprichtman von Variablen, sind sie es nicht, spricht man von Konstanten.
4.2.1 Variablen deklarieren
Namen vergeben Bei der Namensvergabe für Variablen müssen Sie Folgendes beach-ten:
� Der Name soll mit einem Buchstaben beginnen; er darf nicht aus-schließlich aus Ziffern bestehen.
� Der Name darf maximal 30 Zeichen lang sein.
� Der Name soll möglichst keine Sonderzeichen enthalten, bis auf denUnterstrich. Ausdrücklich verbotene Sonderzeichen sind Plus (+),Komma (,), Doppelpunkt (:), Klammer auf (() und Klammer zu ()).
� Für den Namen dürfen keine reservierten Wörter für ABAP-Anwei-sungen oder Zusätze verwendet werden.
3803-8.book Seite 112 Freitag, 31. Juli 2015 3:10 15
Felder deklarieren
113
4.2
Sprechende Variablen
Die Namen der Variablen sollten darüber hinaus sprechend, d. h. selbster-klärend sein. Nennen Sie die Variable für einen Familiennamen z. B. FAMI-LIENNAME und nicht A1. Legen Sie großen Wert auf Lesbarkeit, und seienSie dementsprechend gnädig mit Dritten – Sie könnten es in wenigenWochen selbst sein.
Felder haben einen symbolischen Namen (z. B. ZAHL01), eine defi-nierte Länge und einen Datentyp. Über die symbolischen Namenwerden die Speicheradressen angesprochen, und die dort abgelegtenInhalte können gelesen und verarbeitet werden. Für die Verarbeitunggelten je nach Datentyp entsprechende Regeln, die allerdings vonProgrammiersprache zu Programmiersprache sehr unterschiedlichsind.
DATASollen sich die Inhalte unserer Zahlenfelder verändern können,deklarieren wir für den Einstieg unsere Felder mit der DATA-Anwei-sung. Für unsere Berechnungen bieten sich vorerst zwei Datentypenfür die Variablen an, nämlich ganze Zahlen (Integer) und Dezimal-zahlen.
TYPE iSoll das Feld ZAHL01 eine ganze Zahl enthalten, lautet die Anweisungfolgendermaßen:
DATA zahl01 TYPE i.
TYPE pSoll das Feld ZAHL01 hingegen eine Dezimalzahl mit zwei Nachkom-mastellen sein, lautet die Anweisung:
DATA zahl01 TYPE p DECIMALS 2.
Bei der Entscheidung, welche Deklaration sinnvoller ist, kommt esdemnach auf den Verwendungszweck an. Felder vom Typ i werdenüblicherweise für Zähler oder Stückzahlen verwendet. Felder vomTyp p sind für arithmetische Berechnungen mit Nachkommastellenüblich. Wichtig ist, vor der weiteren Programmierung zu überlegen,welche Rechen- und Anzeigegenauigkeit bei der gewünschtenBerechnung erforderlich ist, weil sich die Zahl der nötigen Nachkom-mastellen hiernach richtet – denken Sie z. B. an Wechselkurse. FünfNachkommastellen sind in solchen Fällen keine Seltenheit, wogegendie 14 erlaubten Nachkommastellen eher selten ausgereizt werden.
3803-8.book Seite 113 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
114
4
ElementareDatentypen
Beide Datentypen, i und p, sind für ABAP elementare Datentypenmit fester Länge. Deshalb müssen Sie die Feldlänge hier nicht explizitangeben. Die beiden Datentypen sind zwei von acht dieser in ABAPeingebauten elementaren Datentypen fester Länge.
Umfassenderes Typkonzept
Einen elementaren Datentyp variabler Länge werden Sie noch kennenler-nen. Für ein leichteres Verständnis beschränken wir uns vorerst auf diewichtigsten Datentypen. Auf die Darstellung von Referenzdatentypen undkomplexen Datentypen wird verzichtet. Sie sollten jedoch im Hinterkopfbehalten, dass das Typkonzept in ABAP für fortgeschrittene Anwendungenviel umfassender ist, als hier dargestellt.
Möchten Sie zwei Variablen gleichlautend deklarieren, müssen Siezwei Anweisungszeilen schreiben und darauf achten, dass Sie diesel-ben Attribute verwenden, beispielsweise:
DATA zahl01 TYPE p DECIMALS 2.DATA zahl02 TYPE p DECIMALS 2.
LIKE Dies hat allerdings den entscheidenden Nachteil, dass Sie immerselbst dafür sorgen müssen, die Deklaration von ZAHL02 nachzupfle-gen, falls sich die Deklaration von ZAHL01 ändert. Bei vielen abhängi-gen Deklarationen wird dies schnell zu einer sehr mühseligen undlangatmigen Arbeit. Einfacher ist es, bei ZAHL02 auf die Deklarationvon ZAHL01 zu verweisen. Dies geschieht mit dem Zusatz LIKE:
DATA zahl01 TYPE p DECIMALS 2.DATA zahl02 LIKE zahl01.
Damit ist gewährleistet, dass die Deklaration von ZAHL02 immer rich-tig bleibt, da sie so an die Deklaration von ZAHL01 geknüpft ist. Sollteeinmal ein Anlass bestehen, die Zahl der Dezimalstellen beispiels-weise von zwei auf vier zu erhöhen, muss nur die Deklaration vonZAHL01 geändert werden; die Deklaration von ZAHL02 wird automa-tisch angepasst. Natürlich gilt dies entsprechend für alle Variablen ineinem Report, die auf die Deklaration von ZAHL01 verweisen.
Inkonsistenzenvermeiden
Auf diese Weise können Sie zwar erreichen, dass Inkonsistenzeninnerhalb eines Reports vermieden werden, aber falls in verschiede-nen Reports gleichlautende Deklarationen von Variablen benötigt
3803-8.book Seite 114 Freitag, 31. Juli 2015 3:10 15
Felder deklarieren
115
4.2
werden, müssen Sie sich bei der Deklaration beispielsweise auf einTabellenfeld im ABAP Dictionary beziehen. Möchten Sie im Reportdie Variable LAUFENDE_NUMMER genauso deklarieren wie das FeldTNUMMER der Tabelle ZTEILNEHMER, schreiben Sie:
DATA laufende_nummer TYPE zteilnehmer-tnummer.
Mit dieser Methode müssen Sie in den einzelnen Reports keine Anpas-sung dieser Variablen mehr vornehmen. Sollte sich je eine Änderunghinsichtlich der Länge ergeben, betrifft sie ausschließlich die Domänedes Tabellenfeldes. Alle betroffenen Reports werden automatischbeim ersten Start nach der Änderung nachgeneriert, und kein einzigerQuellcode muss aus diesem Grund mehr geändert werden.
Postleitzahlen
Der Praxisbezug dieses Vorgehens wird schnell deutlich, wenn Sie sichdaran erinnern, dass in der Bundesrepublik die Postleitzahlen früher vier-stellig waren und im Jahr 1993 auf fünf Stellen umgestellt wurden. Teil-weise mussten Entwickler in Hunderten kundenspezifischer Programmedas Postleitzahlenfeld suchen und umstellen, die Programme wieder bin-den und kompilieren. Dies war eine absolut lästige Angelegenheit – manglaubt gar nicht, wie viele verschiedene Möglichkeiten es gibt, um dasWort »Postleitzahl« abzukürzen und eine Variable zu deklarieren! Mitunserer Methode wäre das Problem schnell gelöst gewesen.
Ähnliche Probleme treten auf, wenn Unternehmen – beispielsweisebedingt durch eine Fusion – ihre Organisation erheblich umstellen undplötzlich das früher einstellige Regionskennzeichen nicht mehr ausreicht,um knapp fünfhundert Regionen zu unterscheiden, in denen das Unter-nehmen tätig ist. Oder, um zum Beispiel Postleitzahl zurückzukehren, dasUnternehmen wird international tätig und muss neben rein numerischenPostleitzahlen auch englische Postleitzahlen verwalten, die Buchstabenenthalten.
VALUEFür jeden Datentyp vergibt das System Initialwerte. Für die Daten-typen i und p belegt das SAP-System das Feld zunächst mit demWert 0. Manchmal kann es jedoch sehr nützlich sein, eine Variableselbst mit einem Startwert zu versehen – hierzu verwenden Sie beider DATA-Anweisung den Zusatz VALUE. Soll beispielsweise die Varia-ble ZAHL01 eine ganze Zahl darstellen und mit dem Wert 5 vorbelegtwerden, lautet die Anweisung:
3803-8.book Seite 115 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
116
4
DATA zahl01 TYPE i VALUE 5.
Bei einer Vorbelegung mit dem negativen Wert –105 müsste dasnegative Vorzeichen mitgeschrieben werden, und die Anweisungwürde entsprechend lauten:
DATA zahl01 TYPE i VALUE -105.
Initialwerte mitNachkommastellen
Auch dies ist relativ einfach. Soll die Variable ZAHL01 hingegen eineDezimalzahl mit zwei Nachkommastellen sein, wird das Ganze schonetwas aufwendiger. Lautet der Plan, die Variable ZAHL01 beispiels-weise mit dem Wert 3,14 vorzubelegen, würde man eigentlich eineAnweisung vermuten wie:
DATA zahl01 TYPE p DECIMALS 2 VALUE 3,14.
Dies funktioniert aber leider nicht: Der Doppelpunkt nach DATA fehlt,und das Komma ist für einen Kettensatz und eine zweite Anweisungreserviert, in diesem Fall:
DATA 14.
Dies ergäbe leider auch keinen Sinn. Es funktioniert auch nicht, fürdas Dezimaltrennzeichen anstelle des Kommas einen Punkt einzuset-zen. Grundsätzlich ist diese Idee ausgezeichnet, weil das Systemintern als Dezimaltrennzeichen tatsächlich einen Punkt verwendet,aber wie Sie wissen, ist der Punkt für das Ende einer Anweisungreserviert. Für das System würden dann zwei Anweisungen in einerZeile stehen, wobei die zweite keinen Sinn ergibt.
Lösung: Literal Deshalb ist es formal korrekt, wenn Sie den Vorbelegungswert in einLiteral schreiben:
DATA zahl01 TYPE p DECIMALS 2 VALUE '3.14'.
Bei der Vorbelegung mit der negativen Zahl –4,56 lautet die richtigeSyntax entsprechend:
DATA zahl01 TYPE p DECIMALS 2 VALUE '-4.56'.
4.2.2 Konstanten deklarieren
CONSTANTS Der Vollständigkeit halber erwähnen wir hier, dass wir für die Dekla-ration von Konstanten, d. h. Feldern mit gleichbleibendem unverän-
3803-8.book Seite 116 Freitag, 31. Juli 2015 3:10 15
Grundrechenarten
117
4.3
derten Inhalt, mit einer eigenen Anweisung namens CONSTANTS arbei-ten. Damit werden wir denjenigen Fällen gerecht, in denengewährleistet sein muss, dass ein Feldinhalt während der Laufzeit desReports unverändert bleiben soll. Stoßen Sie in der Praxis auf ein sol-ches Beispiel, ist die CONSTANTS-Anweisung geeigneter als die DATA-Anweisung. Das System unterstützt dieses Konzept dadurch, dass beiVeränderungsversuchen dieser Felder Syntax- oder Laufzeitfehlergeneriert werden.
Einfache arithmetische Operationen
Da diese Anweisungen allerdings bis auf den Verwendungszweckweitgehend identisch sind, verzichten wir für den Einstieg auf dieCONSTANTS-Anweisung. Für einfache arithmetische Operationenkönnten unsere Deklarationen deshalb vorerst so aussehen:
DATA zahl01 TYPE p DECIMALS 2 VALUE '-4.56'.DATA zahl02 LIKE zahl01 VALUE '5.67'.DATA ergebnis LIKE zahl01.
Die Variable ZAHL01 gibt den Datentyp p und die Anzahl von zweiDezimalstellen vor. Außerdem wird der Variablen die negative Zahl –4,56 als Startwert zugewiesen. Die Variable ZAHL02 verweist hinsicht-lich des Typs und der Dezimalstellen auf die Variable ZAHL01 underhält als Startwert die Zahl 5,67. Die Variable ERGEBNIS verweist hin-sichtlich des Typs und der Dezimalstellen ebenfalls auf ZAHL01.
Der Vorteil dieser Schreibweise besteht darin, dass bei einer Ände-rung der Deklaration nur die Deklaration von ZAHL01 geändert wer-den muss, die Deklarationen von ZAHL02 und ERGEBNIS werden auto-matisch angepasst.
4.3 Grundrechenarten
Für die Addition, Subtraktion, Multiplikation und Division in ABAPhaben wir damit bereits alle erforderlichen Variablen deklariert.Arithmetische Operationen können Sie nun leicht über Zuweisungendurchführen: Soll beispielsweise der Inhalt der Felder ZAHL01 undZAHL02 addiert werden, schreiben Sie einfach:
ergebnis = zahl01 + zahl02.
3803-8.book Seite 117 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
118
4
MathematischerAusdruck
Formal ist anzumerken, dass rechts vom Gleichheitszeichen die arith-metische Operation selbst stehen muss. Das Ergebnis der Operationwird in das links vom Gleichheitszeichen stehende Feld eingetragen,die Felder ZAHL01 und ZAHL02 behalten auch nach der Berechnungihren alten Inhalt. Anders hingegen verhält es sich mit dem Feld linksvom Gleichheitszeichen: Im Feld ERGEBNIS steht nach der Berechnungnicht mehr der alte, sondern der neue Inhalt; der alte Inhalt des Fel-des wurde ersetzt.
Leerzeichen in arithmetischen Operationen
Darüber hinaus ist für die richtige Schreibweise der Umgang mit Leerzei-chen wichtig: Sie müssen sowohl vor als auch nach dem Gleichheitszei-chen sowie vor und nach dem Rechenzeichen stehen, im oberen Beispieldem Pluszeichen (+). Wenn Sie später einmal mit komplexeren Ausdrü-cken und mehreren Klammerebenen arbeiten, sollten Sie schon jetzt darandenken, dass in solchen Fällen auch vor und nach jeder Klammer ein Leer-zeichen stehen muss. Dabei muss es jeweils mindestens ein Leerzeichensein; die Eingabe mehrerer Leerzeichen schadet nicht weiter.
Der Grund für diese Schreibkonvention liegt darin, dass es Funktionengibt, die ohne Leerzeichen direkt an das Feld geschrieben werden. Damitdas System nun unterscheiden kann, ob es sich um eine arithmetischeOperation oder eine solche Funktion handelt, wird das Leerzeichen unbe-dingt benötigt.
Mit Festwertenarbeiten
Soll zum Inhalt der Variablen ZAHL02 ein Festwert, beispielsweise dieZahl 2, addiert werden, lautet die Anweisung:
zahl02 = zahl01 + 2.
Auch hier gilt die Regel, dass in der Variablen links vom Gleichheits-zeichen der alte Inhalt durch den neuen ersetzt wird. Natürlichkönnte man zum Inhalt derselben Variablen auch einen Festwertaddieren, beispielsweise um einen Zähler um 1 zu erhöhen. Dannwürde die Anweisung lauten:
zahl01 = zahl01 + 1.
Auch hier gilt wieder das gleiche Prinzip: Rechts vom Gleichheitszei-chen wird der Wert der Operation bestimmt, d. h. der Inhalt vonZAHL01 und 1 werden addiert und das Ergebnis der Operation in die
3803-8.book Seite 118 Freitag, 31. Juli 2015 3:10 15
Grundrechenarten
119
4.3
Variable links vom Gleichheitszeichen eingesetzt. Mit anderen Wor-ten: ZAHL01 erhält einen neuen Inhalt.
Für die Subtraktion, Multiplikation und Division lautet die Schreib-weise entsprechend:
ergebnis = zahl01 - zahl02.ergebnis = zahl01 * zahl02.ergebnis = zahl01 / zahl02.
Anweisungen mit Schlüsselwort
Als Rechenzeichen für Subtraktionen verwenden Sie das Minuszei-chen (-), für Multiplikationen das Sternchen (*) und für Divisionenden Schrägstrich (/). Anstelle von Rechenzeichen könnten wir auchdie Schlüsselwörter ADD, SUBTRACT, MULTIPLY und DIVIDE verwenden,die in der Praxis aber relativ selten anzutreffen sind; auch wir werdenim Folgenden darauf verzichten.
Damit haben Sie die Grundvoraussetzungen kennengelernt – und wirwenden uns den Details zu, denn hierin versteckt sich ja bekanntlichoft der Teufel. Beispielsweise haben nicht alle Felder die gleichenAttribute oder sind untereinander verträglich.
4.3.1 Kompatible und konvertible Datenobjekte
Kompatible und konvertible Datenobjekte
Verfügen Felder über die gleichen Attribute, spricht man von kompa-tiblen Datenobjekten, d. h. dass diese Felder in allen technischenEigenschaften (Typ, Feldlänge, Dezimalstellen) vollständig überein-stimmen. Sind die Attribute untereinander verträglich, spricht manvon konvertiblen Datenobjekten. Dabei müssen die Datentypen kon-vertiert, d. h. umgewandelt werden; Voraussetzung hierfür sind ent-sprechende Konvertierungsregeln. Falls die Konvertierung nichtmöglich ist, entstehen Syntax- oder Laufzeitfehler.
Automatische Umwandlung
Beruhigend ist, dass im SAP-System bereits zahlreiche Konvertie-rungsregeln hinterlegt sind (siehe Abschnitt 4.3.2, »Konvertierungs-regeln«). Das System wandelt bei entsprechenden Anweisungen nachdiesen Regeln automatisch von einem Datentyp in einen anderen um.Sofern diese Regeln die von uns gewünschten Ergebnisse erzielen,haben wir kein Problem. Leider ist dies aber nicht immer der Fall,und leider existieren auch nicht für alle denkbaren KonstellationenKonvertierungsregeln.
3803-8.book Seite 119 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
120
4
Fehlerquellen
Zähneknirschend muss außerdem hingenommen werden, dass für solcheFehler überwiegend die Entwickler selbst verantwortlich sind – denn es gibtz. B. keinen logischen Grund dafür, in einem Datumsfeld Sternchen undSonderzeichen speichern zu wollen. Solche Syntax- oder Laufzeitfehlergeschehen immer wieder einmal auch Fortgeschrittenen, und zwar insbe-sondere dann, wenn bereits bestehende Anwendungen modifiziert werdenmüssen. Auch bei einer Datenübernahme aus anderen Systemen tauchensolche Fehler auf – für einen Einsteiger erst einmal kein Grund zur Panik.
4.3.2 Konvertierungsregeln
Was geschieht,wenn ...
Die Konvertierungsregeln legen fest, wie der Inhalt eines Quellfeldes inein Zielfeld eingetragen wird. Quellfelder können verschiedene Daten-typen haben, wie die bereits vorgestellten vom Typ p für gepackte undTyp i für ganze Zahlen. Da es, wie erwähnt, auch weitere Datentypenfür Datums- und Zeitfelder oder Zeichenketten gibt, legen die Konver-tierungsregeln pro Datentyp genau fest, wie der Inhalt des Quellfeldesin das Zielfeld eingestellt wird. Was geschieht, wenn Sie eine gepackteZahl in ein Integerfeld stellen, was geschieht, wenn Sie eine gepackteZahl zum Inhalt eines Datumsfeldes addieren, oder was geschieht,wenn Sie eine gepackte Zahl in ein Character-Feld schreiben? Lassen Sieuns hierzu eine Konvertierungsregel als Beispiel ansehen.
Dezimalzahlin ganze Zahl
umwandeln
Ist der Quelltyp ein Datenobjekt vom Typ p und der Zieltyp einDatenobjekt vom Typ i (eine ganze Zahl), rundet das System die Dezi-malstellen des Quellfeldes und stellt den Inhalt rechtsbündig in dasZielfeld. Ist das Zielfeld von seiner Länge her ausreichend, wird linksmit Nullen aufgefüllt, anderenfalls kommt es zu einem Überlauf bzw.Laufzeitfehler. Stellen Sie beispielsweise die gepackte Zahl 4,44 in einIntegerfeld, hat ein Integerfeld danach den Inhalt 4; stellen Sie diegepackte Zahl 5,55 in ein Integerfeld, hat es den Inhalt 6.
Konvertierungverschiedener
Datentypen
Falls in einer numerischen Operation mehrere verschiedene Daten-typen vorkommen, konvertiert ABAP vor dem Ausführen der Opera-tion alle Datentypen in den höchsten vorkommenden Datentyp, führtdann die Operation mit den konvertierten Werten aus und stelltanschließend das Ergebnis – eventuell wieder über eine Konvertie-rungsregel – in das Ergebnisfeld.
3803-8.book Seite 120 Freitag, 31. Juli 2015 3:10 15
Grundrechenarten
121
4.3
Ganze und gepackte Zahlen sowie Exponentialzahlen
Sollten beispielsweise ganze Zahlen, gepackte Zahlen und Exponentialzah-len in einer Operation vorkommen, würden die Exponentialzahlen denDatentyp auf höchster Ebene darstellen. Erst würden alle ganzen Zahlen ingepackte Zahlen umgewandelt, dann alle Zahlen in Exponentialzahlen,und schließlich würde die Operation mit Exponentialzahlen berechnet.Anschließend würde gemäß den Konvertierungsregeln der Wert der Expo-nentialzahlen in das Ergebnisfeld eingetragen. Sie können sich wahr-scheinlich gut vorstellen, dass die Rechengenauigkeit schon durch denDatentyp des Ergebnisfeldes beeinflusst werden kann.
Um sich das Leben nicht zu erschweren, sollten Sie von Anfang andarauf achten, Ihre Datenobjekte möglichst kompatibel zu halten.
COMPUTEDer Vollständigkeit halber erwähnen wir hier das COMPUTE-Schlüssel-wort, das für numerische Operationen das ursprüngliche ABAP-Kom-mando ist. Die Schreibweise für eine Addition unter Zuhilfenahmedes Schlüsselwortes COMPUTE lautet:
COMPUTE ergebnis = zahl01 + zahl02.
Wie Sie sehen, ist die Anweisung nur länger, und die Lesbarkeitwird nicht unbedingt erhöht. Glücklicherweise ist das SchlüsselwortCOMPUTE optional und wird in der Praxis – außer für Recherche-zwecke – kaum verwendet; die meisten Entwickler bevorzugen dieverkürzte Schreibweise, die intern vom System exakt gleich behandeltwird, und auch wir arbeiten im Folgenden ohne das SchlüsselwortCOMPUTE:
ergebnis = zahl01 + zahl02.
Gut zu wissen …
Es gibt allerdings einen Fall, in dem es notwendig ist zu wissen, dass esdie COMPUTE-Anweisung gibt: Falls Sie im System die Dokumentation zuselten benötigten Funktionen suchen, finden Sie diese nämlich nur beider COMPUTE-Anweisung.
Ab SAP NetWeaver 7.0 EHP 2 bzw. SAP NetWeaver 7.3 erlaubt dieCOMPUTE-Anweisung den Zusatz EXACT, was bei Berechnungen mit dezi-malen Gleitpunktzahlen ein besonderes Verhalten bewirkt. Dieser Zu-satz ist nur im Zusammenhang mit dem ausgeschriebenen SchlüsselwortCOMPUTE verfügbar.
3803-8.book Seite 121 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
122
4
4.3.3 Besonderheiten bei der Division
Verschiedene Fälle Für Berechnungen in ABAP stellen Addition, Subtraktion und Multi-plikation kein weiteres Problem dar; nur die Division sollten wir unsnoch etwas genauer ansehen. Es gibt Fälle, in denen Sie ein Divisions-ergebnis mit Nachkommastellen wünschen, aber auch Fälle, in denenSie ganzzahlig ohne Rest teilen möchten. Vielleicht interessiert unsaber auch nur der Rest einer solchen Division. Für diese verschiede-nen Varianten gibt es in ABAP auch verschiedene Anweisungen.
Der einfachste Fall einer Division wird – wie bereits erläutert – durchden Schrägstrich (/) dargestellt:
DATA zahl01 TYPE p DECIMALS 2 VALUE '4.56'.DATA zahl02 LIKE zahl01 VALUE '5.67'.DATA ergebnis LIKE zahl01.ergebnis = zahl02 / zahl01.
Rechengenauigkeit Wenn Sie das Ergebnis mit dem Taschenrechner ausrechnen, erhaltenSie die Zahl 1,243421053. Wie verhält sich ABAP? Alle Variablensind gleichlautend deklariert. Eine gepackte Zahl hat maximal 16Bytes, dies bedeutet 32 Stellen, inklusive Vorzeichen. Das Systemwürde das genaue Ergebnis liefern (bei ABAP liegt die Rechengenau-igkeit von gepackten Zahlen bei maximal 14 Nachkommastellen), esaber auf zwei Nachkommastellen in der Zielvariable runden, die wirselbst mit zwei Dezimalstellen deklariert haben. Diese erhält, durchABAP kaufmännisch gerundet, den Wert 1.24.
DIV Falls Sie das Ergebnis einer ganzzahligen Division erhalten möchten,müssten Sie die Anweisung umschreiben und statt des Schrägstrichsden Operator DIV einsetzen:
ergebnis = zahl02 DIV zahl01.
Unter sonst gleichen Voraussetzungen ergibt die ganzzahlige Divisionfür den Quotienten den Wert 1. Da die Zielvariable zwei Dezimalstel-len hat, steht dort nach dem Ausführen der Anweisung als Inhalt 1.00.
MOD Im dritten Fall interessiert uns der Rest der Ganzzahldivision. Für die-sen Fall verwenden wir den Operanden MOD, und die Anweisung lau-tet:
ergebnis = zahl02 MOD zahl01.
3803-8.book Seite 122 Freitag, 31. Juli 2015 3:10 15
Codebeispiel zu Feldern und Berechnungen
123
4.4
Wieder unter der Annahme, dass alle übrigen Faktoren gleichbleiben,ergibt die ganzzahlige Division 1, Rest 1,11. Dieser Rest wird mitzwei Dezimalstellen in die Zielvariable übertragen, und sie erhältdementsprechend als Inhalt den Wert 1.11.
1,5 Stunden
Möglicherweise fragen Sie sich jetzt, ob solche Berechnungen überhauptpraxisrelevant sind: Aber denken Sie nur daran, dass Stunden, Tage oderJahre in vielen Systemen nicht in Stunden und Minuten erfasst werden,sondern mit Dezimalwerten wie »1,5 Stunden«. Um diese Dezimalwerteauf Stunden und Minuten umzurechnen, kommen Sie um die genanntenDivisionsmöglichkeiten nicht herum. Weitere Beispiele finden Sie in Kapi-tel 5, »Modifikation von Zeichenketten«, und Kapitel 8, »Rechnen mitDatum und Zeit, Mengen und Währungen«.
4.4 Codebeispiel zu Feldern und Berechnungen
Schauen wir uns die verschiedenen Berechnungsmöglichkeiten nunanhand unseres vorbereiteten Reports an:
1 *&---------------------------------------------*2 *& Report Z_TEILNEHMERLISTE02 *3 *& *4 *&---------------------------------------------*5 *& *6 *& *7 *&---------------------------------------------*89 REPORT z_teilnehmerliste02 .
1011 * Variable deklarieren12 DATA zahl01 TYPE p DECIMALS 2 VALUE '4.56'.13 DATA zahl02 LIKE zahl01 VALUE '5.67'.14 DATA ergebnis_addition LIKE zahl01.15 DATA ergebnis_subtraktion LIKE zahl01.16 DATA ergebnis_multiplikation LIKE zahl01.17 DATA ergebnis_division_genau LIKE zahl01.18 DATA ergebnis_division_ganzzahl LIKE zahl01.19 DATA ergebnis_division_rest LIKE zahl01.20
3803-8.book Seite 123 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
124
4
21 * Verarbeitungsteil22 zahl01 = zahl01 + 1.23 zahl02 = zahl01 + 2.24 ergebnis_addition = zahl01 + zahl02.25 ergebnis_subtraktion = zahl01 - zahl02.26 ergebnis_multiplikation = zahl01 * zahl02.27 ergebnis_division_genau = zahl02 / zahl01.28 ergebnis_division_ganzzahl = zahl02 DIV zahl01.29 ergebnis_division_rest = zahl02 MOD zahl01.3031 * Ausgabeteil32 WRITE: / 'zahl01', zahl01,33 / 'zahl02', zahl02,34 / 'ergebnis_addition:',
ergebnis_addition,35 / 'ergebnis_subtraktion:',
ergebnis_subtraktion,36 / 'ergebnis_multiplikation:',
ergebnis_multiplikation,37 / 'ergebnis_division_genau:',
ergebnis_division_genau,38 / 'ergebnis_division_ganzzahl:',
ergebnis_division_ganzzahl,39 / 'ergebnis_division_rest:',
ergebnis_division_rest.
Listing 4.1 Report Z_TEILNEHMERLISTE02
Anmerkungen zum Quellcode
Nach den Kommentarzeilen gliedert sich unser Report in drei Teile,die im Folgenden kurz beschrieben sind.
Zeile 1 bis 8
Diese Zeilen werden vom System wieder automatisch als Kommen-tarzeilen generiert.
Zeile 11
Der Quellcode wird in übersichtliche Abschnitte eingeteilt, die derLesbarkeit dienen. In Listing 4.1 werden diese Abschnitte mit dreiKommentarzeilen gebildet: Variable deklarieren (Zeile 11 bis 19),Verarbeitungsteil (Zeile 21 bis 29) und Ausgabeteil (Zeile 31 bis 39).
3803-8.book Seite 124 Freitag, 31. Juli 2015 3:10 15
Codebeispiel zu Feldern und Berechnungen
125
4.4
Zeile 12
Die Variable ZAHL01 wird als gepackte Zahl mit zwei Nachkommastel-len deklariert, und sie erhält als Startwert die Zahl 4,56.
Zeile 13
Die Variable ZAHL02 erhält als Startwert die Zahl 5,67 und die glei-chen Eigenschaften wie ZAHL01.
Zeile 14 bis 19Frage der Weiter-verarbeitung
Die Ergebnisfelder werden deklariert; für jedes Ergebnis wird eineigenes Feld angelegt. Natürlich hätte man nur das Feld ERGEBNISanlegen und immer wieder überschreiben können, aber es hängt vonder Art der Weiterverarbeitung ab, ob man einen Feldinhalt spätervielleicht wieder benötigt oder nicht – und Sie möchten gleich dieverschiedenen Berechnungsergebnisse ausgeben.
Nicht mit Variablen geizen
Arbeitsspeicher und Hardware sind kein Argument mehr, um mit Varia-blen zu knausern, sondern Lesbarkeit und Transparenz sind heute diewesentlicheren Qualitätsfaktoren. Wenn es der Qualität dient, sollten Siedeshalb nicht mit Variablen geizen.
Zeile 21
Der Verarbeitungsteil beginnt.
Zeile 22
Der Wert des Feldes ZAHL01 wird um 1 erhöht. Vor der Anweisungwar der Inhalt 4.56, danach ist er 5.56.
Zeile 23
Das Feld ZAHL02 erhält den Inhalt aus der Addition von ZAHL01 undder Zahl 2. Der alte Inhalt von ZAHL02 war 5.67, der neue Inhalt ist7.56.
Zeile 24
Das Feld ERGEBNIS_ADDITION erhält das Ergebnis der OperationZAHL01 plus ZAHL02, das ist 5.56 plus 7.56 und ergibt 13.12.
3803-8.book Seite 125 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
126
4
Zeile 25
Das Ergebnis der Subtraktion von ZAHL01 und ZAHL02 ist die negativeZahl 2. Sie wird im Ergebnisfeld ERGEBNIS_SUBTRAKTION als 2.00- dar-gestellt.
Zeile 26
Da ZAHL01 inzwischen den Wert 5.56 und ZAHL02 den Wert 7.56 hat,lautet das Ergebnis der Multiplikation auf zwei Nachkommastellengerundet 42.03.
Zeile 27
Das Ergebnis der Division: 7.56 geteilt durch 5.56 ist gerundet 1.36 –und gleichzeitig der neue Inhalt von ERGEBNIS_DIVISION_GENAU.
Zeile 28
Die ganzzahlige Division ergibt 1.00. Durch die Formatierung wer-den die eigentlich überflüssigen Dezimalstellen mitgezogen.
Zeile 29
Der Rest der Ganzzahldivision beträgt 2.00. Dieser Wert wird in dasFeld ERGEBNIS_DIVISION_REST übertragen.
Zeile 31
Der Abschnitt für die Listerstellung beginnt.
Zeile 32 bis 39
Die WRITE-Anweisung gibt in einer neuen Zeile in Spalte 1 ein Literalals Text aus und anschließend mit einer Leerstelle den Inhalt der Vari-ablen. Die WRITE-Anweisung ist als Kettensatz geschrieben, hinterdem sich eigentlich 16 WRITE-Anweisungen verbergen. Hinter derAnweisung WRITE steht ein Doppelpunkt; die einzelnen Anweisungensind durch Kommata getrennt, und nur die letzte Anweisung des Ket-tensatzes wird mit einem Punkt abgeschlossen.
Ausgabe des Quellcodes
Wenn Sie den Report wie eben editiert, gesichert, geprüft und akti-viert haben, können Sie ihn ausführen, und das Listbild sollte wie inAbbildung 4.6 aussehen.
3803-8.book Seite 126 Freitag, 31. Juli 2015 3:10 15
Codebeispiel zu Feldern und Berechnungen
127
4.4
Abbildung 4.6 Listbild zum Beispiel der Grundrechenarten
Verbesserungs-würdige Optik
Formal und logisch ist hier alles richtig – aber auch das Auge pro-grammiert mit! Da hier die Literale am Zeilenanfang unterschiedlichlang sind, stehen die ausgegebenen Variablen an unterschiedlichenSpaltenpositionen und damit nicht spaltengerecht. Deshalb kümmernwir uns im letzten Schritt noch um die optische Spaltenaufteilung.
Verbesserte Listaufbereitung
Felder einer Liste spaltengerecht ausgeben
Dieses kleine Problem lösen Sie, indem Sie dem WRITE-Kommandobei der Ausgabe mitteilen, an welcher Position einer Zeile die Varia-ble abgebildet werden soll. Möchten Sie die Variable ab Spalte 30ausgeben, müssen Sie Zeile 32 von Listing 4.1 folgendermaßenändern:
WRITE: / 'zahl01', 30 zahl01,
Vor die betreffende Variable schreiben Sie einfach die Spaltenposi-tion der Druckzeile. Beachten Sie, dass zwischen Spaltenposition undVariable mindestens eine Leerstelle bestehen bleiben muss.
Komplexe Listen
Die restlichen relevanten Zeilen könnten Sie entsprechend editieren,indem Sie vor jede betroffene Variable die Ausgabeposition schreiben. Beikurzen und überschaubaren Ausgaben ist dieses Vorgehen auch vertret-bar. Sollte eine Liste allerdings aufwendiger und komplexer zusammenge-setzt sein, könnten Sie es auch mit der nachfolgend beschriebenen Mög-lichkeit versuchen – ähnlich des Verweises bei den Datendeklarationen mitLIKE.
3803-8.book Seite 127 Freitag, 31. Juli 2015 3:10 15
Felder und Berechnungen
128
4
UNDER Einen Verweis auf ein anderes Objekt können Sie auch bei der Druck-position verwenden, indem Sie einfach auf die Position einer anderenVariablen verweisen. Sollte sich die Position der führenden Variablenändern, ziehen alle anderen referenzierenden Variablen automatischnach. Hierzu wird beim WRITE-Kommando die AufbereitungsoptionUNDER verwendet. Editieren Sie die Zeilen 33 bis 39 wie folgt:
33 / 'zahl02', zahl02 UNDER zahl01,34 / 'ergebnis_addition:',
ergebnis_addition UNDER zahl01,35 / 'ergebnis_subtraktion:',
ergebnis_subtraktion UNDER zahl01,36 / 'ergebnis_multiplikation:',
ergebnis_multiplikation UNDER zahl01,37 / 'ergebnis_division_genau:',
ergebnis_division_genau UNDER zahl01,38 / 'ergebnis_division_ganzzahl:',
ergebnis_division_ganzzahl UNDER zahl01,39 / 'ergebnis_division_rest:',
ergebnis_division_rest UNDER zahl01.
Nach dem Sichern, Prüfen, Aktivieren und Ausführen des Reportssollte das Listbild wie in Abbildung 4.7 aussehen.
Abbildung 4.7 Listbild mit spaltengerechter Ausgabe
3803-8.book Seite 128 Freitag, 31. Juli 2015 3:10 15
7
Inhalt
Vorwort zur vierten Auflage ...................................................... 15
1 ABAP und die ersten Schritte im SAP-System ........ 23
1.1 Architektur des SAP-Systems im Überblick .............. 251.1.1 Technische Architektur .............................. 261.1.2 Betriebswirtschaftlich-organisatorische
Architektur ................................................ 281.1.3 Plattformunabhängigkeit ........................... 31
1.2 Anwendungsprogramme und Laufzeitumgebung ..... 321.2.1 Workprozesse ............................................ 331.2.2 Struktur von ABAP-Programmen ............... 35
1.3 Anmelden und Abmelden am System ..................... 381.3.1 Betriebswirtschaftlicher Modulüberblick .... 401.3.2 ABAP Workbench ...................................... 431.3.3 Abmelden vom SAP-System ...................... 48
2 ABAP Dictionary ...................................................... 51
2.1 Einstieg in das ABAP Dictionary .............................. 522.1.1 Datenbanktabellen .................................... 532.1.2 Tabelle anlegen und pflegen ...................... 54
2.2 Datenelemente und Domänen ................................ 592.2.1 Datenelement anlegen .............................. 592.2.2 Domäne anlegen ....................................... 642.2.3 Datenelement prüfen und aktivieren ......... 692.2.4 Technische Einstellungen der Tabelle
pflegen ...................................................... 712.3 Datensätze erfassen ................................................ 73
2.3.1 Datensätze eingeben ................................. 742.3.2 Tabelleninhalt anzeigen ............................. 75
3803-8.book Seite 7 Freitag, 31. Juli 2015 3:10 15
Inhalt
8
3 Programmieren im ABAP Editor .............................. 77
3.1 ABAP-Report anlegen .............................................. 773.2 ABAP Editor im Überblick ........................................ 81
3.2.1 Modi des ABAP Editors .............................. 823.2.2 Steuerung des ABAP Editors ....................... 82
3.3 ABAP-Programme verstehen und bearbeiten ........... 893.4 ABAP-Report ausführen ........................................... 923.5 Datenbanktabelle lesen und ausgeben ..................... 943.6 Aufbereitung von Listen .......................................... 97
3.6.1 Kettensatz .................................................. 983.6.2 Linien ......................................................... 983.6.3 Leerzeilen .................................................. 99
3.7 Quellcode schreiben und editieren .......................... 99
4 Felder und Berechnungen ....................................... 107
4.1 Report vorbereiten .................................................. 1074.2 Felder deklarieren ................................................... 112
4.2.1 Variablen deklarieren ................................. 1124.2.2 Konstanten deklarieren .............................. 116
4.3 Grundrechenarten ................................................... 1174.3.1 Kompatible und konvertible
Datenobjekte ............................................. 1194.3.2 Konvertierungsregeln ................................. 1204.3.3 Besonderheiten bei der Division ................. 122
4.4 Codebeispiel zu Feldern und Berechnungen ............ 123
5 Modifikation von Zeichenketten ............................. 129
5.1 Zeichenketten deklarieren ....................................... 1305.2 Zeichenketten-Operationen ..................................... 132
5.2.1 Zeichenketten verschieben ......................... 1335.2.2 Zeichenketten ersetzen .............................. 1345.2.3 Zeichenketten verdichten ........................... 1365.2.4 Zeichenkettenfelder zusammenziehen ........ 1375.2.5 Zeichenketten zerlegen .............................. 139
3803-8.book Seite 8 Freitag, 31. Juli 2015 3:10 15
Inhalt
9
5.2.6 Zeichenketten-Operationen mit direkter Positionierung ........................................... 140
5.3 Codebeispiel zu String-Operationen ........................ 141
6 Debugging von Programmen .................................. 149
6.1 Überblick ................................................................ 1506.2 Aufruf des ABAP Debuggers ................................... 1516.3 Mit dem ABAP Debugger arbeiten .......................... 155
6.3.1 Desktop 1 ................................................. 1566.3.2 Registerkarte »Strukturen« ......................... 1606.3.3 Registerkarte »Break-/Watchpoints« .......... 1626.3.4 Breakpoints-Modus ................................... 1656.3.5 Statische Breakpoints ................................ 168
6.4 Schicht für Schicht: Layer-aware Debugging ............ 1686.5 Codebeispiel zum Layer-aware Debugging .............. 177
7 Modifikation von transparenten Datenbanktabellen .................................................. 181
7.1 Datenbanktabelle kopieren ..................................... 1827.2 Nicht-Schlüsselfelder ergänzen ............................... 187
7.2.1 Festwerte in Domäne einpflegen ............... 1887.2.2 Besonderheiten bei Währungs- und
Mengenfeldern .......................................... 1917.2.3 Fremdschlüssel pflegen .............................. 193
7.3 Tabellen erweitern .................................................. 2027.3.1 Append-Strukturen pflegen ....................... 2027.3.2 Include-Struktur einpflegen ....................... 206
7.4 Schlüsselfelder von Tabellen manipulieren .............. 2117.5 Tabellenfelder löschen ............................................ 2167.6 Tabellen löschen ..................................................... 218
8 Rechnen mit Datum und Zeit, Mengen und Währungen .............................................................. 221
8.1 Felddeklarationen ................................................... 2218.2 Rechnen mit Datumsfeldern ................................... 224
3803-8.book Seite 9 Freitag, 31. Juli 2015 3:10 15
Inhalt
10
8.3 Rechnen mit Zeitfeldern .......................................... 2318.4 Rechnen mit Mengen- und Währungsfeldern .......... 2358.5 Codebeispiel zu Datums-, Zeit- und
Währungsfeldern ..................................................... 238
9 Mit Daten in einer Datenbanktabelle arbeiten ....... 251
9.1 Berechtigungskonzept ............................................. 2539.2 Sperrkonzept ........................................................... 2549.3 Open-SQL-Anweisungen ......................................... 257
9.3.1 Neuen Datensatz anlegen .......................... 2599.3.2 Bestehenden Datensatz ändern .................. 2629.3.3 Datensatz modifizieren ............................... 2639.3.4 Datensatz löschen ...................................... 264
9.4 Komfortable Alternative: Persistente Klassen ........... 2679.5 Codebeispiel zu INSERT ........................................... 2689.6 Codebeispiel zu UPDATE ......................................... 2739.7 Codebeispiel zu MODIFY ........................................ 2779.8 Codebeispiel zu DELETE .......................................... 280
10 Programmablaufsteuerung und logische Ausdrücke ................................................................ 285
10.1 Kontrollstrukturen ................................................... 28610.2 Arbeiten mit Mustern .............................................. 28710.3 Verzweigungen ........................................................ 291
10.3.1 IF-Struktur ................................................. 29210.3.2 CASE-Struktur ............................................ 295
10.4 Schleifen ................................................................. 29710.4.1 SELECT-Schleife ......................................... 29710.4.2 DO-Schleife ............................................... 29810.4.3 WHILE-Schleife .......................................... 30010.4.4 Abbruchanweisungen für Schleifen ............. 302
10.5 Logische Ausdrücke ................................................. 30610.5.1 Einfache logische Ausdrücke ...................... 30610.5.2 Verknüpfte logische Ausdrücke .................. 308
10.6 Codebeispiel zu IF ................................................... 31210.7 Codebeispiel zu CASE .............................................. 317
3803-8.book Seite 10 Freitag, 31. Juli 2015 3:10 15
Inhalt
11
10.8 Codebeispiel zu DO und Abbruchbedingungen ....... 32210.9 Codebeispiel zu WHILE und logischen
Ausdrücken ............................................................ 328
11 Selektionsbildschirme ............................................. 335
11.1 Ereignisse ............................................................... 33711.1.1 Reihenfolge von Ereignissen ...................... 33811.1.2 Beispiele für Ereignisse .............................. 339
11.2 Einfache Selektionen ............................................... 34111.2.1 PARAMETERS-Anweisung ......................... 34111.2.2 Zusätze zur PARAMETERS-Anweisung ....... 343
11.3 Komplexe Selektionen ............................................ 34911.3.1 SELECT-OPTIONS-Anweisung ................... 34911.3.2 Mehrfachselektionen ................................. 35111.3.3 Zusätze zur SELECT-OPTIONS-
Anweisung ................................................ 35311.4 Selektionstexte verwenden ..................................... 354
11.4.1 Textelemente im Überblick ........................ 35511.4.2 Selektionstexte anlegen ............................. 355
11.5 Selektionsbild speichern ......................................... 35911.5.1 Selektionsvariante anlegen ........................ 35911.5.2 Report mit Variante starten ....................... 364
11.6 Ergänzende Textobjekte .......................................... 36611.6.1 Textsymbole anlegen ................................. 36611.6.2 Nachrichten anlegen .................................. 368
11.7 Selektionsbilder frei gestalten ................................. 37211.7.1 Einzelne Zeile gestalten ............................. 37311.7.2 Zeilenblock gestalten ................................. 375
11.8 Codebeispiel zum Selektionsbild (einfache Form) ...................................................... 377
11.9 Codebeispiel zum Selektionsbild (erweiterte Form) .................................................... 383
12 Interne Tabellen ....................................................... 395
12.1 Sinn und Zweck interner Tabellen ........................... 39612.2 Aufbau und Arten von internen Tabellen ................ 398
3803-8.book Seite 11 Freitag, 31. Juli 2015 3:10 15
Inhalt
12
12.3 Interne Standardtabelle anlegen .............................. 40212.3.1 Objektorientierte Schreibweise mit
Workarea ................................................... 40212.3.2 Obsolete Schreibweise mit Kopfzeile .......... 405
12.4 Interne Standardtabelle füllen ................................. 40612.4.1 Interne Tabelle mit Workarea füllen ........... 40612.4.2 Interne Tabelle mit Kopfzeile füllen ............ 410
12.5 Interne Tabelle zeilenweise verarbeiten ................... 41312.5.1 Interne Tabelle mit Workarea
verarbeiten ................................................ 41312.5.2 Interne Tabelle mit Kopfzeile
verarbeiten ................................................ 41612.6 Inhalte von internen Tabellen löschen ..................... 424
12.6.1 Workareas und interne Tabellen mit Workarea löschen ...................................... 425
12.6.2 Interne Tabellen mit Kopfzeile löschen ....... 42612.7 Codebeispiel zu ITAB mit Workarea ......................... 42712.8 Codebeispiel zu ITAB mit Kopfzeile ......................... 437
13 Modularisierung von Programmen ......................... 453
13.1 Überblick ................................................................ 45413.2 Quelltext-Module .................................................... 45613.3 Prozeduren .............................................................. 460
13.3.1 Unterprogramme ....................................... 46013.3.2 Funktionsbausteine .................................... 47213.3.3 ABAP-Klassen ............................................ 490
13.4 Speicherbereiche für Datenübergabe ....................... 50013.4.1 Globales SAP Memory ................................ 50113.4.2 Lokales SAP Memory ................................. 50113.4.3 ABAP Memory ........................................... 50213.4.4 Shared Objects ........................................... 503
13.5 Codebeispiele zur Modularisierung .......................... 50413.6 Codebeispiele zum Aufruf fremder Reports .............. 519
3803-8.book Seite 12 Freitag, 31. Juli 2015 3:10 15
Inhalt
13
14 Weiterführende Themen ......................................... 527
14.1 Interessante Zeiten für die Programmiersprache ABAP ..................................... 528
14.2 SAP HANA .............................................................. 52914.3 Programmieren mit Frameworks ............................. 529
14.3.1 Beispiel Archivierungslösung ..................... 53114.3.2 Skizze einer möglichen
Archivierungslösung .................................. 53314.4 Wichtige Frameworks im SAP-Standard .................. 534
14.4.1 Web Dynpro ABAP und Floorplan Manager .................................... 534
14.4.2 SOAP-Webservices .................................... 53814.4.3 OData-Services mit SAP Gateway .............. 54114.4.4 Frameworks für Erweiterungen .................. 542
14.5 Auf zu neuen Ufern! ............................................... 545
Anhang ........................................................................... 549
A Icons auf einen Blick ......................................................... 551
B Abkürzungsverzeichnis ...................................................... 553
C Die Autoren ...................................................................... 557
Index ........................................................................................ 559
3803-8.book Seite 13 Freitag, 31. Juli 2015 3:10 15
559
Index
* (Kommentarzeile) 89/ (neue Zeile) 97/NEX 49& (Platzhalter) 372$TMP 57, 184
A
ABAP 23Anweisung 90Befehl 90Entwicklergemeinde 528Fortgeschrittenes 528Herkunft 528Kommando 90Laufzeitumgebung 35Programmierung 38Prozessor 33Schlüsselwortdokumentation 91Trial Version 546
ABAP Debugger 149, 155, 166, 434Aufruf 151Ausführungsebene 157beenden 166klassischer 150neuer 150, 159Systemfeld 159Tabellenbereich 161Tabellenmodus 446
ABAP Development Tools 42, 52ABAP Dictionary 46, 51, 52, 55, 183,
210, 252, 257Objekt 53, 58Text 357Währungsfeld 223
ABAP Editor 46, 77, 81, 99dynamischer Breakpoint 166Icons 83Modus 81quellcodebasierter 82Steuerung 82Symbolleiste 83textbasierter 82Textelemente 355
ABAP in Eclipse 42, 52ABAP Memory 502, 518ABAP Objects 36, 401, 490, 528ABAP Workbench 42, 43, 92, 457ABAP-Klasse � KlasseABAP-Programm � ProgrammABAP-Report � ReportAbbruchanweisung 302, 303Abbruchbedingung 298, 305, 327Ablauflogik 33Ablaufsteuerung 525Abmelden 48
/NEX 49mit Sicherheitsabfrage 48ohne Sicherheitsabfrage 49
Abstraktion 539Backend-Abstraktion 540Plattform-Abstraktion 540
Acrobat Reader 482ADD 119Addition 117ADJACENT DUPLICATES 416ADT 42, 52Advanced Business Application Pro-
gramming � ABAPAktion 286Aktivierungsprotokoll 186
3803-8.book Seite 559 Freitag, 31. Juli 2015 3:10 15
Index
560
Aktivierungsreihenfolge 188Allgemeiner Berichts-Aufbereitungs-
Prozessor � ABAPalphanumerisches Zeichen 130ALV Grid 170Amazon Web Services 17AND 310AND RETURN 472Änderung 202Änderungswesen 30Ankreuzfeld 471Anmeldebildschirm 39Anmeldemandant 75Anmeldung 39Antwortzeit 400Anweisung 90Anweisungsblock 286, 292, 373Anweisungsblock beenden 302Anwendungsprotokoll 372anwendungsübergreifende Kompo-
nente 41APPEND 409, 412, 433, 436Append-Struktur 181, 202
aktivieren 205anlegen 203Komponente 204, 205pflegen 202zuordnen 203
APPL0 71Applikationsschicht 26, 27Applikationsserver 27Arbeitsbereich 402, 413Arbeitsspeicherbereich 472, 500Arbeitsteilung 26, 28, 252Architektur 25Architekturmuster 536Archivierung 531Archivindex 532Array-Fetch 443Artikelnummer 131AS CHECKBOX 346AS TEXT 424ASSIGNING 414AT 140AT SELECTION-SCREEN 339, 340,
343, 371
Attribut 491Instanzattribut 492Klassenattribut 492
Ausdruck, logischer 285, 306ausführbares Programm 79, 337Auslieferungsklasse 55Ausnahme 480Ausnahmebehandlung 490Ausschneiden 212Auswahlknopf 347AUTHORITY-CHECK 254
B
BackendAbstraktion 540Modus 81
Backquote 135BAdI 543Batch-Job 79Bedingung 266, 286, 300, 422
auflösen 309komplexe 291, 308
Befehl 90Befehl rückgängig machen 88BEGIN OF 405BEGIN OF BLOCK 375BEGIN OF LINE 373Benutzerstammsatz 253Berechnung 107
Alter bestimmen 229Dimension von Zeitspannen 230Fälligkeitsdatum bestimmen 225Frist ermitteln 224mit Datumsfeld 224mit Mengenfeld 235mit Währungsfeld 235mit Zeitfeld 231Monatsanfang ermitteln 225Rechnungsbetrag ermitteln 237Rechnungsdatum bestimmen 225Stichtag ermitteln 224, 225Ultimo ermitteln 227verbleibende Tage ermitteln 228, 229Zeit bis Mitternacht 232Zeitspanne in Jahren 230
3803-8.book Seite 560 Freitag, 31. Juli 2015 3:10 15
Index
561
Zeitspanne in Minuten 232Zeitspanne in Sekunden 231Zeitspanne in Stunden 232Zeitspanne in Tagen 230Zeitspanne mit Datumswechsel 233
Berechtigung 253Gruppe 79Konzept 253Objekt 253Programmausführung 254Prüfung im Quellcode 254
Bereich, physischer 71BETWEEN 308Bewegungsdaten 55Binärzeichen 502Bindestrich 95Block 375
Ablage 110löschen 111Name 376
BPM 536BREAK-POINT 153, 168Breakpoint 86, 150, 162
aktiver 166dynamischer 154, 167, 168externer 86löschen 166Modus 165Session 154, 166setzen 86, 153, 165sichern 166statischer 168verwalten 166
Buchungskreis 40Büro 41Business Add-In 543BY 423
C
c (Datentyp) 130, 133, 141, 224, 236, 307
CALL FUNCTION 484, 490CALL METHOD 500Callback 172CASE 295, 320
CASE-Struktur 295, 490CHAR 188, 191CHECK 303, 464CHIP 32Class Builder 493
aufrufen 493Darstellung anpassen 494
CLASS DEFINITION 499CLASS IMPLEMENTATION 499Class Pool 499CLEAR 260, 262, 263, 425, 426, 437,
446, 450, 468Client-Server-Architektur 26, 251Client-Software 535Cluster 502Cluster-Tabelle 53COBOL 528Code
ausschneiden 87einfügen 88kopieren 88Tabelle 307
Codierung, harte 335COMMENT 374COMPUTE 121CONCATENATE 137, 148CONCATENATE SEPARATED BY 138CONDENSE 137, 148CONDENSE NO-GAPS 137CONSTANTS 117CONTINUE 302CUKY 191, 192, 223, 235CURR 191, 192, 223, 224, 235Customer Exit 543Customizing 29, 542Customizing-Tabelle 530
D
d (Datentyp) 221DATA 113, 116, 130, 221, 243, 259,
405, 445DATA BEGIN OF 405Data Browser 55, 186, 211DATA DECIMALS 113Data Dictionary � ABAP Dictionary
3803-8.book Seite 561 Freitag, 31. Juli 2015 3:10 15
Index
562
DATA END OF 405DATA LIKE 114, 131DATA OCCURS 405DATA TYPE 113, 131DATA VALUE 115, 131, 222Daten, temporäre 349Datenart 71Datenbank
anpassen 182, 215logische 80Schicht 26Schnittstelle 34, 252Server 27Sperre 254Utility 213
Datenbanktabelle 53, 266, 500ausgeben 94Datensatz einfügen 259kopieren 183lesen 94Modifikation 181transparente 181
DatendeklarationInclude 458Prozedur 460
Datenelement 58, 59, 109aktivieren 70, 188anlegen 59prüfen 69
Datenkonsistenz 472Datenobjekt 112, 402
deklarieren 407kompatibles 119konvertibles 119
Datensatz 397ändern 262, 263anlegen 259, 263anzeigen 76eingeben 74erfassen 73löschen 264prüfen 186Umsetzung 215
Datenschnittstelle 464, 477, 479Datentyp 61, 113, 121, 130, 402, 463
c 130, 133, 141, 224, 236, 307CHAR 188, 191
CUKY 191, 192, 223, 235CURR 191, 192, 223, 224, 235d 221DEC 191, 235elementarer 114, 402f 341F4-Hilfe 65generischer 130, 131i 113, 120, 230komplexer 402n 131, 133, 141NUMC 65, 191p 113, 117, 120, 224, 230, 235, 236QUAN 191, 236t 222UNIT 191, 236zeichenartiger 221
Datentyp string 130Datenübergabe 500, 502Datenverlust 213Datumsfeld 221
Berechnungen 224deklarieren 221füllen 222, 225Verarbeitung 224
Datumsformat 106Debugger � ABAP DebuggerDebugger-Layer konfigurieren 172Debugging 149
Layer-aware 156, 168Modus 151, 154Profil 172
DEC 191, 235DECIMALS 113DEFAULT 343, 353Deklaration 35, 114, 341DELETE 258, 264, 265, 283, 285, 416,
421, 450DELETE ADJACENT DUPLICATES
416DELETE FROM 416DELETE INDEX 421DESCENDING 424DESCRIBE 419DESCRIBE LINES 419Dezimaltrennzeichen 116Dezimalzahl 113
3803-8.book Seite 562 Freitag, 31. Juli 2015 3:10 15
Index
563
DialogModul 36Steuerung 33Umsetzung 215
digitale Signatur 401Dispatcher 33DIV 122, 230DIVIDE 119Division 117, 122, 230Division, ganzzahlige 122, 230, 332DO 298, 299Dokumentation 63Domäne 59, 115, 196
aktivieren 68, 188anlegen 64erstellen 60prüfen 67WAERS 194, 196
Drucken 336Druckposition 128Dump-Aufbereitung 93Dynpro 32, 336
Ablauflogik 336klassisches 335Prozessor 33Prüfung 199Selektionsbildschirm 335
E
E (Nachrichtentyp) 371Eclipse 52Editiermodus 82Editorsperre 80EHP 545Eigenschaft 78Eigenschaft, semantische 199Eingabeblock 373Eingabefeld positionieren 372Eingabehilfe 200Eingabeparameter 337Eingabeprüfung 190, 193, 196, 197,
199, 340, 342, 391, 394Einsetzen 212Einstellung, technische 71Einzelschritt 156, 435
Einzelwert 66, 350Element erstellen 60elementarer Datentyp 114ELSE 292, 294ELSEIF 293, 294END OF 405END OF BLOCK 375END OF LINE 373ENDCASE 295ENDDO 298ENDFORM 461, 464, 466ENDIF 286, 292ENDLOOP 413Endlosschleife 298ENDSELECT 96, 248ENDWHILE 300Enhancement Framework 544Enhancement Package 545Enterprise Service 541Entwicklerschlüssel 43Entwicklungssystem 28, 29Ereignis 36, 337, 390
beenden 305Beispiel 339Block 36Schlüsselwort 337, 390Steuerung 390, 392Struktur 338
Ersatzzeichen 474Erweitern 84Erweiterung 202, 542Erweiterungskategorie 73Erweiterungspunkt 543exe-Datei 474EXIT 304, 326Exponentialzahl 121EXPORT 502EXPORT TO MEMORY ID 502Exportparameter 479, 485, 490
F
f (Datentyp) 341F1 90, 344, 374F1-Hilfe 75F3 93, 368
3803-8.book Seite 563 Freitag, 31. Juli 2015 3:10 15
Index
564
F4 190, 200, 344, 345F4-Hilfe 65, 75, 360F5 156F6 157F7 157F8 93, 157, 391Facebook 546Fallunterscheidung 285, 295Fehler 296, 320
Analyse 93Ausgang 490Behandlung 272, 340, 370, 371Nachricht 199Protokoll 213Suche 150
Feld 57, 59, 107, 112, 149, 205, 399Attribut 58Bezeichner 62, 357deklarieren 112, 221, 403Eigenschaften 409hinzufügen 181Länge 113, 130, 131Liste 95, 191, 404, 464, 502löschen 216Name 57namensgleiches 406, 409, 410positionieren 372Quellfeld 120Sternchen 95Typ 403verarbeiten 112Zielfeld 120
Feldermodus 155, 156Feldinhalt
modifizieren 159prüfen 157überwachen 165verschieben 134
Festpunktarithmetik 80Festwert 66, 118, 188
Einzelwert 189Intervall 189pflegen 188testen 189
Float 341Floorplan Manager 537FOR FIELD 374
FORM 461, 463, 466FPM 537Framework 529Framework debuggen 169FREE 425, 426, 446Fremdschlüssel 67, 193, 198
Beziehung 216, 255Feld 199Feldart 199pflegen 197Tabelle 197testen 200
FROM 414, 416Frontend-Editor
alt 82neu 82
Function Builder 46, 473, 475Function Builder, Testumgebung 481Funktionsbaustein 36, 46, 255, 455,
472Ablaufart 477aufrufen 483, 484, 488Ausnahme 480Dokumentation 486Eigenschaft 476Export 478Exportparameter 479Import 477Importparameter 479Name 484remotefähiger 477suchen 473, 474testen 473, 481, 482Wertübergabe 477
Funktionsbibliothek 473Funktionscodefeld 45Funktionsgruppe 337, 454, 473, 490
G
Ganzzahldivision 122Ganzzahldivision mit Rest 122Gebietswurzelklasse 504generischer Datentyp 130, 131generischer Schlüssel 198GET PARAMETER 501
3803-8.book Seite 564 Freitag, 31. Juli 2015 3:10 15
Index
565
GET PARAMETER ID 501Gleitpunktzahl 341Graphical User Interface 27, 38Grenze 398Groß- und Kleinschreibung 132, 266,
342Größenkategorie 71Grundrechenart 112, 117GUI 27, 38
H
Haltepunkt � BreakpointHANA 529Hartcodierung 335Hash-Algorithmus 400, 421Hash-Tabelle 400Hash-Tabelle, READ 421Helferklasse 493, 499Hierarchiestufe 131HIGH 349Hilfe 85Hilfetext pflegen 64Hintergrundverarbeitung 362Hochkomma 101Hochkomma, umgekehrtes 135Hollywood-Prinzip 531HTTP 539Hut 437, 446, 466
I
i (Datentyp) 113, 120, 230ICF 28IF 286, 292, 294, 303, 309IF-Struktur 292, 295, 348, 351, 490IF-Struktur schachteln 294IMPORT 502IMPORT FROM MEMORY ID 502Importparameter 479, 485IN PROGRAM 469INCLUDE 410, 457Include
expandieren 210komprimieren 210
Include-Programm 454, 456Schachtelung 459Wiederverwendung 456
Include-Struktur 206aktivieren 210anlegen 208einfügen 208einpflegen 206Positionierung 207Voraussetzung 206
INDEX 415, 418Index 399, 415, 421Indextabelle 400, 415, 418, 421Individualsoftware 542Industrieminute 246Infosystem 41INITIAL SIZE 403INITIALIZATION 338, 339, 390Initialwert 58, 115, 262Inkonsistenz prüfen 200Inline-Dokumentation 89INSERT 258, 259, 263, 415, 419, 433Instanz 28, 31Instanzattribut 492Instanzmethode 491Integer 113, 230interne Tabelle 266, 396, 466
deklarieren 404, 405Feld 398füllen 406Kopfzeile 397, 411lokale 466mit Kopfzeile 466satzweise füllen 411Schleife 413sortieren 423Struktur 396verarbeiten 413Vorteil 396Workarea 397
Internet Communication Framework 28
Intervall 66, 308, 350, 352INTO 415, 416Inversion of Control 531IS INITIAL 307, 347
3803-8.book Seite 565 Freitag, 31. Juli 2015 3:10 15
Index
566
J
Java 528JavaScript 528
K
Kalender 226Kapselung 454Kardinalität 199Kettensatz 98, 105, 126, 406Key 57Klammer 312Klammerebene 309Klasse 490
Attribut 491, 492Gebietswurzelklasse 504globale 492Helferklasse 493, 499Instanz 491Interface 531interner Zustand 491lokale 493, 499Methode 491, 493Objektinstanz 491persistente 267Scope 491Shared-Memory-fähige 504Sichtbarkeit 491testen 496Zustand 491
Kleinschreibung � Groß- und Klein-schreibung
Kommando 90Kommentar 89, 489
Anführungszeichen 89im Bildschirm 373Sternchen 89
Kommentarzeile 110, 289kompatibles Datenobjekt 119Komponente
anwendungsübergreifende 41Append-Struktur 203, 205
Konsistenzprüfung 69Konsolidierungssystem 28, 29Konstante 112
Kontextsensitivität 371, 376Kontrollstruktur 286
Anfang 286Ende 286IF 292
konvertibles Datenobjekt 119Konvertierungsregel 119, 120Kopfzeile 266, 397, 405, 411, 412,
417, 466Kopfzeile initialisieren 426Kopieren 109, 212Korrekturwesen 30Kryptologie 401Kundennamensraum 204, 207Kurzbeschreibung 62Kurzdokumentation 100
L
Länge 141Langtext 357, 486Laufzeit 215Laufzeitfehler 159Laufzeitobjekt 186Laufzeitumgebung 35, 79, 338Layer-aware Debugging 156, 168, 169
aktivieren 177deaktivieren 177Objektmenge 172
LeerzeichenBerechnung 118entfernen 136
Leerzeile 212Leerzeile erzeugen 99Lesbarkeit 37, 113Lesesperre 256LIKE 114, 131, 344LINES 419LINE-SIZE 104Linie erzeugen 98Listausgabe 36, 335, 336Listausgabe, spaltengerechte 127Listbild 105Listbildschirm 336Liste 91, 97Listprozessor 336, 339
3803-8.book Seite 566 Freitag, 31. Juli 2015 3:10 15
Index
567
Listüberschrift 355Literal 91, 116, 132, 244, 266, 283,
367, 448, 484String-Literal 135Textfeldliteral 135
LOAD-OF-PROGRAM 37, 338logische Datenbank 80logischer Ausdruck 285, 306logischer Ausdruck, verknüpfen 294,
308logischer Operator 306Logistik 41lokales Objekt 31, 57, 184LOOP 413, 418LOOP ASSIGNING 414LOW 349LOWER CASE 345, 346, 353LT 302
M
Mandant 40Mandantenbehandlung, automati-
sche 257Mandantennummer 257Mandantenunabhängigkeit 257Mandantenverwaltung, automatische
74Mehrfachselektion 351, 353Mehrfachverwendbarkeit 208Meldung, Statuszeile 340Memory-ID 502Mengeneinheit 191Mengenfeld 191, 236Menu Painter 47MESSAGE 368, 370, 371, 391
ID 368Nebenwirkungen 372
Methode 455, 491, 493Instanzmethode 491Klassenmethode 491PUBLIC 493Scope 491Sichtbarkeit 455statische 491testen 496
Mini-SAP-System 546MOD 122, 230, 231Model-View-Controller 536Modifikation 84, 542MODIFY 258, 263, 414, 418MODIFY FROM 414Modul 463Modularisierung 24, 402, 453Modularisierungstechnik 454Modulpool 337Modus
externer 502zweiten öffnen 93
MOVE-CORRESPONDING 182Multi-Byte-Codierung 80Multiplikation 117MULTIPLY 119Mussfeld 343, 393Muster 86, 287, 483Muster einfügen 86, 287, 290MVC 536
N
n (Datentyp) 131, 133, 141Nachkommastelle 113, 116Nachricht 366, 368
anlegen 368Klasse 368, 369, 371Nummer 371pflegen 369Pool 368sichern 369Typ 370, 391
Name, lokaler 468Namensgleichheit 406, 409Namenskonvention 54, 77, 112, 204Namensraum 54Namensraumpräfix 368Namensvergabe
dynamische 260, 263, 265statische 265
Native SQL 34, 54Navigationsfenster 85Negation 310Netzlaufwerk 483
3803-8.book Seite 567 Freitag, 31. Juli 2015 3:10 15
Index
568
Netzwerkpfad 483NEW-PAGE PRINT ON 336Nicht-Schlüsselfeld 187, 211NO-EXTENSION 354NO-GAPS 137NOT 310NUMC 191numerisches Textfeld 131numerisches Zeichen 131
O
Object Navigator 48Object Services 267Objekt
aktivieren 188lokales 31, 57, 184
Objektinstanz, Attribut 492Objektkatalogeintrag 81Objektklasse 253Objektliste 84Objektorientierung 456, 490, 528objektrelationaler Persistenzdienst
267Objektschlüssel 202OBLIGATORY 343, 353OCCURS 405OData 25, 541Oder, logisches 308Offenheit 24Open SQL 34, 46, 54, 252, 539Open-SQL-Anweisung 257Operand
Stellungsoperand 464Stellunsoperand 469
Operationarithmetische 231String 231
Operation, arithmetische 231Operator, logischer 306OPTION 349OR 309ORDER BY PRIMARY KEY 96Originalsprache 78
P
p (Datentyp) 113, 120, 224, 230, 236Paket 56Parameter
Liste prüfen 469obligatorischer 485optionaler 485, 489typisieren 344
Parameter-ID 501anlegen 501initialisieren 518lesen 517prüfen 524schreiben 524
PARAMETERS 341PERFORM 461, 462, 466, 469, 516PERFORM IN PROGRAM 469PERFORM USING 464persistente Klassen 267Persistenzdienst, objektrelationaler
267Personal 41Pflegebildschirm 55, 208Pflegedialog 187Pflichtfeld 343, 393physischer Bereich 71PI 540Plattform, Abstraktion 540Platzhalter 372Pool-Tabelle 53POSITION 375Position 127Position, angeben 127Positionierung 140Positionsnummer 131Postleitzahl 115Präfixnamensraum 204, 207Präsentationsschicht 26Präsentationsserver 26, 28Pretty Printer 87Primärschlüssel 263, 264PRIVATE 491Produktivsystem 28, 30Profil 253Programm
Abbruch 93
3803-8.book Seite 568 Freitag, 31. Juli 2015 3:10 15
Index
569
Ablaufsteuerung 285aktivieren 84, 92anlegen 77ausführbares 79, 337ausführen 92Ausführung 93Eigenschaft 78erweitern 84Gruppe 80Logik prüfen 150modularer Aufbau 37Name 77prüfen 92sichern 92starten 92Status 79, 83Struktur 35Verarbeitung 460
PROTECTED 491Prozedur 36, 454, 460, 472prozedurale Konstrukte 490prozedurale Sprache 528Prüfsummenverfahren 401Prüftabelle 197, 198, 216PUBLIC 491, 493Pufferung 72, 252Punkt 90
Q
Qualitätssicherungssystem 29QUAN 191, 236Quellcode
editieren 87, 99modularisieren 454schreiben 99umschalten 83
Quellfeld 120, 138Quelltabelle 183
R
Radiobutton 347RADIOBUTTON GROUP 348Rahmen 373
Rahmenprogramm 461Rahmenwerk 529READ 415, 420, 448READ INDEX 415READ INTO 415, 416READ WITH KEY 421Rechengenauigkeit 121, 122, 235Rechenzeichen 119
– 119* 119/ 119, 122, 230+ 118
Rechnungswesen 41Redundanz 213Referenzfeld 192, 216, 224Registerkarte, Feld 205Remote Function Call 538Remote-Aufruf 538Reorganisationsarbeit 182REPLACE 134, 148REPORT 90, 109, 368Report 32
Ausgabe 336Datenübergabe 500externen aufrufen 469kopieren 108starten 364Variante 364, 469
REPORT LINE-SIZE 104Repository-Infosystem 473reservierter Speicherbereich, freigeben
426RETURN 305Returncode 160, 258, 261, 263, 264,
320, 450, 490Returncode, CASE-Struktur 296REUSE_ALV_GRID_DISPLAY 170,
176RFC 538Rolle 253Rückgabewert 160Rückruffunktion 172Rumpfzeile 502
löschen 416, 425, 426verändern 418
3803-8.book Seite 569 Freitag, 31. Juli 2015 3:10 15
Index
570
S
Sammelprofil 253Sandbox-System 29, 546Sandkasten 29, 546SAP Business Process Management
536SAP Community Network 546SAP Enterprise Portal 535SAP ERP 24SAP Gateway 25, 541SAP GUI 27, 38SAP HANA 529SAP HANA, Datensatzsortierung 97SAP Inside Track 546SAP List Viewer 170SAP Logon 38SAP Memory 518, 524
globales 501lesen 501lokales 501schreiben 501
SAP NetWeaver Business Client 27, 32SAP Process Integration 540SAP TechEd 547SAP-Forum 546SAPPHIRE NOW 547SAP-Release 543SAPscript-Editor 63SAP-System, Architektur 25SAP-Trial-System 17, 546SAP-Weblog 546SBAL_DOCUMENTATION 372Schachtelung 102, 294, 297, 299, 301,
403Ebene 294Include-Programm 459
Schaltjahr 311Schleife 96, 102, 248, 297, 397
Abbruchanweisung 302äußere 299Durchlauf begrenzen 298Endlosschleife 298innere 299mit Bedingung 297ohne Bedingung 297Verarbeitung 103Zähler 299
Schlüsselbenutzerdefinierter 399eindeutiger 399, 404, 415generischer 198nicht eindeutiger 399, 403, 415
Schlüsselfeld 57, 196, 207, 415hinzufügen 212löschen 213, 216Manipulation 182Nicht-Schlüsselfeld 187, 211Veränderung 211
Schlüsselverzeichnis 542Schlüsselwortdokumentation 91Schnittstelle 403Schrägstich 97Schreibsperre 256Schreibweise 401SCN 546Scope 491Screen Painter 47, 335SE11 52, 183SE24 493SE37 473SE38 77SE91 369SELECT 95, 248, 257, 296, 297, 411SELECTION-SCREEN 373SELECTION-SCREEN BEGIN OF
BLOCK 375SELECTION-SCREEN BEGIN OF LINE
373SELECTION-SCREEN COMMENT 374SELECTION-SCREEN END OF BLOCK
375SELECTION-SCREEN END OF LINE
373SELECTION-SCREEN FOR FIELD 374SELECTION-SCREEN POSITION 375SELECTION-SCREEN TITLE 376SELECTION-SCREEN WITH FRAME
376SELECT-OPTIONS 349Selektion 341, 349Selektionsbild 336, 344, 359, 363,
470Abbruch 371Layout 372
3803-8.book Seite 570 Freitag, 31. Juli 2015 3:10 15
Index
571
speichern 359übergehen 471Vorlage 359
Selektionstabelle 349Selektionstext 354, 355
aktivieren 358anlegen 355pflegen 356
Selektionsvariante anlegen 359semantische Eigenschaft 199SEPARATED BY 138Session-Breakpoint 86, 154, 166SET PARAMETER 501SET PARAMETER ID 501Shared Objects 503
Gebiet 503Gebietswurzelklasse 504
SHIFT 133SHMA 503Sichtbarkeit 491Sidepanel 32SIGN 349Signatur, digitale 401Sizing 29SKIP 99, 316SOAP 539SORT 423, 450SORT AS TEXT 424SORT BY 423SORT DESCENDING 424SORTED TABLE 404Sortierkriterium 423Sortierreihenfolge 423sortierte Tabelle 400, 419, 421Sortierung 423
absteigende 424aufsteigende 424binäre 423sprachspezifische 424
soziale Medien 546SPACE 146Spalte 399Spaltenaufteilung 127Speicherbereich 405Speicherbereich, reservierter 426Speicherplatz, initialer 403
Sperreaufheben 256betriebswirtschaftliche 254Datenbanksperre 254logische 256Zeitpunktproblematik 256
Sperrkonzept 254physische Datenbank 254SAP-System 255Sperrproblematik 256
Sperrobjekt 255entsperren 255Sperre setzen 255
Sperrtabelle 255, 256SPLIT 139, 148SPLIT AT 140Sprachenschlüssel 368SQL 252SQL, natives 34Stammdaten 55STANDARD TABLE OF 403Standardschlüssel 399Standardselektionsbild 337Standardsoftware 542Standardtabelle 204, 211, 399, 403,
419anlegen 402erweitern 203
Start über Variante 80START-OF-SELECTION 37, 339, 391,
460Startwert 115, 343, 349Status 78Stellungsoperand 138, 371, 464, 469Steuerungskomponente, zentrale 525Stoppschild 434Stoppuhr 301Streuwertfunktion 401string 130String-Literal 135String-Operation 132, 141, 231, 244Struktur 94, 205
Append 202beenden 406deklarieren 395flache 206Include 206
3803-8.book Seite 571 Freitag, 31. Juli 2015 3:10 15
Index
572
interne Tabelle 396Komponente 205Pflegebildschirm 208SYST 222Unterstruktur 206Zeilentyp 399
Strukturierung 453SUBMIT 470, 472, 501SUBMIT AND RETURN 472SUBMIT VIA SELECTION-SCREEN
470SUBMIT WITH 470SUBTRACT 119Subtraktion 117Suchbegriff 135Suche 88
generische 474sequenzielle 421
Suffix 482Summe
ausgeben 315ermitteln 315
Summenfeld, initialisieren 316Switch Framework 544SY-DATUM 222SY-INDEX 299, 301, 304Symbolleiste 83Syntax 401
Fehler 84prüfen 84, 460
SYST 222Systemarchitektur 25Systemdatum 222Systemmandant 59Systemsteuerung 542Systemtabelle 159, 368Systemzeit 222SY-SUBRC 160, 258, 262, 296, 450,
480, 490SY-TABIX 160, 422
T
t (Datentyp) 222T100 368, 391
Tabelle 402aktivieren 73ändern 202anlegen 54Cluster 53Deklaration 101, 401Eintrag 186erweitern 202, 203Fehlermeldung 192Feld 399Feld löschen 216Fremdschlüsseltabelle 197Hash-Tabelle 400im Arbeitsspeicher 395Index 421Indextabelle 400, 415, 418Inhalte durchsuchen 420interne � interne TabelleKopf 398kopieren 182, 183lokaler Name 468löschen 218, 220mehrdimensionale Verarbeitung 398mit Kopfzeile 418modifizieren 181Modus 155n-dimensionale Verarbeitung 398Pflegedialog 73pflegen 54, 187Pool 53prüfen 71Prüftabelle 197Rumpf 397, 398, 411, 417, 466sichern 56sortierte 400, 419, 421Sortierung 423Standard 399Status 185T100 368, 391TCURC 194technische Einstellungen 71temporäre 396transparente 53Typ 402, 403, 407Umsetzung 182, 213, 216Verarbeitung 401vervollständigen 70
3803-8.book Seite 572 Freitag, 31. Juli 2015 3:10 15
Index
573
Zeile 186, 397, 399Tabellenarbeitsbereich 259, 266
löschen 262Puffer 262
Tabellenbereich 94Tabellenbereich prüfen 160Tabellenfeld
löschen 216pflegen 57
Tabelleninhaltanzeigen 75modifizieren 257
Tabellenstruktur 104Tabellenstruktur, physische 211TABLE 416TABLES 94, 397Tablespace 71TCURC 194, 197technische Einstellung 71Teil-String 141temporäre Daten 349Testmodus 84Testsystem 28, 29Text
freier 372länderspezifischer 78Platzhalter 367
Textelement 244, 355Textelement, ergänzendes 366Textfeld, numerisches 131Textfeldliteral 135Textpool 355, 358Textpool aktivieren 368Textsymbol 355, 366, 373
aktivieren 368Nummer 368pflegen 367
TIMES 298TITLE 376Transaktion
Berechtigung 254Code 45Laufzeit 501SHMA 504
TRANSLATE 346transparente Tabelle 53Transparenz 37
Transport 56Transportwesen 30Trennzeichenkette 140Trial-System 17, 546Trick 35 226, 228Twitter 546Typdeklaration 95, 402, 404, 410TYPE 113, 131, 344TYPE-POOLS 178TYPES 403Typkonvertierung 147, 221Typkonvertierung, automatische 307
U
Übergabewert 489Übersetzbarkeit 367UDDI 540ULINE 98Umsetzung
im Dialog 215physische 215
Unabhängigkeit 24Und, logisches 310UNDER 128Unicodeprüfung 80UNIT 191, 236Unterprogramm 36, 455, 460
aufrufen 461, 464, 468, 515externes 468Feld 464internes 468
Unterstruktur 206UPDATE 258, 262, 263Upgrade 203User Exit 543USING 464UZEIT 222
V
VALUE 115, 131, 222, 445VALUE CHECK 345Variable 112, 298, 341
explizit deklarieren 463globale 462
3803-8.book Seite 573 Freitag, 31. Juli 2015 3:10 15
Index
574
implizit deklarieren 464lokale 463Name 112
Variante 81, 359anlegen 359deaktivieren 363Eigenschaft 362Pflege 362schützen 362, 364Start über 80
VerarbeitungBlock 36, 337, 454direkte 215Hintergrund 215lesende 397schreibende 397
Verbuchungsaufgabe 477Verprobung 190, 200Versionierung 83Verwendungsnachweis 85, 218Verzweigung 291VIA SELECTION-SCREEN 470, 471Vorbelegung 116Vorselektion 315Vorwärtsnavigation 60, 209, 457, 501
W
WAERS 194, 196Währungsbetrag 191Währungsbezeichnung 224Währungseinheit 191, 196, 280Währungsfeld 191, 223Währungsschlüssel 196, 223, 224Wartbarkeit 37Watchpoint 150, 162
anlegen 162Modus 162sichern 166
Web Dynpro 25Web Dynpro ABAP 169, 534Web Dynpro Java 535Webbrowser 535Webservice
OData 541SOAP 538
Wechselkursumrechnung 235Weitersuchen 88Wert
gültiger 193negativer 116übergeben 469, 470
Wertebereich 65, 188Wertehilfe 188, 200Wertehilfeliste 190, 200Werteliste 193Wertetabelle 67, 194, 196, 197, 198WHEN OTHERS 295WHERE 267, 297, 422WHILE 300Wiederholung � SchleifeWiederverwendbarkeit 402Wiederverwendung 456WITH 371, 470WITH FRAME 376WITH KEY 415, 421WITH UNIQUE KEY 404Workarea 94, 160, 259, 262, 266,
270, 406, 416, 433deklarieren 259, 404, 407füllen 408initialisieren 272, 425interne Tabelle 397, 406
Workprozess 33Workprozess, Sperrkonzept 255WRITE 91, 97, 127WRITE UNDER 128WRITE, Kettensatz 98
X
X-Ablage 89XML 539
Y
Y-Ablage 89
Z
Z-Ablage 89
3803-8.book Seite 574 Freitag, 31. Juli 2015 3:10 15
Index
575
ZahlDezimalzahl 113Exponentialzahl 121ganze 113gepackte 121, 223
Zeichenalphanumerisches 130ausschneiden 132numerisches 131
Zeichenkette 102, 129, 221Anfangsposition 141Datentyp 130ergänzen 132ersetzen 132, 134modifizieren 129Operation 132suchen 132verdichten 136verschieben 132, 133zerlegen 139zusammenziehen 137
Zeile 397, 399aktualisieren 264ändern 414anlegen 264
Doppelung 400einfügen 212, 419frei gestalten 373löschen 212, 216, 264, 421redundante 416
Zeilenblock � BlockZeilenstruktur 403Zeilentyp 399, 402, 406, 407
Deklaration 403deklarieren 404Struktur 399
Zeilenumbruch 97, 104Zeitfeld 222
deklarieren 222füllen 223
Zeitpunktproblematik 256Zeitspanne bei Datumswerten 229Zielfeld 120, 138Zieltabelle 184Zugriffsaufwand 421Zugriffsschlüssel 399Zugriffszeit 399, 400, 401Zusatz 91Zwischenablage 89Zwischenpuffer 89
3803-8.book Seite 575 Freitag, 31. Juli 2015 3:10 15
Karl-Heinz Kühnhauser, Thorsten Franz
Einstieg in ABAP575 Seiten, broschiert, 4. Auflage 2015 39,90 Euro, ISBN 978-3-8362-3803-8
www.sap-press.de/3878
Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Sie dürfen sie gerne emp-fehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Bitte beachten Sie, dass der Funktionsumfang dieser Leseprobe sowie ihre Darstellung von der E-Book-Fassung des vorgestellten Buches abweichen können. Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.
Teilen Sie Ihre Leseerfahrung mit uns!
Karl-Heinz Kühnhauser war geschäftsführender Gesellschaf-ter der RGS GmbH & Co. KG, einem SAP-Servicepartner. Sein Wissen aus über 1.000 Schulungstagen gab er auch als Lehr-beauftragter für SAP-Anwendungsentwicklung und Personal-wirtschaft an der Fachhochschule Ansbach sowie als Mitglied des Ausbilderarbeitskreises und des Prüfungsausschusses der IHK weiter. Er besaß Projekterfahrung aus zahlreichen Kun-denprojekten. Karl-Heinz Kühnhauser ist im Juli 2009 überra-schend gestorben.
Thorsten Franz ist Gründer des SAP-Beratungsunternehmens operatics und seit mehr als 15 Jahren als Architekt, Berater, Entwickler, Projektleiter und Coach im SAP-Entwicklungsum-feld tätig. Er wurde als SAP Mentor und SAP HANA Distin-guished Engineer ausgezeichnet und ist häufig als Referent bei internationalen Entwicklerkonferenzen anzutreffen. Seine Schwerpunkte sind große Entwicklungsprojekte und SAP-Ein-führungen sowie der Einsatz innovativer Technologien wie SAP HANA.
Wissen aus erster Hand.