Trick 71: Cambio
Fremdwährungen in Euro umrechnen
Aufgabe: Schnell mal eben einen Fremdwährungsbetrag in Euro
umrechnen
Warum: Das wird gebraucht, wenn man bei einer Bestellung Preise in
Fremdwährungen vorliegen hat
oder Rechnungen zu erfassen sind,
die in Nicht-Euro-Währungen
vorliegen.
Im Prinzip ist kein Trick nötig, wenn es nur um EINE Währung
geht,
z.B. nur um US-Dollar. Man besorgt sich den aktuellen Umtauschkurs,
etwa von http://de.finance.yahoo.com/waehrungsrechner
Da findet man vielleicht, daß 1 EUR zu 1,5719 USD
gehandelt wird.
Man muß folglich einen Dollarbetrag durch 1,5719
teilen, um den
EUR-Gegenwert zu erhalten.
Sagen wir, in $bt steht der Dollarbetrag, dann:
eval $bt /
1,5719
ins $eu
und schon hat man in $eu den Gegenwert davon in EUR.
Soll das Ergebnis gerundet sein auf zwei Stellen, dann geht es
auch etwas anders (aber es muß das große Z sein!):
Z=$bt / 1,5719
var Z2
ins $eu
Nun schwankt der Kurs aber von Tag zu Tag. Daher muß statt 1,5719
eine
Variable her, die anderswo gesetzt wird. Sagen wir, $wk enthält
den aktuellen Dollarkurs. Dann gelten dieselben Formeln, nur mit
$wk statt 1,5719.
Das waren noch keine besonderen Tricks. Aber man will ja noch mehr:
Nicht nur Dollars, sondern alle Währungen, die in unseren
Bestellungen
und Rechnungen auftreten, will man sofort in EUR umrechnen können.
Dafür gibt es in der DemoBank eine Währungstabelle. Sie
steckt in einem
Systemsatz, der unter SYSWWHRG im Reg. 11 zu finden ist. Darin stehen
in $W beliebig viele Kurse, codiert in dieser Form:
...
USD:1.5719:US-Dollar%AUD:1.60:Austral.$%CAD:1.47:Canad.$ ...
So können wir das ausnutzen:
1. Kurse aktualisieren und evtl. die Liste erweitern:
X o-kurse
In der Regel kann man die Kurse dem Wirtschaftsteil der
Tageszeitung
entnehmen - geht schneller, falls eine zur Hand ist.
Beim Bearbeiten auf die Doppelpunkte aufpassen! Die Zahl
in der
Mitte ist immer der Wert eines EUR in der
Fremdwährung.
2. Kurse zum Rechnen verwenden
Schön wäre ein kompaktes Unterprogramm
":wumrech".
Der Aufruf soll so aussehen: Zuerst Betrag und
Währungsbezeichnung
in der iV bereitstellen, z.B. 100 USD oder auch CAD
250, oder
SWF320 - alles das sollte gehen. Man will z.B. schreiben
können:
var "nnnXYZ"
perform wumrech
ins $eu
um nnn Einheiten der Währung XYZ in Euro umzurechnen,
d.h. das Ergebnis soll dann in der iV stehen. Negativ, wenn
es den Währungscode XYZ gar nicht gibt.
Hier ein vollständiger FLEX zum Ausprobieren, samt Unterprogramm:
---------------------------------------------------------------
:start
ask Bitte
Eingabe: Betrag Währung
if "" end
perf wumrech
if "-" mes
Keine gültige Währung;jump start
ins $eu
var $betrag "
= " $eu " EUR
mes
jump start
******
Unterprogramm ***********
:wumrech
// Waehrung nach Kurswert umrechnen
ins $betrag
if $Wtab jump
wu2
set obj
2 // Tabelle laden, falls noch nicht da
var "|;
SYSWWHRG"
f1nd
var #9A$W
ins $Wtab
set obj 1
:wu2
// Zahlenwert mit eval aus $betrag entnehmen
eval $betrag
ins $bt
//
Trick1 : Waehrungscode entnehmen -> #uwk
var $betrag
(f"0123456789,. " F"0123456789,. ")
ins #uwk
//
TRICK2 : Umrechnungswert aus $Wtab entnehmen
var $Wtab
(b"#uwk" f":" e":")
if "" var "-1"
ins $wk
//
jetzt rechnen und Ergebnis zurueckgeben
Z=$bt / $wk
var Z2
return
---------------------------------------------------------------
Der Trick liegt darin, wie man den zur gewählten Währung
gehörigen
Umrechnungskurs aus der Liste herauszieht. Das macht die Zeile
var $Wtab
(b"#uwk" f":" e":")
Damit ergibt sich, wenn USD in #uwk steht, genau "1.5719".
Ein weiterer Trick entnimmt vorher den Währungscode aus der
Eingabe,
indem vorn und hinten Ziffern sowie Komma, Punkt und Spatium
weggenommen werden.
Ab V28.3 wird es so sein, daß man auch schreiben kann
var $Wtab
(b"~#uwk" f":" e":")
und dann ist es egal, ob in #uwk USD steht oder usd oder Usd.
Anmerk.: b"$wk" geht
leider auch in V28.3 nicht! In solchen Fällen
gehen nur die
#u-Variablen.
Hinweis: Auch in der Exportsprache kann man mit Hilfe der
Währungs-
tabelle
umrechnen. Das geschieht in kont.apr, womit das
Durchrechnen der
Kontingente bewerkstelligt wird.