allegro und der Euro : Umstellung der Erwerbung und Ausleihe

                    Mit Tips zum Umrechnen per FLEX (am Ende)

allegro EURO-Umstellung. Was ist zu tun?
========================================

Grundsätzlich gibt es nur dann Handlungsbedarf, wenn man Erwerbung
oder Ausleihe betreibt, und bei der Ausleihe nur dann, wenn Gebühren
erhoben werden! (Weiter unten einige allgemeine Tips zum Umrechnen.)
  
               Bereitgestellt:  EUROPACK.LZH   auf ac21
                                a99.lzh
                                alcarta.lzh
                                help.lzh
                                flex.lzh

Empfehlung: 
-----------
  TESTEN: 
  Jederzeit ab sofort, mit einer Kopie der Datenbank
  (Kopie machen: am besten ueber Menue ORG. Dann mit der Kopie arbeiten.)

  ECHTE DURCHFUEHRUNG: 
  Kann auch schon vor dem Jahreswechsel stattfinden, denn schon jetzt
  ist EUR gueltiges Zahlungsmittel bei Verrechnungen.
  Aber am besten:
  Zwischen letztem Arbeitstag 2001 und erstem 2002.
  Unmittelbar vorher eine Sicherungskopie machen, LOG-Datei loeschen.

Der Anwender startet nacheinander zwei FLEXe, eu-whrg und eu-best.
Die einfachste Methode: im ORDA-Menue (h orda) ist unten ein Flip
"Euro-Umrechnung". Den muss man zweimal (!) aktivieren. 

Dann werden die zwei Aktionen ausgeloest, die man auch manuell
folgendermassen ausloesen kann.
Die FLEXe sind abgesichert gegen viele Probleme, z.B. auch gegen
doppelte Ausfuehrung. Wer aber beim Testen noch ein Problem findet,
moege das gleich der Entw.Abt. melden!

Manueller Start
---------------
Im Schreibfeld gibt man ein:

1.  X eu-whrg
-------------
Ein neuer Waehrungsdatensatz wird angelegt, der alte ungueltig gemacht.
Ueber "Waehrungskurse" im ORDA-Menue (das danach erscheint) kann
man erst die neue Kursliste nochmals den eigenen Verhaeltnissen 
und den aktuellen Kursen anpassen, bevor man die vorliegenden
Bestelldaten und die Kontingente umrechnen laesst:

2.  X eu-best  (ruft dann selber noch eu-kont und eu-stgb auf)
-------------
Dadurch wird alles andere erledigt. Danach kann in EURo weitergearbeitet
werden. Beim Inventarisieren kann in der Maske der Rechnungsbetrag
in EUR, aber auch noch in DEM (separates Feld) eingegeben werden.
Dann muss der betr. Teil in der Datei CAT.FRM so aussehen:

[Inventarisierung]
$q-#9DB"EndPreis (EURO)"
$e-#9DB"Eing.datum"
$Q-#9DB"ODER EndPreis (DM)"
$z-#9DB"Zugangsnr."


Empfehlung:
-----------
Zuerst zum Testen eine Kopie der Datenbank machen und das Verfahren 
damit durchfhren. Wenn man berzeugt ist, dass die Umstellung 
korrekt verlaeuft, dann die echte Umstellung durchfuehren.
Wie man so eine Kopie macht? Am besten mit dem Menuepunkt 
"Datenbank-Kopie" im ORG-Menue (h org eingeben). Die kopierte 
Datenbank kann ohne Gefahr fuer das Original benutzt und wieder 
geloescht werden.

======================================================================

Hintergruende : Fuer alle, die es ganz genau wissen wollen
----------------------------------------------------------
Es wurden 4 FLEXe geschrieben, die alle notwendigen Aenderungen in
der Standard-Datenbank ausfuehren.
Vor der Umstellung:
  1. Aktuelle Version V21 (ab 18.5.2001)
       mit D-WRTF.APR, CAT.API, KONT.APR
  2. folgende FLEXe:
Man kopiert EU-*.FLX auf ProgDir (anschliessend nicht mehr gebraucht)
            O-*.FLX auf  FlexDir (fuer die laufende weitere Arbeit)

A. Aenderungen Daten
--------------------

Waehrungstabelle:  (Reg. 11 SYSWWHRG )         >>> EU-WHRG.FLX <<<
-----------------
#9A $W  CODE:KURS:Name%CODE:KURS:Name%...
       der Kurs ist der Wert, mit dem man $p multiplizieren muss,
       um DM zu erhalten. (Im Bestellsatz)
       Massnahme:
       Ein neuer Waehrungssatz wird erstellt.
       Kuenftig muss KURS derjenige Wert sein, durch den man $p 
       dividieren muss, um Euro zu erhalten! 
       (per EU-Recht vorgeschrieben)

   jetzt                        kuenftig umgekehrt
                                  $cEUR   neues Teilfeld
     DEM:1.00000                  DEM:1.95583
     EUR:1.95583                  EUR:1.00000 (evtl. manuell korr.)
     ---                                  

Bestellsaetze  (Reg. 10  "o ?" )               >>> EU-BEST.FLX <<<
-------------
#9DB   Bestelldaten. 
1. Alle noch offenen Bestellungen
       Status: alles ausser 6 und 7 in #9DB
       $p = Preis in Bestellwaehrung  BLEIBT!
       $c = Waehrung                  BLEIBT!
       $P ist der umgerechnete Preis in DM, ist aber obsolet!
          es wird immer der Preis aus $p genommen und aktuell
          umgerechnet, denn der Kurs kann sich geaendert haben!

   jetzt                               kuenftig
     $P                                  kein $P mehr
     d.h. Bestellsaetze ausser Status 6 und 7 bleiben unveraendert.

