生産スケジューラのAsprova
 
よくあるご質問

よくある質問内を検索:

製造時間の表示フォーマットを調整することはできますか? (2012/06/04)

Q:製造時間を集計して表示したいのですが、標準の「1H23M45S」という表示ではなく、時分秒と漢字での表記とするためにはどのように設定すれば良いでしょうか。

A:

内部関数のFormatを使用することで調整できます。

Format(1H+23M+45S,'h時MM分ss秒')


集計関数を使用する場合は、以下のように設定することで時間型とすることができます。
※ここでは全作業を対象に集計するように設定しています。

1s*Sum('Operation',TARGET.OperationProductionTime)


さらに、以下のようにすると意図されていると思われる表示となります。

Format(1s*Sum('Operation',TARGET.OperationProductionTime),'d日 HH時MM分ss秒')

ただし、1日未満でも「0時」のような表示となります。
不要な場合に表示したくない、とのことでしたら、IF文を組み合わせて、「1日以上なら」などの条件を追加してください。

副資源の左作業の主資源と評価対象作業の主資源を比較できますか? (2012/03/16)

Q:作業を割り付けるときに、副資源の左作業の主資源と評価対象作業の主資源を比較することができますか?

A:

計画パラメタの「資源評価」の「追加評価式」プロパティにて、以下の2つの内部関数を利用することで比較できます。


  • GetResourceByUseBomCode
    : 使用指図コードを指定して作業が使用している資源を取得します。

  • GetDispatchingEvalByUseBomCode
    : 使用指図コードを指定して特定の資源においての作業の仮割付情報を取得します。

これらの内部関数を利用して、評価対象作業と左作業のそれぞれの主資源を比較した式は以下のようになります。

IF(FValid(ME.評価時-左作業),IF(GetResourceByUseBomCode(ME.評価時-左作業,'M')==GetDispatchingEvalByUseBomCode(ME.評価時-対象作業,'M').評価時-対象資源,1,-1),1)

なお、この追加評価式を設定する「資源評価」オブジェクトには、副資源に該当する資源を「対象資源」プロパティに設定しておくことをおすすめします。

評価時-製造タスク時系列で終了日時をどのように参照できますか? (2011/12/15)

Q:資源追加評価式で評価時-製造タスク時系列から終了日時をどのように参照できますか?

A:

中断を含む場合、末尾が不定となりますので、終了日時を参照する場合は以下のように式を記述します。

ME.評価時-製造タスク時系列[0]

評価時-製造タスク時系列は配列型のプロパティです。
配列値は
1 : 開始
2 : 終了
もしくは
1 : 開始
2 : 中断
3 : 再開
 ・
 ・
 ・
N-1 : 再開
N : 終了
※「N」は必ず偶数値
となっています。

オーダテーブルの「最早開始日時」に「納期」(旧「最遅終了日時)から30日過去の日時をセットするには? (2011/07/17)

Q:プロパティ編集コマンドにてオーダテーブルの「最早開始日時」に「納期」(旧「最遅終了日時)から30日過去の日時をセットするには?

A:

「オーダプロパティ編集」にて以下の式をセットします。
ME.EST=ME.LET-30d

プロパティ編集コマンドを実行する前にオーダ収集コマンドと、必要に応じてオーダ絞り込みコマンドを挿入しておき、プロパティ編集するオーダを収集・絞り込みしておく必要があります。

「オーダプロパティ編集」は、[テーブル表示]-[コマンド]-[計画パラメタ]から計画パラメタテーブルを開き、該当する計画パラメタの中のプロパティ編集コマンドの上で右クリックメニューから「プロパティ編集の編集」を選択して頂きますと、プロパティウィンドウ上に出てきます。

使用指図の製造能力で100個単位で製造時間を1時間加算するようにできますか? (2011/01/12)

Q:「1~100個までだと1時間、101個~200個までは2時間」というように、100個単位で製造時間が1時間加算されていくのですが、どのような式を設定すれば良いですか?

A:

以下のような式が考えられます。
 1h*(Roundup(ME.OperationOutMainItemQty/100,0))

