BAPI_BATCH_CHANGE:修改批次的特征值

文章目录

  • BAPI_BATCH_CHANGE:修改批次的特征值
    • 实现步骤
      • 定义变量
      • 获取对象/类等
    • 获取已维护特性值
      • 新特性值更新
    • 注意事项
      • 常见的错误:Object xxx does not exist
    • 最终效果
    • 字段介绍
    • 正式测试-310测试环境(HS)
      • 特性值数据内表介绍
      • 运行效果
      • 完整代码

BAPI_BATCH_CHANGE:修改批次的特征值

现在有一个需求是要修改批次里面的某一个特征值,所以需要使用到BAPI_BATCH_CHANGE这个BAPI,除此之外,还有VB_BATCH_2_CLASS_OBJECT函数和BAPI_OBJCL_GETDETAIL。
特别注意

  • 注意函数VB_BATCH_2_CLASS_OBJECTi_matnr参数,注意前导0的问题。因为这个前导0,我的批次的类还取不到,哭了,后面发现两个系统的物料一个是有前导0,一个是没有的,所以要注意。
  • 注意BAPI函数BAPI_OBJCL_GETDETAILobjectkey_long参数,不使用objectkey

实现步骤

定义变量

DATA e_objek TYPE cuobn.
DATA e_obtab TYPE tabelle.
DATA e_klart TYPE klassenart.
DATA e_class TYPE klasse_d.
DATA allocvaluesnum   TYPE STANDARD TABLE OF bapi1003_alloc_values_num.   "分配 BAPI - NUMDATETIME 类型的值
DATA allocvalueschar  TYPE STANDARD TABLE OF bapi1003_alloc_values_char.  "分配 BAPI - CHARBOOL 类型的值
DATA allocvaluescurr  TYPE STANDARD TABLE OF bapi1003_alloc_values_curr.  "分配 BAPI - CURR 类型值
DATA return           TYPE STANDARD TABLE OF bapiret2.DATA: lt_numnew TYPE TABLE OF bapi1003_alloc_values_num,lt_charnew TYPE TABLE OF bapi1003_alloc_values_char,lt_currnew TYPE TABLE OF bapi1003_alloc_values_curr,lt_returnnew TYPE TABLE OF bapiret2.DATA: ls_char TYPE bapi1003_alloc_values_char,ls_return TYPE bapiret2.

获取对象/类等

函数名称:VB_BATCH_2_CLASS_OBJECT

CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'EXPORTINGi_matnr       = 'EWM_RAW_01'  "物料i_charg       = '2022061302'  "批次i_werks       = '1710'    "工厂IMPORTINGe_objek       = e_objeke_obtab       = e_obtabe_klart       = e_klarte_class       = e_class.

获取已维护特性值

BAPI名称:BAPI_OBJCL_GETDETAIL

CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'EXPORTING"objectkey               = e_objek  "如果是物料是40位的,选这个会报错,要选OBJECTKEY_LONGobjecttable            = e_obtab  "对于分类的对象的数据库表名称classnum               = e_class  "分类编号classtype              = e_klart  "分类的类型"keydate                = sy-datum
*   UNVALUATED_CHARS       = ' '
*   LANGUAGE               = SY-LANGUobjectkey_long         = e_objek   "关键字字段
* IMPORTING
*   STATUS                 = STATUS
*   STANDARDCLASS          = STANDARDCLASSTABLESallocvaluesnum         = allocvaluesnumallocvalueschar        = allocvaluescharallocvaluescurr        = allocvaluescurrreturn                 = return.

新特性值更新

BAPI名称:BAPI_BATCH_CHANGE

