最新消息:ww12345678 的部落格重装上线,希望大家继续支持。

[原创]Microsoft Dynamcis AX 中的编号规则研究

Uncategorized William 3519浏览 0评论

介绍AX中的编号规则的使用

AX系统中的物料、销售订单、采购订单编号都可以通过灵活的设置使其支持手工或自动编号功能,

设置的方法很简单:

1.  依次打开“基本设置”->“设置”->“编号规则”

2.  在打开的“编号规则”窗体中新建一条规则

3.  在“常规”页签设置该编号规则特性

最小 从那个值开始编号 INV_00001
最大 到那个值结束 INV_99999
下一个 系统下一个获取的值 INV_00001
格式 INV_##### 每个#号代表一位,#号个数必须和“最大”中指定的位数相同,比如在该例中最大值为99999,#号个数必须为5个。
手动/连续 手动还是自动编号 系统自动编号

4.  在每个模块的“设置”->“参数设置”的“编号规则”页签指定对应关系。

例如:“物料编号”使用名为“INV_物料编号”的编码规则

完成后,新建物料时,物料编码就会自动产生,格式为:INV_00001、INV_00002…

自定义编号规则–在已有模块中添加编号规则

假定我们要在AX的库存管理模块添加关于“包装箱ID”的编号规则,方法如下:

1.  为“包装箱ID”新建扩展数据类型,假定名称为“PackingID”,Label属性设置为“包装箱ID”。Label属性最终将出现在上图中的参考中。

2.  在AOT的Class中有若干个以“NumberSeqReference_”开头的类,每个类对应着AX系统的一个模块。例如:“NumberSeqReference_Inventory”类对应“库存管理”模块。

打开“NumberSeqReference_Inventory”类,在loadModule()方法中添加如下代码

protected void loadModule()
{
	NumberSequenceReference numRef;
	//WW12345678 Start
	// 包装箱ID

	numRef.DataTypeId       =  typeId2ExtendedTypeId(typeid(PackingId));

	//“PackingId”我们刚才定义的扩展数据类型

	numRef.ReferenceHelp  =  literalstr("此键在整个系统中用于标示包装箱。如果创建包装箱时不希望手动指定包装箱编号,则可以使用该引用");
	numRef.WizardManual             = NoYes::No;
	numRef.WizardAllowChangeDown    = NoYes::No;
	numRef.WizardAllowChangeUp      = NoYes::No;
	numRef.SortField                 = 1;
	this.create(numRef);
	//WW12345678 End
}

此键在整个系统中用于标示订单进度行,创建订单进度行时必须使用该引用自动指定订单进度行编号。

3.  在AOT的Table中有若干个以“Parameters”结尾的表,每个表类对应着AX系统的一个模块。例如:“InventParameters”类对应“库存管理”模块。

打开“InventParameters”表的Methods,新建以“numRef”为前缀的方法

//WW12345678 Start
// 包装箱ID
static client server NumberSequenceReference  numRefPackingId()
{
	return  NumberSeqReference::findReference(
			typeId2ExtendedTypeId(typeid(PackingId)));
}
//WW12345678 End
</pre>
4.  在你设计的“包装箱”的Form的“classDeclaration”中添加变量
<pre lang="C">public class FormRun extends ObjectRun
{
	NumberSeqFormHandler            numberSeqFormHandlerPackingId;
}
</pre>
5.  在你设计的“包装箱”的Form的数据源中,重载“create”方法
<pre lang="C">public void create(boolean _append = false)
{
	super(_append);
	numberSeqFormHandlerPackingId = NumberSeqFormHandler::newForm(
				InventParameters::numRefPackingId().NumberSequence,
				element,
				packingTable_ds,
				fieldnum(PackingTable, PackingId) );

	numberSeqFormHandlerPackingId.formMethodDataSourceCreate();
}

6.  当你如上一章节介绍的那样设置好后,运行窗体点击新建后,系统将根据你的设置自动或手动产生PackingId。

自定义编号规则–在新的模块中添加编号规则

假如我们要在AX中自己创建的的模块MyModule中添加关于PackingId的编号规则,方法如下:

1.  在AOT的baseEnum 下找到“NumberSeqModule”,添加一个新的元素命名为“MyModule”。

2.  为“包装箱ID”新建扩展数据类型,假定名称为“PackingID”,Label属性设置为“包装箱ID”。

3.  创建一个新类,命名为“NumberSeqReference_MyModule”,继承自“ NumberSeqReference”类。

public class NumberSeqReference__MyModule extends NumberSeqReference
{
}

protected void loadModule()
{
	NumberSequenceReference numRef;
	;

	// 包装箱ID
	numRef.DataTypeId     =  typeId2ExtendedTypeId(typeid(PackingId));

	//“PackingId”我们刚才定义的扩展数据类型
	numRef.ReferenceHelp  =  literalstr("此键在整个系统中用于标示包装箱。如果创建包装箱时不希望手动指定包装箱编号,则可以使用该引用");
	numRef.wizardContinuous                  = true;
	numRef.WizardManual             = NoYes::No;
	numRef.WizardAllowChangeDown    = NoYes::No;
	numRef.WizardAllowChangeUp      = NoYes::No;
	numRef.SortField                 = 1;
	this.create(numRef);
}

static NumberSeqModule numberSeqModule()
{
	return NumberSeqModule::PrePurchase;
}

4.  修改“NumberSeqReference”类的下列”方法

ClassesNumberSeqReferencemoduleList

//WW12345678 Begin
moduleList += NumberSeqReference__MyModule::numberSeqModule();
// WW12345678 End
</pre>
ClassesNumberSeqReferenceconstruct
<pre lang="C">//WW12345678 begin
case (NumberSeqReference_ MyModule::numberSeqModule()):

	return new NumberSeqReference__MyModule (_module);
//WW12345678 end

5.模仿系统中FormsLedgerParameters的创建自己的“参数设置”窗体。

无灵活性、扩展性的简易方法

1.  依次打开“基本设置”->“设置”->“编号规则”

2.  在打开的“编号规则”窗体中新建一条规则,如“’MySequence”

3.  在“常规”页签设置该编号规则特性

最小 1
最大 99999
下一个 2
格式 MySeq_#####
手动/连续 自动编号

4.  在form的数据源的Create方法中写:

public void create(boolean _append = false)
{
	NumberSeq _numberSeq;    //声明NumberSeq variable
	;

	super(_append);

	_numberSeq = numberSeq::newGetNumFromCode('MySequence',true,false);
	CurrentSequenceNo=_NumberSeq.num();
}

转载请注明:ww12345678 的部落格 | AX Helper » [原创]Microsoft Dynamcis AX 中的编号规则研究

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址