具体的には、作業の製造数量を100で割り、Roundup関数で少数点以下を切上げています。
この結果と1h(1時間)を掛け合わせて製造能力を算出します。

メンテナンスのことを考えますと、基準になる時間、数量をユーザプロパティで設定できるようにした方が良いかもしれません。

資源ガントチャートのデータチップにその作業で必要となる原料を表示できますか? (2011/01/11)

Q:資源ガントチャートのデータチップに、その作業で必要となる原料(入力指図)の、品目名,数量を表示させたいのですが、どのような式を書けば良いでしょうか?

A:

原料ということは、入力指図の情報を表示することになります。
この場合、以下のような式が考えられます。
ME.Work.InputInstructions['In'].Item + '\n' + ME.Work.InputInstructions['In'].Qty

入力指図はタスクの下に位置しますので、作業使用指図からですと上記のような参照方法になります。

下記についてはご注意ください。
前段取りや後段取りと前後工程が紐付くケースでは、製造タスクだけでなく、前段取りや後段取りも考慮した式を記述する必要があります。

式で値の比較が上手くいきません (2009/09/09)

Q:

オーダにユーザプロパティを追加しています。式でIFを使って以下のように比較していますが、オーダのフラグに1を設定しても結果が'A'にならず、正しい結果が得られません。式が間違えているのでしょうか。

 IF(ME.Order.フラグ=='1', 'A','B')

A:

ユーザプロパティの型を確認すると、整数型になっていす。
設定している式
  IF(ME.Order.フラグ=='1', 'A','B')
だと、文字列の'1'と比較しているので、思ったような結果にならないようです。
式をプロパティの型と同じ数値と比較するように
    IF(ME.Order.フラグ==1, 'A','B')
と、変更してみてください。


また、式を使った比較で上手くいかないケースとして、比較の演算子"=="と代入の演算子"="を間違えて使用している場合も、よくあるケースですので注意しましょう。

製造予定表が生成されません (2009/09/08)

Q:以下の設定を行い、予定表生成コマンドを実行しても製造予定表のレコードが生成されません。※購買予定表も同様です。

A:

「製造(購買)予定表生成」計画パラメタですが、
以下のプロパティの設定に誤りがあります。
 開始日時(購買予定表)
 開始日時(製造予定表)
いずれも「2009/09/05」と設定されていましたが、
正しくは「#2009/09/05 00:00:00#」のように
「#」で囲んでいただく必要があります。

上記のプロパティは式型のプロパティですので、
日時を直接指定する場合は「#」で囲みます。

なお、実際に運用で使用する場合は、
 Project.計画基準日時
のように指定して、読み出した日時で自動的に開始日時が変わるように
設定することをおすすめします。

使用指図バー文字色を納期1日以内なら黄色にする条件を追加したい (2009/09/02)

Q:資源ガントチャートの使用指図バー文字ですが、納期遅れが赤で、最早開始日時違反が青色になりますが、上記の条件に加えて、納期から1日以内なら文字を黄色にするようにしたいです。

A:

資源ガントチャートの表示設定の資源ガントタブに、"使用指図バー文字色式"プロパティがあります。
こちらに条件と表示したい文字色を設定すれば良いです。

ご希望の条件であれば、式編集ダイアログの標準登録式にちょうど同じ条件がありますので、そちらを使用できます。
式の内容は以下の通りです。

  IF(ME.作業.'製造終了日時-最遅終了日時'>0s,RGB(255,0,0),IF(ME.作業.'最早開始日時-製造開始日時'>0s,RGB(0,0,255),IF(ME.オーダ.最遅終了日時-ME.作業.製造終了日時<=1d,RGB(255,255,0),0)))

IFが入れ子になっていますが、一番最後のIF(太字になっている部分)が追加したい条件部分となりますので、条件式やRGB関数を変更すれば、文字色を変更したい条件・文字色を変更できます。

他の標準登録式も便利な例となっていますので、是非参考にしてください。

完了している作業の実績終了日時に、計画の終了日時をセットしたい (2009/09/02)

Q:作業の実績をAsprovaに返していますが、外部からは作業が完了した、というステータスしか取り込めません。
そこで、実績インポート後にAsprovaの中で実績終了日時に計画終了日時をセットしたいのですが、方法はありますか。

