Formeln: Unterschied zwischen den Versionen
JF (Diskussion | Beiträge) |
GK (Diskussion | Beiträge) |
||
Zeile 4: | Zeile 4: | ||
<div align="right">[[Formeleditor|Formeleditor]]</div> | <div align="right">[[Formeleditor|Formeleditor]]</div> | ||
<hr> | <hr> | ||
− | Für Eigenschaften | + | Für Eigenschaften mit [Datentyp] "Formel" müssen Formeln in das Eingabefeld eingetragen werden. |
+ | == Übersicht == | ||
+ | Formeln können die folgenden Bestandteile haben: | ||
+ | * Eigenschaften | ||
+ | * Werte | ||
+ | * Operatoren | ||
+ | * Funktionen | ||
− | + | === Beispiel === | |
+ | Die folgende Formel ist der [Standardwert] für [Vorgangsbalkentext] des Ressourcen-Gantt-Diagramms: | ||
+ | ME.Operation.Order+'\n'+ME.Operation.OperationOutMainItem+'\n'+ME.Operation.OperationOutMainItemQty | ||
− | + | <code>ME.Operation.OperationOutMainItemQty</code> | |
+ | : Eigenschaft mit der Produktionsmenge des Vorgangs | ||
+ | <code>+</code> | ||
+ | : Additionsoperator (wird hier genutzt um mehrere Strings miteinander zu verbinden) | ||
+ | <code>\n</code> | ||
+ | : String, die einen Zeilenumbruch vorgibt | ||
+ | Bei der Berechnung von Zeiten oder Zeitspannen, sowie beim Definieren von Kapazitätswerten ([Rüsten], [Produktion] und [Abrüsten]) können [[Einheiten in Formeln|Einheiten]] genutzt werden. Es können auch Formeln genutzt werden, die [[Datentyp der Auswertungsergebnisse|mehrere Datentypen]] kombinieren, etwa Zeitspannen und Zahlen. Weitergehende Informationen zur Auswertung von Eigenschaften ohne Werte finden sich [[Eigenschaften ohne Wert auswerten|hier]]. | ||
− | + | == Eigenschaften == | |
− | + | === Lang- und Kurznamen === | |
− | + | Eigenschaften haben jeweils einen langen- und einen kurzen Namen. Der Kurzname für die [Menge] eines Auftrages ist <code>Qty</code> und der Langname ist <code>Order_Qty</code>. Für den Langnamen werden Klassenname und ein Unterstrich vor den Kurznamen gesetzt. (Um den Langnamen einer Eigenschaft sicher zu bestimmen, nutzen Sie entweder die Klassendefinition in dieser Hilfe oder direkt in Asprova deren [Code].) | |
− | |||
− | + | Wird eine Eigenschaft über <code>ME</code> etc. referenziert, so ist das Zielobjekt eindeutig, so dass der Kurzname genutzt werden kann. Dies ist meistens der Fall, auch in der Dropdown-Liste der verfügbaren Eigenschaften wird dann der Kurzname verwendet. Wird ein übergeordnetes (<code>PARENT</code>) oder untergeordnetes Objekt (<code>CHILD</code>) referenziert oder ein Sortierschlüssel als Formel definiert, so ist das ist das Zielobjekt nicht eindeutig, da Eigenschaften unterschiedlicher Klassen den gleichen Kurznamen haben können. Hier muss der Langname verwendet werden. | |
− | + | === ME=== | |
+ | Wenn Sie eine Eigenschaft in einer Formel verwenden, geben Sie zunächst <code>ME</code> ein. <code>ME</code> ist das Projekt, auf das sich die Formel der Eigenschaft mit [Datentyp] "Formel" bezieht. So ist etwa bei der [Gültigkeitsbedingung] einer Hauptnutzungsanweisung in dern Integrierten Stammdaten <code>ME</code> ein Vorgang. Beim [Vorgangsbalkentext] des Ressourcen-Gantt-Diagramms ist <code>ME</code> eine Nutzungsanweisung. Wird nach <code>ME</code> ein Punkt (<code>.</code>) eingegeben, so erscheint eine Dropdown-Liste der verfügbaren Eigenschaften, die durch einen Klicken ausgewählt werden können. Natürlich können Sie den Eigenschaftsnamen auch einfach hinter dem Punkt eingeben. | ||
− | + | ; Beispiel | |
+ | Um im [Auftragsbalken Formel rechter Text] im Auftrags-Gantt-Diagramm den [Fälligkeitstermin] anzuzeigen, geben Sie <code>ME.LET</code> ein. | ||
+ | <code>ME</code> könnte hier weggelassen werden, der eingegebene Eigenschaftsname wird dann als eine Eigenschaft von <code>ME</code> angesehen. Daher kann <code>ME.LET</code> oder <code>LET</code> eingeben werden und das Ergebnis ist das Gleiche. Aus Gründen der Durchgängigkeit und des leichteren Verständnis, ist diese Vereinfachung jedoch nicht empfohlen. | ||
− | Eigenschaften | + | Ist die referenzierte Eigenschaft ein Objekt, so wird nach Eingabe eines Punktes eine Dropdown-Liste der verfügbaren Eigenschaften dieses Objekts angezeigt. |
− | [[ | + | ; Beispiel |
+ | Um in der [Vorgangsbalkentextformel] des Ressourcen-Gantt-Diagramm den [Artikelname] des Auftragsartikels zu referenzieren, geben Sie <code>ME.Order.Item.Name</code> ein. | ||
− | + | === OTHER === | |
+ | Bei Eigenschaften wie der [Verknüpfungsbedingung], bei denen die Werte zweier Eigenschaften verglichen werden, kann zusätzlich zu <code>ME</code> auch <code>OTHER</code> verwendet werden. <code>OTHER</code> bezieht sich auch auf ein Objekt und kann genauso wie <code>ME</code> verwendet werden. | ||
− | + | ; Beispiel | |
+ | Um in der [Verknüpfungsbedingung] eines Artikels festzulegen, dass zu Verknüpfen die [Spezifikation 1] der Aufträge gleich sein muss geben Sie <code>ME.Order.Spec1==OTHER.Order.Spec1</code> ein. | ||
− | + | Im [[Formeleditor|Formeleditor]] ist ersichtlich, ob <code>OTHER</code> verwendet werden kann und auf welches Objekt sich <code>OTHER</code> bezieht. | |
− | ME | + | Eine andere Eigenschaft, die sich auf zwei Eigenschaften bezieht ist die [Ofengültigkeitsbedingung] von Ressourcen. Hier können Eigenschaften auch nur über <code>ME</code> und ohne <code>OTHER</code> verglichen werden. |
− | + | ; Beispiel | |
+ | Die [Ofengültigkeitsbedingung], die die gleichzeitige Zuweisung von Aufträgen des gleichen Kunden erlaubt lautet <code>ME.Order.Customer.Code</code>. | ||
− | + | === HOLDER === | |
+ | <code>HOLDER</code> bezieht sich auf das Objekt, zu der die Eigenschaft mit [Datentyp] "Formel" gehört. So ist etwa in der [Gültigkeitsbedingung] einer Hauptnutzungsanweisung in den Integrierten Stammdaten <code>ME</code> ein Vorgang und <code>HOLDER</code> die Hauptnutzungsanweisung. Um sich in der [Gültigkeitsbedingung] auf den [Code] der Ressource der Hauptnutzungsanweisung in der Gültigkeitsbedingung zu beziehen, wird die Formel <code>HOLDER.Resource.Code</code> genutzt. | ||
− | + | === PROJECT === | |
+ | <code>PROJECT</code> bezieht sich auf das aktuell genutzte Projekt, so können die Projekteigenschaften referenziert werden. <code>PROJECT</code> ist in allen Formeln nutzbar. | ||
− | + | ;Beispiel | |
+ | Um die [Planungsbasiszeit] zu referenzieren wird die Formel <code>PROJECT.BasisTime</code> genutzt. | ||
− | + | === WORKSPACE === | |
+ | <code>WORKSPACE</code> bezieht sich auf den Arbeitsplatz des aktuell genutzten Projekt, so können die Arbeitsplatzeigenschaften referenziert werden.<code>WORKSPACE</code> ist in allen Formeln nutzbar. | ||
− | + | ;Beispiel | |
+ | Um den Namen der [Projektdatei] zu referenzieren wird die Formel <code>WORKSPACE.ProjectFileName</code> genutzt. | ||
− | + | === TARGET === | |
+ | <code>TARGET</code> ist nur als Argument bestimmter interner Funktionen verwendbar. Definieren Sie als erstes Argument der internen Funktion ein Objekt und definieren dann <code>TARGET</code> ab dem zweiten Argument. <code>TARGET</code> verweist auf das Objekt des ersten Arguments. | ||
− | + | ; Beispiel | |
+ | Um die Summe der [Menge] aller Aufträge zu berechnen, wird die Formel <code>Sum('Order',TARGET.Qty)</code> genutzt. <code>TARGET</code> steht hier für die Auftragsklasse. | ||
− | + | ==== Verschachtelung ==== | |
+ | Der Aufruf einer internen Funktion in einer anderen internen Funktion wird Verschachteln genannt. Verschachtelungen können sich über mehrere Ebenen erstrecken. | ||
+ | Angenommen die internen Funktionen A und B akzeptieren beide <code>TARGET</code> als Argument. Wenn B als Argument von A genutzt wird, so referenziert das <code>TARGET</code>-Argument in B das Objektargument in B. | ||
− | + | ; Beispiel | |
+ | Es soll die größte [Menge] aller Aufträge mit dem frühesten [Fälligkeitstermin] unter [Aufträge ganz rechts] von <code>ME</code> bestimmt werden: | ||
+ | MaxIF(ME.RightmostOrder, | ||
+ | TARGET.LET==Min(ME.RightmostOrder, | ||
+ | TARGET.LET)), | ||
+ | TARGETQty | ||
+ | ) | ||
+ | Das erste <code>TARGET</code> wird als <code>ME.RightmostOrder</code> ausgewertet, also das erste Argument der <code>MaxIF</code>-Funktion. Das zweite <code>TARGET</code> wird auch als <code>ME.RightmostOrder</code> ausgewertet, aber aks das erste Argument der <code>MIN</code>-Funktion. | ||
− | + | === INPUT === | |
+ | <code>INPUT</code> wird in der [Virtuelle Eigenschaftsformel invers], der [Anzeigeformel], [Inverse Anzeigeformel], [Währung] etc. verwendet. Es bezieht sich prinzipiell auf die in eine Zelle eingegebene String. Weitere Details können der Beschreibung der jeweiligen Eigenschaften entnommen werden. | ||
− | + | === DELETE === | |
+ | <code>DELETE</code> wird verwendet, um Eigenschaftswerte zu löschen. | ||
− | + | ; Beispiel | |
+ | Der Name der Eigenschaft wird mit <code>ME.Name=DELETE</code> gelöscht. | ||
− | + | === Eigenschaften mit mehreren Werten === | |
+ | Wenn eine Eigenschaft über mehrere Werte verfügt, können Sie hinter der Eigenschaft <code>[n]</code> eingegeben, wobei ''n'' der Index des gewünschten Eigenschaftswerts ist. | ||
+ | ; Beispiel | ||
+ | Um den zweiten [Kommentar] eines Auftrages zu referenzieren nutzen Sie die Formel <code>ME.Order.Comments[2]</code>. | ||
− | + | Wenn Sie für ''n'' 0 angeben, wird das letzte Element ausgegeben. Wenn etwa [Kommentar] "a;b;c" ist, würde "c" zurückgegeben. | |
− | + | Wenn Sie kein [n] anfügen werden alle Werte zurückgegeben, wenn die Werte Strings sind. Ansonsten wird der letzte Eigenschaftswert zurückgegeben. Wenn etwa [Kommentar] "a;b;c" ist, würde "a;b;c" zurückgegeben. Um auch bei andere Datentypen alle Werte zurückzugeben, kann die interne Funktion <code>StrProps()</code> genutzt werden. | |
− | + | ==== Datentyp Objekt ==== | |
+ | Für Eigenschaften mit [Datentyp] "Objekt" mit mehreren Werten, kann statt dem Index der [Code] der Objekte verwendet werden, um einen bestimmten Werte zu adressieren. Der [Code] ist eine String und die Werte der Eigenschaft werden nach einer passenden String durchsucht. Der Vergleich der Objekte mit der String erfolgt in der Reihenfolge [Code] → [Anzeigename] → [Alias]. | ||
+ | ; Beispiel | ||
+ | Um auf die Nutzungsnweisung mit [Code] "S1" der Produktionsaufgabe eines Vorganges zuzugreifen, nutzen Sie die Formel <code>ME.ProductionTask.UseInstructions['S1']</code>. | ||
− | + | Angenommen dem Projekt wurde die benutzerdefinierte Klasse "Meine Klasse" (<code>MyClass</code>) mit der Eigenschaft [Meine Eigenschaft 1] (<code>MyProperty1</code>) hinzugefügt. Auf den Wert von [Meine Eigenschaft 1] des Objekts "ABC" in der Klasse "MyClass" kann mit <code>PROJECT.Child['MyClass'].Child['ABC'].MyClassUser_MyProperty1</code> zugegriffen werden. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Weitere Informationen zu benutzerdefinierten Klassen finden Sie unter [[Hinzufügen einer neuen Klassendefinition|Hinzufügen einer neuen Klassendefinition]]. | Weitere Informationen zu benutzerdefinierten Klassen finden Sie unter [[Hinzufügen einer neuen Klassendefinition|Hinzufügen einer neuen Klassendefinition]]. | ||
+ | [[Datei:UserClassTable.png]] | ||
− | + | [[Datei:UserClassPropEditor.png]] | |
− | Häufig werden Werte wie Zahlen und | + | == Werte == |
+ | Häufig werden Werte wie Zahlen und Strings in Formeln verwendet. Benutzen Sie in Formeln folgende Formatierungen. | ||
− | + | {| class="wikitable" | |
− | + | |+ Formatierung von Werten in Formeln | |
+ | |- | ||
+ | !Datentyp!!Beschreibung!!Beispiel | ||
|- | |- | ||
− | | | + | |Zahl||Kann direkt eingegeben werden||123 |
|- | |- | ||
− | || | + | |String||Wird mit einfachen Anführungszeichen umschlossen||'123' |
|- | |- | ||
− | || | + | |Datum||Wird mit Rautenumschlossen||#2020/06/01 12:00:00# |
|- | |- | ||
− | || | + | |Bool||Direkte Eingabe des Werts||TRUE, FALSE |
|- | |- | ||
|} | |} | ||
− | "\" | + | === Steuerzeichen in Strings === |
+ | In Strings ist "\", zusammen mit dem nachfolgenden Zeichen, ein Steuerzeichen. | ||
− | + | {| class="wikitable" | |
− | + | |+ Verwendung von Steuerzeichen | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | + | !Formel!!Rückgabewert!!Beschreibung | |
|- | |- | ||
− | || | + | |'\\'||\||Wird als ein Backslash ausgegeben |
|- | |- | ||
− | || | + | |'\n'||↵||Fügt einen Zeilenumbruch ein |
|- | |- | ||
− | || | + | |'\''||'||Gibt ein einfaches Anführungszeichen aus |
|- | |- | ||
− | | | + | |} |
− | + | ||
− | + | == Operatoren == | |
− | + | {| class="wikitable" | |
− | + | |+ Verfügbare Operatoren | |
− | |||
− | |||
− | |||
− | |||
− | | | ||
− | | | ||
|- | |- | ||
− | || | + | !Operator!!Bedeutung!!Kommentar |
+ | |+||Addition, Verbindung von (Zeichen-)Ketten|| | ||
|- | |- | ||
− | || | + | |-||Subtraktion|| |
|- | |- | ||
− | | | + | |*||Multiplikation|| |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | |/||Division|| |
|- | |- | ||
− | || | + | |^||Potenzierung|| |
|- | |- | ||
− | || | + | |%||Modulo||Rest der Division |
|- | |- | ||
− | || | + | |&&||AND||Logisches UND |
|- | |- | ||
− | || | + | |<nowiki>||</nowiki>||OR||Logisches ODER |
|- | |- | ||
− | || | + | |==||Gleich||Vergleich |
|- | |- | ||
− | | | + | |!=||Ungleich||Vergleich |
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | |>||Größer||Vergleich |
|- | |- | ||
− | || | + | |>=||Größer oder gleich||Vergleich |
|- | |- | ||
− | || | + | |<||Kleiner||Vergleich |
|- | |- | ||
− | || | + | |<=||Kleiner oder gleich||Vergleich |
|- | |- | ||
− | || | + | |(, )||Klammern|| |
|- | |- | ||
− | || | + | |=||Zuweisung||Setzen von Werten |
|- | |- | ||
|} | |} | ||
− | + | Die Operatoren werden in der folgenden Reihenfolge ausgewertet: | |
− | + | # ^ | |
− | + | # *, /, % | |
− | + | # +, - | |
− | + | # ==, !=, >, <, >=, <= | |
− | + | # &&, || | |
− | + | # = | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | : | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Inhalte in Klammern werden zuerst ausgewertet. | |
+ | === Kurzschlussauswertung === | ||
+ | Asprova nutzt [https://de.wikipedia.org/wiki/Kurzschlussauswertung Kurzschlussauswertung] zur schnelleren Auswertung von Formeln. Durch eine entsprechende Formelstruktur kann diese Funktionalität optimal genutzt werden. Weitere Informationen dazu finden Sie [[Beschleunigung der Fomelauswertung|hier]]. | ||
− | + | == Funktionen == | |
+ | In Formeln können Sie interne und benutzerdefinierte Funktionen verwenden. Die Funktion zum Beziehen der, auf einen Vorgang anzuwendenden, [Spezifikation 1] lautet <code>GetApplicableSpec(1,ME.Operation)</code>. | ||
− | + | Bei der Nutzung von Funktionen achten Sie bitte auf die korrekte Schreibweise von Funktionsnamen und Argumenten. Weitergehende Informationen zu Asprovas internen Funktionen finden sich [[Interne Funktionen|hier]]. | |
− | : IF( TRUE, | + | === IF === |
+ | Die interne Funktion <code>IF()</code> ermöglicht die Bewertung von Vorgängen mit der folgenden Formel: | ||
+ | IF(Bedingung, | ||
+ | falls <code>TRUE</code>, | ||
+ | falls <code>FALSE</code> | ||
+ | ) | ||
− | : IF( | + | ; Beispiel |
+ | Ist die [Startzeit] vor dem 1. Juni 2020, so wird der erste [Kommentar] auf "ABC" gesetzt, sonst auf "XYZ": | ||
+ | ME.Comments=IF(ME.StartTime<=#2020/06/01, | ||
+ | 'ABC', | ||
+ | 'XYZ' | ||
+ | ) | ||
+ | oder | ||
+ | IF(ME.StartTime<=#2020/06/01, | ||
+ | ME.Comments='ABC', | ||
+ | ME.Comments='XYZ' | ||
+ | ) | ||
− | : IF( | + | Ab Version 13.1 können mehrere Bedingungen eingegeben werden: |
+ | IF(Bedingung 1, | ||
+ | falls <code>TRUE</code>, | ||
+ | Bedingung 2, | ||
+ | falls <code>TRUE</code>, | ||
+ | ... | ||
+ | ... | ||
+ | Bedingung n, | ||
+ | falls <code>TRUE</code>, | ||
+ | falls <code>FALSE</code> | ||
+ | ) | ||
+ | ; Beispiel | ||
+ | Bei [Priorität] ab 90 rot, von 50 bis 90 blau und bei weniger als 50 grün: | ||
+ | IF(ME.Order.Priority>=90, | ||
+ | RGB(255,0,0), | ||
+ | ME.Order.Priority<50, | ||
+ | RGB(0,255,0), | ||
+ | RGB(0,0,255) | ||
+ | ) | ||
<hr> | <hr> | ||
<div align="right">Hilfe Nummer: 741000</div> | <div align="right">Hilfe Nummer: 741000</div> |
Version vom 29. Oktober 2018, 15:25 Uhr
Für Eigenschaften mit [Datentyp] "Formel" müssen Formeln in das Eingabefeld eingetragen werden.
Inhaltsverzeichnis
Übersicht
Formeln können die folgenden Bestandteile haben:
- Eigenschaften
- Werte
- Operatoren
- Funktionen
Beispiel
Die folgende Formel ist der [Standardwert] für [Vorgangsbalkentext] des Ressourcen-Gantt-Diagramms:
ME.Operation.Order+'\n'+ME.Operation.OperationOutMainItem+'\n'+ME.Operation.OperationOutMainItemQty
ME.Operation.OperationOutMainItemQty
- Eigenschaft mit der Produktionsmenge des Vorgangs
+
- Additionsoperator (wird hier genutzt um mehrere Strings miteinander zu verbinden)
\n
- String, die einen Zeilenumbruch vorgibt
Bei der Berechnung von Zeiten oder Zeitspannen, sowie beim Definieren von Kapazitätswerten ([Rüsten], [Produktion] und [Abrüsten]) können Einheiten genutzt werden. Es können auch Formeln genutzt werden, die mehrere Datentypen kombinieren, etwa Zeitspannen und Zahlen. Weitergehende Informationen zur Auswertung von Eigenschaften ohne Werte finden sich hier.
Eigenschaften
Lang- und Kurznamen
Eigenschaften haben jeweils einen langen- und einen kurzen Namen. Der Kurzname für die [Menge] eines Auftrages ist Qty
und der Langname ist Order_Qty
. Für den Langnamen werden Klassenname und ein Unterstrich vor den Kurznamen gesetzt. (Um den Langnamen einer Eigenschaft sicher zu bestimmen, nutzen Sie entweder die Klassendefinition in dieser Hilfe oder direkt in Asprova deren [Code].)
Wird eine Eigenschaft über ME
etc. referenziert, so ist das Zielobjekt eindeutig, so dass der Kurzname genutzt werden kann. Dies ist meistens der Fall, auch in der Dropdown-Liste der verfügbaren Eigenschaften wird dann der Kurzname verwendet. Wird ein übergeordnetes (PARENT
) oder untergeordnetes Objekt (CHILD
) referenziert oder ein Sortierschlüssel als Formel definiert, so ist das ist das Zielobjekt nicht eindeutig, da Eigenschaften unterschiedlicher Klassen den gleichen Kurznamen haben können. Hier muss der Langname verwendet werden.
ME
Wenn Sie eine Eigenschaft in einer Formel verwenden, geben Sie zunächst ME
ein. ME
ist das Projekt, auf das sich die Formel der Eigenschaft mit [Datentyp] "Formel" bezieht. So ist etwa bei der [Gültigkeitsbedingung] einer Hauptnutzungsanweisung in dern Integrierten Stammdaten ME
ein Vorgang. Beim [Vorgangsbalkentext] des Ressourcen-Gantt-Diagramms ist ME
eine Nutzungsanweisung. Wird nach ME
ein Punkt (.
) eingegeben, so erscheint eine Dropdown-Liste der verfügbaren Eigenschaften, die durch einen Klicken ausgewählt werden können. Natürlich können Sie den Eigenschaftsnamen auch einfach hinter dem Punkt eingeben.
- Beispiel
Um im [Auftragsbalken Formel rechter Text] im Auftrags-Gantt-Diagramm den [Fälligkeitstermin] anzuzeigen, geben Sie ME.LET
ein.
ME
könnte hier weggelassen werden, der eingegebene Eigenschaftsname wird dann als eine Eigenschaft von ME
angesehen. Daher kann ME.LET
oder LET
eingeben werden und das Ergebnis ist das Gleiche. Aus Gründen der Durchgängigkeit und des leichteren Verständnis, ist diese Vereinfachung jedoch nicht empfohlen.
Ist die referenzierte Eigenschaft ein Objekt, so wird nach Eingabe eines Punktes eine Dropdown-Liste der verfügbaren Eigenschaften dieses Objekts angezeigt.
- Beispiel
Um in der [Vorgangsbalkentextformel] des Ressourcen-Gantt-Diagramm den [Artikelname] des Auftragsartikels zu referenzieren, geben Sie ME.Order.Item.Name
ein.
OTHER
Bei Eigenschaften wie der [Verknüpfungsbedingung], bei denen die Werte zweier Eigenschaften verglichen werden, kann zusätzlich zu ME
auch OTHER
verwendet werden. OTHER
bezieht sich auch auf ein Objekt und kann genauso wie ME
verwendet werden.
- Beispiel
Um in der [Verknüpfungsbedingung] eines Artikels festzulegen, dass zu Verknüpfen die [Spezifikation 1] der Aufträge gleich sein muss geben Sie ME.Order.Spec1==OTHER.Order.Spec1
ein.
Im Formeleditor ist ersichtlich, ob OTHER
verwendet werden kann und auf welches Objekt sich OTHER
bezieht.
Eine andere Eigenschaft, die sich auf zwei Eigenschaften bezieht ist die [Ofengültigkeitsbedingung] von Ressourcen. Hier können Eigenschaften auch nur über ME
und ohne OTHER
verglichen werden.
- Beispiel
Die [Ofengültigkeitsbedingung], die die gleichzeitige Zuweisung von Aufträgen des gleichen Kunden erlaubt lautet ME.Order.Customer.Code
.
HOLDER
HOLDER
bezieht sich auf das Objekt, zu der die Eigenschaft mit [Datentyp] "Formel" gehört. So ist etwa in der [Gültigkeitsbedingung] einer Hauptnutzungsanweisung in den Integrierten Stammdaten ME
ein Vorgang und HOLDER
die Hauptnutzungsanweisung. Um sich in der [Gültigkeitsbedingung] auf den [Code] der Ressource der Hauptnutzungsanweisung in der Gültigkeitsbedingung zu beziehen, wird die Formel HOLDER.Resource.Code
genutzt.
PROJECT
PROJECT
bezieht sich auf das aktuell genutzte Projekt, so können die Projekteigenschaften referenziert werden. PROJECT
ist in allen Formeln nutzbar.
- Beispiel
Um die [Planungsbasiszeit] zu referenzieren wird die Formel PROJECT.BasisTime
genutzt.
WORKSPACE
WORKSPACE
bezieht sich auf den Arbeitsplatz des aktuell genutzten Projekt, so können die Arbeitsplatzeigenschaften referenziert werden.WORKSPACE
ist in allen Formeln nutzbar.
- Beispiel
Um den Namen der [Projektdatei] zu referenzieren wird die Formel WORKSPACE.ProjectFileName
genutzt.
TARGET
TARGET
ist nur als Argument bestimmter interner Funktionen verwendbar. Definieren Sie als erstes Argument der internen Funktion ein Objekt und definieren dann TARGET
ab dem zweiten Argument. TARGET
verweist auf das Objekt des ersten Arguments.
- Beispiel
Um die Summe der [Menge] aller Aufträge zu berechnen, wird die Formel Sum('Order',TARGET.Qty)
genutzt. TARGET
steht hier für die Auftragsklasse.
Verschachtelung
Der Aufruf einer internen Funktion in einer anderen internen Funktion wird Verschachteln genannt. Verschachtelungen können sich über mehrere Ebenen erstrecken.
Angenommen die internen Funktionen A und B akzeptieren beide TARGET
als Argument. Wenn B als Argument von A genutzt wird, so referenziert das TARGET
-Argument in B das Objektargument in B.
- Beispiel
Es soll die größte [Menge] aller Aufträge mit dem frühesten [Fälligkeitstermin] unter [Aufträge ganz rechts] von ME
bestimmt werden:
MaxIF(ME.RightmostOrder, TARGET.LET==Min(ME.RightmostOrder, TARGET.LET)), TARGETQty )
Das erste TARGET
wird als ME.RightmostOrder
ausgewertet, also das erste Argument der MaxIF
-Funktion. Das zweite TARGET
wird auch als ME.RightmostOrder
ausgewertet, aber aks das erste Argument der MIN
-Funktion.
INPUT
INPUT
wird in der [Virtuelle Eigenschaftsformel invers], der [Anzeigeformel], [Inverse Anzeigeformel], [Währung] etc. verwendet. Es bezieht sich prinzipiell auf die in eine Zelle eingegebene String. Weitere Details können der Beschreibung der jeweiligen Eigenschaften entnommen werden.
DELETE
DELETE
wird verwendet, um Eigenschaftswerte zu löschen.
- Beispiel
Der Name der Eigenschaft wird mit ME.Name=DELETE
gelöscht.
Eigenschaften mit mehreren Werten
Wenn eine Eigenschaft über mehrere Werte verfügt, können Sie hinter der Eigenschaft [n]
eingegeben, wobei n der Index des gewünschten Eigenschaftswerts ist.
- Beispiel
Um den zweiten [Kommentar] eines Auftrages zu referenzieren nutzen Sie die Formel ME.Order.Comments[2]
.
Wenn Sie für n 0 angeben, wird das letzte Element ausgegeben. Wenn etwa [Kommentar] "a;b;c" ist, würde "c" zurückgegeben.
Wenn Sie kein [n] anfügen werden alle Werte zurückgegeben, wenn die Werte Strings sind. Ansonsten wird der letzte Eigenschaftswert zurückgegeben. Wenn etwa [Kommentar] "a;b;c" ist, würde "a;b;c" zurückgegeben. Um auch bei andere Datentypen alle Werte zurückzugeben, kann die interne Funktion StrProps()
genutzt werden.
Datentyp Objekt
Für Eigenschaften mit [Datentyp] "Objekt" mit mehreren Werten, kann statt dem Index der [Code] der Objekte verwendet werden, um einen bestimmten Werte zu adressieren. Der [Code] ist eine String und die Werte der Eigenschaft werden nach einer passenden String durchsucht. Der Vergleich der Objekte mit der String erfolgt in der Reihenfolge [Code] → [Anzeigename] → [Alias].
- Beispiel
Um auf die Nutzungsnweisung mit [Code] "S1" der Produktionsaufgabe eines Vorganges zuzugreifen, nutzen Sie die Formel ME.ProductionTask.UseInstructions['S1']
.
Angenommen dem Projekt wurde die benutzerdefinierte Klasse "Meine Klasse" (MyClass
) mit der Eigenschaft [Meine Eigenschaft 1] (MyProperty1
) hinzugefügt. Auf den Wert von [Meine Eigenschaft 1] des Objekts "ABC" in der Klasse "MyClass" kann mit PROJECT.Child['MyClass'].Child['ABC'].MyClassUser_MyProperty1
zugegriffen werden.
Weitere Informationen zu benutzerdefinierten Klassen finden Sie unter Hinzufügen einer neuen Klassendefinition.
Werte
Häufig werden Werte wie Zahlen und Strings in Formeln verwendet. Benutzen Sie in Formeln folgende Formatierungen.
Datentyp | Beschreibung | Beispiel |
---|---|---|
Zahl | Kann direkt eingegeben werden | 123 |
String | Wird mit einfachen Anführungszeichen umschlossen | '123' |
Datum | Wird mit Rautenumschlossen | #2020/06/01 12:00:00# |
Bool | Direkte Eingabe des Werts | TRUE, FALSE |
Steuerzeichen in Strings
In Strings ist "\", zusammen mit dem nachfolgenden Zeichen, ein Steuerzeichen.
Formel | Rückgabewert | Beschreibung |
---|---|---|
'\\' | \ | Wird als ein Backslash ausgegeben |
'\n' | ↵ | Fügt einen Zeilenumbruch ein |
'\ | ' | Gibt ein einfaches Anführungszeichen aus |
Operatoren
Operator | Bedeutung | Kommentar |
---|---|---|
* | Multiplikation | |
/ | Division | |
^ | Potenzierung | |
% | Modulo | Rest der Division |
&& | AND | Logisches UND |
|| | OR | Logisches ODER |
== | Gleich | Vergleich |
!= | Ungleich | Vergleich |
> | Größer | Vergleich |
>= | Größer oder gleich | Vergleich |
< | Kleiner | Vergleich |
<= | Kleiner oder gleich | Vergleich |
(, ) | Klammern | |
= | Zuweisung | Setzen von Werten |
Die Operatoren werden in der folgenden Reihenfolge ausgewertet:
- ^
- *, /, %
- +, -
- ==, !=, >, <, >=, <=
- &&, ||
- =
Inhalte in Klammern werden zuerst ausgewertet.
Kurzschlussauswertung
Asprova nutzt Kurzschlussauswertung zur schnelleren Auswertung von Formeln. Durch eine entsprechende Formelstruktur kann diese Funktionalität optimal genutzt werden. Weitere Informationen dazu finden Sie hier.
Funktionen
In Formeln können Sie interne und benutzerdefinierte Funktionen verwenden. Die Funktion zum Beziehen der, auf einen Vorgang anzuwendenden, [Spezifikation 1] lautet GetApplicableSpec(1,ME.Operation)
.
Bei der Nutzung von Funktionen achten Sie bitte auf die korrekte Schreibweise von Funktionsnamen und Argumenten. Weitergehende Informationen zu Asprovas internen Funktionen finden sich hier.
IF
Die interne Funktion IF()
ermöglicht die Bewertung von Vorgängen mit der folgenden Formel:
IF(Bedingung, fallsTRUE
, fallsFALSE
)
- Beispiel
Ist die [Startzeit] vor dem 1. Juni 2020, so wird der erste [Kommentar] auf "ABC" gesetzt, sonst auf "XYZ":
ME.Comments=IF(ME.StartTime<=#2020/06/01, 'ABC', 'XYZ' )
oder
IF(ME.StartTime<=#2020/06/01, ME.Comments='ABC', ME.Comments='XYZ' )
Ab Version 13.1 können mehrere Bedingungen eingegeben werden:
IF(Bedingung 1, fallsTRUE
, Bedingung 2, fallsTRUE
, ... ... Bedingung n, fallsTRUE
, fallsFALSE
)
- Beispiel
Bei [Priorität] ab 90 rot, von 50 bis 90 blau und bei weniger als 50 grün:
IF(ME.Order.Priority>=90, RGB(255,0,0), ME.Order.Priority<50, RGB(0,255,0), RGB(0,0,255) )