Formeln: Unterschied zwischen den Versionen

Aus Asprova Hilfe
Wechseln zu: Navigation, Suche
(Imported from text file)
 
(Operatoren)
 
(27 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
 
<div align="right">[[Formeleditor|Formeleditor]]</div>
 
<div align="right">[[Formeleditor|Formeleditor]]</div>
 
<hr>
 
<hr>
Für Eigenschaften vom Typ Formel müssen Formeln festgelegt werden.
+
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
  
Grundsätzliches
+
=== Beispiel ===
 +
Die folgende Formel ist der [Standardwert] für den [Vorgangsbalkentext] des Ressourcen-Gantt-Diagramms:
 +
ME.Operation.Order+'\n'+ME.Operation.OperationOutMainItem+'\n'+ME.Operation.OperationOutMainItemQty
  
Eine Formel setzt sich zusammen aus
+
<code>ME.Operation.OperationOutMainItemQty</code>
 +
: [Produktionsmenge] des Vorgangs
 +
<code>+</code>
 +
: Additionsoperator (wird hier genutzt um mehrere Zeichenfolgen miteinander zu verbinden)
 +
<code>\n</code>
 +
: Zeichenfolge für Zeilenumbruch
  
 +
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
+
== Eigenschaften ==
:*Werten
+
=== Lang- und Kurznamen ===
:*Operatoren
+
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].)
:*Funktionen
 
  
Zum Beispiel ist folgende Formel eine standardmäßige Vorgangsbalkentextformel für das Ressourcen-Gantt-Diagramm.
+
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.WorkInst_Operation.Work_Order+'\n'+ME.WorkInst_Operation.Work_OperationOutMainItem+'\n'+ME.WorkInst_Operation.Work_OperationOutMainItemQty
+
=== ME===
 +
Wenn Sie eine Eigenschaft in einer Formel verwenden, geben Sie zunächst <code>ME</code> ein. <code>ME</code> ist das Objekt, 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. Geben Sie nach <code>ME</code> einen Punkt (<code>.</code>) ein, so erscheint eine Dropdown-Liste der verfügbaren Eigenschaften, die Sie durch einen  Klick auswählen können. Natürlich können Sie den Eigenschaftsnamen auch einfach hinter dem Punkt eingeben.
  
"ME.WorkInst_Operation.Work_OperationOutMainItem" - diese Eigenschaft zeigt die Produktionsmenge eines Vorgangs an. <br />"+" ist ein Additionsoperator und verbindet Zeichenketten, wenn er zwischen solchen verwendet wird. <br />"'\n'" ist ein Zeichenkettewert (Sonderzeichen) und bewirkt einen Zeilenumbruch (newline).
+
; Beispiel
 +
Um im [Auftragsbalken Formel rechter Text] im Auftrags-Gantt-Diagramm den [Fälligkeitstermin] anzuzeigen, geben Sie <code>ME.LET</code> ein.
  
 +
Sie könnten hier <code>ME</code> weglassen, der eingegebene Eigenschaftsname wird dann als eine Eigenschaft von <code>ME</code> angesehen. Daher könnten Sie <code>ME.LET</code> oder <code>LET</code> eingeben und das Ergebnis ist das Gleiche. Aus Gründen der Durchgängigkeit und des leichteren Verständnis, ist diese Vereinfachung jedoch nicht empfohlen.
  
Eigenschaften
+
; Beispiel
 +
Um in der [Vorgangsbalkentextformel] des Ressourcen-Gantt-Diagramm den [Artikelname] des Auftragsartikels zu referenzieren, geben Sie <code>ME.Order.Item.Name</code> ein.
  
[[Vorgang 4|Lange Namen und Kurze Namen]]
+
=== OTHER ===
 +
Bei Eigenschaften wie der [Verknüpfungsbedingung], bei denen die Werte zweier Eigenschaften verglichen werden, können Sie zusätzlich zu <code>ME</code> auch <code>OTHER</code> verwenden. <code>OTHER</code> bezieht sich auch auf ein Objekt und kann analog wie <code>ME</code> verwendet werden.
  
Die Eigenschaftennamen haben jeweils einen langen und einen kurzen Namen. Wenn zum Beispiel eine Menge für einen Auftrag festgelegt wird, ist Qty der kurze Name und Order_Qty der lange Name. Grundsätzlich werden der Klassenname und ein Unterstrich vor den Kurznamen gesetzt. (Wenn ein bestimmter langer Name gesucht wird, schauen Sie bitte entweder in die "Klasseneigenschaften" der Hilfe oder überprüfen Sie ihn mit einer Reihe von "Code"-Zeichen, die in den Eigenschaften festgelegt sind.)
+
; Beispiel
 +
Um in der [Verknüpfungsbedingung] eines Artikels festzulegen, dass zum Verknüpfen die [Spezifikation 1] der Aufträge gleich sein muss, geben Sie <code>ME.Order.Spec1==OTHER.Order.Spec1</code> ein.
  
Wenn ein Eigenschaftenname mithilfe von ME beschrieben wird, ist das Zielobjekt klar. Verwenden Sie in diesem Fall einen kurzen Namen. Dieser wird normalerweise verwendet. Der Name in der Dropdown-Liste ist auch ein kurzer Name.
+
Im [[Formeleditor]] ist ersichtlich, ob <code>OTHER</code> verwendet werden kann und auf welches Objekt sich <code>OTHER</code> bezieht.
  
