AX2009 销售订单的不同情况生成不同的订单号

来源:互联网 发布:淘宝企业店铺有什么用 编辑:程序博客网 时间:2024/05/16 19:12
View Code
class FormRun extends ObjectRun{RGD_SalesorderSourse            SalesorderSourse ;}

 

  有很多客户习惯了EXCEL,在他们使用AX的时候,习惯的先在EXCEL将销售,采购订单创建好,然后直接导入到AX系统中,客户有时想区分系统中地销售,采购订单是在标准系统创建的还是通过导入生成的,这样也有利于当某些订单发生某些错误的时候,可以区分是否是导入的订单的时候出现问题。

  这里我以销售订单为例,记录当时我们处理的方式和逻辑。
  1,订单的编码规则是根据根据订单的来源分配,如果是导入生成,则编码规则是“SOR-SH+当前时间的年月+5位流水号,如果是在系统中创建,则编码规则是”STN-SH+当前时间的年月+5位流水号。

  2,在创建销售订单时,给一个订单来源让用户选择,根据用户选择的来源生成不同的编码,如图:

  3,日期的控制,这里我们采取的是用在NumberSequenceTable窗体中设置一个开关,让用户选择是否在生成的编码当中包含当前时间的年月,如图

  4,实现步骤3的逻辑代码

  在类NumberSeq的getNumInternal方法中判断步骤3的是否包含日期,

View Code
复制代码
protected Num getNumInternal(NumberSequenceCode _numberSequenceCode){    Num                     _num = '';    NumberSequenceTable     numberSequenceTable;    UserConnection          userConnection;    boolean                 ok;    ;    this.setGlobalTransId();    userConnection = new UserConnection();    userConnection.ttsbegin();    sequenceUpdated = false;    numberSequenceTable.setConnection(userConnection);    select forupdate firstonly numberSequenceTable        index hint SeriesIdx        where numberSequenceTable.NumberSequence == _numberSequenceCode;    this.setCleanupSequence(numberSequenceTable);    ok = this.checkSetUpNum(numberSequenceTable);    if (ok)    {        _num = this.getNumFromList(userConnection,numberSequenceTable);        if (_num == '')        {            if (numberSequenceTable.NextRec == 0 || numberSequenceTable.NextRec > numberSequenceTable.Highest)                ok = checkFailed(strfmt("@SYS17478",numberSequenceTable.NumberSequence));            else                _num = this.getNumFromTable(userConnection,numberSequenceTable);        }    }    if (!ok)    {        userConnection.ttsabort();        throw error("@SYS25038");    }    userConnection.ttscommit();    if (sequenceUpdated)        this.createTTSLink();    //ADD BY Kim    if (numberSequenceTable.RGD_IfIncludeDate)    {        _num = this.RGD_FormatDate(_num);    }    //END By Kim    return _num;}
复制代码

  处理包含日期后的逻辑

View Code
复制代码
//this method is used add date to numNum RGD_FormatDate(Num  _Num){    Num tmpNum = '';    int position;    str strDate;    str strLongYear;    str strShortYear;    str strMonth;    str strDay;    ;    tmpNum  = _Num;    strDate = Date2Str(getServerDate(),321,2,2,2,2,4);    strLongYear = subStr(strDate,1,4);    strShortYear= subStr(strLongYear,3,2);    strMonth    = subStr(strDate,6,2);    strDay      = subStr(strDate,9,2);    //Format day    position    = StrScan(tmpNum,"DD",1,strLen(tmpNum));    tmpNum      = strPoke(tmpNum,strDay,position);    //Format month    position    = StrScan(tmpNum,"MM",1,strLen(tmpNum));    tmpNum      = strPoke(tmpNum,strMonth,position);    //Format year    position    = StrScan(tmpNum,"YYYY",1,strLen(tmpNum));    if (position)    {        tmpNum      = strPoke(tmpNum,strLongYear,position);    }    else    {        position    = StrScan(tmpNum,"YY",1,strLen(tmpNum));        tmpNum      = strPoke(tmpNum,strShortYear,position);    }    return tmpNum;}
复制代码

  5,在AX系统销售订单窗体上创建时的逻辑,在SalesCreateOrder窗体中定义一个数组

View Code
复制代码
class FormRun extends ObjectRun{      ....      RGD_SalesorderSourse            SalesorderSourse ;      Array                           A ;      ....}//init  void init(){    ....    A = new Array(Types::String);    A.value(1,'empty');    A.value(2,'empty');    SalesorderSourse = RGD_SalesorderSourse::Blank  ;    ....}
复制代码

note:我只粘贴了针对处理该逻辑的代码,在SalesCreateOrder的数据源的RGD_SalesorderSourse字段的validate方法中获取得到的生成编号

View Code
复制代码
public boolean validate(){    boolean ret;    ;    ret = super();// CUS-Modifed by sherr on 2011-08-22 Begin    if(ret &&  #RGD_HDC)    {        if( SalesTable.RGD_SalesorderSourse != SalesorderSourse )        {            if( SalesTable.RGD_SalesorderSourse == RGD_SalesorderSourse::NRR)            {                if(A.value(1) == 'empty')                {                    SalesTable.SalesId  = NumberSeq::newGetNum(SalesParameters::numRefSalesIdNRR(),true).num();                    A.value(1,SalesTable.SalesId);                }                else                {                    SalesTable.SalesId   = A.value(1) ;                }            }            else if( SalesTable.RGD_SalesorderSourse == RGD_SalesorderSourse::KRR)            {                if(A.value(2) == 'empty')                {                    salesTableType.formMethodDataSourceCreate(element, salesTable_ds);                    A.value(2,SalesTable.SalesId);                }                else                {                    SalesTable.SalesId   = A.value(2) ;                }            }// CUS-Modifed by sherr on 2011-08-22 End    }        /*        if( SalesTable.orig().RGD_OrderSource != SalesTable.RGD_OrderSource )        {            if( SalesTable.RGD_OrderSource == "@RGD149")                SalesTable.SalesId  = NumberSeq::newGetNum(SalesParameters::numRefSalesIdNRR()).num();            else if( SalesTable.RGD_OrderSource == "@RGD150")                salesTableType.formMethodDataSourceCreate(element, salesTable_ds);        }        */    }    SalesorderSourse = SalesTable.RGD_SalesorderSourse ;    return ret;}
转自: http://www.cnblogs.com/dingkui/archive/2012/08/26/2657464.html
原创粉丝点击