[Allegro] Trick 71: Cambio - Fremdwaehrungen in Euro umrechnen
Bernhard Eversberg
ev at biblio.tu-bs.de
Di Mär 18 09:27:12 CET 2008
Trick 71: Cambio
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.
Mehr Informationen über die Mailingliste Allegro