关于SalesLine上Inquiries->Explosion 功能的代码一步实现

来源:互联网 发布:医药通软件下载 编辑:程序博客网 时间:2024/04/29 20:33

通过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;
            }

        }

}

具体几个类的内部实现逻辑,我也不是很明白,还在学习中。

原创粉丝点击