Wenn ein übergeordnetes Objekt (Parent), ein untergeordnetes Objekt (Child) oder ein Sortierschlüssel in der Formel verwendet wird, ist das Zielobjekt unklar. In diesem Fall muss der lange Name verwendet werden.
+
Eine andere Eigenschaft, die sich auf zwei Eigenschaften bezieht ist die [Ofengültigkeitsbedingung] von Ressourcen. Hier können Eigenschaften allerdings auch einfach nur über <code>ME</code> und ohne <code>OTHER</code> verglichen werden, falls die zu vergleichende Eigenschaft bei allen Objekten gleich ist.
  
ME
+
; Beispiel
 +
Die [Ofengültigkeitsbedingung], die die gleichzeitige Zuweisung von Aufträgen des gleichen Kunden erlaubt lautet <code>ME.Order.Customer.Code</code>.
  
Wenn Sie eine Eigenschaft in einer Formel verwenden, geben Sie zunächst ein:
+
=== 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.
  
: ME
+
=== 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.
  
ME bezieht sich auf das Objekt, dessen Formeltypeigenschaft der geschriebenen Formel entspricht. Im Fall der Eigenschaft "Gültigkeitsbedingung" einer Nutzungsanweisung der integrierten Stammdaten, bezieht sich ME auf einen Vorgang. Im Fall der Eigenschaft "Vorgangsbalkentextformel" des Ressourcen-Gantt-Diagramms, bezieht sich ME auf eine Nutzungsanweisung.
+
;Beispiel
 +
Um die [Planungsbasiszeit] zu referenzieren wird die Formel <code>PROJECT.BasisTime</code> genutzt.
  
Mit der Eingabe eines Punktes "." hinter ME wird eine Liste von Eigenschaften angezeigt, aus denen Sie entpsrechend eine auswählen können. Natürlich können Sie den Namen der Eigenschaft auch direkt hinter der Zeitspanne eingeben.
+
=== 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.
  
Wenn Sie zum Beispiel das Fälligkeitsdatum (LET) für die Eigenschaft "Auftragsbalken Formel rechter Text" im Auftrags-Gantt-Diagramm eingeben wollen, geben Sie folgendes ein:
+
;Beispiel
 +
Um den Namen der [Projektdatei] zu referenzieren wird die Formel <code>WORKSPACE.ProjectFileName</code> genutzt.
  
: ME.LET
+
=== 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.
  
Sie können ME auch weglassen. In diesem Fall wird der Eigenschaftenname, den Sie eingegeben haben, als eine Eigenschaft von ME verarbeitet. Daher können Sie im obigen Beispiel "ME.LET" oder "LET" eingeben und beide Ausdrücke haben dieselbe Bedeutung.
+
; 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.
  
Wenn die ausgewählte Eigenschaft vom Typ Objekt ist, können Sie wieder einen Punkt "." eingeben und eine Eigenschaft des Objekts auswählen (oder direkt eingeben). Wenn Sie zum Beispiel den Namen des Artikels eines Auftrags für eine Vorgangsbalkentextformel des Ressourcen-Gantt-Diagramms eingeben wollen, lautet die Formel:
+
==== Verschachtelung ====
 +
Der Aufruf einer internen Funktion in einer anderen internen Funktion wird Verschachteln genannt. Verschachtelungen können sich über mehrere Ebenen erstrecken.
  
: ME.Order.Item.Name
+
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),
 +
  TARGET.Qty
 +
)
 +
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 als das erste Argument der <code>MIN</code>-Funktion.
  
OTHER
+
Akzeptiert eine verschachtelte interne Funktion <code>TARGET</code> nichts als Argument, so kann in dieser trotzdem <code>TARGET</code> genutzt werden, dieses bezieht sich dann aber auf die übergeordnete interne Funktion.
  
Für Eigenschaften wie "Verknüpfungsbedingung", die Werte zweier Eigenschaften vergleicht, können Sie OTHER zusätzlich zu ME verwenden. OTHER bezieht sich auch auf ein Objekt und kann genauso wie ME verwendet werden.
+
=== 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.
  
Wenn Sie zum Beispiel beschreiben wollen, dass die Auftragsspezifikation 1 zwischen zwei Eigenschaften, die "Verknüpfungsbedingung" der Artikelklasse verwenden, gleich ist, nehmen Sie folgende Formel
+
=== DELETE ===
 +
<code>DELETE</code> wird verwendet, um Eigenschaftswerte zu löschen. Alternativ kann auch <code><nowiki>''</nowiki></code> verwendet werden.
  
: ME.Order.Spec1.Code==OTHER.Order.Spec1.Code
+
; Beispiel
 +
Der Name der Eigenschaft wird mit <code>ME.Name=DELETE</code> oder <code>ME.Name=<nowiki>''</nowiki></code> gelöscht.
  
Sie können im [[Formeleditor|Formeleditor]] nachschauen, ob Sie OTHER verwenden können oder nicht und um das Objekt zu finden, auf das sich OTHER bezieht.
+
; Hinweis
 +
: Vor Version 15.0 wurde mit <code><nowiki>''</nowiki></code> ein ''NULL''-Zeichen eingefügt, ab Version 15.0 wird der Wert vollständig gelöscht, so dass das Verhalten genau dem von <code>DELETE</code> entspricht.
  
Es gibt eine Eigenschaft, die Werte zweier Eigenschaften vergleicht, die "Ofengültigkeitsbedingung". Hier werden Eigenschaften allein anhand von ME verglichen, nicht aber unter Verwendung von OTHER.
+
=== 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>.
  
