库存模型组:在AX中库存模型组是非常重要的,是计算库存成本的重要组成部分,决定了将物料过账到总帐的方式。
库存模型组包含确定如何控制和处理物料收货和发货的设置。
在新建物料的时候,库存模型组也是一个必填字段。下面来看看代码是怎么创建库存模型组的。
系统库存模型组关联的表:inventModelGroup
一般表都会有一个find方法,用来查找主键对应的记录,找到则返回行记录,update参数则表示返回的记录是否可以修改,返回false的话就表示是自读的。和find方法相类似的有一个exist方法,它的功能就是查找主键是否存在,存在则返回true。这两个方法属于典型的静态方法,不属于表和行记录,属于整个表的方法。
在新建记录时候,系统最先调用的是initValue方法,新建库存模型组记录的时候会有几个默认值。允许财务负库存,
过账实际库存和过账财务库存是默认勾选的,还有库存模型类型是先进先出(FIFO)。都是写在initValue方法里面。
validateField方法,这个方法在字段的值改变,且字段失去焦点的时候触发,主要用于字段的值是否符合规范,此表的validateField方法:
public boolean validateField(fieldId _fieldIdToCheck)
{
boolean ret;
InventTable inventTable;
ret = super(_fieldIdToCheck);
switch(_fieldIdToCheck)
{
case fieldnum(InventModelGroup, NegativePhysical):
if (this.RecId && !this.NegativePhysical && this.NegativePhysical != this.orig
().NegativePhysical)
{
startLengthyOperation();
while select inventTable
where inventTable.ModelGroupId == this.ModelGroupId
{
ret = this.inventModelType().checkNotNegativeOnHand(inventTable, true);
if (!ret)
return ret;
}
}
break;
case fieldnum(InventModelGroup, InventModel):
if (InventModelType::newInventModel(this.InventModel).stdCostBased() && !
InventParameters::find().MultiSiteActivated)
{
ret = checkFailed("@SYP1642");
}
if (InventModelGroup::isModelGroupUsedInStdCostConv(this.ModelGroupId))
{
ret = checkFailed(strfmt("@SYS126546", this.ModelGroupId));
}
break;
}
return ret;
}
它检查了传进来的字段是否是(允许财务负库存字段)如果是修改了这个字段的话。就执行里面方法,值得一提的是,this.orig这个方法返回的是最后一次提交到数据库的记录。startLengthyOperation()这个方法是系统了global的方法,就是一般复杂操作的代码会把鼠标编程不可操作的,现在还不知道是神马意思。这里面还涉及到跟这表相关的类
inventModelType类,表方法inventModelType就是返回这个类,并且把当前的库存模型类型传进去实例化,它每一种库存模型类型都对应了一个类,一般实例化的就是类InventModelType_FIFO,一般修改库存模型组改为标准成本会进入方法。
validateWrite方法,在保存数据时,触发此方法判断是否满足保存的条件,此方法的父类方法主要检查必填字段的合法性,弱此字段返回false,则保存将被阻止,返回true,则触发Insert或者Update方法。而此表的validateWrite方法直接调用类inventModelType的方法validateWriteInventModelGroup
如果修改的是库存模型类型,checkFailed返回一个假值,然后info一些信息给用户。