BAPI_BATCH_CHANGE在更新后不自动更新批次特征

news/2024/12/28 0:29:35/

1、问题介绍

 在CL03中看到分类特性配置了制造日期字段,并绑定了生产日期字段MCH1~HSDAT

MSC2N修改批次的生产日期字段时,自动修改了对应的批次特性

但是通过BAPI:BAPI_BATCH_CHANGE修改生产日期时,并没有更新到批次特性中

2、BAPI

根据官方提示,需要使用BAPI:BAPI_BATCH_SAVE_REPLICA来同步更新批次特性

在BAPI_BATCH_SAVE_REPLICA中可以传入基本数据视图中的生产日期

"--------------------@斌将军--------------------
CLEAR:ls_batchattributes,ls_batchattributesx.
ls_batchattributes-prod_date = sy-datum."生产日期
ls_batchattributesx-prod_date = 'X' ."生产日期
"--------------------@斌将军--------------------

同时维护批次特性的值

"--------------------@斌将军--------------------
CLEAR:ls_classvaluationschar.
ls_classvaluationschar-class_type = lv_klart.
*ls_classvaluationschar-objectkey = lv_objectkey.
ls_classvaluationschar-objectkey_long = lv_objek.
ls_classvaluationschar-objecttable = lv_obtab.
ls_classvaluationschar-charact = 'ZSC_BATCH_HSDAT'.
ls_classvaluationschar-value_char = sy-datum.
APPEND ls_classvaluationschar TO lt_classvaluationschar.
"--------------------@斌将军--------------------

完整代码参考

"--------------------@斌将军--------------------
REPORT ytest010.DATA:lv_material TYPE bapibatchkey-material,lv_batch    TYPE bapibatchkey-batch,lv_plant    TYPE bapibatchkey-plant,lv_matnr    TYPE matnr. "40位DATA:lv_objek TYPE cuobn,lv_obtab TYPE tabelle,lv_klart TYPE klassenart,lv_class TYPE klasse_d.DATA:ls_batchattributes     TYPE  bapibatchatt,ls_batchattributesx    TYPE bapibatchattx,lt_classallocations    TYPE TABLE OF bapi3060_allocation,ls_classallocations    TYPE bapi3060_allocation,lt_classvaluationschar TYPE TABLE OF bapi3060_valuation_char,ls_classvaluationschar TYPE bapi3060_valuation_char,lt_classvaluationscurr TYPE TABLE OF bapi3060_valuation_curr,ls_classvaluationscurr TYPE bapi3060_valuation_curr,lt_classvaluationsnum  TYPE TABLE OF bapi3060_valuation_num,ls_classvaluationsnum  TYPE bapi3060_valuation_num,lt_return              TYPE TABLE OF bapiret2,ls_return              TYPE bapiret2.lv_matnr = '41155126C'."物料
lv_batch = 'P001055009'."批次
lv_plant = 'SC10'."工厂CLEAR:lv_objek,lv_obtab,lv_klart,lv_class.
*lv_matnr = lv_material.
CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'EXPORTINGi_matnr = lv_matnri_charg = lv_batchi_werks = lv_plantIMPORTINGe_objek = lv_objeke_obtab = lv_obtabe_klart = lv_klarte_class = lv_class.*后边可以直接使用lv_objek值,
*不需要用BAPI_OBJCL_CONCATENATEKEY专门生成lv_objectkey
*lt_objectkeytable = VALUE #( ( key_field = 'MATNR' value_int = LV_material )
*                                ( key_field = 'WERKS' value_int = lv_plant )
*                                ( key_field = 'CHARG' value_int = lv_batch )
*                            ).
*
*"获取key值objectkey(物料和批次)
*REFRESH:lt_return.
*CLEAR:lv_objectkey.
*CALL FUNCTION 'BAPI_OBJCL_CONCATENATEKEY'
*  EXPORTING
*    objecttable    = lv_obtab "表名
*  IMPORTING
*    objectkey_conc = lv_objectkey
*  TABLES
*    objectkeytable = lt_objectkeytable
*    return         = lt_return.
*
*LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'.
*  MESSAGE '获取特性失败:未查询到分类密钥' TYPE 'S' DISPLAY LIKE 'E'.
*ENDLOOP."修改批次数据
CLEAR:ls_batchattributes,ls_batchattributesx.
ls_batchattributes-prod_date = sy-datum."生产日期
ls_batchattributesx-prod_date = 'X' ."生产日期"修改分类特性值
CLEAR:ls_classallocations.
ls_classallocations-class_type    = lv_klart.
*ls_classallocations-objectkey     = lv_objectkey.
ls_classallocations-objectkey_long   = lv_objek.
ls_classallocations-objecttable   = lv_obtab.
ls_classallocations-classnum      = lv_class.
ls_classallocations-classtype     = lv_klart.
ls_classallocations-standardclass = 'X'.
APPEND ls_classallocations TO lt_classallocations.CLEAR:ls_classvaluationschar.
ls_classvaluationschar-class_type = lv_klart.
*ls_classvaluationschar-objectkey = lv_objectkey.
ls_classvaluationschar-objectkey_long = lv_objek.
ls_classvaluationschar-objecttable = lv_obtab.
ls_classvaluationschar-charact = 'ZSC_BATCH_HSDAT'.
ls_classvaluationschar-value_char = sy-datum.
APPEND ls_classvaluationschar TO lt_classvaluationschar.CALL FUNCTION 'BAPI_BATCH_SAVE_REPLICA'EXPORTINGmaterial_long       = lv_matnr "长物料
*   material            = lv_materialbatch               = lv_batchplant               = lv_plantbatchattributes     = ls_batchattributesbatchattributesx    = ls_batchattributesxTABLESreturn              = lt_returnclassallocations    = lt_classallocationsclassvaluationschar = lt_classvaluationscharclassvaluationscurr = lt_classvaluationscurrclassvaluationsnum = lt_classvaluationsnum.DATA:lv_check   TYPE char1,lv_message TYPE char255.CLEAR:lv_message.
LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'.lv_message = lv_message && ls_return-message.lv_check = 'E'.
ENDLOOP.
IF lv_check = 'E'.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.WRITE:lv_message.
ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.
ENDIF.
"--------------------@斌将军--------------------