Sie können zum Beispiel in einer Ofenwertbedingung festlegen, dass Aufträge simultan demselben Ofen zugeordnet werden können, wenn die Aufträge vom selben Kunden kommen.
+
Wenn Sie für ''n'' 0 angeben, wird das letzte Element ausgegeben. Wenn etwa [Kommentar] "a;b;c" ist, würde "c" zurückgegeben.
  
: ME.Order.Customer.Code
+
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.
  
 +
==== Werte lesen, setzen und löschen ====
 +
Das Lesen, Setzen und Löschen bei Eigenschaften mit mehreren Werten hängt von der genutzten Asprova-Version und den Projekteinstellungen ab.
  
HOLDER
+
In den folgenden Tabellen ist die Anzahl der bereits in der Eigenschaft [Prop] gesetzten Werte N und es gilt 1 ≤ n ≤ N.
  
HOLDER bezieht sich auf ein Objekt, das die Eigenschaft "Formel" besitzt. In der Gültigkeitsbedingung einer Nutzungsanweisung der integrierten Stammdaten zum Beispiel ist ME ein Vorgang und HOLDER eine Hauptnutzungsanweisung. Wenn Sie sich auf den Ressourcencode der Nutzungsanweisung in der Gültigkeitsbedingung der Nutzungsanweisung in den integrierten Stammdaten beziehen, ist die Formel:
+
{| class="wikitable"
 
+
|+ Ab Version 15.2 (und [Verhalten beim Setzen mehrerer Daten] "Unabhängig vom Datentyp")
: HOLDER.Resource.Code
+
|-
 
+
!rowspan="2"|Aktion
 
+
!rowspan="2"|Formel
PROJECT
+
!colspan="2"|Datentyp
 
+
!rowspan="2"|Kommentar
PROJECT bezieht sich auf das derzeit geöffnete Projekt. Sie können auf die Eigenschaften verweisen, die in den Projekteinstellungen angezeigt werden. Sie können PROJECT in jeder Formel verwenden.
+
|-
 
+
!String!!Andere
Wenn Sie zum Beispiel auf die Planungsbasiszeit verweisen, ist die Formel
+
|-
 
+
|rowspan="3"|Lesen||style="background: #DAEEF3"|<code>ME.Prop[n]</code>||style="background: #FFFF99" colspan="2" align="center"|n-te||rowspan="2"|
: PROJECT.BasisTime
+
|-
 
+
|style="background: #DAEEF3"|<code>ME.Prop[0]</code>||style="background: #D8E4BC" colspan="2" align="center"|letzte
 
 
WORKSPACE
 
 
 
WORKSPACE bezieht sich auf den Arbeitsplatz des derzeit geöffneten Projektes. Sie können auf die Eigenschaften verweisen, die in den Arbeitsplatzeinstellungen angezeigt werden.
 
 
 
Sie können WORKSPACE in jeder Formel verwenden. <br />Sie können zum Beispiel den Projektdateinamen über folgende Formel erhalten:
 
 
 
: WORKSPACE.ProjectFileName
 
 
 
 
 
TARGET
 
 
 
TARGET kann nur innerhalb des Arguments einiger interner Funktionen verwendet werden. <br />Definieren Sie OBJECT für das erste Argument der internen Funktion und definieren Sie TARGET ab dem zweiten Argument und danach. TARGET verweist auf das OBJECT des ersten Arguments.
 
 
 
Für die Verwendung der Summenfunktion der internen Funktionen, ist die Formel zum Beispiel
 
 
 
: Sum('Order',TARGET.Qty)
 
 
 
In diesem Fall bezieht sich TARGET auf "Order".
 
 
 
 
 
INPUT
 
 
 
INPUT wird in virtuellen Umkehrfunktionen der Eigenschaften, in Anzeigeformeln, Umkehrfunktionen der Anzeige und in Währungsformatformeln etc. verwendet. Prinzipiell bezieht es sich auf eine Zeichenkette, die in einer bestimmten Zelle eingegeben wurde. Mehr Details entnehmen Sie bitte den jeweiligen Eigenschaften.
 
 
 
 
 
DELETE
 
 
 
DELETE wird verwendet, wenn Sie einen Eigenschaftswert löschen möchten. Mit DELETE können Sie den Wert einer Eigenschaft auf der linken Seite der Zuordnungsformel löschen, wie in
 
 
 
: ME.Name=DELETE
 
 
 
 
 
Eigenschaften mit mehreren Werten
 
 
 
Wenn eine Eigenschaft über mehrere Werte verfügt, können Sie nach dem Namen der Eigenschaft [n] eingeben. "n" ist eine Zahl, die den n'ten Wert mehrerer Eigenschaften beschreibt. Wenn Sie zum Beispiel den zweiten Kommentar eines Auftrags beschreiben wollen, ist die Formel
 
 
 
: Order.Comments[2]
 
 
 
Wenn Sie "0" als "n" eingeben, wird das letzte Element ausgegeben. Wenn zum Beispiel "a;b;c" für die Eigenschaft Kommentare festgelegt wurden, wird "c" ausgegeben, wenn Comments[0] in die Formel geschrieben wird.
 
 
 
Wenn Sie kein [n] hinzufügen, werden alle Werte ausgegeben, wenn die Eigenschaft eine Zeichenkette ist. Ansonsten wird die letzte Eigenschaft ausgegeben. Wenn zum Beispiel "a;b;c" für die Eigenschaft Kommentare festgelegt sind, werden "a;b;c" ausgegeben aufgrund der Zeichenketteneigenschaft der Kommentare.
 
 
 
 
 
Eigenschaften mit mehreren Werten, wenn der Eigenschaftstyp ein Objekt ist
 
 
 
Für Objekttypeigenschaften mit mehreren Werten kann der Code des Objekts verwendet werden, um einen Index in der Liste mehrerer Werte festzulegen. Der Code ist eine Zeichenkette und die Werte der Eigenschaft werden nach einer passenden Zeichenkette durchsucht. Beim Vergleichen der Objekte mit der Zeichenkette wird nach folgender Priorität vorgegangen Code -> Anzeigename -> Alias.
 
 
 
Wenn zum Beispiel ME ein Vorgang ist, wird, um auf die Anweisung dieses Vorganges mit dem Code S1 zuzugreifen, die Formel
 
 
 
: ME.ProductionTask.UseInstructions['S1']
 
 
 
verwendet.
 
 
 
Angenommen, der Benutzer fügt eine Klasse "MyClass" hinzu mit einer Eigenschaft, die "MyProperty1" heisst, dann kann mit folgender Formel auf die MyProperty-Eigenschaft des Objektes MyClass mit dem Namen "ABC" zugegriffen werden:
 
 
 
: PROJECT.Child['MyClass'].Child['ABC'].MyProperty1
 
 
 
Weitere Informationen zu benutzerdefinierten Klassen finden Sie in [[Hinzufügen einer neuen Klassendefinition|Hinzufügen einer neuen Klassendefinition]].
 
 
 
 
 
Werte
 
 
 
Sie werden auch häufig Werte wie Zahlen und Zeichenketten in Formeln verwenden. Wenn Sie solche Werte in Formeln verwenden, beachten Sie bitte die folgenden Punkte.
 
 
 
 
 
{|
 
 
|-
 
|-
|   ||Zahlen||Werden dargestellt wie sie sind.||123||  
+
|style="background: #DAEEF3"|<code>ME.Prop</code>||style="background: #B8CCE4" align="center"|alle||style="background: #D8E4BC" align="center"|letzte||Strings nutzen ; als Trennzeichen
 
|-
 
|-
||   ||Zeichenketten||Werden in einfache Anführungszeichen eingeschlossen.||'123'
+
|rowspan="3"|Löschen||style="background: #DAEEF3"|<code>ME.Prop[n]=DELETE</code>||style="background: #FFFF99" colspan="2" align="center"|n-te||rowspan="7"|
 
|-
 
|-
||   ||Daten||Werden in Rauten (#) eingeschlossen.||#2005/01/01 12:00:00#
+
|style="background: #DAEEF3"|<code>ME.Prop[0]=DELETE</code>||style="background: #D8E4BC" colspan="2" align="center"|letzte
 
|-
 
|-
||   ||Wahr oder falsch||Werden wie in der Spalte rechts dargestellt.||TRUE, FALSE
+
|style="background: #DAEEF3"|<code>ME.Prop=DELETE</code>||style="background: #B8CCE4" colspan="2" align="center"|alle
 
|-
 
|-
|}
+
|rowspan="2"|Ändern||style="background: #DAEEF3"|<code>ME.Prop[n]=x</code>||style="background: #FFFF99" colspan="2" align="center"|n-te
 
 
"\" in einer Zeichenkette stellt zusammen mit dem benachbarten Zeichen ein Kontrollzeichen/ Steuerungszeichen dar. Daher müssen Sie, wenn Sie "\" eingeben wollen, "\\" schreiben. Sie können auch für Eigenschaften wie "Vorgangsbalkentextformel", die Sie in mehreren Zeilen darstellen können, "\n" eingeben, um eine neue Zeile festzulegen.
 
 
 
Wenn Sie zum Beispiel folgendes für die Vorgangsbalkentextformel des Ressourcen-Gantt-Diagramms eingeben
 
 
 
: ME.Operation.Work_Order+'\n'+ME.Operation.OperationOutMainItem+'\n'+ME.Operation.OperationOutMainItemQty
 
 
 
werden bei der Darstellung des Formelergebnisses neue Zeilen eingefügt.
 
 
 
 
 
Operatoren
 
 
 
Sie können folgende Operatoren in Asprova verwenden
 
 
 
 
 
{|
 
 
|-
 
|-
|   ||+||   ||Addition, Verbindung von (Zeichen-)Ketten|| 
+
|style="background: #DAEEF3"|<code>ME.Prop[0]=x</code>||style="background: #D8E4BC" colspan="2" align="center"|letzte
 
|-
 
|-
||   ||-||   ||Subtraktion
+
|Löschen &<br>hinzufügen||style="background: #DAEEF3"|<code>ME.Prop=x</code>||style="background: #B7DEE8" colspan="2" align="center"|alle löschen &<br>einen hinzufügen
 
|-
 
|-
||   ||*||   ||Multiplikation
+
|Hinzufügen||style="background: #DAEEF3"|<code>ME.Prop[]=x</code>||style="background: #FCD5B4" colspan="2" align="center"|hinzufügen
 
|-
 
|-
||   ||/||  ||Division
+
|}
 +
 
 +
{| class="wikitable"
 +
|+ Vor Version 15.2 (oder [Verhalten beim Setzen mehrerer Daten] "Je nach Datentyp (altes Verhalten)")
 
|-
 
|-
||   ||^||  ||Potenzierung
+
!rowspan="2"|Aktion
 +
!rowspan="2"|Formel
 +
!colspan="4"|Datentyp
 +
!rowspan="2"|Kommentar
 
|-
 
|-
||  ||%||  ||Rest
+
!String!!Objekt<br>(x ist Objekt)!!Objekt<br>(x ist String)!!Andere
 
|-
 
|-
||   ||&&||   ||AND
+
|rowspan="3"|Lesen||style="background: #DAEEF3"|<code>ME.Prop[n]</code>||style="background: #FFFF99" colspan="4" align="center"|n-te||rowspan="2"|
 
|-
 
|-
||   ||||||  ||OR
+
|style="background: #DAEEF3"|<code>ME.Prop[0]</code>||style="background: #D8E4BC" colspan="4" align="center"|letzte
 
|-
 
|-
||   ||==||   ||Gleich (Vergleich)
+
|style="background: #DAEEF3"|<code>ME.Prop</code>||style="background: #B8CCE4" align="center"|alle||style="background: #D8E4BC" align="center" colspan="3"|letzte||Strings nutzen ; als Trennzeichen
 
|-
 
|-
||   ||!=||   ||Ungleich (Vergleich)
+
|rowspan="3"|Löschen||style="background: #DAEEF3"|<code>ME.Prop[n]=DELETE</code>||style="background: #FFFF99" colspan="4" align="center"|n-te||rowspan="5"|
 
|-
 
|-
||   ||>||   ||Größer (Vergleich)
+
|style="background: #DAEEF3"|<code>ME.Prop[0]=DELETE</code>||style="background: #D8E4BC" colspan="4" align="center"|letzte
 
|-
 
|-
||   ||>=||   ||Größer oder gleich (Vergleich)
+
|style="background: #DAEEF3"|<code>ME.Prop=DELETE</code>||style="background: #B8CCE4" colspan="4" align="center"|alle
 
|-
 
|-
||   ||<||   ||Kleiner (Vergleich)
+
|Ändern||style="background: #DAEEF3"|<code>ME.Prop[n]=x</code>||style="background: #FFFF99" colspan="4" align="center"|n-te
 
|-
 
|-
||   ||<=||   ||Kleiner oder gleich (Vergleich)
+
|rowspan="2"|Ändern &<br>hinzufügen||style="background: #DAEEF3"|<code>ME.Prop[0]=x</code>||style="background: #FCD5B4" colspan="2" align="center"|hinzufügen||style="background: #D8E4BC" align="center"|letzte<br>ändern||style="background: #FCD5B4" align="center"|hinzufügen
 
|-
 
|-
||   ||(,)||   ||Klammern
+
|style="background: #DAEEF3"|<code>ME.Prop=x</code>||style="background: #FF99CC" colspan="2" align="center"|alle<br>ändern||style="background: #B7DEE8" align="center"|alle löschen &<br>einen hinzufügen||style="background: #FF99CC" align="center"|alle<br>ändern||Wenn bei 'alle ändern' N = 0, dann einen hinzufügen
 
|-
 
|-
||   ||=||   ||Zuordnung
+
|Hinzufügen||style="background: #DAEEF3"|<code>ME.Prop[]=x</code>||style="background: #FCD5B4" colspan="4" align="center"|hinzufügen||Nur ab Version 15.2
 
|-
 
|-
 
|}
 
|}
  
Die Prioritäten der Operatoren sind wie folgt
+
==== Datentyp Objekt ====
 +
Für Eigenschaften mit [Datentyp] "Objekt" mit mehreren Werten, kann statt dem Index der [Code] der Objekte verwendet werden, um einen bestimmten Wert zu adressieren. Der [Code] ist ein String und die Werte der Eigenschaft werden nach einem passenden String durchsucht. Der Vergleich der Objekte mit dem String erfolgt in der Reihenfolge [Code] &#x2192; [Anzeigename] &#x2192; [Alias].
  
 +
; Beispiel
 +
Um auf die Nutzungsanweisung 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.
:#*, /, %
 
:#+, -
 
:#==, !=, >, <, >=, <=
 
:#&&, ||
 
:#=
 
  
Wenn Sie Klammern in einer Formel verwenden, werden die Inhalte der Klammern zuerst berechnet.
+
Weitere Informationen zu benutzerdefinierten Klassen finden Sie unter [[Hinzufügen einer neuen Klassendefinition|Hinzufügen einer neuen Klassendefinition]].
  
 +
[[Datei:UserClassTable.png]]
  
Funktionen
+
[[Datei:UserClassPropEditor.png]]
  
In Formeln können Sie Asprovas interne Funktionen verwenden und solche, die vom Benutzer eingetragen wurden. Wenn Sie Funktionen verwenden, stellen Sie bitte sicher, dass die Namen der Funktionen und die Parameter/ Argumente (math) korrekt beschrieben wurden.
+
== Werte ==
 +
Häufig werden Werte wie Zahlen und Strings in Formeln verwendet. Benutzen Sie in Formeln folgende Formatierungen.
  
Um Spec 1 auf einen Vorgang anzuwenden, können Sie folgende Funktion verwenden.
+
{| 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 Rauten umschlossen||#2020/06/01 12:00:00#
 +
|-
 +
|Bool||Direkte Eingabe des Werts||TRUE, FALSE
 +
|-
 +
|}
  
: GetApplicableSpec(1,ME.Operation)
+
=== Steuerzeichen in Strings ===
 +
In Strings ist "\", zusammen mit dem nachfolgenden Zeichen, ein Steuerzeichen.
  
[[Interne Funktionen|Hier]] finden Sie weitere Informationen über Asprovas interne Funktionen.
+
{| class="wikitable"
 +
|+ Verwendung von Steuerzeichen
 +
|-
 +
!Formel!!Rückgabewert!!Beschreibung
 +
|-
 +
|<code>'\\'</code>||\||Wird als ein umgekehrter Schrägstrich ausgegeben
 +
|-
 +
|<code>'\n'</code>||&#8629;||Fügt einen Zeilenumbruch ein
 +
|-
 +
|<code>&#39;\&#39;&#39;</code>||'||Wird als einfaches Anführungszeichen ausgegeben
 +
|-
 +
|}
  
 
+
== Operatoren ==
Einheiten
+
{| class="wikitable"
 
+
|+ Verfügbare Operatoren
Sie können Zahlen mit Einheiten versehen. Verfügbare Einheiten sind die folgenden und können auch in Großbuchstaben geschrieben werden.
+
|-
 
+
!Operator!!Bedeutung!!Kommentar
 
+
|-
{|
+
|<nowiki>+</nowiki>||Addition, Verketten von Zeichenketten||
 +
|-
 +
|<nowiki>-</nowiki>||Subtraktion||
 +
|-
 +
|*||Multiplikation||
 
|-
 
|-
|   ||s||   ||Sekunden|| 
+
|/||Division||
 
|-
 
|-
||   ||m||  ||Minuten
+
|^||Potenzierung||
 
|-
 
|-
||   ||h||  ||Stunden
+
|%||Modulo||Rest der Division
 
|-
 
|-
||   ||d||  ||Tage
+
|&&||AND||Logisches UND
 
|-
 
|-
||   ||w||   ||Wochen
+
|<nowiki>||</nowiki>||OR||Logisches ODER
 
|-
 
|-
||   ||month||   ||Monate
+
|==||Gleich||rowspan="6"|Vergleich
 
|-
 
|-
|}
+
|=||Ungleich
 
 
Neben den oben genannten Einheiten sind folgende Einheiten verfügbar, um die Produktion, das Rüsten und Abrüsten in den integrierten Stammdaten festzulegen.
 
 
 
 
 
{|
 
 
|-
 
|-
|   ||sp||  ||Produktionszeit pro Einheit (in Sekunden)|| 
+
|>||Größer
 
|-
 
|-
||   ||mp||  ||Produktionszeit pro Einheit (in Minuten)
+
|>=||Größer oder gleich
 
|-
 
|-
||   ||hp||  ||Produktionszeit pro Einheit (in Stunden)
+
|<||Kleiner
 
|-
 
|-
||   ||ps||  ||Menge, die in einer Sekunde produziert werden kann
+
|<=||Kleiner oder gleich
 
|-
 
|-
||   ||pm||  ||Menge, die in einer Minute produziert werden kann
+
|(&nbsp;&nbsp;&nbsp;&nbsp;)||Klammern||
 
|-
 
|-
||   ||ph||  ||Menge, die in einer Stunde produziert werden kann
+
|=||Zuweisung||Setzen von Werten
 
|-
 
|-
 
|}
 
|}
  
Wenn Sie zum Beispiel die Kapazität beschreiben, die 10 Minuten braucht, um eine Einheit herzustellen, schreiben Sie
+
Die Operatoren werden in der folgenden Reihenfolge ausgewertet:
 
+
# ^
: 10mp
+
# *, /, %
 
+
# +, -
Um 10 Minuten als festen Wert hinzuzufügen, schreiben Sie
+
# ==, !=, >, <, >=, <=
 
+
# &&, ||
: 10mp+10m
+
# =
 
 
Zahlen müssen vor Einheiten stehen. Sie können Einheiten nicht nach einer Zahl in Klammern angeben.
 
 
 
 
 
Ergebnistyp / Typ des Rückgabewerts
 
 
 
Asprova enthält mehrere Typen von Eigenschaften und Werten. Der Ergebnistyp einer Formel, die mehrere Typen enthält, hängt vom Typ im linken Teil der Formel ab.
 
 
 
Im folgenden Beispiel
 
 
 
: 10m * 2
 
 
 
ist auf der rechten Seite des Operators eine Zahl ("2"), während die linke Seite die Zeit ("10m") anzeigt. Aufgrund dessen ist der Ergebnistyp eine Zeitangabe und das Vorgangsergebnis ist:
 
 
 
: 20m
 
 
 
Wenn Sie die linke und die rechte Seite der obigen Formel vertauschen,
 
 
 
: 2 * 10m
 
 
 
so dass die rechte Seite die Zeit ("10m") angibt und die linke Seite eine Zahl ("2") ist, wird der Ergebnistyp eine Zahl und das Vorgangsergebnis ist:
 
 
 
: 1200.0
 
 
 
Diese beiden Formeln mögen gleich aussehen, aber ihre Ergebnisse sind unterschiedlich. Das liegt an den unterschiedlichen Ergebnistypen der beiden Formeln. Innerhalb einer Formel wird Zeit in Sekunden berechnet, also wird "10m * 2" als "600 * 2" (=1200) interpretiert und "2 * 10m" würde als "2 * 600" (=1200) in diesen Formeln interpretiert. Bis zu dieser Stelle wären die Ergebnisse gleich, wenn aber der Ergebnistyp eine Zeitangabe wäre, würden 1200 Sekunden als 20 Minuten angesehen, während beim Ergebnistyp Zahl die 1200 stehen bliebe.
 
 
 
Beachten Sie bitte, dass Unterschiede im Ergebnistyp auch Unterschiede in den Ergebnissen der Formeln zur Folge haben, wie Sie oben sehen. Wenn Sie zum Beispiel nur Zahlen (d.h. ohne Einheiten) für Kapazitätswert und Rüstzeit zur Verfügung stellen, werden diese als Minutenangaben verarbeitet und die Ergebnisse der Zuordnung sind für die oben erwähnten Formeln unterschiedlich. (Wenn die Eigenschaft eine Zeitangabe ist, empfehlen wir ebenfalls eine Festsetzung des Ergebnistyps in Zeitangabe, z. B. 10m * 2.)
 
 
 
Im Formeleditor können Sie Ergebnistyp oder Vorgangsergebnis einer Formel überprüfen. Bitte nutzen Sie den Editor als Referenz, wenn Sie Formeln schreiben.
 
 
 
 
 
 
 
Eigenschaften ohne Wert
 
 
 
Wenn arithmetische Operatoren auf Zahlen angewendet werden und einer der Operanden nicht definiert ist, ist das Ergebnis der Berechnung wie folgt: (Die Bedeutungen der Ausdrücke innerhalb der Klammern sind unten angeben)
 
 
 
NS - Wert ist nicht definiert
 
 
 
S - Wert ist definiert
 
 
 
0 - numerischer Wert
 
 
 
: NS+S = S
 
 
 
: S+NS = S
 
 
 
: NS-S = -S
 
 
 
: S-NS = S
 
 
 
: NS * S = 0
 
 
 
: S * NS = 0
 
 
 
: NS / S = 0
 
 
 
: S / NS = NS
 
 
 
Berechnungsergebnis einer Formel, die Eigenschaften ohne Werte enthält
 
 
 
Die Berechnung einer Formel, die Eigenschaften ohne Werte enthält, fällt für jeden Operator wie unten beschrieben aus. "NS" und "X, Y" in den Ausdrücken haben folgende Bedeutung
 
 
 
: NS = Es existiert kein Wert.
 
 
 
: X, Y = Ein Wert existiert.
 
 
 
 
 
Operator ==
 
 
 
: NS == NS -> TRUE
 
 
 
: NS == X -> FALSE
 
 
 
 
 
Operator !=
 
 
 
: NS != NS -> FALSE
 
 
 
: NS != X -> TRUE
 
 
 
 
 
Operatoren >, <, >=, und <=
 
 
 
Wenn entweder die linke Seite oder die rechte Seite des Operators keinen Wert enthält oder beide Seiten keinen Wert enthalten, enthält das Formelergebnis auch keinen Wert.
 
 
 
: NS > X -> NS
 
 
 
: NS < X -> NS
 
 
 
: NS >= X -> NS
 
 
 
: NS <= X -> NS
 
 
 
 
 
Operator &&
 
 
 
&& mit einer Eigenschaft ohne Wert fällt wie unten angegeben aus. Was Zahlen anbelangt, wird 0 als FALSE bewertet und andere Zahlen (nicht 0) werden als TRUE bewertet. Andere Datentypen werden wie Eigenschaften ohne Daten behandelt.
 
 
 
: NS && TRUE -> FALSE
 
 
 
: NS && FALSE -> FALSE
 
 
 
 
 
Operator ||
 
 
 
|| mit einer Eigenschaft ohne Wert fällt wie unten angegeben aus. Was Zahlen anbelangt, wird 0 als FALSE bewertet und andere Zahlen (nicht 0) werden als TRUE bewertet. Andere Datentypen werden wie Eigenschaften ohne Daten behandelt.
 
 
 
: NS || TRUE -> TRUE
 
 
 
: NS || FALSE -> FALSE
 
 
 
  
IF
+
Inhalte in Klammern werden zuerst ausgewertet.
  
Das Format ist normalerweise IF(Condition, Value 1, Value 2) [entspricht IF(Bedingung, Wert 1, Wert2)]. Wenn die Bedingung TRUE [WAHR] ist, wird der Wert 1 ausgegeben. Wenn sie FALSE [UNWAHR] ist, wird der Wert 2 ausgegeben. Wenn eine Eigenschaft ohne Wert enthalten ist, ist das Ergebnis wie unten angegeben. Wenn der Bedingungsteil eine Zahl ist, wird 0 mit FALSE bewertet und andere Zahlen (nicht 0) werden mit TRUE bewertet. Andere Datentypen werden behandelt wie Eigenschaften ohne Daten.
+
=== 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]].
  
