您的位置:首页 > 其它

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

2017-11-21 10:46 274 查看



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 num
Num 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: