Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Axapta 更改ProdRouteJob对WrkCtrCapRes或重新计算容量保留没有影响_Axapta_Dynamics Ax 2009_X++_Ax - Fatal编程技术网

Axapta 更改ProdRouteJob对WrkCtrCapRes或重新计算容量保留没有影响

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和其他深层复杂性

我正在使用外部优化工具的优化数据更改路线作业(ProdRouteJob)。更改后的数据是用一个简单的ax类和一个prodRouteJob.update()编写的。
现在的问题是,容量保留(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); 
}