式の記述の基本

式で使用できる単位

評価結果のデータ型

値が無いプロパティの演算

式編集ダイアログ

内部関数


プロパティの型が式型の場合、そのプロパティには式を記述する必要があります。


基本

式は、

  • プロパティ
  • 演算子
  • 関数

を組み合わせて記述します。

例えば以下の式は、デフォルトの資源ガントチャートの使用指図バー文字式です。

UseInst_Operation.Work_Order+'\n'+UseInst_Operation.Work_OperationOutMainItem+'\n'+UseInst_Operation.Work_OperationOutMainItemQty

UseInst_Operation.Work_OperationOutMainItemQtyは、プロパティで、作業の製造数量です。
+は、加算(文字列の場合は文字列結合)の演算子です。
'\n'は、改行を意味する文字列(値)です。

時間や日時の計算や、能力値(前段取り、製造、後段取り)には単位を使用することができます。

また、時間と数値を組み合わせるような複数のデータ型を用いた式も設定できます。

値が設定されていないプロパティの評価についてはこちらをご覧ください。


プロパティ

ロングネームとショートネーム

プロパティ名にはロングネームとショートネームがあります。例えばオーダの数量であれば、

Qty

はショートネームで、

Order_Qty

はロングネームです。基本はショートネームの前にクラス名とアンダーバーが付きます(正確なロングネームを調べる際は、ヘルプの「クラス・プロパティ」を参照するか、プロパティ定義の「コード」の文字列で確認して下さい)。

MEなどを使用してプロパティ名を記述する場合など、対象のオブジェクトが明確になっている場合は、ショートネームを使用します。普通はこちらで、インテリセンスに出ているのもショートネームです。

親オブジェクト(Parent)や子オブジェクト(Child)または、ソートキーを式で記述する場合など対象のオブジェクトのクラスが不明確になっている場合や、同じクラスでショートネームが複数ある場合などは、ロングネームを使用する必要があります。

同じクラスでショートネームが複数ある場合、式編集ダイアログで「別名・表示名で表示する」のチェックをつける・外すをすると、プロパティが正しく戻らないケースがあります。詳細はこちらをご覧下さい。


ME

式中にプロパティを使う場合は、まず

ME

と入力します。
MEとは、式を入力している式型プロパティが対象とするオブジェクトを指します。例えば製造BOMの使用指図の指図有効条件ならMEは作業、資源ガントチャートの使用指図バー文字式ならMEは作業使用指図です。

MEの後にピリオド(.)を入力すると、プロパティの一覧が表示されますので、そこから選択できます。当然、ピリオド(.)の後に直接プロパティ名を入力しても良いです。

例えば、オーダガントチャートのオーダバー右文字式で納期(最遅終了日時)を入力する場合は、

ME.LET

と入力します。

MEを省略することもでき、その場合は記入したプロパティ名はMEのプロパティとして処理されます。
そのため、上の例はME.LETと記述しても、LETと記述しても同じ意味になります。

選択したプロパティがオブジェクト型なら、さらにピリオド(.)を入力してそのプロパティを選択(直接入力も可)できます。
例えば、資源ガントチャートの使用指図バー文字式でオーダの品目名を入力する場合、

ME.Order.Item.Name

のようになります。


OTHER

品目の紐付け条件式プロパティのような、2つのプロパティの値を比較を設定するプロパティでは、MEのほかにOTHERを使用します。OTHERもあるオブジェクトを指しています。使い方はMEと同じです。

例えば、品目の紐付け条件式プロパティで、オーダ仕様1が等しいと記述する場合は、

ME.Order.Spec1.Code==OTHER.Order.Spec1.Code

のようになります。

OTHERが使用可能かどうか、OTHERが指しているオブジェクトは、式編集ダイアログで確認できます。

2つのプロパティの値を比較するプロパティに、炉資源追加条件式プロパティがありますが、このプロパティについてはOTHERを使用せずに、MEのみを使って比較したいプロパティを設定します。

例えば、炉資源でオーダの顧客が同じなら同時割付け可能の追加条件式は、

ME.Order.Customer.Code

のようになります。


HOLDER

HOLDERは、その式型プロパティを所持するオブジェクトを指します。例えば、製造BOMの使用指図の有効条件式のMEは作業で、HOLDERはマスタ使用指図になりますので、製造BOMの使用指図の有効条件でその使用指図の資源コードを参照するには、

HOLDER.Resource.Code

となります。
多くの場合、MEとHOLDERは同じオブジェクトを指しています。


PROJECT

PROJECTは、現在開いているプロジェクトのことです。計画設定で表示されるプロパティを参照できます。
PROJECTはどの式からも使用することができます。

例えば、計画基準日時は、

PROJECT.BasisTime

となります。


WORKSPACE

WORKSPACEは、現在開いているプロジェクトのワークスペースです。ワークスペース設定で表示されるプロパティを参照できます。

WORKSPACEはどの式からも使用することができます。
例えば、プロジェクトファイル名の取得は、

WORKSPACE.ProjectFileName

で、取得できます。


TARGET

TARGETは、一部の内部関数の引数の中でのみ使用できます。
内部関数の第一引数にオブジェクトを指定し、第二引数以降でTARGETを指定します。TARGETは第一引数のオブジェクトを指すことになります。

例えば内分関数のSum関数を例とすると、

Sum('Order',TARGET.Qty)

のように使用します。この場合、TARGETはOrderを意味することになります。