: IF( TRUE, NS, X ) -> NS
+
== 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>.
  
: IF( FALSE, NS, X ) -> X
+
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( NS, X, Y ) -> Y
+
=== 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>
 +
)
  
 +
; 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,
 +
    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)
 +
)
  
 +
== Weitere Informationen ==
 +
* [[Interne Funktionen]]
  
 
<hr>
 
<hr>
 
<div align="right">Hilfe Nummer: 741000</div>
 
<div align="right">Hilfe Nummer: 741000</div>

Aktuelle Version vom 5. Mai 2022, 08:49 Uhr

Hilfe Nummer: 741000
Zusätzliche Informationen
Formeleditor

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 den [Vorgangsbalkentext] des Ressourcen-Gantt-Diagramms:

ME.Operation.Order+'\n'+ME.Operation.OperationOutMainItem+'\n'+ME.Operation.OperationOutMainItemQty

ME.Operation.OperationOutMainItemQty

[Produktionsmenge] des Vorgangs

+

Additionsoperator (wird hier genutzt um mehrere Zeichenfolgen miteinander zu verbinden)

\n

Zeichenfolge für Zeilenumbruch

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 Objekt, 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. Geben Sie nach ME einen Punkt (.) ein, so erscheint eine Dropdown-Liste der verfügbaren Eigenschaften, die Sie durch einen Klick auswählen 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.

