ebook img

Einstieg in ABAP PDF

12 Pages·2015·0.41 MB·German
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Einstieg in ABAP

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 sogar mit Datumswerten und Zeichenketten. In diesem Kapitel beginnen wir 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 Neuanlage eines Reports wird in Abschnitt 3.1, »ABAP-Report anlegen«, beschrieben. Als Alternative können Sie aber auch einen bestehenden Report kopieren und ihn anschließend modifizieren. Auf diese Weise bleibt der alte Report erhalten, und der neue wird unter einem eigenen Namen abgespeichert. 4.1 Report vorbereiten Starten Sie im Einstiegsbild für den ABAP Editor (SAP Menü (cid:2) Werk- Report kopieren und zeuge (cid:2) ABAP Workbench (cid:2) Entwicklung (cid:2) ABAP Editor). Im Start- modifizieren bildschirm geben Sie als Programmnamen den Namen unseres letz- ten Reports ein, »Z_TEILNEHMERLISTE01«. Anschließend können 107 4 Felder und Berechnungen Report vorbereiten 4.1 Sie entweder über Programm (cid:2) Kopieren oder über den Button Kopieren ( , (Strg) + (F5)) den Kopiervorgang starten (siehe Abbil- dung 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 unseren neuen Report als Lokales Objekt abspeichern. Das System zeigt Ihnen anschließend wieder das Einstiegsbild des ABAP Editors mit dem neuen Programmnamen. Das alte Programm wurde mit allen gewählten Elementen kopiert; beachten sollten Sie nur, dass der neue Abbildung 4.1 ABAP-Programm kopieren Quellcode noch inaktiv ist. Sie werden nach dem Namen des Zielprogramms gefragt (siehe Abbil- Elemente kopieren dung 4.2). Dieser muss sich vom Namen des Quellprogramms unter- Hätten Sie beispielsweise für den alten Quellcode eine Dokumentation scheiden, und es gelten für ihn selbstverständlich auch die Namens- hinterlegt, könnte diese ausgewählt und kopiert werden. Alle Elemente konventionen, wie sie in Abschnitt 2.1.2, »Tabelle anlegen und dieses Fensters sind keine eigenen Objekte der Datenbank, sondern hän- pflegen«, beschrieben werden. gen fest am Report, d.h., dass beispielsweise die Dokumentation für den Report nicht mehrfach verwendbar ist (etwa für andere Reports), wie es bei einem Datenelement der Fall wäre. Ein Datenelement ist dagegen ein eigenes Objekt und damit mehrfach verwendbar. Über den Ändern-Button ( ) gelangen Sie in den Änderungsmodus für den Quellcode. Was Sie jetzt sehen, ist nicht neu: Den alten Quell- Abbildung 4.2 Namen eines Zielprogramms auswählen code kennen Sie bereits. Auffallen könnte Ihnen aber, dass die REPORT-Anweisung nicht mehr ganz korrekt ist. Sie wurde zwar rich- Haben Sie den Namen des Zielprogramms eingetragen, setzen Sie den tig kopiert, doch da sich der Programmname im Operanden geändert Kopiervorgang über die Schaltfläche Kopieren oder die (¢)-Taste hat, sollte es der erste Arbeitsschritt im neuen Quellcode sein, den fort. Anschließend haben Sie die Wahl, neben dem Quellcode und Namen auf unseren neuen Programmnamen umzuschreiben: Z_TEIL- den Textelementen auch andere Elemente des alten Programms mit NEHMERLISTE02. zu kopieren (siehe Abbildung 4.3). 108 109 4 Felder und Berechnungen Report vorbereiten 4.1 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ächst die alten Anweisungen in Kommentarzeilen um. Hierzu markieren Sie mit dem Cursor den zu bearbeitenden Zeilenblock wie in jedem Editor üblich mit den Cursortasten oder mit der Maus. Der markierte Block wird nun dunkelblau hinterlegt dargestellt (siehe Abbildung 4.4) Abbildung 4.5 Block in Kommentarzeilen umwandeln Aus Abbildung 4.5 können Sie auch ableiten, wie Sie bei Bedarf einen Block von Kommentarzeilen analog wieder in Anweisungszeilen umwandeln: Hierzu markieren Sie den Block sowie das Blockende und wählen Hilfsmittel (cid:2) Block/Ablage (cid:2) Kommentar-* löschen. Da wir für die Anweisungen ab Zeile 10 aber tatsächlich im Folgen- Zeilenblock löschen den keine Verwendung mehr haben, können Sie den Zeilenblock ruhig löschen. Hierfür markieren Sie zunächst wieder den entspre- chenden Block und drücken dann die (Entf)-Taste auf Ihrer Tastatur. Abbildung 4.4 Block markieren Sichern nicht vergessen! Anschließend wandeln Sie über Hilfsmittel (cid:2) Block/Ablage (cid:2) Kom- Vergessen Sie nicht, die Veränderung am Quellcode nach wichtigen Arbeitsschritten oder vor Arbeitspausen über den Sichern-Button ( ) zu mentar-* einfügen den gesamten Block in Kommentarzeilen um speichern. (siehe Abbildung 4.5). Als Ergebnis sind alle Zeilen des Blocks in Spalte1 mit einem Stern als Kommentarzeilen gekennzeichnet. War Wir können uns nun der eigentlichen Aufgabe dieses Kapitels zuwen- Spreu vom eine Zeile bereits vorher eine Kommentarzeile, hat sie jetzt zwei füh- den: Wir verarbeiten nun zwei Zahlen mit ABAP mithilfe der vier Weizen trennen rende Sterne. 110 111 4 Felder und Berechnungen Felder deklarieren 4.2 Grundrechenarten und schreiben das Ergebnis in eine Liste. Hierzu Sprechende Variablen sind drei Arbeitsschritte erforderlich: Die Namen der Variablen sollten darüber hinaus sprechend, d.h. selbster- 1. die Felder für die Zahlen deklarieren 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 seien 2. das Ergebnis berechnen Sie dementsprechend gnädig mit Dritten – Sie könnten es in wenigen 3. das Ergebnis ausgeben Wochen selbst sein. Felder haben einen symbolischen Namen (z.B. ZAHL01), eine defi- 4.2 Felder deklarieren nierte Länge und einen Datentyp. Über die symbolischen Namen werden die Speicheradressen angesprochen, und die dort abgelegten Wie in der Praxis müssen auch bei unserer Teilnehmerverwaltung Inhalte können gelesen und verarbeitet werden. Für die Verarbeitung Inhalte einer oder mehrerer Tabellen im Report durch Berechnungen gelten je nach Datentyp entsprechende Regeln, die allerdings von weiterverarbeitet, ergänzt oder ausgewertet werden. Hierzu benöti- Programmiersprache zu Programmiersprache sehr unterschiedlich gen wir im Report eigene Felder. sind. Felder verarbeiten Auch ABAP verfügt über Regeln, auf welche Weise Felder verarbeitet Sollen sich die Inhalte unserer Zahlenfelder verändern können, DATA werden. Das System muss die Zahlen in unserem Beispiel zwischen- deklarieren wir für den Einstieg unsere Felder mit der DATA-Anwei- speichern, ablegen und sie sich für folgende Verarbeitungsschritte sung. Für unsere Berechnungen bieten sich vorerst zwei Datentypen wieder zurückholen. Hierzu werden die Werte an einem Ort bzw. für die Variablen an, nämlich ganze Zahlen (Integer) und Dezimal- einer Datenadresse im Speicher temporär abgelegt. zahlen. In ABAP heißen diese Orte Felder oder Datenobjekte. Sind die Inhalte Soll das Feld ZAHL01 eine ganze Zahl enthalten, lautet die Anweisung TYPE i der Datenobjekte durch ABAP-Anweisungen veränderbar, spricht folgendermaßen: man von Variablen, sind sie es nicht, spricht man von Konstanten. DATA zahl01 TYPE i. Soll das Feld ZAHL01 hingegen eine Dezimalzahl mit zwei Nachkom- TYPE p 4.2.1 Variablen deklarieren mastellen sein, lautet die Anweisung: Namen vergeben Bei der Namensvergabe für Variablen müssen Sie Folgendes beach- DATA zahl01 TYPE p DECIMALS 2. ten: Bei der Entscheidung, welche Deklaration sinnvoller ist, kommt es (cid:2) Der Name soll mit einem Buchstaben beginnen; er darf nicht aus- demnach auf den Verwendungszweck an. Felder vom Typ i werden schließlich aus Ziffern bestehen. üblicherweise für Zähler oder Stückzahlen verwendet. Felder vom (cid:2) Der Name darf maximal 30 Zeichen lang sein. Typ p sind für arithmetische Berechnungen mit Nachkommastellen (cid:2) Der Name soll möglichst keine Sonderzeichen enthalten, bis auf den üblich. Wichtig ist, vor der weiteren Programmierung zu überlegen, Unterstrich. Ausdrücklich verbotene Sonderzeichen sind Plus (+), welche Rechen- und Anzeigegenauigkeit bei der gewünschten Komma (,), Doppelpunkt (:), Klammer auf (() und Klammer zu ()). Berechnung erforderlich ist, weil sich die Zahl der nötigen Nachkom- (cid:2) Für den Namen dürfen keine reservierten Wörter für ABAP-Anwei- mastellen hiernach richtet – denken Sie z.B. an Wechselkurse. Fünf Nachkommastellen sind in solchen Fällen keine Seltenheit, wogegen sungen oder Zusätze verwendet werden. die 14 erlaubten Nachkommastellen eher selten ausgereizt werden. 112 113 4 Felder und Berechnungen Felder deklarieren 4.2 Elementare Beide Datentypen, i und p, sind für ABAP elementare Datentypen werden, müssen Sie sich bei der Deklaration beispielsweise auf ein Datentypen mit fester Länge. Deshalb müssen Sie die Feldlänge hier nicht explizit Tabellenfeld im ABAP Dictionary beziehen. Möchten Sie im Report angeben. Die beiden Datentypen sind zwei von acht dieser in ABAP die Variable LAUFENDE_NUMMER genauso deklarieren wie das Feld eingebauten elementaren Datentypen fester Länge. TNUMMER der Tabelle ZTEILNEHMER, schreiben Sie: DATA laufende_nummer TYPE zteilnehmer-tnummer. Umfassenderes Typkonzept Mit dieser Methode müssen Sie in den einzelnen Reports keine Anpas- Einen elementaren Datentyp variabler Länge werden Sie noch kennenler- nen. Für ein leichteres Verständnis beschränken wir uns vorerst auf die sung dieser Variablen mehr vornehmen. Sollte sich je eine Änderung wichtigsten Datentypen. Auf die Darstellung von Referenzdatentypen und hinsichtlich der Länge ergeben, betrifft sie ausschließlich die Domäne komplexen Datentypen wird verzichtet. Sie sollten jedoch im Hinterkopf des Tabellenfeldes. Alle betroffenen Reports werden automatisch behalten, dass das Typkonzept in ABAP für fortgeschrittene Anwendungen beim ersten Start nach der Änderung nachgeneriert, und kein einziger viel umfassender ist, als hier dargestellt. Quellcode muss aus diesem Grund mehr geändert werden. Möchten Sie zwei Variablen gleichlautend deklarieren, müssen Sie Postleitzahlen zwei Anweisungszeilen schreiben und darauf achten, dass Sie diesel- Der Praxisbezug dieses Vorgehens wird schnell deutlich, wenn Sie sich ben Attribute verwenden, beispielsweise: daran erinnern, dass in der Bundesrepublik die Postleitzahlen früher vier- DATA zahl01 TYPE p DECIMALS 2. stellig waren und im Jahr 1993 auf fünf Stellen umgestellt wurden. Teil- DATA zahl02 TYPE p DECIMALS 2. weise mussten Entwickler in Hunderten kundenspezifischer Programme das Postleitzahlenfeld suchen und umstellen, die Programme wieder bin- LIKE Dies hat allerdings den entscheidenden Nachteil, dass Sie immer den und kompilieren. Dies war eine absolut lästige Angelegenheit – man selbst dafür sorgen müssen, die Deklaration von ZAHL02 nachzupfle- glaubt gar nicht, wie viele verschiedene Möglichkeiten es gibt, um das gen, falls sich die Deklaration von ZAHL01 ändert. Bei vielen abhängi- Wort »Postleitzahl« abzukürzen und eine Variable zu deklarieren! Mit unserer Methode wäre das Problem schnell gelöst gewesen. gen Deklarationen wird dies schnell zu einer sehr mühseligen und langatmigen Arbeit. Einfacher ist es, bei ZAHL02 auf die Deklaration Ähnliche Probleme treten auf, wenn Unternehmen – beispielsweise bedingt durch eine Fusion – ihre Organisation erheblich umstellen und von ZAHL01 zu verweisen. Dies geschieht mit dem Zusatz LIKE: plötzlich das früher einstellige Regionskennzeichen nicht mehr ausreicht, DATA zahl01 TYPE p DECIMALS 2. um knapp fünfhundert Regionen zu unterscheiden, in denen das Unter- DATA zahl02 LIKE zahl01. nehmen tätig ist. Oder, um zum Beispiel Postleitzahl zurückzukehren, das Unternehmen wird international tätig und muss neben rein numerischen Damit ist gewährleistet, dass die Deklaration von ZAHL02 immer rich- Postleitzahlen auch englische Postleitzahlen verwalten, die Buchstaben tig bleibt, da sie so an die Deklaration von ZAHL01 geknüpft ist. Sollte enthalten. einmal ein Anlass bestehen, die Zahl der Dezimalstellen beispiels- weise von zwei auf vier zu erhöhen, muss nur die Deklaration von Für jeden Datentyp vergibt das System Initialwerte. Für die Daten- VALUE ZAHL01 geändert werden; die Deklaration von ZAHL02 wird automa- typen i und p belegt das SAP-System das Feld zunächst mit dem tisch angepasst. Natürlich gilt dies entsprechend für alle Variablen in Wert 0. Manchmal kann es jedoch sehr nützlich sein, eine Variable einem Report, die auf die Deklaration von ZAHL01 verweisen. selbst mit einem Startwert zu versehen – hierzu verwenden Sie bei der DATA-Anweisung den Zusatz VALUE. Soll beispielsweise die Varia- Inkonsistenzen Auf diese Weise können Sie zwar erreichen, dass Inkonsistenzen vermeiden innerhalb eines Reports vermieden werden, aber falls in verschiede- ble ZAHL01 eine ganze Zahl darstellen und mit dem Wert 5 vorbelegt werden, lautet die Anweisung: nen Reports gleichlautende Deklarationen von Variablen benötigt 114 115 4 Felder und Berechnungen Grundrechenarten 4.3 DATA zahl01 TYPE i VALUE 5. derten Inhalt, mit einer eigenen Anweisung namens CONSTANTS arbei- ten. Damit werden wir denjenigen Fällen gerecht, in denen Bei einer Vorbelegung mit dem negativen Wert –105 müsste das gewährleistet sein muss, dass ein Feldinhalt während der Laufzeit des negative Vorzeichen mitgeschrieben werden, und die Anweisung Reports unverändert bleiben soll. Stoßen Sie in der Praxis auf ein sol- würde entsprechend lauten: ches Beispiel, ist die CONSTANTS-Anweisung geeigneter als die DATA- DATA zahl01 TYPE i VALUE -105. Anweisung. Das System unterstützt dieses Konzept dadurch, dass bei Initialwerte mit Auch dies ist relativ einfach. Soll die Variable ZAHL01 hingegen eine Veränderungsversuchen dieser Felder Syntax- oder Laufzeitfehler Nachkommastellen Dezimalzahl mit zwei Nachkommastellen sein, wird das Ganze schon generiert werden. etwas aufwendiger. Lautet der Plan, die Variable ZAHL01 beispiels- Da diese Anweisungen allerdings bis auf den Verwendungszweck Einfache weise mit dem Wert 3,14 vorzubelegen, würde man eigentlich eine weitgehend identisch sind, verzichten wir für den Einstieg auf die arithmetische Anweisung vermuten wie: Operationen CONSTANTS-Anweisung. Für einfache arithmetische Operationen DATA zahl01 TYPE p DECIMALS 2 VALUE 3,14. könnten unsere Deklarationen deshalb vorerst so aussehen: Dies funktioniert aber leider nicht: Der Doppelpunkt nach DATA fehlt, DATA zahl01 TYPE p DECIMALS 2 VALUE '-4.56'. DATA zahl02 LIKE zahl01 VALUE '5.67'. und das Komma ist für einen Kettensatz und eine zweite Anweisung DATA ergebnis LIKE zahl01. reserviert, in diesem Fall: Die Variable ZAHL01 gibt den Datentyp p und die Anzahl von zwei DATA 14. Dezimalstellen vor. Außerdem wird der Variablen die negative Zahl – Dies ergäbe leider auch keinen Sinn. Es funktioniert auch nicht, für 4,56 als Startwert zugewiesen. Die Variable ZAHL02 verweist hinsicht- das Dezimaltrennzeichen anstelle des Kommas einen Punkt einzuset- lich des Typs und der Dezimalstellen auf die Variable ZAHL01 und zen. Grundsätzlich ist diese Idee ausgezeichnet, weil das System erhält als Startwert die Zahl 5,67. Die Variable ERGEBNIS verweist hin- intern als Dezimaltrennzeichen tatsächlich einen Punkt verwendet, sichtlich des Typs und der Dezimalstellen ebenfalls auf ZAHL01. aber wie Sie wissen, ist der Punkt für das Ende einer Anweisung Der Vorteil dieser Schreibweise besteht darin, dass bei einer Ände- reserviert. Für das System würden dann zwei Anweisungen in einer rung der Deklaration nur die Deklaration von ZAHL01 geändert wer- Zeile stehen, wobei die zweite keinen Sinn ergibt. den muss, die Deklarationen von ZAHL02 und ERGEBNIS werden auto- Lösung: Literal Deshalb ist es formal korrekt, wenn Sie den Vorbelegungswert in ein matisch angepasst. Literal schreiben: DATA zahl01 TYPE p DECIMALS 2 VALUE '3.14'. 4.3 Grundrechenarten Bei der Vorbelegung mit der negativen Zahl –4,56 lautet die richtige Syntax entsprechend: Für die Addition, Subtraktion, Multiplikation und Division in ABAP DATA zahl01 TYPE p DECIMALS 2 VALUE '-4.56'. haben wir damit bereits alle erforderlichen Variablen deklariert. Arithmetische Operationen können Sie nun leicht über Zuweisungen durchführen: Soll beispielsweise der Inhalt der Felder ZAHL01 und 4.2.2 Konstanten deklarieren ZAHL02 addiert werden, schreiben Sie einfach: CONSTANTS Der Vollständigkeit halber erwähnen wir hier, dass wir für die Dekla- ergebnis = zahl01 + zahl02. ration von Konstanten, d.h. Feldern mit gleichbleibendem unverän- 116 117 4 Felder und Berechnungen Grundrechenarten 4.3 Mathematischer Formal ist anzumerken, dass rechts vom Gleichheitszeichen die arith- Variable links vom Gleichheitszeichen eingesetzt. Mit anderen Wor- Ausdruck metische Operation selbst stehen muss. Das Ergebnis der Operation ten: ZAHL01 erhält einen neuen Inhalt. wird in das links vom Gleichheitszeichen stehende Feld eingetragen, Für die Subtraktion, Multiplikation und Division lautet die Schreib- die Felder ZAHL01 und ZAHL02 behalten auch nach der Berechnung weise entsprechend: ihren alten Inhalt. Anders hingegen verhält es sich mit dem Feld links vom Gleichheitszeichen: Im Feld ERGEBNIS steht nach der Berechnung ergebnis = zahl01 - zahl02. ergebnis = zahl01 * zahl02. nicht mehr der alte, sondern der neue Inhalt; der alte Inhalt des Fel- ergebnis = zahl01 / zahl02. des wurde ersetzt. Als Rechenzeichen für Subtraktionen verwenden Sie das Minuszei- Anweisungen mit Leerzeichen in arithmetischen Operationen chen (-), für Multiplikationen das Sternchen (*) und für Divisionen Schlüsselwort Darüber hinaus ist für die richtige Schreibweise der Umgang mit Leerzei- den Schrägstrich (/). Anstelle von Rechenzeichen könnten wir auch chen wichtig: Sie müssen sowohl vor als auch nach dem Gleichheitszei- die Schlüsselwörter ADD, SUBTRACT, MULTIPLY und DIVIDE verwenden, chen sowie vor und nach dem Rechenzeichen stehen, im oberen Beispiel die in der Praxis aber relativ selten anzutreffen sind; auch wir werden dem Pluszeichen (+). Wenn Sie später einmal mit komplexeren Ausdrü- im Folgenden darauf verzichten. cken und mehreren Klammerebenen arbeiten, sollten Sie schon jetzt daran denken, dass in solchen Fällen auch vor und nach jeder Klammer ein Leer- Damit haben Sie die Grundvoraussetzungen kennengelernt – und wir zeichen stehen muss. Dabei muss es jeweils mindestens ein Leerzeichen wenden uns den Details zu, denn hierin versteckt sich ja bekanntlich sein; die Eingabe mehrerer Leerzeichen schadet nicht weiter. oft der Teufel. Beispielsweise haben nicht alle Felder die gleichen Der Grund für diese Schreibkonvention liegt darin, dass es Funktionen Attribute oder sind untereinander verträglich. gibt, die ohne Leerzeichen direkt an das Feld geschrieben werden. Damit das System nun unterscheiden kann, ob es sich um eine arithmetische Operation oder eine solche Funktion handelt, wird das Leerzeichen unbe- 4.3.1 Kompatible und konvertible Datenobjekte dingt benötigt. Verfügen Felder über die gleichen Attribute, spricht man von kompa- Kompatible und tiblen Datenobjekten, d.h. dass diese Felder in allen technischen konvertible Mit Festwerten Soll zum Inhalt der Variablen ZAHL02 ein Festwert, beispielsweise die Datenobjekte Eigenschaften (Typ, Feldlänge, Dezimalstellen) vollständig überein- arbeiten Zahl 2, addiert werden, lautet die Anweisung: stimmen. Sind die Attribute untereinander verträglich, spricht man zahl02 = zahl01 + 2. von konvertiblen Datenobjekten. Dabei müssen die Datentypen kon- vertiert, d.h. umgewandelt werden; Voraussetzung hierfür sind ent- Auch hier gilt die Regel, dass in der Variablen links vom Gleichheits- sprechende Konvertierungsregeln. Falls die Konvertierung nicht zeichen der alte Inhalt durch den neuen ersetzt wird. Natürlich möglich ist, entstehen Syntax- oder Laufzeitfehler. könnte man zum Inhalt derselben Variablen auch einen Festwert addieren, beispielsweise um einen Zähler um 1 zu erhöhen. Dann Beruhigend ist, dass im SAP-System bereits zahlreiche Konvertie- Automatische würde die Anweisung lauten: rungsregeln hinterlegt sind (siehe Abschnitt 4.3.2, »Konvertierungs- Umwandlung regeln«). Das System wandelt bei entsprechenden Anweisungen nach zahl01 = zahl01 + 1. diesen Regeln automatisch von einem Datentyp in einen anderen um. Auch hier gilt wieder das gleiche Prinzip: Rechts vom Gleichheitszei- Sofern diese Regeln die von uns gewünschten Ergebnisse erzielen, chen wird der Wert der Operation bestimmt, d.h. der Inhalt von haben wir kein Problem. Leider ist dies aber nicht immer der Fall, ZAHL01 und 1 werden addiert und das Ergebnis der Operation in die und leider existieren auch nicht für alle denkbaren Konstellationen Konvertierungsregeln. 118 119 4 Felder und Berechnungen Grundrechenarten 4.3 Fehlerquellen Ganze und gepackte Zahlen sowie Exponentialzahlen Zähneknirschend muss außerdem hingenommen werden, dass für solche Sollten beispielsweise ganze Zahlen, gepackte Zahlen und Exponentialzah- Fehler überwiegend die Entwickler selbst verantwortlich sind – denn es gibt len in einer Operation vorkommen, würden die Exponentialzahlen den z.B. keinen logischen Grund dafür, in einem Datumsfeld Sternchen und Datentyp auf höchster Ebene darstellen. Erst würden alle ganzen Zahlen in Sonderzeichen speichern zu wollen. Solche Syntax- oder Laufzeitfehler gepackte Zahlen umgewandelt, dann alle Zahlen in Exponentialzahlen, geschehen immer wieder einmal auch Fortgeschrittenen, und zwar insbe- und schließlich würde die Operation mit Exponentialzahlen berechnet. sondere dann, wenn bereits bestehende Anwendungen modifiziert werden Anschließend würde gemäß den Konvertierungsregeln der Wert der Expo- müssen. Auch bei einer Datenübernahme aus anderen Systemen tauchen nentialzahlen in das Ergebnisfeld eingetragen. Sie können sich wahr- solche Fehler auf – für einen Einsteiger erst einmal kein Grund zur Panik. scheinlich gut vorstellen, dass die Rechengenauigkeit schon durch den Datentyp des Ergebnisfeldes beeinflusst werden kann. 4.3.2 Konvertierungsregeln Um sich das Leben nicht zu erschweren, sollten Sie von Anfang an Was geschieht, Die Konvertierungsregeln legen fest, wie der Inhalt eines Quellfeldes in darauf achten, Ihre Datenobjekte möglichst kompatibel zu halten. wenn ... ein Zielfeld eingetragen wird. Quellfelder können verschiedene Daten- Der Vollständigkeit halber erwähnen wir hier das COMPUTE-Schlüssel- COMPUTE typen haben, wie die bereits vorgestellten vom Typ p für gepackte und wort, das für numerische Operationen das ursprüngliche ABAP-Kom- Typ i für ganze Zahlen. Da es, wie erwähnt, auch weitere Datentypen mando ist. Die Schreibweise für eine Addition unter Zuhilfenahme für Datums- und Zeitfelder oder Zeichenketten gibt, legen die Konver- des Schlüsselwortes COMPUTE lautet: tierungsregeln pro Datentyp genau fest, wie der Inhalt des Quellfeldes COMPUTE ergebnis = zahl01 + zahl02. in das Zielfeld eingestellt wird. Was geschieht, wenn Sie eine gepackte Zahl in ein Integerfeld stellen, was geschieht, wenn Sie eine gepackte Wie Sie sehen, ist die Anweisung nur länger, und die Lesbarkeit Zahl zum Inhalt eines Datumsfeldes addieren, oder was geschieht, wird nicht unbedingt erhöht. Glücklicherweise ist das Schlüsselwort wenn Sie eine gepackte Zahl in ein Character-Feld schreiben? Lassen Sie COMPUTE optional und wird in der Praxis – außer für Recherche- uns hierzu eine Konvertierungsregel als Beispiel ansehen. zwecke – kaum verwendet; die meisten Entwickler bevorzugen die verkürzte Schreibweise, die intern vom System exakt gleich behandelt Dezimalzahl Ist der Quelltyp ein Datenobjekt vom Typ p und der Zieltyp ein in ganze Zahl Datenobjekt vom Typ i (eine ganze Zahl), rundet das System die Dezi- wird, und auch wir arbeiten im Folgenden ohne das Schlüsselwort umwandeln COMPUTE: malstellen des Quellfeldes und stellt den Inhalt rechtsbündig in das Zielfeld. Ist das Zielfeld von seiner Länge her ausreichend, wird links ergebnis = zahl01 + zahl02. mit Nullen aufgefüllt, anderenfalls kommt es zu einem Überlauf bzw. Laufzeitfehler. Stellen Sie beispielsweise die gepackte Zahl 4,44 in ein Gut zu wissen … Integerfeld, hat ein Integerfeld danach den Inhalt 4; stellen Sie die Es gibt allerdings einen Fall, in dem es notwendig ist zu wissen, dass es gepackte Zahl 5,55 in ein Integerfeld, hat es den Inhalt 6. die COMPUTE-Anweisung gibt: Falls Sie im System die Dokumentation zu selten benötigten Funktionen suchen, finden Sie diese nämlich nur bei Konvertierung Falls in einer numerischen Operation mehrere verschiedene Daten- der COMPUTE-Anweisung. verschiedener typen vorkommen, konvertiert ABAP vor dem Ausführen der Opera- Ab SAP NetWeaver 7.0 EHP 2 bzw. SAP NetWeaver 7.3 erlaubt die Datentypen tion alle Datentypen in den höchsten vorkommenden Datentyp, führt COMPUTE-Anweisung den Zusatz EXACT, was bei Berechnungen mit dezi- dann die Operation mit den konvertierten Werten aus und stellt malen Gleitpunktzahlen ein besonderes Verhalten bewirkt. Dieser Zu- anschließend das Ergebnis – eventuell wieder über eine Konvertie- satz ist nur im Zusammenhang mit dem ausgeschriebenen Schlüsselwort COMPUTE verfügbar. rungsregel – in das Ergebnisfeld. 120 121 4 Felder und Berechnungen Codebeispiel zu Feldern und Berechnungen 4.4 4.3.3 Besonderheiten bei der Division Wieder unter der Annahme, dass alle übrigen Faktoren gleichbleiben, ergibt die ganzzahlige Division 1, Rest 1,11. Dieser Rest wird mit Verschiedene Fälle Für Berechnungen in ABAP stellen Addition, Subtraktion und Multi- zwei Dezimalstellen in die Zielvariable übertragen, und sie erhält plikation kein weiteres Problem dar; nur die Division sollten wir uns dementsprechend als Inhalt den Wert 1.11. noch etwas genauer ansehen. Es gibt Fälle, in denen Sie ein Divisions- ergebnis mit Nachkommastellen wünschen, aber auch Fälle, in denen 1,5 Stunden Sie ganzzahlig ohne Rest teilen möchten. Vielleicht interessiert uns aber auch nur der Rest einer solchen Division. Für diese verschiede- Möglicherweise fragen Sie sich jetzt, ob solche Berechnungen überhaupt praxisrelevant sind: Aber denken Sie nur daran, dass Stunden, Tage oder nen Varianten gibt es in ABAP auch verschiedene Anweisungen. Jahre in vielen Systemen nicht in Stunden und Minuten erfasst werden, Der einfachste Fall einer Division wird – wie bereits erläutert – durch sondern mit Dezimalwerten wie »1,5 Stunden«. Um diese Dezimalwerte den Schrägstrich (/) dargestellt: auf Stunden und Minuten umzurechnen, kommen Sie um die genannten Divisionsmöglichkeiten nicht herum. Weitere Beispiele finden Sie in Kapi- DATA zahl01 TYPE p DECIMALS 2 VALUE '4.56'. tel 5, »Modifikation von Zeichenketten«, und Kapitel 8, »Rechnen mit DATA zahl02 LIKE zahl01 VALUE '5.67'. Datum und Zeit, Mengen und Währungen«. DATA ergebnis LIKE zahl01. ergebnis = zahl02 / zahl01. Rechengenauigkeit Wenn Sie das Ergebnis mit dem Taschenrechner ausrechnen, erhalten 4.4 Codebeispiel zu Feldern und Berechnungen Sie die Zahl 1,243421053. Wie verhält sich ABAP? Alle Variablen sind gleichlautend deklariert. Eine gepackte Zahl hat maximal 16 Schauen wir uns die verschiedenen Berechnungsmöglichkeiten nun Bytes, dies bedeutet 32 Stellen, inklusive Vorzeichen. Das System anhand unseres vorbereiteten Reports an: würde das genaue Ergebnis liefern (bei ABAP liegt die Rechengenau- 1 *&---------------------------------------------* igkeit von gepackten Zahlen bei maximal 14Nachkommastellen), es 2 *& Report Z_TEILNEHMERLISTE02 * aber auf zwei Nachkommastellen in der Zielvariable runden, die wir 3 *& * selbst mit zwei Dezimalstellen deklariert haben. Diese erhält, durch 4 *&---------------------------------------------* ABAP kaufmännisch gerundet, den Wert 1.24. 5 *& * 6 *& * DIV Falls Sie das Ergebnis einer ganzzahligen Division erhalten möchten, 7 *&---------------------------------------------* müssten Sie die Anweisung umschreiben und statt des Schrägstrichs 8 den Operator DIV einsetzen: 9 REPORT z_teilnehmerliste02 . 10 ergebnis = zahl02 DIV zahl01. 11 * Variable deklarieren 12 DATA zahl01 TYPE p DECIMALS 2 VALUE '4.56'. Unter sonst gleichen Voraussetzungen ergibt die ganzzahlige Division 13 DATA zahl02 LIKE zahl01 VALUE '5.67'. für den Quotienten den Wert 1. Da die Zielvariable zwei Dezimalstel- 14 DATA ergebnis_addition LIKE zahl01. len hat, steht dort nach dem Ausführen der Anweisung als Inhalt 1.00. 15 DATA ergebnis_subtraktion LIKE zahl01. 16 DATA ergebnis_multiplikation LIKE zahl01. MOD Im dritten Fall interessiert uns der Rest der Ganzzahldivision. Für die- 17 DATA ergebnis_division_genau LIKE zahl01. sen Fall verwenden wir den Operanden MOD, und die Anweisung lau- 18 DATA ergebnis_division_ganzzahl LIKE zahl01. tet: 19 DATA ergebnis_division_rest LIKE zahl01. 20 ergebnis = zahl02 MOD zahl01. 122 123 4 Felder und Berechnungen Codebeispiel zu Feldern und Berechnungen 4.4 21 * Verarbeitungsteil Zeile 12 22 zahl01 = zahl01 + 1. Die Variable ZAHL01 wird als gepackte Zahl mit zwei Nachkommastel- 23 zahl02 = zahl01 + 2. len deklariert, und sie erhält als Startwert die Zahl 4,56. 24 ergebnis_addition = zahl01 + zahl02. 25 ergebnis_subtraktion = zahl01 - zahl02. Zeile 13 26 ergebnis_multiplikation = zahl01 * zahl02. 27 ergebnis_division_genau = zahl02 / zahl01. Die Variable ZAHL02 erhält als Startwert die Zahl 5,67 und die glei- 28 ergebnis_division_ganzzahl = zahl02 DIV zahl01. chen Eigenschaften wie ZAHL01. 29 ergebnis_division_rest = zahl02 MOD zahl01. 30 Zeile 14 bis 19 31 * Ausgabeteil Die Ergebnisfelder werden deklariert; für jedes Ergebnis wird ein Frage der Weiter- 32 WRITE: / 'zahl01', zahl01, eigenes Feld angelegt. Natürlich hätte man nur das Feld ERGEBNIS verarbeitung 33 / 'zahl02', zahl02, 34 / 'ergebnis_addition:', anlegen und immer wieder überschreiben können, aber es hängt von ergebnis_addition, der Art der Weiterverarbeitung ab, ob man einen Feldinhalt später 35 / 'ergebnis_subtraktion:', vielleicht wieder benötigt oder nicht – und Sie möchten gleich die ergebnis_subtraktion, verschiedenen Berechnungsergebnisse ausgeben. 36 / 'ergebnis_multiplikation:', ergebnis_multiplikation, Nicht mit Variablen geizen 37 / 'ergebnis_division_genau:', ergebnis_division_genau, Arbeitsspeicher und Hardware sind kein Argument mehr, um mit Varia- 38 / 'ergebnis_division_ganzzahl:', blen zu knausern, sondern Lesbarkeit und Transparenz sind heute die ergebnis_division_ganzzahl, wesentlicheren Qualitätsfaktoren. Wenn es der Qualität dient, sollten Sie 39 / 'ergebnis_division_rest:', deshalb nicht mit Variablen geizen. ergebnis_division_rest. Listing 4.1 Report Z_TEILNEHMERLISTE02 Zeile 21 Der Verarbeitungsteil beginnt. Anmerkungen zum Quellcode Zeile 22 Nach den Kommentarzeilen gliedert sich unser Report in drei Teile, die im Folgenden kurz beschrieben sind. Der Wert des Feldes ZAHL01 wird um 1 erhöht. Vor der Anweisung war der Inhalt 4.56, danach ist er 5.56. Zeile 1 bis 8 Zeile 23 Diese Zeilen werden vom System wieder automatisch als Kommen- tarzeilen generiert. Das Feld ZAHL02 erhält den Inhalt aus der Addition von ZAHL01 und der Zahl 2. Der alte Inhalt von ZAHL02 war 5.67, der neue Inhalt ist Zeile 11 7.56. Der Quellcode wird in übersichtliche Abschnitte eingeteilt, die der Zeile 24 Lesbarkeit dienen. In Listing 4.1 werden diese Abschnitte mit drei Kommentarzeilen gebildet: Variable deklarieren (Zeile 11 bis 19), Das Feld ERGEBNIS_ADDITION erhält das Ergebnis der Operation Verarbeitungsteil (Zeile 21 bis 29) und Ausgabeteil (Zeile 31 bis 39). ZAHL01 plus ZAHL02, das ist 5.56 plus 7.56 und ergibt 13.12. 124 125

Description:
Vorbereitungen. Bevor wir beginnen, sollten Sie entscheiden, ob Sie für die ersten Berech- nungen in ABAP einen neuen Report anlegen oder diese
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.