lt_numnew[] = allocvaluesnum.
lt_charnew[] = allocvalueschar.
lt_currnew[] = allocvaluescurr.
lt_returnnew[] = return.IF lt_charnew[] IS NOT INITIAL.LOOP AT lt_charnew INTO ls_char.ls_char-value_char = '1'.         "特征值ls_char-value_neutral = '1'.      "特征值ls_char-value_char_long = '1'.    "特征值ls_char-value_neutral_long = '1'. "特征值MODIFY lt_charnew FROM ls_char.ENDLOOP.
ELSE.ls_char-charact = 'Z_SW_DW_BA'.   "特征名ls_char-value_char = '1'.         "特征值ls_char-value_neutral = '1'.      "特征值ls_char-value_char_long = '1'.    "特征值ls_char-value_neutral_long = '1'. "特征值APPEND ls_char TO lt_charnew[].
ENDIF."--> 新特性值更新
CALL FUNCTION 'BAPI_OBJCL_CHANGE'EXPORTING
*   OBJECTKEY                = OBJECTKEYobjecttable              = e_obtabclassnum                 = e_classclasstype                = e_klart
*   STATUS                   = '1'
*   STANDARDCLASS            = STANDARDCLASS
*   CHANGENUMBER             = CHANGENUMBER
*   KEYDATE                  = SY-DATUM
*   NO_DEFAULT_VALUES        = ' '
*   KEEP_SAME_DEFAULTS       = ' 'objectkey_long           = e_objek
* IMPORTING
*   CLASSIF_STATUS           = CLASSIF_STATUSTABLESallocvaluesnumnew        = lt_numnewallocvaluescharnew       = lt_charnewallocvaluescurrnew       = lt_currnewreturn                   = lt_returnnew.LOOP AT return INTO ls_return WHERE type = 'E' OR type = 'A'.WRITE: ls_return-message.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.EXIT.
ENDLOOP.IF sy-subrc <> 0.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.
ENDIF.

注意事项

在这里插入图片描述

常见的错误:Object xxx does not exist

注:在S/4之前的系统,物料编码是18位长度,可以直接使用参数objectkey接收Object key的值,特性的值是可以被正确读取出来的。
但是在S/4系统,物料编码是40位,若还是使用objectkey接收Object Key的值,则会出现如上的错误。
所以在S/4系统,应该改用参数objectkey_long。

最终效果

在这里插入图片描述

字段介绍

在这里插入图片描述

正式测试-310测试环境(HS)

特性值数据内表介绍

在这里插入图片描述
事务代码MSC3N的界面如下:
在这里插入图片描述

运行效果

原始的值记录:

在这里插入图片描述
现在修改成功,原来的值修改成了VENDOR002
在这里插入图片描述

完整代码

 "-------------- 测试 获取对象和类 LHY20240422  --------------DATA e_objek TYPE cuobn.DATA e_obtab TYPE tabelle.DATA e_klart TYPE klassenart.DATA e_class TYPE klasse_d.CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'EXPORTINGi_matnr = '000000100000008374'  "物料号,一定要注意前导0!!!,否则获取类e_class不成功,在自己购买的测试系统的测试物料是没有前导0的i_charg = '2404220002'  "批次号i_werks = '1100'IMPORTINGe_objek = e_objeke_obtab = e_obtabe_klart = e_klarte_class = e_class.DATA allocvaluesnum   TYPE STANDARD TABLE OF bapi1003_alloc_values_num.   "NUMDATETIME 类型的特征值DATA allocvalueschar  TYPE STANDARD TABLE OF bapi1003_alloc_values_char.  "CHARBOOL 类型的特征值DATA allocvaluescurr  TYPE STANDARD TABLE OF bapi1003_alloc_values_curr.  "CURR 类型特征值DATA return           TYPE STANDARD TABLE OF bapiret2.DATA: lt_numnew    TYPE TABLE OF bapi1003_alloc_values_num,lt_charnew   TYPE TABLE OF bapi1003_alloc_values_char,lt_currnew   TYPE TABLE OF bapi1003_alloc_values_curr,lt_returnnew TYPE TABLE OF bapiret2.DATA: ls_char   TYPE bapi1003_alloc_values_char,ls_return TYPE bapiret2."-------------- 测试 获取已维护特性值--------------CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'EXPORTING