Sie könnten hier ME weglassen, der eingegebene Eigenschaftsname wird dann als eine Eigenschaft von ME angesehen. Daher könnten Sie ME.LET oder LET eingeben und das Ergebnis ist das Gleiche. Aus Gründen der Durchgängigkeit und des leichteren Verständnis, ist diese Vereinfachung jedoch nicht empfohlen.

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, können Sie zusätzlich zu ME auch OTHER verwenden. OTHER bezieht sich auch auf ein Objekt und kann analog wie ME verwendet werden.

Beispiel

Um in der [Verknüpfungsbedingung] eines Artikels festzulegen, dass zum 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 allerdings auch einfach nur über ME und ohne OTHER verglichen werden, falls die zu vergleichende Eigenschaft bei allen Objekten gleich ist.

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),
  TARGET.Qty
)

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 als das erste Argument der MIN-Funktion.

Akzeptiert eine verschachtelte interne Funktion TARGET nichts als Argument, so kann in dieser trotzdem TARGET genutzt werden, dieses bezieht sich dann aber auf die übergeordnete interne 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. Alternativ kann auch '' verwendet werden.

Beispiel

Der Name der Eigenschaft wird mit ME.Name=DELETE oder ME.Name='' gelöscht.

Hinweis
Vor Version 15.0 wurde mit '' ein NULL-Zeichen eingefügt, ab Version 15.0 wird der Wert vollständig gelöscht, so dass das Verhalten genau dem von DELETE entspricht.

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.

