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.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.






<think>好的,用户问的是MSC3N如何创建批次。首先,我需要确定MSC3N是什么系统或工具。通常,像MSC3N这样的缩写可能与SAP系统相关,因为在SAP中,批次管理是一个常见的功能,事务代码如MSC2N用于批次创建,而MSC3N用于批次查看。用户可能混淆了事务代码,或者他们使用的系统有自定义的事务代码MSC3N来创建批次。 接下来,我需要考虑标准的SAP批次创建流程。通常,在SAP中创建批次是通过事务代码MSC1N或MSC2N。MSC3N通常是用来显示批次主数据的。所以用户可能在询问如何创建批次,但错误地引用了MSC3N。或者他们的系统可能对事务代码进行了定制,将批次创建功能分配给了MSC3N。 需要明确的是,用户是否确定事务代码正确。如果他们确实需要使用MSC3N来创建批次,可能需要检查系统配置,或者是否有特定的步骤或权限要求。此外,可能涉及物料主数据是否启用了批次管理,以及工厂和库存地点是否配置正确。 如果用户的环境确实使用MSC3N来创建批次,可能需要指导他们进入该事务代码,输入物料、工厂等信息,然后保存。但通常需要确认系统的自定义设置,因为标准SAP中MSC3N不是用于创建的。 可能还需要考虑用户是否有权限问题,或者是否需要通过其他路径访问批次创建功能。例如,在某些情况下,可能需要通过物料主数据或生产订单触发批次的自动创建。 总结下来,回答应该先确认事务代码的正确性,然后分步骤说明标准流程,并建议用户检查系统定制或咨询管理员,以防他们的环境有特殊配置。同时提醒批次管理的前提条件,如物料主数据的批次视图维护等。</think>在SAP系统中,若需创建批次(Batch),通常使用事务代码 **MSC1N** 或 **MSC2N**。但根据您提到的 **MSC3N**(通常用于显示批次主数据),可能存在以下两种可能性: --- ### 1. **确认事务代码用途** - **MSC3N** 在标准SAP中用于 **查看批次主数据**,而非创建批次- 若需创建批次,请尝试以下操作: - **事务代码 MSC1N**:手动创建批次- **事务代码 MSC2N**:通过物料凭证(如生产订单、采购订单)自动生成批次--- ### 2. **通过MSC1N手动创建批次的步骤** - **步骤1**:输入事务代码 **MSC1N**,按回车。 - **步骤2**:填写必填字段: - **物料**:需启用批次管理的物料- **工厂**:关联的工厂代码。 - **批次**:可手动输入批次(若系统未自动生成)。 - **步骤3**:维护批次特性(如生产日期、有效期、供应商等)。 - **步骤4**:保存(按 **Ctrl+S** 或点击保存按钮),系统生成批次--- ### 3. **通过MSC2N自动生成批次** - **适用场景**:通过采购订单、生产订单等自动触发批次创建。 - **步骤1**:执行事务代码 **MSC2N**。 - **步骤2**:输入物料凭证(如采购订单)并回车。 - **步骤3**:系统自动分配批次,补充批次特性后保存。 --- ### 4. **特殊情况说明** - 若您确认需通过 **MSC3N** 创建批次,可能是系统定制化配置导致: 1. 尝试在MSC3N界面查找“新建”或“创建”按钮。 2. 联系系统管理员确认权限及事务代码功能是否被修改。 --- ### 5. **前提条件** - 物料主数据的 **批次视图** 需已维护(事务代码 **MM02**)。 - 工厂层级的批次管理配置需启用(通过事务代码 **OMJJ**)。 --- ### 总结 建议优先使用 **MSC1N** 或 **MSC2N** 创建批次。若系统中 **MSC3N** 被定制为创建功能,需结合具体配置操作。如仍有疑问,可提供更多上下文进一步分析!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王小磊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值