2. Erledigte Bestellungen
(Inventarisierte Bestellsaetze)
    Status 6 oder 7 in #9DB
    $q ist bezahlter Betrag in DEM.
    Muss umgerechnet werden!  (Reg.11, Eintraege unter s 6 und s 7 )

   jetzt                               kuenftig
     $qNNN.NN                            $qNNN.NN/1.95583 gerundet
   Dann steht in $q der gezahlte Preis, aber in Euro. Auch bei alten
   Bestellungen! Aber: 
   In $p bleibt der Bestellpreis stehen, in $c die Waehrung!


Erst nach diesen Aenderungen:
FLEXe fuer folgende Aktionen ausfuehren:

ORDER/ORDA Kontingente:  (Reg. 11 SYSK? )              >>> EU-KONT.FLX <<<
       Bisher sind alle Betraege in DM  (#9A  $V $A $B $E $R )
   1.  $V durch 1.95583 dividieren, 
   
   2.  Kontingente dann neu durchrechnen lassen        >>> O-KONT.FLX  <<<
       (aktuelles KONT.APR wird gebraucht, ist modifiziert, s.u.)
   2.  $cEUR  an #9A des Kont.Satzes anhaengen zur Kennzeichnung, 
       dass umgerechnet wurde



aLF-Daten                                >>> EU-STGB.FLX <<<
---------
aLF Statistiksaetze  (Reg. 11 STATMK? or STATDK? )
       #9AFSTAT... $DJJJJMM
       Alle Teilfelder in #9AH durch 1.95583 teilen  ($0 $1 ... $9)
       In #9AI  $o und $S

aLF Gebuehrensaetze  (Reg. 11 GD? )
       #9GG $S   ist DM, teilen durch 1.95583



B. Aenderungen Parameter, FLEXe usw.
------------------------------------

Allgemein: Einfuehrung einer Variablen  #uwW mit dem Waehrungscode
           wenn unbesetzt, dann DM
           (#uwW kommt bisher nirgends vor)

Die folgenden drei Dateien wurden angepasst:

D-WRTF: Anzeige 
        Kontingentsatz : Umrechn. in EUR unterbleibt, wenn $cEUR
                           (wird von eu-kont.flx eingesetzt)
        Inventarisierte Saetze: Umrechnung von $q in EUR unterbleibt 
                                 wenn EUR drinsteht
        aLF-Daten:
        Gebuehren- und Statistiksaetze: Anzeige EUR statt DEM

KONT.APR:
        Zeile fuer EURO-Umrechung der Summen entfaellt
        wenn $cEUR im Kontingentsatz

CAT.API:
        Kurzanzeige der aLF-Gebuehrensaetze


Vorgang der  (o-invent.flx)
Inventarisierung: Im Formular wird EndPreis in DEM vorgegeben
                    und die Eingabe als DEM interpretiert
                  ($P oder umgerechnet aus $p)
                  Das muss kuenftig in Euro sein
                  Eingegegebener Betrag -> $q,  $p  dabei unveraendert
     CAT.FRM:
     Formular [Inventarisierung]
        EndPreis (Euro)
        EndPreis (DM)
           wird das zweite eingegeben, erfolgt Umrechnung in Euro!
           (in O-INVENT.FLX)

In mehreren O-FLEXen wurden Anpassungen durchgefuehrt.


Dateien   zum Testen kann man alle folgenden Dateien 
-------   auf das DbDir packen!

eu-*.flx      ->  ProgDir
d-wrtf.apr    ->  ProgDir
kont.apr      ->  ProgDir
o-*.flx       ->  FlexDir
orda.rtf      ->  HelpDir  (Exemplar auf DbDir loeschen!)
cat.api       ->  DbDir und ProgDir\demo2
cat.frm       ->  DbDir

Die vier Dateien  eu-*.flx koennen nach der Umstellung geloescht
werden, sie werden nie mehr gebraucht.

-----------------------------------------------------------------

Allgemeine Tips zum Umrechnen
-----------------------------
Wenn man z.B. in einem Feld  #nnn einen Betrag in DM hat und diesen
nun umrechnen will, muss man durch 1.95583 dividieren.
Das geht so:

var #nnn
    Wert in die interne Zahl (sog. iZ) kopieren 
=
var "1.95583"
    iZ durch 1.95583 dividieren:
/
    iZ auf 2 Kommstellen runden und in iV schreiben
var Z2
    diesen Wert in #nnn kopieren
ins #nnn


Ist der Betrag in einem Teifeld  $x  von #nnn, geht man so vor:

var #nnn$x
=
var "1.95583"
/
var Z2
ins $x-#nnn


Diese Sequenzen kann man einbetten in groessere FLEXe, denn meistens
wird man Ergebnismengen abarbeiten wollen. Dann kommen die Befehle 
"first" und "next" in der bekannten Weise zum Einsatz.

Hier noch das Schema, wenn die Gesamtbank zu verarbeiten ist:

...
  Gesamtbank verarbeiten
  ersten Satz holen (interne Nummer 1)
first #
  falls #1 geloescht oder Nummer nicht besetzt: naechste
if del jump naechst
if no jump naechst
  Jeder Satz wird in dieser Schleife verarbeitet:
:schleife
var #nnn
=
var "1.95583"
/
var Z2
ins #nnn
put

:naechst
next #

  kein Satz mehr, Ende erreicht
if cancel jump exit
  der Satz ist geloescht
if del jump naechst
  Die Satznummer ist nicht besetzt
if no jump naechst
  es gab noch einen Satz? dann -> :schleife
if yes jump schleife

:exit
...


B. Eversberg 2001-05-05