Axapta 更改ProdRouteJob对WrkCtrCapRes或重新计算容量保留没有影响
我正在使用外部优化工具的优化数据更改路线作业(ProdRouteJob)。更改后的数据是用一个简单的ax类和一个prodRouteJob.update()编写的。Axapta 更改ProdRouteJob对WrkCtrCapRes或重新计算容量保留没有影响,axapta,dynamics-ax-2009,x++,ax,Axapta,Dynamics Ax 2009,X++,Ax,我正在使用外部优化工具的优化数据更改路线作业(ProdRouteJob)。更改后的数据是用一个简单的ax类和一个prodRouteJob.update()编写的。 现在的问题是,容量保留(WrkCtrCapRes)不会得到更新。这是重新计算容量保留的一种方法吗?或者创建新的容量保留?更新WrkCtrCapRes的唯一位置是WrkCtrJobData.updateCapacityReservations()方法。类WrkCtrJobData需要WrkCtrScheduleJobs和其他深层复杂性
现在的问题是,容量保留(WrkCtrCapRes)不会得到更新。这是重新计算容量保留的一种方法吗?或者创建新的容量保留?更新
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);
}
Hours updateWrkCtrCapRes(ProdRouteJob ProdRouteJob,wrkcttable wrkcttable=wrkcttable::find(ProdRouteJob.wrkcrid))
{
WrkCtrCapRes WrkCtrCapRes;
工作日历日期行工作日历日期行;
秒秒;
从wrkCtrCapRes中删除_
其中wrkCtrCapRes.RefType==WrkCtrCapRefType::Production&&
wrkCtrCapRes.RefId==prodRouteJob.ProdId&&
wrkCtrCapRes.OprNum==prodRouteJob.OprNum&&
wrkCtrCapRes.oppriority==prodRouteJob.oppriority&&
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.oppriority=prodRouteJob.oppriority;
wrkCtrCapRes.JobType=prodRouteJob.JobType;
wrkCtrCapRes.JobId=prodRouteJob.JobId;
wrkCtrCapRes.Locked=prodRouteJob.Locked;
wrkCtrCapRes.WrkCtrGroupId=wrkCtrTable.WrkCtrGroupId;
wrkCtrCapRes.WrkCtrId=wrkCtrTable.WrkCtrId;
wrkCtrCapRes.WrkCtrLoadPct=100.0;
选择workCalendarDateLine时
其中workCalendarDateLine.CalendarId==wrkCtrTable.CalendarId&&
workCalendarDateLine.TransDate>=prodRouteJob.FromDate&&
workCalendarDateLine.TransDate我只是添加了这个方法:
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);
}