[Axapta]Ax3中的Inventory adjustment onhand功能

在Axpata3的Inventory模块下Closing and adjustment中有一项功能叫做Adjustment of on-hand inventory,只知道在标准成本方法下调整物料的成本价后需要使用这个功能重估库存价值,但具体是怎么调整的知之甚少,这里从代码的角度看看这个功能是具体执行的。

选取这个功能后会弹出Adjustment of on-hand inventory窗口(AOT/Form/InventAdjInventOnHand),点击Select会提示选取要调整的物料,内部通过类InventAdjOnhandSelect实现,表面上是从InventSum表中查询未Inventory closing的库存(InventSum.closed=No),实际上在得到这些未关账的库存InventSum记录后,仅仅是使用了结果中的物料代码和相应的InventDim初始化另一个类InventSumOpenTransact来统计物料数量和库存成本:

openTransact= new InventSumOpenTransact(perDate,inventSum.itemId,inventDim,inventDimParm);

InventSumOpenTransact则是查询功能执行日期之前未Closing的物料交易记录( inventTrans.valueOpen==InventTransOpen::Yes),且这些InventTrans的入库状态为Purchased或者出库状态为Sold,换言之就是采购收货且Invoice、销售出货且Invoice、工单领料入库且工单已经End。这些InventTrans记录数量和成本过账金额累加的结果被放到临时表tmpFormLookUp,也就是我们在Adjustment of on-hand inventory窗口中看到的内容,在此之前,还要扣除掉Inventory closing中已经关结的数量和成本(InventTrans.setTransValueDate(TransDate transDate)方法)。

在选取要调整的物料(数量、过账成本金额)后我们选取Adustment->Cost price根据物料的当前成本金额调整,调整的方法是将tmpFormLookUp的数量×物料当前成本单价与tmpFormLookUp的过账成本金额的差值放到tmpFormLookUp的Edit now一栏。

下一个动作是点击“Post”按钮过账调整,具体是通过类InventAdj_SumUp执行,主要的是两个方法,updateInvent()调整InventTrans、updateLedger()过账总账交易。

  • updateInvent()针每条tmpFormLookUp的记录循环,再次使用InventSumOpenTransact查询出tmpFormLookUp下辖的所有的InventTrans记录,一条tmpFormLookUp记录可能对应多条InventTrans记录,tmpFormLookUp的Edit now金额需要在这些InventTrans上平摊,这个动作在InventSumOpenTransact.setAdjustment(tmpFormLookUp.adjustNow)中完成。针对每条InventTrans的实际调整动作是在class\InventTransAdjust.UpdateNow()中完成,将调整的金额加总到InventTrans的costAmountAdjustment字段,生成相应的InventSettlement记录。
  • updateLedger()调用InventAdjustPost.updateNow()过账总账凭证,根据明细设置过账一个总额、或分物料组、或单个物料生成凭证,在选取为单个物料生成凭证的情况下,它将对上面updateInvent()生成的inventSettlement记录按物料及过账科目分组形成最终的财务分录。涉及到科目有两个,一个是物料Posting中设置的Inventory profit/loss科目,另一个则是InventTrans的Balance account科目(InventTrans窗口Ledger->Accounts - finicial->Balance account),而它一般则是物料Posting中设置的Inventroy receipt/issue的科目。

还要说明的一个是调整日期的确定,系统使用最后一次Inventory closing的交易日期,这个日期无法手工修改,系统也使用这个日期作为财务分录的日期,也就是说Adjustment of on-hand inventory是建立在最近一次Inventory closing基础上的。

总的来说,功能涉及到的代码还是很多的,用到不少的form、表和类,单整体完成的动作还是比较好理解的,简单的说,就是采用上一次Inventory closing的日期,针对这一日期前(包含该日期)尚未Inventory closing但是Finicial完成的InventTrans,根据选取的调整方法(上面例子中使用cost price)计算要调整的金额,过账后更新调整金额到InentTras的Adjustment字段并生成相应的InventSettlement记录和财务分录。非财务专业,不深究财务范畴这个操作的意义。

原文地址:https://www.cnblogs.com/duanshuiliu/p/3025522.html