*     OBJECTKEY       = e_objekobjecttable     = e_obtabclassnum        = e_classclasstype       = e_klart
*     KEYDATE         = SY-DATUM
*     UNVALUATED_CHARS       = ' '
*     LANGUAGE        = SY-LANGUobjectkey_long  = e_objek  "如果是物料是40位的,选这个会报错(类型不匹配),要选OBJECTKEY_LONG
*   IMPORTING
*     STATUS          =
*     STANDARDCLASS   =TABLESallocvaluesnum  = allocvaluesnumallocvalueschar = allocvaluescharallocvaluescurr = allocvaluescurrreturn          = return.lt_numnew[] = allocvaluesnum.lt_charnew[] = allocvalueschar.lt_currnew[] = allocvaluescurr.lt_returnnew[] = return.READ TABLE lt_charnew INTO ls_char WITH KEY charact = 'ZMM015'.IF sy-subrc <> 0."不存在ZMM015特征,可以创建ls_char-charact = 'ZMM015'.ls_char-value_char = 'VENDOR001'.         "特征值ls_char-value_neutral = 'VENDOR001'.      "特征值ls_char-value_char_long = 'VENDOR001'.    "特征值ls_char-value_neutral_long = 'VENDOR001'. "特征值APPEND ls_char TO lt_charnew.ELSE. "如果已经存在,可以修改其特征值ls_char-value_char = 'VENDOR002'.         "特征值ls_char-value_neutral = 'VENDOR002'.      "特征值ls_char-value_char_long = 'VENDOR002'.    "特征值ls_char-value_neutral_long = 'VENDOR002'. "特征值MODIFY lt_charnew FROM ls_char INDEX sy-tabix.ENDIF."----------------  测试 新特性值更新--------------CALL FUNCTION 'BAPI_OBJCL_CHANGE'EXPORTING
*     OBJECTKEY          =objecttable        = e_obtabclassnum           = e_classclasstype          = e_klart
*     STATUS             = '1'
*     STANDARDCLASS      =
*     CHANGENUMBER       =
*     KEYDATE            = SY-DATUM
*     NO_DEFAULT_VALUES  = ' '
*     KEEP_SAME_DEFAULTS = ' 'objectkey_long     = e_objek
*   IMPORTING
*     CLASSIF_STATUS     =TABLESallocvaluesnumnew  = lt_numnewallocvaluescharnew = lt_charnewallocvaluescurrnew = lt_currnewreturn             = lt_returnnew.LOOP AT return INTO ls_return WHERE type = 'E' OR type = 'A'.WRITE: ls_return-message.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.EXIT.ENDLOOP.IF sy-subrc <> 0.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.ENDIF.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/2571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySql】MySQL查询中的笛卡尔积现象解析

还有多少个十年 能勇敢做热血青年 还有多少个十年 能坚持当初的信念 还有多少个十年 能不忘怀回忆点点 &#x1f3b5; 《还有多少个十年》 在使用MySQL或任何关系型数据库进行多表查询时&#xff0c;如果连接条件设置不当&#xff0c;就可能发生所谓的笛卡…

radware负载均衡简介及应用场景

Radware负载均衡是一种高效的网络性能优化技术&#xff0c;广泛应用于确保服务的高可用性和可靠性。以下是关于Radware负载均衡的简介及其应用场景的详细介绍&#xff1a; 简介&#xff1a; Radware的AppDirector&#xff08;AD&#xff09;是公司提供的负载均衡解决方案&…

关于加强电力系统通信与电网调度自动化建设问题的规定

关于加强电力系统通信与电网调度自动化建设问题的规定 为了保障电力系统安全、经济、优质、可靠运行&#xff0c;必须加强电网调度管理和提高技术装备水平。根据当前电网技术装备状况&#xff0c;结合电力系统通信和电网调度自动化的特点&#xff0c;以及今后规划发展的要求&am…

【每日力扣】41. 缺失的第一个正数 238. 除自身以外数组的乘积 189. 轮转数组

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害 41. 缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为…

Linux 操作系统的引导过程

Linux系统开机引导过程&#xff1a; 开机自检 检测硬件设备&#xff0c;找到能够引导系统的设备&#xff0c;比如硬盘MBR引导 运行MBR扇区里的主引导程序GRUB启动GRUB菜单 系统读取GRUB配置文件(/boot/grub2/grub.cfg)获取内核的设置和…

API 开发的后盾:平台工程提供强力动态支持

过去几年&#xff0c;开发团队一直在发展传统的 DevOps。一些开发人员认为&#xff0c;CloudOps 或 DeploymentOps 等新实践的兴起将会导致回到孤岛问题。其他人则不愿意在承担所有其他职责之外构建、部署、运行和维护运维。显然&#xff0c;确实需要新的云原生开发策略&#x…

YesPMP众包平台最新项目

YesPMP一站式互联网众包平台&#xff0c;最新外包项目&#xff0c;有感兴趣的用户可进入平台参与竞标。 &#xff08;竞标后由项目方直接与服务商联系&#xff0c;双方直接对接&#xff09; 1.查看项目&#xff1a;个人技术-YesPMP平台 2.查看项目&#xff1…

用Python编写一个简单的数字累加器 数字累加器

目录 一.总体说明 二.完整代码 三.逐行分析 一.总体说明 数字累加器是一种用于对数字进行持续累加的设备或算法。它可以在每次输入一个数字时将其与之前的累加结果相加,并更新累加结果。数字累加器通常用于计算总和、平均值或其他需要对连续数字进行累加的应用场景。 在计…

