通过salesLine上的Explosion功能,可根据生产计划以及提前期更新salesLine的Confirmed ship date. 使用此功能是需要进行诸多点击数边操作:
1) Select SO line
2) Inquiries button – Explosion.
3) Click on “Update” button
4) Click OK with the following options:
5) If the requested ship date cannot be met, this generates a futures date. Click on “Transfer futures date”. If the date can be met, the “Transfer futures date” button is grayed out.
6) If the “Transfer futures date” is clicked, the futures date gets copied to SalesLine.ShippingDateConfirmed field
有需求需要在salesorder类型由journal 转化到 salesorder类型时,自动计算更新salesLine上的Confirmed ship date,自动过成代码如下:
static void Job11(Args _args)
{
ReqCalcExplode reqCalcExplode ;
Reqtrans reqTrans;
salesline salesline;
ItemId itemId;
;
while select forupdate salesline
where salesLine.SalesId == 'SO-100465'
{
select reqTrans
where reqTrans.RefType == ReqRefType::Sales
&& reqTrans.InventTransId == salesLine.InventTransId;
if(reqTrans)
//通过ReqTrans构造reqCalcExplode 类对象
reqCalcExplode = ReqCalcExplode::newReqTransPrompt(reqTrans);
else
{
itemId = salesLine.ItemId;
// 由ItemId构造ReqTrans,其中用到一个inventSumLogTTS表记录,在salesLine产生时对应自动创建
//inventSumLogTTS记录
reqTransUpdate::runItemId(itemId);
select reqTrans
where reqTrans.RefType == ReqRefType::Sales
&& reqTrans.InventTransId == salesLine.InventTransId;
if(reqTrans)
reqCalcExplode = ReqCalcExplode::newReqTransPrompt(reqTrans);
}
ttsbegin;
if(reqCalcExplode)
//run方法中计算ReqTrans
reqCalcExplode.run();
ttscommit;
select reqTrans
where reqTrans.RefType == ReqRefType::Sales
&& reqTrans.InventTransId == salesLine.InventTransId;
info(strfmt('reqTrans.FuturesDate :%1', reqTrans.FuturesDate));
info(strfmt('reqTrans.ReqDateDlvOrig :%1', reqTrans.ReqDateDlvOrig));
//是否需要更新salesLine.ShippingDateConfirmed 的条件
if(reqTrans.RecId && reqTrans.FuturesDate > reqTrans.ReqDateDlvOrig)
{
salesLine.ShippingDateConfirmed = reqTrans.FuturesDate;
ttsbegin;
salesLine.update();
ttscommit;
}
}
}
具体几个类的内部实现逻辑,我也不是很明白,还在学习中。