目的:在采购申请FORM界面增加三个弹性栏位 其中现有量栏位要自动取即时库存量 如下图
做法:
步骤一:弹性域-说明性-段
默认值:
SELECT NVl(SUM(T.PRIMARY_TRANSACTION_QUANTITY),0) FROM MTL_ONHAND_QUANTITIES_DETAIL T where t.inventory_item_id = :LINES.ITEM_ID
说明::LINES.ITEM_ID是采购申请行的:块名.字段名(注意:此默认值有问题 后面接着说)
测试结果:
采购申请(有料号) 采购申请(有料号) 都没问题了
但是申请汇总出问题了 提示找不到::LINES.ITEM_ID
经分析 原因如下
刚开的三个弹性域对申请汇总的FORM是共用的 但是申请行汇总界面的物料ID是:REQ_LINES_FOLDER.ITEM_ID 因此:LINES.ITEM_ID无法被识别
如下图
解决方法:
大神说用全局变量试试
用个性化将采购申请界面的:LINES.ITEM_ID赋值给全局变量
弹性域定义那里引用这个全局变量
SELECT NVl(SUM(T.PRIMARY_TRANSACTION_QUANTITY),0) FROM MTL_ONHAND_QUANTITIES_DETAIL T where t.inventory_item_id = :global.v_hkp
注:对于采购申请(无料号)来说 :LINES.ITEM_ID是空值 因此个性化要做特殊处理
将全局变量赋为null即可
成功!
注1:因为弹性域作用很强大 所有用到这个弹性域的地方都会被影响到 因此如果有用到这个弹性域但是没有定义此全局变量的就会报错
找到这个FORM 在个性化定义了最高级别WHEN-NEW-FORM-INSTENCE触发器下的全局变量
但是针对从WEB界面打开的这个FORM 这个触发器在报错之前没执行到 可能是在WHEN-NEW-FORM-INSTENCE之前的PRE-FORM里就开始验证全局变量 因此全局变量V_HKP要在PRE-FORM里定义才可能被执行到
这样就OK了 问题解决了。
注2:大神说全局变量还可以做一次验证使用(例报废处理)
一般FORM的验证都是三次验证 用全局变量 只有全局变量为0时才进行验证 验证一次之后全局变量设为1 不再进行第二次验证