Android apk打包有so,运行没有so

Android apk打包有so&#xff0c;运行没有so 当minSdkVersion版本从19变成26时&#xff0c;编译打包后&#xff0c;安装到设备里发现 /data/data//lib 目录下没有so库&#xff0c;在AndroidManifest文件application标签下增加android:extractNativeLibs"true"后&…

命名空间:namespace

对于无名命名空间 &#xff1a;但是不能再次定义相同名称的变量 在同一文件中

CUDA 下 DGL 库安装

https://www.dgl.ai/pages/start.html pip install dgl -f https://data.dgl.ai/wheels/cu121/repo.html成功o(&#xffe3;▽&#xffe3;)ブ ⭐⭐

jvm知识点总结(一)

JVM的跨平台 java程序一次编写到处运行。java文件编译生成字节码&#xff0c;jvm将字节码翻译成不同平台的机器码。 JVM的语言无关性 JVM只是识别字节码&#xff0c;和语言是解耦的&#xff0c;很多语言只要编译成字节码&#xff0c;符合规范&#xff0c;就能在JVM里运行&am…

上海·得物技术沙龙-「无线技术」专场报名开启!

本次无线沙龙聚焦于最新的技术趋势和实践&#xff0c;将在上海/线上为你带来四个令人期待的演讲话题&#xff0c;包括&#xff1a;《快手主App启动接口带宽优化实践》、《得物App视频体验优化实践》、《Chromium内核架构和网络库优化介绍》、《得物App发热监控实践》。相信这些…

深入理解Linux文件系统和日志分析

目录 一.inode与block 1.inode与block概述 1.1.文件数据包括元信息与实际数据 1.2.文件存储在硬盘上&#xff0c;硬盘最小存储单位是“扇区”&#xff0c;每个扇区存储512字节 1.3.block&#xff08;块&#xff09; 1.4.inode&#xff08;索引节点&#xff09; 2.inode内…

springboot论文格式系统

采用springbootmysqlhtmlvue技术 详细运行视频地址B站运行效果视频地址 &#xff08;1&#xff09;系统具备用户管理功能&#xff0c;包括用户注册、登录、权限管理等功能。 &#xff08;2&#xff09;系统具备格式规范管理功能&#xff0c;包括格式规范创建、编辑、删除等操…

【Day 8】MySQL 多表查询 + Mybatis 基础

1 多表查询 笛卡尔积&#xff1a;在数学中&#xff0c;两个集合(A集合 和 B集合)的所有组合情况 在多表查询时&#xff0c;需要消除无效的笛卡尔积 select * from tb_emp,tb_dept where dept_id tb_dept.id;多表查询分为&#xff1a; 连接查询 内连接&#xff1a;相当于查…

FTP与SMB深度对比:文件传输协议谁更胜一筹?

在数字化时代&#xff0c;文件传输已成为日常工作中不可或缺的一部分。 FTP&#xff08;文件传输协议&#xff09;和SMB&#xff08;服务器消息块&#xff09;是两种最为常见的文件传输协议。它们各自在文件传输领域拥有独特的优势和特点&#xff0c;但同时也存在一些差异。 今…

学会MySQL(2)——间隙锁加锁算法分析

间隙锁加锁算法分析 引言 在进行死锁分析时&#xff0c;如果看 MySQL 的死锁日志云里雾里&#xff0c;那可能是我们对 MySQL 的加锁规则不甚了解&#xff0c;从而感觉分析无从下手。只能看代码&#xff0c;改 SQl 碰运气。有一句话说的好&#xff1a;我也不知道为什么这么改就…

【Linux】动态库与静态库

文章目录 1. 认识静态库与动态库2. 手动创建并测试静态库2.1 生成静态库2.2 打包静态库2.3 使用静态库 3. 库搜索路径4. 手动创建并测试动态库4.1 生成动态库4.2 打包动态库4.3 使用动态库 5. 动静态库优先级 1. 认识静态库与动态库 静态库&#xff08;.a&#xff09;&#xf…

EF linq中First、FirstOrDefault、Single、SingleOrDefault方法的使用场景

在 Entity Framework (EF) 中&#xff0c;First、FirstOrDefault、Single 和 SingleOrDefault 方法用于从查询结果中检索单个元素。这些方法在使用 LINQ 查询时非常有用&#xff0c;但它们各自有不同的使用场景。 First 方法 First 方法用于从结果集中返回第一个匹配条件的元素…