A:

実績をインポートした後で、プロパティ編集コマンドを利用してコピーする方法があります。
ここでは、実績のみのインポートからプロパティ編集コマンドにて実績終了日時に計画終了日時をコピーするカスタムメニューを作成する方法をご紹介します。

1.2つの計画パラメタを作成する。
メニューの「スケジュール-計画コマンド編集」を選択して、計画コマンド編集ダイアログを開きます。
新しい計画パラメタを作成(ここでは、新しい計画パラメタは"実績インポート用"とします)して、内部コマンドの「データベース入出力」から"インポート"を選んで追加します。

もう1つ新しい計画パラメタを作成します(ここでは、新しい計画パラメタは"実績終了日時セット"とします)。
計画パラメタ"実績終了日時セット"に、作業収集・作業絞込み・プロパティ編集コマンドを追加します。


2.カスタムメニューの作成
計画コマンド編集ダイアログのコマンド一覧で、"カスタムメニュー"を選びます。
ダイアログ右下で"カスタムコマンド"を選び、新しいメニュー(ここでは"実績インポートと実績終了日時セット")を作成します。
作成したメニューを、カスタムメニューの「ファイル-インポート」の上に追加します。
作成したカスタムメニューの中に、最初に作成した2つの計画パラメタを、"実績インポート用"、"実績終了日時セット"の順で追加します。


3.カスタムメニューのプロパティの調整
メニューの「テーブル表示-コマンド-カスタムメニュー」でカスタムメニューテーブルを表示します。

カスタムメニュー"実績インポートと実績終了日時セット"の下に追加した、
計画パラメタ"実績インポート用"の下の"インポート"コマンドで、"DBIOオブジェクト(インポート)"プロパティに、"実績"を設定します。
計画パラメタ"実績終了日時セット"の"作業絞込み"プロパティには、
  ME.ステータス=='完了'
として、完了した作業のみに絞り込みます。
計画パラメタ"実績終了日時セット"にセットした"プロパティ編集"コマンドの"作業プロパティ編集式"プロパティには、
  ME.実績終了日時=ME.製造終了日時
として、作業の製造終了日時を実績終了日時にセットするようにします。


これで、カスタムメニュー"実績インポートと実績終了日時セット"を実行すると、実績のインポートを行い、完了した作業について、実績終了日時に製造終了日時をコピーするところまでを実行できます。


カスタムメニューの作成については、Asprovaのヘルプ
  [データ入出力-受注オーダ専用インポートコマンドの作成例]
が参考になりますので、こちらもご覧下さい。

製造BOMテーブルに資源名を表示したいです。 (2009/08/31)

Q:製造BOMに資源名を表示するよう、製造BOM(GUI)に資源名を設け、仮想プロパティ式に、
 IF(ME.InstructionType=='U',
  ME.Operation.UseBomInstruction.Resource.Name,'')
と設定しましたが、資源名が表示される資源とされない資源があります。
何故でしょうか?

A:

ご教示いただいた方法ですと、
工程に登録されているマスタ使用指図のうち、
最後のマスタ使用指図の資源の資源名を表示しようとします。
したがって、工程コード「10」の場合、
マスタ使用指図が3行登録されていますが、
すべての行で資源「A」の資源名を表示しています。

意図されていることを実現する方法としては、
マスタ使用指図にプロパティを追加し、
仮想プロパティ式に以下の式を設定することが考えられます。
 ME.Resource.Name

プロパティの追加については、ヘルプの
 「GUI」-「製造BOM」-「補足」-「マスタ使用指図、マスタ入力指図、マスタ出力指図のプロパティを表示する」
をご参照ください。

紐付いているオーダの情報を参照するには? (2009/06/03)

Q:Ver6.3.0で紐付けオーダガントチャートが追加されており、紐付いているオーダ全体の製造時間を末端の親オーダごとに表示したいのですが、どのように設定すればよいでしょうか。

A:

以下の手順で集計することが考えられます。