Werte lesen, setzen und löschen

Das Lesen, Setzen und Löschen bei Eigenschaften mit mehreren Werten hängt von der genutzten Asprova-Version und den Projekteinstellungen ab.

In den folgenden Tabellen ist die Anzahl der bereits in der Eigenschaft [Prop] gesetzten Werte N und es gilt 1 ≤ n ≤ N.

Ab Version 15.2 (und [Verhalten beim Setzen mehrerer Daten] "Unabhängig vom Datentyp")
Aktion Formel Datentyp Kommentar
String Andere
Lesen ME.Prop[n] n-te
ME.Prop[0] letzte
ME.Prop alle letzte Strings nutzen ; als Trennzeichen
Löschen ME.Prop[n]=DELETE n-te
ME.Prop[0]=DELETE letzte
ME.Prop=DELETE alle
Ändern ME.Prop[n]=x n-te
ME.Prop[0]=x letzte
Löschen &
hinzufügen
ME.Prop=x alle löschen &
einen hinzufügen
Hinzufügen ME.Prop[]=x hinzufügen
Vor Version 15.2 (oder [Verhalten beim Setzen mehrerer Daten] "Je nach Datentyp (altes Verhalten)")
Aktion Formel Datentyp Kommentar
String Objekt
(x ist Objekt)
Objekt
(x ist String)
Andere
Lesen ME.Prop[n] n-te
ME.Prop[0] letzte
ME.Prop alle letzte Strings nutzen ; als Trennzeichen
Löschen ME.Prop[n]=DELETE n-te
ME.Prop[0]=DELETE letzte
ME.Prop=DELETE alle
Ändern ME.Prop[n]=x n-te
Ändern &
hinzufügen
ME.Prop[0]=x hinzufügen letzte
ändern
hinzufügen
ME.Prop=x alle
ändern
alle löschen &
einen hinzufügen
alle
ändern
Wenn bei 'alle ändern' N = 0, dann einen hinzufügen
Hinzufügen ME.Prop[]=x hinzufügen Nur ab Version 15.2

