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

35 篇文章 29 订阅
33 篇文章 11 订阅
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.






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值