外部の最適化ツールから最適化されたデータを使用してルート ジョブ (ProdRouteJob) を変更しています。変更されたデータは、単純な ax クラスと prodRouteJob.update() で書き込まれます。問題は、容量の予約 (WrkCtrCapRes) が更新されないことです。キャパシティの予約を再計算する方法はありますか? または、新しいキャパシティー予約を作成しますか?
2 に答える
2
WrkCtrCapRes
更新されるのはWrkCtrJobData.updateCapacityReservations()
メソッド内だけです。クラスWrkCtrJobData
にはWrkCtrScheduleJobs
、その他の複雑な機能が必要です。
はProdRouteJob
容量予約を更新するための完全な知識を持っていないため、カレンダーを考慮する必要があります。
同様の更新を行うために、次の方法を作成しました。「ベースカレンダー」はサポートしていませんが、それ以外は必要なことを実行しました。
Hours updateWrkCtrCapRes(ProdRouteJob prodRouteJob, WrkCtrTable wrkCtrTable = WrkCtrTable::find(prodRouteJob.WrkCtrId))
{
WrkCtrCapRes wrkCtrCapRes;
WorkCalendarDateLine workCalendarDateLine;
Seconds sec;
delete_from wrkCtrCapRes
where wrkCtrCapRes.RefType == WrkCtrCapRefType::Production &&
wrkCtrCapRes.RefId == prodRouteJob.ProdId &&
wrkCtrCapRes.OprNum == prodRouteJob.OprNum &&
wrkCtrCapRes.OprPriority == prodRouteJob.OprPriority &&
wrkCtrCapRes.JobId == prodRouteJob.JobId;
wrkCtrCapRes.ReqPlanId = ReqPlanSched::defaultDynamicId();
wrkCtrCapRes.LoadType = WrkCtrCapacityType::JobSched;
wrkCtrCapRes.RefType = WrkCtrCapRefType::Production;
wrkCtrCapRes.RefId = prodRouteJob.ProdId;
wrkCtrCapRes.OprNum = prodRouteJob.OprNum;
wrkCtrCapRes.OprPriority = prodRouteJob.OprPriority;
wrkCtrCapRes.JobType = prodRouteJob.JobType;
wrkCtrCapRes.JobId = prodRouteJob.JobId;
wrkCtrCapRes.Locked = prodRouteJob.Locked;
wrkCtrCapRes.WrkCtrGroupId = wrkCtrTable.WrkCtrGroupId;
wrkCtrCapRes.WrkCtrId = wrkCtrTable.WrkCtrId;
wrkCtrCapRes.WrkCtrLoadPct = 100.0;
while select workCalendarDateLine
where workCalendarDateLine.CalendarId == wrkCtrTable.CalendarId &&
workCalendarDateLine.TransDate >= prodRouteJob.FromDate &&
workCalendarDateLine.TransDate <= prodRouteJob.ToDate
{
if (workCalendarDateLine.TransDate == prodRouteJob.FromDate)
workCalendarDateLine.FromTime = max(workCalendarDateLine.FromTime, prodRouteJob.FromTime);
if (workCalendarDateLine.TransDate == prodRouteJob.ToDate)
workCalendarDateLine.ToTime = min(workCalendarDateLine.ToTime, prodRouteJob.ToTime);
if (workCalendarDateLine.FromTime < workCalendarDateLine.ToTime)
{
wrkCtrCapRes.TransDate = workCalendarDateLine.TransDate;
wrkCtrCapRes.StartTime = workCalendarDateLine.FromTime;
wrkCtrCapRes.EndTime = workCalendarDateLine.ToTime;
wrkCtrCapRes.WrkCtrSec = wrkCtrCapRes.EndTime - wrkCtrCapRes.StartTime;
wrkCtrCapRes.insert();
sec += wrkCtrCapRes.WrkCtrSec;
}
}
return decRound(sec / 3600.0, 5);
}
于 2011-11-28T10:14:52.970 に答える
1
私は単にこのメソッドを追加しました:
static void ProdSchedule(ProdId _ProdId)
{
ProdTableType ProdTableType;
ProdTable ProdTable=ProdTable::find(_ProdId);
ProdParmScheduling ProdParmScheduling;
;
ProdTableType=new ProdTableType(ProdTable);
ProdParmScheduling = ProdParmScheduling::findLast(_ProdId,ProdSchedMethod::JobScheduling); ProdTableType.runJobScheduling(ProdParmScheduling);
}
于 2014-05-08T09:11:31.650 に答える