http://www.ppmy.cn/news/1558648.html

相关文章

CSS系列(35)-- Subgrid详解

前端技术探索系列:CSS Subgrid详解 📐 致读者:探索子网格布局的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Subgrid,这个强大的网格布局扩展特性。 基础概念 🚀 子网格设置 /* 父网格…

ubuntu编译遇到的问题

一.ffmpeg链接不到库文件 undefined reference to avcodec_register_all undefined reference to avcodec_register_all undefined reference to av_opt_set_defaults undefined reference to av_opt_set_defaults undefined reference to av_parse_video_frame_rate undefine…

MDS-NPV/NPIV

在存储区域网络(SAN)中,域ID(Domain ID)是一个用于区分不同存储区域的关键参数。域ID允许SAN环境中的不同部分独立操作,从而提高效率和安全性。以下是关于域ID的一些关键信息: 域ID的作用&…

C++线程安全函数

在 C 中,线程安全的函数是指在多线程环境下可以安全调用,不会导致数据竞争或其他并发问题的函数。C 标准库提供了许多线程安全的函数,同时也要求开发者在使用自定义函数时确保线程安全。以下是一些常见的线程安全函数和实现线程安全的方法&am…

AIDD - 人工智能药物设计 - 在 Docker 上创建和运行 PostgreSQL + RDKit 卡带环境

在 Docker 上创建和运行 PostgreSQL RDKit 卡带环境 背景 我们将讨论化学数据库。 看起来,如果你在 PostgreSQL 中放置一个 RDKit cartridge (扩展),就可以基于 SQL 进行结构相似性搜索,看起来很有趣。但是我找不到…

Go的初级核心实用开发

Go 语言因其简洁、高效和强大的并发支持而广受欢迎,尤其适合构建网络服务、分布式系统和高性能应用。以下是 Go 编程中的一些实用技巧,帮助你编写更高效、更简洁且易于维护的代码。 1. 使用 defer 简化资源管理 defer 是 Go 中非常有用的特性&#xff…

寻找适合小户型的开源知识库open source knowledge base之路

寻找一个开源的知识库,为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中,以便更容易查阅,花更少时间收集、对比版本及分享等一系列管理工作,同时确保在需要时可以相对快速找到有用的资料&…

易语言 OCR 文字识别

一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…