生産スケジューラ

Asprovaのオブジェクトへの参照方法 【2次元に展開された生産現場の各オブジェクトにアクセスしながらシミュレーションを行うシステム】

2012/03/26

MEは式の中で現在実行中のインスタンス(テーブル)のカレントオブジェクト(レコード)であり、MEが品目テーブルを参照している場合、品目テーブルのカレントオブジェクトのプロパティ値や子オブジェクトを参照できます。

ちなみに品目テーブルで子オブジェクト(工程)を持つものが製造BOMの最終品目に該当し、連想配列である子オブジェクトへの参照キーはCodeプロパティの値であり、インデックス(数字)またはCodeプロパティの値を指定することで、子オブジェクトを参照します。

インドネシアの生産スケジューラーまとめ
生産スケジューラ

インドネシアの製造業界においてMESやIoT導入により生産情報が自動的に取得できるようになれば、それを生かすための未来の生産シミュレーションというニーズが発生するのが自然であり、日本発生産スケジューラAsprovaの活躍の場は多いと考えます。

続きを見る

MEからの参照とPROJECTからの参照の違い

現在実行中のインスタンスからではなく、外部から特定の品目オブジェクトそのものや、資源オブジェクトそのもの等を参照したいときには、Projectを基点に子オブジェクトで参照します。

品目テーブルのカレントオブジェクトの子オブジェクト(工程)の最終オブジェクトのキーであるCodeプロパティの値、つまり最終工程コードを表示。

  • ME.子オブジェクト[0]

Itemテーブルオブジェクトの最初のオブジェクト(キープロパティであるCodeがProductA)の子オブジェクト(工程)の最終オブジェクトを表示。

  • Project.子オブジェクト['Item'].子オブジェクト[1].子オブジェクト[0]
  • Project.子オブジェクト['Item'].子オブジェクト['ProductA'].子オブジェクト[0]

object

オブジェクトは連想配列型なので、PROJECTから品目レコードを参照するときは、インデックス(数字)またはCodeプロパティの値で指定して、プロパティ値を参照します。

一般の配列と異なり、配列の添え字は[1]から始まり[0]は最後のプロパティ値を表します。

特定の資源Material CalcをProjectから参照

Projectオブジェクトの子オブジェクトである資源テーブルの中で、Codeプロパティの値がMaterial Calcである資源オブジェクトを参照します。

特定の資源の稼働時間に沿って指定された日時から指定された時間だけ進んだ日時を取得。

  • AdvanceAlongResourceWorkingTime(PROJECT.子オブジェクト['Resource'].子オブジェクト['Material Calc'],ME.末端親オーダ[1].納期,(-1)*(ME.品目.'Material LT'-ME.品目.ProcessLT))
  • AdvanceAlongResourceWorkingTime(特定の資源, 指定日時, 進める時間)

計画基準日をProjectから取得

指定された資源のある時間帯の稼働日数を取得

  • GetWorkingDays(StartOfNextMonth(PROJECT.計画基準日時,0),StartOfNextMonth(PROJECT.計画基準日時,1),ME.受注予定オブジェクト[1].カレンダ参照資源,24H)
  • GetWorkingDays(開始日, 終了日, 特定の資源, 1日の時間数)

ちなみに受注予定オブジェクトは配列型で以下のようなオブジェクトが格納されています。

  1. 受注予定オブジェクト[1] : 品目
  2. 受注予定オブジェクト[2] : 顧客
  3. 受注予定オブジェクト[3] : 種別
  4. 受注予定オブジェクト[4] : 数量

表示式と表示逆変換式

仮想プロパティ式はカレントオブジェクトの中の他プロパティを参照しますが、表示式はカレントオブジェクトの自プロパティに対する表示変換です。表示式で時刻を固定するとRead Onlyになり、表示逆変換式によって表示式を設定したプロパティをRead writeにします。

INPUTは表示式を設定しているプロパティの値そのもので文字列に変換されるので、この場合FindNumberL(INPUT,1)で数値に変換します。INPUTが指す文字列(値)の1番目の数値という意味になります。

1.オーダ数量を千の位でカンマ区切り

  • 表示式:Format(ME.Qty,'#,###')
  • 表示逆変換式:FindNumberL(INPUT,1)

2.納期の時刻を23:59:59にする

  • 表示式:DateF(GetYearPart(ME.最遅終了日時),GetMonthPart(ME.最遅終了日時),GetDayPart(ME.最遅終了日時),23,59,59)
  • 表示逆変換式:DateF(FindNumberL(INPUT,1),FindNumberL(INPUT,2),FindNumberL (INPUT,3),23,59,59)

仮想プロパティ式と仮想プロパティ逆変換式

MEもHOLDERもカレントオブジェクトを指しますが、MEで参照するとRead only(利用者オブジェクト)になりHOLDERで参照するとRead write(所有者オブジェクト)になります。

  1. HOLDER(カレントオブジェクト)
  2. ME(カレントオブジェクト)
  3. OTHER(2つのプロパティの値を比較を設定するプロパティでMEの相方となるオブジェクト)

オーダテーブルのユーザ定義プロパティに文字列「100個」と入力(INPUT)し、逆変換式で入力した文字列の数字部分FindNumberL(INPUT,1)をオーダ数量にコピー「HOLDER.オーダ数量」させることができます。
object2

同一オブジェクト内の2つのプロパティを比較するMEとOTHER

同一オブジェクト内の2つのレコード(オブジェクト)のプロパティの値を比較する場合はMEとOTHERを使います。例えば、品目の紐付け条件式プロパティで、オーダの仕様1が同じなら紐付けるという条件の場合は

  • ME.オーダ.仕様1==OTHER.オーダ.仕様1

最小・最大・総和を求める内部関数の第一引数を指すTARGET

TARGETは内部関数Max, MaxIF, Sum, SumIFの第一引数にオブジェクトを指定し、第二引数以降でTARGETを指定することで、TARGETは第一引数のオブジェクトを指します。

条件付き総和SUMIF

TARGETは受注予定表オブジェクトなので、受注予定表が内示ときの、受注予定表の数量の合計を取得します。

  • SumIF(ME.'親品目(再帰)'.受注予定オブジェクト,TARGET.種別=='内示',TARGET.数量)

条件付き最大MAXIF

TARGETはオーダーオブジェクトなので、オーダテーブルの工程番号が22のときの、オーダテーブルのTMP FIN DATEの最大値を取得します。

  • MaxIF('Order',TARGET.'No Process'==22,TARGET.'TMP FIN DATE')

総和SUM

TARGETはこの品目を使用しているオーダなので、オーダーテーブルのオーダ数量の合計を品目ごとに求めます。

Sum(ME.'親品目(再帰)'.この品目を使用しているオーダ,TARGET.オーダ数量)

0日後、0週後、0月後の開始日時を指すStartOfNextDay(Week, Month)

ディスパッチング時の日まとめ、週まとめ、月まとめを行なう際に、納期から0日後(0週後,0月後)の開始日時ということは、同じ日(週,月)にある作業をまとめます。

  • 日まとめ:StartOfNextDay(ME.オーダ.納期,0)⇒0日先の最初なので今日の割付開始日
  • 週まとめ:StartOfNextWeek(ME.オーダ.納期,0)⇒0週先の初日なので今週初日
  • 月まとめ:StartOfNextMonth(ME.オーダ.納期,0)⇒0月先の初日なので当月初日