Datentyp Objekt

Für Eigenschaften mit [Datentyp] "Objekt" mit mehreren Werten, kann statt dem Index der [Code] der Objekte verwendet werden, um einen bestimmten Wert zu adressieren. Der [Code] ist ein String und die Werte der Eigenschaft werden nach einem passenden String durchsucht. Der Vergleich der Objekte mit dem String erfolgt in der Reihenfolge [Code] → [Anzeigename] → [Alias].

Beispiel

Um auf die Nutzungsanweisung 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.

UserClassTable.png

UserClassPropEditor.png

Werte

Häufig werden Werte wie Zahlen und Strings in Formeln verwendet. Benutzen Sie in Formeln folgende Formatierungen.

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 Rauten umschlossen #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.

Verwendung von Steuerzeichen
Formel Rückgabewert Beschreibung
'\\' \ Wird als ein umgekehrter Schrägstrich ausgegeben
'\n' Fügt einen Zeilenumbruch ein
'\'' ' Wird als einfaches Anführungszeichen ausgegeben

Operatoren

Verfügbare Operatoren
Operator Bedeutung Kommentar
+ Addition, Verketten von Zeichenketten
- Subtraktion
* Multiplikation
/ Division
^ Potenzierung
% Modulo Rest der Division
&& AND Logisches UND
|| OR Logisches ODER
== Gleich Vergleich
= Ungleich
> Größer
>= Größer oder gleich
< Kleiner
<= Kleiner oder gleich
(    ) Klammern
= Zuweisung Setzen von Werten

Die Operatoren werden in der folgenden Reihenfolge ausgewertet:

  1. ^
  2. *, /, %
  3. +, -
  4. ==, !=, >, <, >=, <=
  5. &&, ||
  6. =

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,
  falls TRUE,
  falls FALSE
)
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,
    falls TRUE,
  Bedingung 2,
    falls TRUE,
  ...
    ...
  Bedingung n,
    falls TRUE,
    falls FALSE
)
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)
)

Weitere Informationen


Hilfe Nummer: 741000