TARGET 変数が使える内部関数Aの中で、さらにTARGET 変数が使える内部関数Bを記述した場合、内部関数Bの中で使用されたTARGETは、内部関数Bの引数で指定されたオブジェクトになります。

例:※ME = オーダ
 MaxIF(ME.RightmostOrder,TARGET.LET==Min(ME.RightmostOrder,TARGET.LET)),TARGETQty)

例えばこの例では、MEのオーダの末端親オーダのうち、納期が最も早いものの中で、最大のオーダ数量を取得していますが、1つ目のTARGETは、MaxIF関数の第一引数のME.RightmostOrderで評価され、2つ目のTARGETは、Min関数の第一引数のME.RightmostOrderで評価されます。

内部関数の中で内部関数を呼ぶことをネストすると言いますが、この規則は内部関数を何階層ネストして記述しても有効です。


INPUT

INPUTは、仮想プロパティ逆変換式、表示式・表示逆変換式、金額フォーマット式などで使用します。
基本的には、対象のセルに入力された文字列をあらわしますが、詳細はそれぞれのプロパティの説明をご覧下さい。


DELETE

DELETEは、プロパティの値を削除したい場合に使用します。DELETEを使用する場合は、

ME.Name=DELETE

のように、代入式にすることで、左辺のプロパティの値を削除します。


配列値のプロパティ

プロパティが複数の値を持つ場合は、プロパティ名の後に[n]をつけます。nは、数値で複数の値の番号です。
例えば、オーダのコメントの2番目は、

Order.Comments[2]

のようになります。

nに0を入れると、最後の要素を返します。例えばコメントに'a;b;c'と設定されている場合なら、Comments[0]はcを返します。

[n]をつけない場合、プロパティの型が文字型なら全体を、そうでないなら最後の要素を返します。例えばコメントに'a;b;c'と設定されている場合、Comments文字型なのでa;b;cを返します。


オブジェクト型の配列値のプロパティ

プロパティがオブジェクト型で且つ配列値(複数の値を持つ)場合は、プロパティ名の後のインデックスを文字列で設定できます。
設定した文字列をコード->表示名->別名の順にチェックして一致したオブジェクトを返します。

例えば、MEが作業で、そこから指図コードがS1の作業使用指図を取得する場合は、

ME.ProductionTask.UseInstructions['S1']

となります。

また、“MyClass”というコードで追加したクラスに“MyProperty1”というプロパティを追加してあるとします。“MyClass”の“ABC”というコードのオブジェクトの“MyProperty1”を取得する場合は、

PROJECT.Child['MyClass'].Child['ABC'].MyProperty1

となります。(新規クラスの追加はこちらを参照して下さい。新規プロパティの追加はこちらを参照して下さい。)



式では、数値や文字列などの値も多く使用します。
式中に値を使う場合は、以下の点に気をつけて下さい。

 数値普通に入力します 123
 文字列文字列の前後にシングルクォーテーション(')をつけます '123'
 日付日付の前後にシャープ(#)をつけます#2005/01/01 12:00:00#
 真、偽右の決まった文字をそのまま入力しますTRUE、FALSE

文字列中の\は次の1文字と組合せて制御文字を表します。そのため、\を表示する場合は\\と記述してください。また、制御文字については、使用指図バー文字式などの複数行表示できるプロパティで\nで改行が使用できます。

例えば、資源ガントチャートの使用指図バー文字式に、

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

と入力すると、改行されて表示されます。


演算子

Asprovaで使用できる演算子には以下のものがあります。

 + 足し算、文字列結合
 - 引き算
 * 掛け算
 / 割り算
 ^ べき乗
 % 余り
 && 論理積
 || 論理和
 ! 否定
 == 等しい(比較)
 != 等しくない(比較)
 > より小さい(比較)
 >= 以下(比較)
 < より大きい(比較)
 <= 以上(比較)
 (、) 括弧
 = 代入

演算子の優先度は以下の通りです。

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

括弧で括った場合は、括弧の中身が先に評価されます。


条件文 IF

条件によって異なる処理を行ったり、異なる演算を行いたい場合は以下のように記述します。

IF(条件式, 条件式がTRUEの場合の実行式, 条件式がFALSEの場合の実行式)

開始日時が2020年6月1日以前だったら、1つめのコメントに'ABC'を代入し、そうでなければ'XYZ'を代入する。

ME.コメント[1]=IF(ME.開始日時<=#2020/06/01#, 'ABC','XYZ')

または

IF(ME.開始日時<=#2020/06/01#, ME.コメント[1]='ABC',ME.コメント[1]='XYZ')

Ver.13.1から、複数の条件を記述できるようになりました。

IF(条件式1, 条件式1がTRUEの場合の実行式, 条件式2, 条件式2がTRUEの場合の実行式,・・・, 条件式n, 条件式nがTRUEの場合の実行式, 条件式nがFALSEの場合の実行式)

優先度90以上は赤、50~90は青、50未満は緑。

IF(ME.オーダ.優先度>=90,RGB(255,0,0),ME.オーダ.優先度<50,RGB(0,255,0),RGB(0,0,255))


関数

式中にAsprovaの内部関数やユーザが作成して組み込んだ関数を使用できます。
関数を使用する場合は、関数名と引数を正しく記入して下さい。

例えば、作業に適用されている仕様1を取得する関数は、

GetApplicableSpec(1,ME.Operation)

となります。

Asprovaの内部関数はこちらをご参照ください。



HelpNo.:741000
© 2017 Asprova Corporation, All rights reserved.