客户需求:
在实施一家客户的ERP项目过程中,客户的库存管理有这样一种特殊的需求,要实现物料的库存同时记录件数和平方数,但每一片的平方数是不固定的,没办法使用系统自身的多UOM管理。该如何实现?
解决方案:
可采用UD表来记录物料的辅助单位的库存数。在所有的库存业务界面当中,除了输入库存主单位的数量之外,还有同时输入辅助单位的数量。
由于库存业务相关的窗体非常的多,如果在UI层写代码实现的话,则工作量巨大,而且盘点过账时候,开发的难度比较大。那么,有没有便捷的方法来满足这样的需求呢?答案是肯定的,我们可以考虑在PartTran这个表做数据指令的BPM,因为所有的库存事务最终都会写入到PartTran,所以只需要在这个地方做BPM就可以实现客户的需求,而不需要在UI层一个一个的写代码。在这个方案中,辅助单位的数量,是利用库存事务相关窗体的备注这个字段进行输入的(当然,假如备注还需要写入其他内容,那么可以再加上一些分隔符来实现)。如下是BPM的4GL代码示例:
在实施一家客户的ERP项目过程中,客户的库存管理有这样一种特殊的需求,要实现物料的库存同时记录件数和平方数,但每一片的平方数是不固定的,没办法使用系统自身的多UOM管理。该如何实现?
解决方案:
可采用UD表来记录物料的辅助单位的库存数。在所有的库存业务界面当中,除了输入库存主单位的数量之外,还有同时输入辅助单位的数量。
由于库存业务相关的窗体非常的多,如果在UI层写代码实现的话,则工作量巨大,而且盘点过账时候,开发的难度比较大。那么,有没有便捷的方法来满足这样的需求呢?答案是肯定的,我们可以考虑在PartTran这个表做数据指令的BPM,因为所有的库存事务最终都会写入到PartTran,所以只需要在这个地方做BPM就可以实现客户的需求,而不需要在UI层一个一个的写代码。在这个方案中,辅助单位的数量,是利用库存事务相关窗体的备注这个字段进行输入的(当然,假如备注还需要写入其他内容,那么可以再加上一些分隔符来实现)。如下是BPM的4GL代码示例:
***********************************************
For each ttparttran where ttparttran.rowmod='A' and length(ttparttran.partnum)>0 and length(ttparttran.WareHouseCode)>0 and length(ttparttran.BinNum)>0 and length(ttparttran.LotNum)>0 no-lock.
def var iQty as integer initial 0 no-undo.
assign iQty = integer(ttparttran.tranreference) no-error.
IF ERROR-STATUS:ERROR THEN do:
{&TRY_PRIVATE}
{lib/PublishEx.i &ExMsg ='件数必须输入数字!'
&ExType = {&MESSAGE_ERR}
}
{&THROW_PRIVATE}.
{&CATCH_PRIVATE}
END.
IF iQty<=0 then do:
{&TRY_PRIVATE}
{lib/PublishEx.i &ExMsg ='件数必须必须大于0!'
&ExType = {&MESSAGE_ERR}
}
{&THROW_PRIVATE}.
{&CATCH_PRIVATE}
END.
If (ttparttran.TranType matches 'STK*' and ttparttran.TranQty>0) or(ttparttran.TranType matches '*STK' and ttparttran.TranQty<0) or (ttparttran.TranType='ADJ-QTY' and ttparttran.TranQty<0) Then do:
assign iQty= - iQty.
End.
Find first UD10 where UD10.Company=ttparttran.Company and UD10.Key1=ttparttran.PartNum and UD10.Key2=ttparttran.WareHouseCode and UD10.Key3=ttparttran.BinNum and UD10.Key4=ttparttran.LotNum no-error.
if not available(UD10) then
Do:
create UD10.
assign ud10.company=ttparttran.Company.
assign ud10.key1=ttparttran.PartNum.
assign ud10.key2=ttparttran.WareHouseCode.
assign ud10.key3=ttparttran.BinNum.
assign ud10.key4=ttparttran.LotNum.
assign ud10.Number01=iQty.
End.
Else Do:
assign ud10.Number01=ud10.Number01 + iQty.
End.
End.
****************************************************************