Hallo,
ich hoffe ihr könnt mir weiterhelfen, ich kann nicht auf die Konstanten zugreifen.
hier zuerst mal die Aufgabenstellung:
Währungsumrechnung
Es soll ein Report zur Umrechnung eines Betrages von einer Währung in eine andere erstellt
werden. Dabei soll es möglich sein, auf dem Selektionsbild die Ausgangswährung, die
Zielwährung und den Betrag anzugeben.
Erstellen Sie zur Verwaltung der Umrechnungsfaktoren zwischen verschiedenen Währungen
einen eigenen strukturierten Datentyp t_currency_conversion (→ TYPES), der folgende
Felder umfasst:
• from_currency: Kürzel Ausgangswährung, character(3), Beispiel „EUR“
• to_currency: Kürzel Zielwährung, character(3), Beispiel „AUD“
• from_name: Name Ausgangswährung, character(20), Beispiel „Australischer Dollar“
• to_name: Name der Zielwährung, character(20)
• rate: Umrechnungsfaktor, p decimals 4
Um Code-Wiederholungen zu vermeiden, definieren Sie weitere geeignete Datentypen.
Die einzelnen Umrechnungsfaktoren sollen in einer Internen Tabelle abgelegt werden, die zu
Beginn des Reports initialisiert wird.
Nach Eingabe der Eingabewerte auf dem Selektionsbild soll die Interne Tabelle nach einem
passenden Umrechnungskurs durchsucht werden und der umgerechnete Betrag ausgegeben
werden (siehe Screenshot). Ist kein passender Umrechnungskurs vorhanden, so soll eine
Fehlermeldung ausgegeben werden.
Fremdwährung Umrechnungskurs von
Euro in Fremdwährung
Australische Dollar (AUD) 0,75109
Kanadische Dollar (CAD) 1,43864
Schweizer Franken (CHF) 1,48699
Englisches Pfund (GBP) 0,62035
Japanischer Yen (JPY) 1,10558
7.b) Währungsumrechnung mit DataDictionary
Kopieren Sie den Report aus Teilaufgabe a) in einen neuen Report. Ersetzen Sie die lokalen
Typdefinitionen durch Definitionen im DataDictionary. Legen Sie dazu einen neue Struktur und
die dazugehörigen Datenelemente und Domänen an.
Die interne Tabelle, die Paramater und die Variablen habe ich programmiert, aber ich kann bei der Berechnung nicht auf die Konstanten zugreifen.
Hier mein CODE:
*Felder die aufgerufen werden, Selektionsbilder.
PARAMETERS:
awaehr(3) type c default 'EUR',
zwaehr(3) type c,
betrag type p decimals 4.
*erg type p decimals 2.
*Konstanten kann man nicht ändern, sie sind fest angegeben.
*Angabe der Waehrungen.
CONSTANTS:
aud TYPE p DECIMALS 5 VALUE '0,75109',
cad TYPE p DECIMALS 5 VALUE '1,43864',
chf TYPE p DECIMALS 5 VALUE '1,48699',
gbp TYPE p DECIMALS 5 VALUE '0,62035',
jpy TYPE p DECIMALS 5 VALUE '1,10558'.
*eigener Datentyp: man braucht später nur auf t_currency zugreifen.
*beginnt mit begin of und endet mit end of.
TYPES:
Begin of t_currency_conversion,
from_currency(3) TYPE c,
to_currency(3) TYPE c,
from_name(20) TYPE c,
to_name(20) TYPE c,
rate TYPE p DECIMALS 5,
end of t_currency_conversion,
*eigener Datentyp, (für Datentabelle)
Begin of t_currency_database,
currency(3) type c,
name(20) type c,
rate type p DECIMALS 5,
end of t_currency_database.
DATA:
erg type p decimals 2,
meintype TYPE t_currency_conversion, "meintype ist eine Variable vom eigens angelegtem Type t_currency_conversion.
waehrungsdb TYPE TABLE OF t_currency_database, "Hier legen wir eine Tabelle (Datenbank) für unsere Waehrungen an--> eigener Datentyp
"waehrungszeile TYPE t_currency_database,( macht das gleiche wie LIKE LINE OF) kann man auch so schreiben.
wz LIKE LINE OF waehrungsdb, "Erzeugt eine Variable vom TYP wie eine Zeile aus unserer Datenbank, wird benötigt um die Tabelle befüllen zu können.
tmpwz LIKE LINE OF waehrungsdb.
"rechnen
" Hier werden WErte für die "Interne Tabelle" eingetragen.
wz-currency = 'AUD'.
wz-name = 'Australischer Dollar'.
wz-rate = '0.75109'.
APPEND wz TO waehrungsdb.
wz-currency = 'CAD'.
wz-name = 'Kanadische Dollar'.
wz-rate = '1.43864'.
APPEND wz TO waehrungsdb.
wz-currency = 'CHF'.
wz-name = 'Schweizer Franken'.
wz-rate = '1.48699'.
Append wz to waehrungsdb.
wz-currency = 'GBP'.
wz-name = 'Englischer Pfund'.
wz-rate = '0.62035'.
append wz to waehrungsdb.
wz-currency = 'JPY'.
wz-name = 'Japanischer Yen'.
wz-rate = '1.10558'.
append wz to waehrungsdb.
"bindestrich zwischen meintype und from_currency ist dazu da, damit er Zugriff auf from_currency hat.
meintype-from_currency = awaehr.
meintype-to_currency = zwaehr.
"LOOP AT sagt: gehe durch waerungsdb, Into sagt: nehme jede gefundene Zeile temporär in die Zeilenvariable wz, Where sagst filtere alles herau " currency = meintype-from_currency heraus.
LOOP AT waehrungsdb INTO wz where currency = meintype-from_currency.
tmpwz = wz.
ENDLOOP.
IF tmpwz IS Initial.
WRITE: 'Currrency not found'.
ELSE.
erg = betrag * meintype-rate.
WRITE: / 'Ergebnis: ', erg.
ENDIF.