首页 > 其他分享 >ABAP 写入批次特征值以及更新批次特征值

ABAP 写入批次特征值以及更新批次特征值

时间:2023-01-10 10:14:03浏览次数:39  
标签:特征值 gs 批次 lt ABAP ls data allocvalueschar

需求

SAP启用了批次,需要在特征值中写入物料类型,区分该物料批次是用于研发的亦或是量产的,关于研发和量产标识我是坐在采购订单行项目增强中了,这里就不多赘述采购订单行项目增强了,主要写批次特征值的写入以及更新。

函数说明

VB_BATCH_2_CLASS_OBJECT:获取物料批次对应的类等相关信息
BAPI_OBJCL_GETDETAIL:依据上一个函数的反馈返回值获取特性以及特性值
BAPI_OBJCL_CHANGE:更新以及创建特征值,查询了很多资料,都是用这个函数来更新的,其实也可以用来创建,后面会说明。

使用前提

因为我是在采购收货的时候写入特征值,因此必须在该物料成功生成收货物料凭证以及批次后,当然物料启用分类模块也是必须的,不然物料的首个批次需要去msc2n里手动进行批次分类的创建,只有这样才可以去进行特征值的写入以及更新。

函数使用

VB_BATCH_2_CLASS_OBJECT

      CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
        EXPORTING
          i_matnr = gs_data-matnr  " 物料号
          i_charg = gs_data-charg  " 物料批次
          i_werks = gs_data-werks  " 工厂
        IMPORTING
          e_objek = e_objek
          e_obtab = e_obtab
          e_klart = e_klart
          e_class = e_class.

BAPI_OBJCL_GETDETAIL

      CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
        EXPORTING
          objectkey_long  = e_objek  "这里的参数要注意,如果你的物料号在系统里是40位的,就要用带long的参数,不然是会有问题
          objecttable     = e_obtab
          classtype       = e_klart
          classnum        = e_class
        TABLES
          allocvaluesnum  = lt_allocvaluesnum
          allocvalueschar = lt_allocvalueschar
          allocvaluescurr = lt_allocvaluescurr
          return          = lt_return2.

BAPI_OBJCL_CHANGE

接着第二个函数的代码

    READ TABLE lt_return2 INTO ls_return2 INDEX 1.
      "说明没有特征值 需要手动添加,这里因为知道是哪一个 因此写死 这里就是创建
      IF ls_return2-type = 'I'.  
        CLEAR ls_allocvalueschar.
        ls_allocvalueschar-charact = 'ZMM_MATERIAL_TYPE'.  "自己创建的批次类下的属性
        ls_allocvalueschar-charact_descr = '物料类型'.      " 描述
        ls_allocvalueschar-value_char = gs_data-zzmstat.   " 特征值
        ls_allocvalueschar-value_neutral = gs_data-zzmstat.  " 特征值
        ls_allocvalueschar-value_char_long = gs_data-zzmstat.  " 特征值
        ls_allocvalueschar-value_neutral_long = gs_data-zzmstat.  " 特征值
        APPEND ls_allocvalueschar TO lt_allocvalueschar.

      ELSEIF ls_return2-type = 'S'.
        "说明有特征值,那么需要判断一下这个特征值是否是我们需要的 如果是 修改 ,如果不是 新增一行
        CLEAR ls_allocvalueschar.
        READ TABLE lt_allocvalueschar ASSIGNING FIELD-SYMBOL(<fs_allocvalueschar>) WITH KEY charact = 'ZMM_MATERIAL_TYPE'. "判断如果是我需要的特征值,那么就要进行修改
        IF sy-subrc EQ 0.
          <fs_allocvalueschar>-value_char = gs_data-zzmstat.     " 修改的特征值
          <fs_allocvalueschar>-value_neutral = gs_data-zzmstat.  " 修改的特征值
          <fs_allocvalueschar>-value_char_long = gs_data-zzmstat.  " 修改的特征值
          <fs_allocvalueschar>-value_neutral_long = gs_data-zzmstat.  " 修改的特征值
        ELSE.
          ls_allocvalueschar-charact = 'ZMM_MATERIAL_TYPE'.  " 同上面的创建
          ls_allocvalueschar-charact_descr = '物料类型'.
          ls_allocvalueschar-value_char = gs_data-zzmstat.
          ls_allocvalueschar-value_neutral = gs_data-zzmstat.
          ls_allocvalueschar-value_char_long = gs_data-zzmstat.
          ls_allocvalueschar-value_neutral_long = gs_data-zzmstat.
          APPEND ls_allocvalueschar TO lt_allocvalueschar.
        ENDIF.
      ENDIF.

      IF ls_return2-type = 'S' OR ls_return2-type = 'I'.
        CALL FUNCTION 'BAPI_OBJCL_CHANGE'  " 进行修改或者新增
          EXPORTING
            objectkey_long     = e_objek  "这里的参数要注意,如果你的物料号在系统里是40位的,就要用带long的参数,不然是会有问题
            objecttable        = e_obtab
            classnum           = e_class
            classtype          = e_klart
            status             = '1'
            keydate            = sy-datum
          TABLES
            allocvaluesnumnew  = lt_allocvaluesnum
            allocvaluescharnew = lt_allocvalueschar
            allocvaluescurrnew = lt_allocvaluescurr
            return             = lt_return2.

