REPORT ztest.
DATA: lv_matnr TYPE matnr,
lv_charg TYPE charg_d,
lv_werks TYPE werks_d.
DATA: lv_objek_l TYPE cuobn,
lv_objek_s TYPE bapi1003_key-object,
lv_obtab TYPE tabelle,
lv_klart TYPE klassenart,
lv_class TYPE klasse_d,
lt_num TYPE STANDARD TABLE OF bapi1003_alloc_values_num,
lt_char TYPE STANDARD TABLE OF bapi1003_alloc_values_char,
lt_curr TYPE STANDARD TABLE OF bapi1003_alloc_values_curr,
lt_return TYPE STANDARD TABLE OF bapiret2.
DATA: lv_str TYPE string.
lv_matnr = '000000330301000001'.
lv_charg = '2018011111'.
CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
EXPORTING
i_matnr = lv_matnr "物料
i_charg = lv_charg "批次
i_werks = lv_werks "工厂
IMPORTING
e_objek = lv_objek_l "对象
e_obtab = lv_obtab "表
e_klart = lv_klart "类型
e_class = lv_class. "类
lv_objek_s = lv_objek_l+0(50).
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = lv_objek_s
objecttable = lv_obtab
classnum = lv_class
classtype = lv_klart
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_return.
BREAK-POINT.
最近使用到这个方法是,按照以前写的一篇帖子 “MSC3N获取物料批次特性及特性值(一)”
http://blog.youkuaiyun.com/wangjolly/article/details/38733601
发现报错,无法正常执行,报错信息如下:
很显然,是批次信息没有识别或者批次错误导致。
传入BAPI_OBJCL_GETDETAIL中的objectkey 信息如下:
通过手动修改lv_objek_s的值
继续执行,发现可以正常获取数据
错误分析:
BAPI_OBJCL_GETDETAIL的传入参数objectkey依然只识别18位的物料,所以使用这个BAPI的时候,注意针对这个点做手工强制调整。
调整代码如下:
DATA: lv_matnr TYPE matnr,
lv_charg TYPE charg_d,
lv_werks TYPE werks_d.
DATA: lv_objek_l TYPE cuobn,
lv_objek_s TYPE bapi1003_key-object,
lv_obtab TYPE tabelle,
lv_klart TYPE klassenart,
lv_class TYPE klasse_d,
lt_num TYPE STANDARD TABLE OF bapi1003_alloc_values_num,
lt_char TYPE STANDARD TABLE OF bapi1003_alloc_values_char,
lt_curr TYPE STANDARD TABLE OF bapi1003_alloc_values_curr,
lt_return TYPE STANDARD TABLE OF bapiret2.
DATA: lv_str TYPE string.
lv_matnr = '000000330301000001'.
lv_charg = '2018011111'.
CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
EXPORTING
i_matnr = lv_matnr "物料
i_charg = lv_charg "批次
i_werks = lv_werks "工厂
IMPORTING
e_objek = lv_objek_l "对象
e_obtab = lv_obtab "表
e_klart = lv_klart "类型
e_class = lv_class. "类
CONCATENATE lv_matnr lv_charg INTO lv_str.
CONDENSE lv_str.
lv_objek_s = lv_str.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = lv_objek_s
objecttable = lv_obtab
classnum = lv_class
classtype = lv_klart
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_return.
BREAK-POINT.