方法一、从VBAP中取得cuobj,然后调用FM:VC_I_GET_CONFIGURATION;
但是如果数据量大,那么程序效率会有影响;另外一个问题,这种方法只能获取SO现在的特性值,看不到特性修改的状态;
方法二、
经过上网查资料和反复验证,终于找到了相关的数据库表了。如下表可以使用:
IBIN:中间转换表,主要通过INSTANCE转换。
IBINVALUES:记录所维护的特性清单。
IBSYMBOL:存储具体特性值的表(类似于AUSP)。
相关取值代码的片段:
SELECT VBAP-EBELN, VBAP-POSNR,
CABN~ATINN"内部特性
CABN
~ATNAM"特性名称
IBSYMBOL
~ATWRT"特性值APPENDING CORRESPONDING FIELDS OF TABLE ITAB_TX
FROM VBAP
INNER
JOIN IBIN ON IBIN~INSTANCE = VBAP~CUOBJ
INNER
JOIN IBINVALUES ON IBINVALUES~IN_RECNO = IBIN~IN_RECNO
INNER
JOIN IBSYMBOL ON IBSYMBOL~SYMBOL_ID = IBINVALUES~SYMBOL_ID
INNER
JOIN CABN ON CABN~ATINN = IBSYMBOL~ATINN
WHERE VBAP-CUOBJ = cuobj_list.
通过SE16N看,先从VBAP中得到CUOBJ,然后 = INSTANCE 得到IN_RECNO.
进入表IBINVALUES根据IN_RECNO = IBIN-IN_RECNO;可以得到SYMBOL_ID.
再进表IBSYMBOL根据SYMBOL_ID = 上面的,得到ATWRT ;
这样不必反复调用FM,实际上这个FM也是要去查询相关的数据库表,经过计算后返回特性值。即是减少了大大的数据库查询交互次数,性能当然能得到提升了。
原文:https://www.cnblogs.com/chrisrockdl/p/13156491.html