查看结果

在收货完成后查看msc3n对应的分类特征值就可以查看到写入的数据

标签:特征值,gs,批次,lt,ABAP,ls,data,allocvalueschar
From: https://www.cnblogs.com/pnj-owowa/p/16998897.html

相关文章

  • 什么是 SAP ABAP 的 include structure
    结构(注意structure并不是数据库表或视图)可以作为包含结构(includestructures)包含在数据库表中。只有当一个结构的组件满足所有的表字段先决条件时,该结构才能包含在表......
  • SAP ABAP Append structure 介绍
    Appendstructure(附加结构)是ABAP字典中附加到另一个结构或数据库表并将其组件附加到它们的结构。Appendstructure可以添加到SAP在客户系统中提供的结构和数据库表......
  • SAP ABAP DDIC 结构字段的一些技术限制条件
    SAPABAP表字段是数据库表结构的组成部分,描述了数据库表字段的名称、数据类型和任何语义属性。下图这些高亮区域就是ABAP表字段的一些例子。表字段是表的结构化数据......
  • ABAP基础一:ALV样例
    REPORTzly_report.*********ReportDemo*****************************************本程序主要将普通的ALV报表做拆分讲解*一个简单的ALV包括以下一个部分*1.数据定......
  • ABAP 常用BAPI
    记录ABAP开发的日常——常用的BAPI前言:在开发的过程中经常用到一些BAPI函数,为了便于查找,于是在这里记录下。如果有广大朋友使用的BAPI在这里没有记录到,欢迎评论补充。SD模......
  • ABAP开发面向对象---类
    今日学习ABAP面向对象里面的类,关于构造,继承,实现。踩坑点:类有抽象的方法,类本身也需要是抽象的,故需要在类申明里面加上ABSTRACT关键字学习资料为B站翱翔云天老师的1CLA......
  • 矩阵的特征值和奇异值
    目录特征值特征分解奇异值奇异分解矩阵的奇异值(singularvalues)和特征值(eigen-values),\(m\timesn\)的矩阵确定了一个\(n\tom\)维的向量变换。特征向量就是这种变换的......
  • SAP MM 模块的入门者,想学习 ABAP 编程语言应该如何入手?
    本人自2007年计算机专业研究生毕业加入SAP成都研究院,在这之前也从未听说过ABAP这门编程语言,我算是ABAP零基础开始学习。根据我的过往经验,可以先简单了解一下ABAP......
  • 使用 ABAP 代码给 OData 元数据增添注解的一些例子
    ​​使用ABAP代码给OData元数据增添注解的一些例子​​ 最近有读者向我咨询,关于当系统在SAPNetWeaver740之上运行时,如何向OData服务添加注解(annotation)......
  • 如何通过 ABAP 代码给 SAP OData 元数据增添注解试读版
    ​​如何通过ABAP代码给SAPOData元数据增添注解试读版​​ 笔者的这篇SAPUI5开发教程文章,*​​SAPUI5应用开发教程之一百二十九-如何给SAPUI5SmartF......