MSC3N获取物料批次特性及特性值-针对物料号扩展为40位后的使用方法调整(二)

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.






猜你喜欢

转载自blog.csdn.net/wanglei880526/article/details/79092746