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
相关文章推荐
- 用导入导出模板生成系统标准功能单据--销售订单
- 是同一个销售订单类型,根据不同销售组织分配不同的号码段的增强出口
- 销售订单转成生成订单过程
- 业务订单号生成算法,每秒50W左右,不同机器保证不重复,包含日期可读性好
- 流程制造项目中关于销售订单数量与实际产生数量不同时的解决方案
- 建滔.当有税率时,由调拨订单关联生成的销售出库单单价取了含税单价的错误处理
- sap-abap-销售订单的订货,生产,存货,发货情况统计报表
- Netsharp快速入门(之13) 销售管理(单据流转 销售订单生成发货单)
- 电商订单管理中生成不重复订单号
- 电商系统订单号和订单支付号生成方法
- 通过销售订单领用到成本中心,FI替代实现不同成本中心记账科目不同
- 高并发下的不同订单相同订单号的处理
- 批量生成销售订单、退货订单
- 3.20 采购订单自动生成销售订单
- 流程制造项目中关于销售订单数量与实际产生数量不同时的解决方案
- 求高并发情况下生成唯一订单号解决方案
- 运行Autoinvoice Master Program请求生成不了某张销售订单的发票
- 凌云ERP解析销售订单生成生产计划与系统之间的关系
- SAP创建生产订单时要求输入销售订单
- Gradle-----通过Gradle实现同一套代码开发生成不同的apk