Lade...
 

CX_UNIT_RATE - Einheiten-Verhältnis

CX_UNIT_RATE

Klassenhierarchie
Beschreibung:

Ein Einheiten-Verhältnis beschreibt den "Umrechnungskurs" zwischen zwei Einheiten, deren Dimension nicht direkt geändert werden kann. Dieses ist z.B. bei Verpackungseinheiten der Fall, da dort keine feste Definitionen, wie beispielsweise bei Längenangaben, existieren. Während "1 m" definitorisch immer "100 cm" entspricht, kann "1 Paket" je nach Zusammenhang "5 Dosen", "10 Dosen" oder sogar einer anderen Einheit, wie z.B. "15 Beuteln", entsprechen. Des weiteren kann die Art der Umrechnung zwischen zwei Einheiten festgelegt werden, um den Umrechnungsprozess steuern zu können. Werden bei dem Umrechnungskurs "1 Stange = 2,4 m" "3 Stangen" in Meter umgerechnet, so erhält man "7,2 m". Rechnet man hingegen "8 m" in Stangen um, so erhält man "3 Stangen mit 
einem Rest von 0,8 m". 
Das Datenfeld conversionRuleEnum einer Umrechnungstabelle (= ein Objekte der Klasse CX_UNIT_RATE oder CX_CURRENCY_RATE) definiert, ob die Umrechnungsvorschrift uni- oder bidirektional angewendet werden darf. Angemeldete Umrechnungstabellen wirken sich automatisch auf die arithmetischen Operationen + - * / aus. Dem obengenannten Unterschied (conversionRuleEnum) entsprechend gibt es zwei Modi für die implizite Umrechnung: 

Modus a) wird für bidirektionale Umrechnungsregeln angewendet, solange die angemeldete Tabelle keine Widersprüche enthält, die sich auf die betreffende Regel beziehen1. Die angemeldeten Umrechnungsobjekte (CX_UNIT_RATE, CX_CURRENCY_RATE ) modifiziert die transiente Einheitentabelle (CXB_SYSTEM::systemUnits), so dass Einheiten, für die durch die Umrechnungstabelle ein (eindeutiger !) Weg zur Konvertierung bestimmt ist, kompatibel werden.

Modus b) gilt für unidirektionale Umrechnungsregeln und für solche bidirektionale Regeln, die im Widerspruch zu einer anderen (gleichzeitig angemeldeten) Regel stehen. Addition und Subtraktion benutzen die Umrechnungstabelle, um bei inkompatiblen Operanden den zweiten Operand in die Einheit des ersten zu konvertieren. Die transiente Einheitentabelle (CXB_SYSTEM::systemUnits) bleibt unverändert.

Operation ausführbar bei Modus a ausführbar bei Modus b
1x + 1y wenn zwischen x und y ein direktes oder indirektes Umrechnungsverhältnis definiert ist wenn y (auf direktem Wege) in x konvertierbar ist
1x – 1y wenn zwischen x und y ein direktes oder indirektes Umrechnungsverhältnis definiert ist wenn y (auf direktem Wege) in x konvertierbar ist
1x * 1y immer; Kürzung direkt oder indirekt konvertierbarer Einheiten möglich immer; konvertierbare Einheiten werden nicht gekürzt
1x / 1y immer; Kürzung direkt oder indirekt konvertierbarer Einheiten möglich immer; konvertierbare Einheiten werden nicht gekürzt


 

Beispieltabelle:
1 Stange 7.0 m
1 Stange 3.5 kg
1 Rohr 10.0 m
1 Rohr 2.1 kg

Die ersten beiden Zeilen der Tabelle definieren implizit 2m = 1 kg, die beiden folgenden Zeilen widersprechen diesem Verhältnis und die Tabelle ist damit ungültig.

 

Es existieren folgende Umrechnungsarten:

conversionRuleEnum Bedeutung Beschreibung Modus
2 "von" -> "nach" ohne Rest Diese Umrechnungsart rechnet "nach rechts" ganzzahlig, während die Umrechnung "nach links" verboten bleibt. Ein Beispiel hierfür ist "1 Stange = 2,4 m". Die Anzahl an Stangen wird dabei immer in eine (ganzzahlige) Meter-Anzahl umgerechnet, während die Konvertierung von Metern in Stangen verboten bleibt.  b)
4 "nach" -> "von" ohne Rest" Diese Umrechnungsart entspricht der vorherigen "rechts-ganzzahlig", nur das die jeweiligen Umrechnungen in genau der anderen Richtung erfolgen.  b)
6 In beide Richtungen, ohne Rest Bei dieser Umrechnungsart wird immer in ganzzahlige Anteile umgewandelt. Ein Beispiel hierfür ist die Beziehung zwischen Verpackungseinheiten wie "1 Paket = 5 Dosen", wobei niemals Werte wie "1,2 Pakete" durch eine Umrechnung entstehen können. default Wert a)
3 "von" -> "nach" mit Rest Diese Umrechnungsart rechnet "nach rechts" genau, während die Umrechnung "nach links" verboten bleibt. Ein Beispiel hierfür ist "1 Stange = 2,4 m". Die Anzahl an Stangen wird dabei immer in eine (genaue) Meter-Anzahl umgerechnet, während die Konvertierung von Metern in Stangen verboten bleibt. b)
5 "nach" -> "von" mit Rest Diese Umrechnungsart entspricht der vorherigen "rechts-genau", nur das die jeweiligen Umrechnungen in genau der anderen Richtung erfolgen. b)
7 In beide Richtungen mit Rest Bei dieser Umrechnungsart können beide Einheiten jeweils vollständig in die andere Einheit umgerechnet werden. Dieses ist z.B. bei "1 m  =  2 kg" der Fall. Hauptmerkmal dieser Umrechnungsart ist, das niemals ein
Rest übrig bleiben kann.
a)

Die Angaben über „exakte Berechnung“ oder „Berechnung mit Rest“ werden bei der expliziten Konvertierung mit Call(UnitConvert) berücksichtigt.

 

Code-Beispiel:
...

 

Methodenverzeichnis (MDI)
Funktion MA* Parameter Rückgabe Kurzbeschreibung
CalculateDivideRate   (INTEGER) OBJECT Errechnen des Divisors
CalculateMultiplyRate   (INTEGER) OBJECT Errechnen des Multiplikators
CheckFeasibility   (INTEGER) STRING  
CurrencyConvert   (OBJECT, OBJECT, INTEGER) INTEGER  
CurrencyCrossConvert   (OBJECT, OBJECT, INTEGER) INTEGER  
UnitConvert   (OBJECT, OBJECT, OBJECT) VOLATILE_OBJECT Direktes Konvertieren einer Ausgangs- in eine Zieleinheit
UnitCrossConvert   (OBJECT, OBJECT, OBJECT, OBJECT) VECTOR Indirektes Konvertieren einer Ausgangs- in eine Zieleinheit
ClassFilter   STRING, INTEGER OBJECT Dieses Objekt, wenn es einer bestimmten Klasse entspricht
ConditionedFilter   STRING OBJECT  
ConditionedFilter2   OBJECT OBJECT  
Deleted     INTEGER Prüft, ob das Objekt logisch gelöscht wurde
Description     STRING  
GetDomain     INTEGER Domain dieses Objektes
GetSiblings     COLLECTION Alle Siblings dieses Objektes
GetSiblings2     COLLECTION Alle Siblings dieses Objektes
GetSlotEntries     VECTOR  
IsConsistent     INTEGER  
LastUpdate     OBJECT Liefert das Datum mit Uhrzeit des letzten Schreibzugriffs
LastUser     INTEGER Liefert den User, der zuletzt auf das Objekt schreibend zugegriffen hat.
Link     OBJECT Fügt sich selbst in die Liste der Objekte mit Gültigkeit von dem Objekt ein, das als Parameter übergeben wird.
NextValidObject     OBJECT Ermittelt das Objekt, dessen Gültigkeit nach dem Zeitpunkt beginnt, an dem die Gültigkeit dieses Objektes beginnt
PreviousValidObject     OBJECT Ermittelt das Objekt, dessen Gültigkeit vor dem Zeitpunkt endet, an dem die Gültigkeit dieses Objektes endet.
RestrictedValidity *     Überprüft, ob der Gültigkeitsbereich eingeschränkt ist oder nicht.
SetDomain   INTEGER, INTEGER   Domain setzen
ShortName     STRING  
Siblings *      
SpanDateValidity *      
string   INTEGER CX_STRING Liefert die String-Darstellung des Objektes
UniqueID     STRING  
Unlink       Entfernt sich selbst aus der Liste der Objekte mit Gültigkeit
Unlink2       Dieses Objekt aus der Liste der Objekte mit Gültigkeit entfernen
Valid   OBJECT INTEGER Prüft, ob das Objekt zum gegebenen Zeitpunkt gültig ist.
ValidSince     OBJECT Liefert den Beginn der Gültigkeitsspanne in Form eines CX_TERM-Objektes zurück.
ValidToday     INTEGER Prüft, ob das Objekt zum jetzigen Zeitpunkt (Gültigkeitsdatum) gültig ist
ValidUntil     OBJECT Liefert das Ende der Gültigkeitsspanne in Form eines CX_TERM-Objektes zurück
VerifySiblings     INTEGER Ring der Austauschobjekte prüfen

* MA = Member-Access-Funktion

Datenverzeichnis (DDI)
Datenfeld Typ Referenz-Klasse I* Kurzbeschreibung
uniqueID STRING   * die (interne) Objektnummer
validity POINTER CX_VALIDITY   Zeitraum, in dem das Objekt gilt
conversionRuleEnum ENUMCHAR     Umrechnungsart
rateTables REL_MN CX_RATE_TABLE   die Tabelle, zu der das Einheiten-Verhältnis gehört
amount POINTER CX_AMOUNT   Das Einheiten-Verhältnis, wobei die Klasse CX_AMOUNT die Klassen CX_VALUE, CX_VALUE_PER, CX_FORMULA und CX_CONDITION_BAG umfasst, d.h. ein Verhältnis kann durch den Pointer auf ein Objekt einer dieser Klassen beschrieben werden. (*)

* I = Indizierbares Datenfeld

(*) Wird das Verhältnis durch ein CX_VALUE, wie z.B. "5 kg/m", beschrieben, so handelt es sich nicht um einen Umrechnungskurs im herkömmlichen Sinne, sondern um einen Faktor. D.h. es ist keine Umrechnung von Kilogramm in Meter definiert. Vielmehr wird ein solches Konstrukt für "Konvertierungen über mehrere Einheiten hinweg" benutzt, die in der Dokumentation der Konvertierungs-Tabellen näher erläutert werden.

Verwendung in AppsWH
Modul Kurzbeschreibung
unittabl.mod Mengen- und Preiseinheiten Editiermodul