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.csdn.net/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.