<前準備>
オーダに以下のプロパティを追加しておきます。
オーダ内の作業の製造時間の合計値をセットするプロパティ ・・・ 以下、プロパティA
紐付いているオーダの製造時間の合計値をセットするプロパティ ・・・ 以下、プロパティB
 
以下、計画パラメタで実行する内容です。


  1. オーダを収集し、プロパティAを初期化(DELETE)します。

  2. 作業を収集し、プロパティAに自作業の製造時間を追加します。式は以下のようなものが考えられます。
    ME.Order.<プロパティA>=
       ME.Order.<プロパティA>+ME.OperationProductionTime

  3. オーダを収集し、紐付いているオーダのプロパティAを集計します。
    プロパティAの集計に関しましては、プロパティ編集式に以下のような式を設定することが考えられます。オーダの「子オーダ(再帰)」(LeftRecursiveOrder)プロパティで紐付いている子オーダを参照できます。
     ME.<プロパティB>=Sum(ME.LeftRecursiveOrder,TARGET.<プロパティA>)


③については、末端親オーダのみ計算すればよい、ということであれば、計画パラメタのオーダ絞込み条件式で末端親オーダ以外を除外できます。
式に直しますと、以下のようになります。
 FValid(ME.RightOrder)==FALSE
絞り込む条件としては、親オーダがないことという条件が挙げられます。
このようにすると、計算時間を短縮することができます。

プロパティ編集式でカレンダの資源量を変更するには? (2009/06/03)

Q:カレンダの資源量をプロパティ編集式で変更したいのですが、どのように設定すればよいでしょうか。

A:

汎用プロパティ編集式と計画パラメタのループを使用することで、
カレンダテーブルを1行ごとに処理することができます。

計画パラメタにはプロパティ編集コマンドを追加します。

計画パラメタの「ループ」タブの「初期処理式」に以下の2つの式をセットします。

 ME.LoopCounter[1]=1
 ME.LoopMaxFrequency=PropCount(PROJECT.Child['Calendar'].Child)

ループ回数MAXに、カレンダテーブルの行数(子オブジェクトの数)をセットしています。
PropCount関数はプロパティの数を返しますので、これを利用しています。
このように設定すると、カレンダテーブルの行数分ループすることになります。

次にプロパティ編集コマンドの汎用プロパティ編集式にカレンダの資源量を変更する式をセットします。

 PROJECT.Child['Calendar'].Child[HOLDER.Parent.Command_LoopCounter[1]].Cal_DefaultQty=1

この式では、プロパティ編集コマンドの親の計画パラメタのループカウンタを参照しています。
こうすることで、ループごとに<ループカウンタの値>番目のカレンダを参照できます。
参照したカレンダには資源量「1」をセットしています。

資源量に「1」をセットしている部分を変更していただくと、独自に計算した結果をセットすることもできます。

また、カレンダテーブル以外の仕様やシフトのテーブルでも、同様の方法でプロパティを編集することができます。

以下のリンク先を保存していただくと、サンプルの計画パラメタがダウンロードできます。
ダウンロードしたXMLファイルをAsprovaにドラッグ&ドロップする、
もしくはXMLインポートして、Asprovaに取り込むと、お試しいただけます。
SAMPLE_ChangeCalendar.xml

割付開始日時を計画基準日時の曜日によって切替えるには? (2009/04/16)

Q:割付開始日時を計画基準日時から決める時、 計画基準日時が月曜日の時は翌週の初めが割付開始日時となり、 火曜日から金曜日の時は翌々週の初めが割付開始日時となるようにするには どのように設定すればよいでしょうか?

A:

Asprovaには日付から曜日を計算する機能がないため、
曜日を計算します。

たとえば、以下のような式を「割付開始日時」にセットします。

