销售订单交货计划

业务场景:销售订单行的交货计划,可以按订单行进行拆分交货,系统的拆分计划,在销售订单没有关联项目Id时,可以使用,有项目ID的销售订单行是不可以使用交货计划的。

我主要分享下下面两个知识点,也可能是大家经常遇到的;

1.交货计划的可编辑性:

一般的按钮编辑都是在Form下写方法控制,但部分Form的可编辑性是在类中实现的,销售订单就是个例子:

控制销售订单按钮可编辑性的类:SalesTableInteractionHelper

比如行上的交货计划按钮就是在SalesTableInteractionHelper类中的isOpenOrderNotReturnNotProjectRelatedSalesLine中控制:

  private boolean isOpenOrderNotReturnNotProjectRelatedSalesLine()
    {
        return (salesTable.SalesType == SalesType::Sales || salesTable.SalesType == SalesType::Journal)
             && salesLine.SalesStatus == SalesStatus::Backorder           // Open order status
             && salesLine.SalesQty >= 0 ;                                 // No negative qty
            //当销售订单上的项目号有值时,也可以使用订单行上的交货计划按钮--Sunny Add start
            /*
             && !salesTable.ProjId;                                     // not part of a project
            */
        //Sunny Add end
    }

2.交货计划拆分行时,其新行上的字段从原行中复制而来,即会执行SalesLine上的InitFromSalesline方法,和initFromOrderLineWithMultipleDeliveries方法,一般新加的字段可在这两个方法中进行初始化;

但例外的是,部分字段会被清空,比如项目Id,跟代码可以看到,这是因为系统再init方法中执行后,在后面的SalesLineType_Project类的初始化时会清空,如果需要带出项目类别,则我们可以重写此类下的初始化方法。当然这是一个字段,要是有其他字段也可类似找方法:

//交货计划拆分时带出项目类别--
[ExtensionOf(classstr(SalesLineType_Project))]
final class SalesLineType_Project_Extension
{
    void initValue()
    {
        SalesLine       saleslineOrig;
        ProjCategoryId  projCategoryId;

        saleslineOrig   = this.salesLine;
        projCategoryId  = saleslineOrig.ProjCategoryId;

        next initValue();

        if(!saleslineOrig.ProjCategoryId)
        {
            saleslineOrig.ProjCategoryId = projCategoryId;
        }

    }

}

一周没更新了。。。

猜你喜欢

转载自www.cnblogs.com/sunny-technology/p/9415439.html
今日推荐