If((Roundup((PROJECT.計画基準日時-#2008/06/01 00:00:00#)/(24*60*60),0)%7)==1,
 StartOfNextWeek(PROJECT.計画基準日時,1),
 StartOfNextWeek(PROJECT.計画基準日時,2))

式の概要ですが、計画基準日時と曜日を計算する基準の日付の差分を計算します。
上記の例では、「2008/06/01 00:00:00」が日曜日の日付です。
このため、差分を計算し、1日分の時間(24*60*60)で割りますと、
計算の基準からの日数が分かります。
これを[7」で割った余りが、曜日の番号となります。
計算の基準となる日付が日曜日であれば、月曜日は「1」です。

StartOfNextWeek関数を使用して、
曜日の番号が「1」のときは計画基準日時の翌週を、
曜日の番号が「1」以外であれば計画基準日時の翌々週を取得します。

Ver.6.3.1から拡張プラグイン集に以下のユーザ定義関数のプラグインが追加されています。
 WeekDay
 WeekDayName
 WeekDayNameS
 WeekDayS

こちらもご参照ください。

負荷グラフで、使用時間ともともとの稼働時間を表示するには (2008/06/17)

Q:負荷グラフで、使用時間ともともとの稼働時間を表示するにはどのようにすればよいでしょうか?

A:

負荷グラフの表示設定の負荷グラフタブの「数値表示形式」プロパティにて、
以下を設定します。

例1:
13.8時間
--------
15時間

FindNumberL(Format(86400s*ME.ResQtyUsed,'HH'),1)+Round(FindNumberL(Format(86400s*ME.ResQtyUsed,'mm'),1)/60,1)+'時間'+'\n-----------\n'+24*ME.ResQtyAvailable+'時間'


例2:
13H40M
--------
15H

86400s*ME.ResQtyUsed+'\n-----------\n'+86400s*ME.ResQtyAvailable

Ver.6.0.1.5からは、標準登録式に登録されています。

日時のプロパティで、0206 と入力したら、今年の2/6 14:00:00 と解釈させるには (2008/02/08)

Q:オーダ納期や作業の実績終了日時などのように日時を入力する際、0206 と入力したら今年の2/6 14:00:00 と解釈させるには、どうしたらよいですか?

A:

プロパティ定義にて、以下を設定します。

表示式
 INPUT

表示逆変換式
 IF(LEN(INPUT)==4,DateF(GetYearPart(PROJECT.BasisTime),FindNumberL(Left(INPUT,2),1),FindNumberL(Right(INPUT,2),1),14,0,0),INPUT)

こうすると、0206 でも、2008/2/6 14:00:00でもどちらでも入力できます。

指図バー文字列で文字列を縦に表示するには (2007/09/19)

Q:ガントチャートの指図バーにオーダの生産Noを各オーダに付番しているのですが、製造時間が短いと、表示が重なって見えなくなってしまいます。生産Noを縦に記述することはできますか。

A:

生産Noのプロパティを(MyPropとします)とすると、以下のようにすればよいです。

Mid( ME.Order, 1, 1 )+'\n'+Mid( ME.Order, 2, 1 )+'\n'+Mid( ME.Order, 3, 1 )+'\n'+Mid( ME.Order, 4, 1 )

オーダガントの目印色式の設定でオーダーバーに印を出さないようにするには (2007/03/05)

Q:オーダガントの目印色式に IF(ME.Work.Status!='D',RGB(0,0,0),0) と設定して、ステータスが確定でないなら黒の目印色を表示したのですが、オーダーバーに印が表示されました。オーダバーには印を出さないようにするにはどうすれば良いでしょう。

A:

オーダのステータスには確定はないので、
 IF(ME.Work.Status!='D',RGB(0,0,0),0)
ですと、評価結果はいつでも確定ではない=RGB(0,0,0)になります。

そこで、以下のように条件にオーダであるかどうかを付け加えて、オーダバーで目印色がRGB(0,0,0)にならないようにします。
 IF(ME.Work.ClassDef!='Order'&&ME.Work.Status!='D',RGB(0,0,0),0)

文字を数値に変換するには (2007/02/08)

Q:文字型のプロパティに設定した情報を数値として扱いたいので変換したいのですが、どうすればいいですか。 例えば、オーダのコメントに '123' と入れた情報を数値の 123 として扱いたいのです。

A:

文字列を数値に変換するなら、

 FindNumberL

の関数が利用できます。
この関数は、文字列の左からn番目の数字を探して返します。

オーダのコメントを数値として扱うとすれば、
 FindNumberL(ME.Comments[1], 1)
でよいでしょう。

※上記の例は、MEがオーダの場合です。

オーダテーブルで初工程のステータスを表示するには (2007/02/06)

Q:オーダテーブルに新規にフィールドを追加し、その追加されたフィールドに
初工程作業のステータスを表示させたいと考えております。
そもそも、このような表示が出来るかどうか分りかねますが、可能でしたら 仮想プロパティ式への記述方法をご教示頂けますようお願い致します。

A:

作業は、子オブジェクトとして、工程番号でソートされていますので、
合流工程でなければ以下のように取得できます。
 ME.Child[1].Work_Status

プロパティを削除するには (2007/02/06)

Q:プロパティ編集コマンドにて、割付け前にオーダの最早開始日時を消そうと考えております。
プロパティ編集.オーダプロパティ編集式に
 ME.EST = ''
を設定しましたが、最早開始日時は消されませんでした。

A:

以下のようにすれば削除できます。
 ME.EST=DELETE

資源評価.追加評価式で、充填率を上げる設定 (2006/12/22)

Q:資源評価.追加評価式にて以下のような内容の記述方法をご教示頂けますようお願い致します。

【記述したい内容】
任意の作業に対し、製造開始日時と終了日時を指定し、その時間帯での評価資源 の使用資源量が1以上であれば1,そうでなければ0

【理由】
複数台ある炉資源に作業を割付する際に、できる限り充填率を上げた割付を 実現したいのが事の発端です。上記のような評価が実現できれば、多少 製造待ち時間が増えたとしても、充填率を上げた割付が実現できるのではと 期待している次第です。

A:

以下のように設定してください。
 IF(1==ResourceLoad(ME.TentAssignCurrRes,ME.TentAssignProdTimeSeries[1],ME.TentAssignProdTimeSeries[0]),0,1)

ResourceLoad は、内部関数で、直感に反する値が返るように作られてしまっているのですが、
戻り値は、作業がまったくなかったら 1、作業があると、0 に近づくようになっています。

Child と打った後のプロパティ (2006/11/14)

Q:インテリセンスで表示されないプロパティを使用しても問題ないでしょうか。 具体的には、製造BOMテーブルのマスタ入力指図の有効条件式で以下の式を使用しています。  式:ME.Child[1].StartTime) (作業の開始時間) 「StartTime」は「Child[1].」での選択候補にはありません。ただし、値は取得できています。

A:

 ME.Child[1].StartTime)
でもよいですが、ロングネームで設定するようにして下さい。
ロングネームとは、作業の開始日時だったら、Work_StartTimeです。
(逆に、StartTime だけだと、ショートネームと呼びます)。

ME.Child[1] とすると、その先のクラスが特定できず、インテリセンスも、ノーマルオブジェクトの
プロパティしか表示しません。実際のクラスがWorkだと分かっている場合は、
 ME.Child[1].Work_StartTime
とすると、確実に取得できます。

ショートネームでも値を取得できるときもありますが、保存して、ロードした直後など、
値を取得できないことがあります。

ちなみに、ロングネームは、プロパティ定義の「コード」の文字列と同じです。

前工程の実績数量を表示するには (2006/10/30)

Q:作業テーブルで、ある工程だけを絞り込んで表示するスタイルを作成し、 そこに新しい表示列を追加して、前工程の実績数量を 表示させたいのですが、仮想プロパティ式にどのような式を 記述していいでしょうか。

A:

新しいプロパティは追加できてるんですよね?
型は実数型にして下さい。式には、以下のように設定すればよいです。
 ME.PrevOperation[1].ResultQty
 [1] というのは、PrevOperation は配列型のプロパティなので、
その1番目、ということです。EPS では合流工程はないはずなので、
[1] でよいです。

ちなみに、仮想プロパティ式を設定しただけだと、表示するだけになります。
これでいいというのであればいいのですが、この新しく追加した列から
実績を入れたいという要望があるのでしたら、以下のようにすればいいです。
仮想プロパティ式のすぐ下に「仮想プロパティ逆変換式」というプロパティが
あるはずです(ない場合はバージョンが古いということになります)。

「仮想プロパティ逆変換式」に以下の式を設定すると、その列が編集可能となります。
 HOLDER.PrevOperation[1].ResultQty=FindNumberL(INPUT,1)
要は、入力した文字列から数字を取り出して、前工程の作業の実績数量に入れている
わけです。

プロパティが存在するかどうかを確認するには (2006/02/16)

Q:オーダの仕様や作業などの、あるプロパティが存在するかどうかを確認するにはどうしたらよいですか。

A:

内部関数のFValid を使います。

例えば、オーダに作業が存在するかどうかは、
オーダの子供が存在するかどうかを確認すればよいですから、

 FValid(ME.Child[0]) ※ MEはオーダとします。

とすればよいです。存在すれば TRUE を返し、存在しなければ FALSE を返します。

# Child は配列値なので、インデックスを指定しますが、
# ここでは"0"を指定して、最後の作業を取得しています。
# 作業が存在するかどうか、なので、"0"にする必要はなく、
# "1"でも同義です。

仕様の場合も同様です。

 FValid(ME.Spec1) ※ MEはオーダとします。

オーダがどの工程セレクタにより展開されたかを確認するには (2006/02/16)

Q:オーダがどの工程セレクタにより展開されたかが知りたいのですが、どうしたらよいですか。

A:

オーダクラスに文字列型のプロパティを新規に追加し、仮想プロパティ式に

 ME.Child[0].Work_Bom.Parent

と設定すればよいでしょう。訳しますと、ME はオーダですから、このオーダから
作業(子供)を取得し、その作業から、マスタ作業を取得し、マスタ作業から
親を取得すれば、工程セレクタを取得できます。

作業は、採用された工程セレクタの方のマスタ作業へのリンクを持っていますから、
採用された工程セレクタは作業から取得しよう、というわけです。ちなみに、
作業が存在しなければ、この式自体は失敗しますから、空文字が返ります。

また、すべての品目において、工程セレクタを持っていれば、上記の式でよいですが、
一部の品目は工程セレクタを持っていない、という場合は、上記の式だと品目が返ってきます。
なぜなら、そのような場合、マスタ作業の親は品目だからです。つまり、品目の下の親子関係は、
 ≪工程セレクタが存在しない場合≫
  品目-マスタ作業
 ≪工程セレクタが存在する場合≫
  品目-工程セレクタ-マスタ作業
となっているわけです。

この問題を解決するには、以下のような式を設定すればよいです。

 IF(ME.Child[0].Work_Bom.Parent.ClassDef=='Bom',ME.Child[0].Work_Bom.Parent,'工程セレクタなし')

訳しますと、
 工程セレクタを取得しようとしてとってきたオブジェクトのクラスが'Bom'(つまりマスタ作業クラス)なら
 そのオブジェクトの名前を、他のクラスだったら、'工程セレクタなし'という文字列を返す
という意味です。

工程セレクタが存在するかを確認するには (2006/02/16)

Q:工程セレクタが存在するかを確認するには、どうしたらよいでしょうか。

A:

品目から探る場合は、

 ME.Child[0].Type=='C' ※ MEは品目とします。

がTRUEを返せば、工程セレクタが存在し、FALSEを返せば、工程セレクタは存在しない、
という意味になります。

訳しますと、品目の子供(工程セレクタかマスタ作業のどちらか)の種別が工程セレクタ("C")なら、
という意味です。

オーダから最終工程の工程コードを見られるようにするには (2006/02/16)

Q:オーダから最終工程の工程コードを見られるようにしたいのですが、どうしたらよいですか

A:

オーダクラスに文字列型のプロパティを新規に追加し、仮想プロパティ式に

 ME.Child[0].Bom.Proc ※ ME はオーダ

と設定すればよいでしょう。配列値に"0"を渡すと最後の要素が取得できますので、
最後の子供、すなわち、最終工程の作業、という意味になります。

この方法は、自分の子供(つまり作業)からマスタ作業を取得し、
そこから工程を取得していますが、これだとオーダ展開していない場合に対応できません。
オーダ展開していない状態でも最終工程コードを取得したいという場合は、

 IF(FValid(ME.Child[0]),ME.Child[0].Bom.Proc,ME.Item.Child[0].Proc)

とすればよいでしょう。これは、訳しますと、
 もし子供(作業)が存在すれば、作業→マスタ作業→工程と取得し、
 作業がなければ品目→マスタ作業(子供)→工程と取得せよ
という意味です。こうすることで、オーダ展開する前でも後でも最終工程を取得できます。

それではなぜ最初から、

 ME.Item.Child[0].Proc

としないのか、というご意見もあるかと思いますが、これでもたいていの場合はよいのですが、
これだと工程セレクタが存在するときに、採用された工程セレクタの最終工程を取得することが
出来ません。また、オーダ展開用品目というプロパティを使って、オーダ展開に用いる品目を
指定する機能も存在するのですが、その場合にも対応できません。ですので、
採用された工程セレクタの最終工程を取得するには、やはり作業からマスタ作業を
取得しなければいけません。

作業使用指図から作業の工程コードを取得するには (2006/02/16)

Q:計画結果の出力に「作業使用指図」のデータをエクスポートして使用しています。 統合マスタに設定しています「工程コード」の値を「作業使用指図」に出力したいのですが、 どのようにしたらよいでしょうか。

A:

作業使用指図クラスに文字列型のプロパティを新規に追加し、仮想プロパティ式に

 ME.Operation.Bom.Proc ※ ME は作業使用指図

と設定すると、作業使用指図から作業の工程を取得するプロパティが作成できます。
訳しますと、作業使用指図→作業→マスタ作業→工程というように取得しています。
データ入出力設定にて、該当するDBIOオブジェクトのフィールドマッピングにて、
このプロパティをマッピングすれば、エクスポートできます。

同じフラグを持っているオーダ同士を紐付けるには (2006/02/16)

Q:同じフラグを持っているオーダ同士を紐付けるには、どうしたらよいでしょうか。

A:

品目クラスに「紐付け条件式」というプロパティがありますので、これを使用します。
例えば、オーダのフラグというのが、Order_PeggingFlag というプロパティ名だったとしましょう。
その場合、紐付け条件式には、

 ME.Order.PeggingFlag==OTHER.Order.PeggingFlag

と設定すると、Order_PeggingFlag というプロパティに入っている値が同じであれば紐付ける、
という設定になります。PeggingFlag という新規プロパティではなくても、Spec1 でも何でもよいです。
その場合は

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

となります。

この紐付け条件式プロパティでは、OTHER という定数が使えます。
MEは作業出力指図で、OTHERは作業入力指図です。

マスタのバージョンを切り替えるには (2006/02/16)

Q:マスタに期限をつけて切り替えるようにしたいのですが、どうしたらよいでしょうか。

A:

オーダクラスにプロパティを新規に追加し、バージョンを表す値を設定します
(プロパティの名前は、MasterVersion としたとします)。
 文字列型なら、'A-version'、'B-version'、
 整数型なら、1、2、3
 日時型なら、#2006/2/16#
などです。

それに対し、マスタ側では、工程セレクタ有効条件式や、指図有効条件式にて

 ① ME.MasterVersion=='A-version'
 ② ME.MasterVersion<= 2
 ③ ME.MasterVersion<=Now()
 ※ ME はオーダ

などと設定すればよいでしょう。それぞれ、以下のような意味になります。
 ① オーダのバージョンがA-versionなら
 ② オーダのバージョンが 2 以下なら
 ③ オーダのバージョンが現在時刻より過去なら

前工程の作業が割りついた資源が外注かどうかを取得するには (2006/02/16)

Q:前工程の作業が割りついた資源が外注かどうかを取得するには、どうしたらよいでしょうか

A:

以下のようにすれば取得できます。

 ME.Operation.PrevOperation[1].IsAssigned!='0'&&ME.Operation.PrevOperation[1].OperationMainRes.Type=='G'
 ※ ME は作業使用指図とします。

訳しますと、前作業が未割付けでなく、かつ、割りついた主資源の種別が外注なら、という意味になります。

前工程が1つしかない場合はこのように簡単に出来ますが、合流工程となると、
もう1工夫必要です。