CS01/CS02/CS03 BOM修改 CSAP_MAT_BOM_MAINTAIN
CS02
背景:根据变更编号和数据对BOM进行修改操作
I_HEAD 和 I_ITEM分别为接口的导入抬头数据和导入项目数据
I_HEAD结构
I_ITEM结构
创建变更编号关键代码:
LV_CHANGE_NO = I_HEAD-AENNR.LV_CHANGE_NO = |{ LV_CHANGE_NO ALPHA = IN }|.LS_CHANGE_HEADER-CHANGE_NO = LV_CHANGE_NO.LS_CHANGE_HEADER-STATUS = I_HEAD-AENST.LS_CHANGE_HEADER-VALID_FROM = I_HEAD-DATUV.LS_CHANGE_HEADER-DESCRIPT = I_HEAD-AETXT."勾选下列四个LS_OBJECT_BOM_MAT-ACTIVE = 'X'.LS_OBJECT_BOM_MAT-OBJ_REQU = 'X'.LS_OBJECT_BOM_MAT-MGTREC_GEN = 'X'.LS_OBJECT_BOM_MAT-GEN_NEW = 'X'.LS_OBJMGREC-BOM_USAGE = I_HEAD-STLAN. "BOM 用途LS_OBJMGREC-MATERIAL = I_HEAD-MATNR.LS_OBJMGREC-PLANT = I_HEAD-WRKAN.LS_OBJMGREC-CHG_OBJTYP = '1'. "工程更改管理对象\LS_OBJMGREC-BOM_CAT = 'M'.APPEND LS_OBJMGREC TO LT_OBJMGREC.CLEAR LS_OBJMGREC."查看当前变更编号是否已在系统中存在CALL FUNCTION 'CCAP_ECN_HEADER_READ'EXPORTINGCHANGE_NO = LV_CHANGE_NOIMPORTINGCHANGE_HEADER = LS_CHGEXCEPTIONSNO_RECORD_FOUND = 1OTHERS = 2.IF SY-SUBRC <> 0. "不存在创建CALL FUNCTION 'CCAP_ECN_CREATE'EXPORTINGCHANGE_HEADER = LS_CHANGE_HEADEROBJECT_BOM = LS_OBJECT_BOM_MATOBJECT_BOM_MAT = LS_OBJECT_BOM_MATFL_COMMIT_AND_WAIT = 'X'IMPORTINGCHANGE_NO = LV_CHANGE_NOTABLESOBJMGREC = LT_OBJMGRECEFFECTIVITY = LT_EFFECTIVITYEXCEPTIONSCHANGE_NO_ALREADY_EXISTS = 1ERROR = 2OTHERS = 3.CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGMSGID = SY-MSGIDMSGNR = SY-MSGNOMSGV1 = SY-MSGV1MSGV2 = SY-MSGV2MSGV3 = SY-MSGV3MSGV4 = SY-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT = RETURN.ELSE. "存在做修改CALL FUNCTION 'CCAP_ECN_MAINTAIN'EXPORTINGCHANGE_HEADER = LS_CHANGE_HEADEROBJECT_BOM = LS_OBJECT_BOM_MATOBJECT_BOM_MAT = LS_OBJECT_BOM_MAT
* object_bom_psp = ls_object_bom_matFL_NO_COMMIT_WORK = SPACEFL_SYNCH = SPACETABLESOBJMGREC = LT_OBJMGRECEFFECTIVITY = LT_EFFECTIVITYEXCEPTIONSERROR = 1OTHERS = 2.CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGMSGID = SY-MSGIDMSGNR = SY-MSGNOMSGV1 = SY-MSGV1MSGV2 = SY-MSGV2MSGV3 = SY-MSGV3MSGV4 = SY-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT = RETURN.ENDIF.
情况1、仅对指定行项目和物料号的数据进行修改,不更改其他
LOOP AT I_ITEM INTO DATA(LS_I_ITEM).LV_POSNR = LS_I_ITEM-POSNR.LS_T_STPO-ID_ITEM_NO = LV_POSNR. "项目号CALL FUNCTION 'CONVERSION_EXIT_NUMCV_INPUT'EXPORTINGINPUT = LS_T_STPO-ID_ITEM_NOIMPORTINGOUTPUT = LS_T_STPO-ID_ITEM_NO.CLEAR LV_POSNR.LS_T_STPO-ITEM_CATEG = LS_I_ITEM-POSTP. "项目类型LS_T_STPO-ID_COMP = LS_I_ITEM-IDNRK. "子件物料LS_T_STPO-COMP_QTY = LS_I_ITEM-MENGE. "数量LS_T_STPO-VALID_FROM = LV_VALID_FROM.LS_T_STPO-ITEM_NO = LS_T_STPO-ID_ITEM_NO.LS_STPO-ITEM_NO = LS_T_STPO-ID_ITEM_NO.LS_T_STPO-COMPONENT = LS_T_STPO-ID_COMP.
* LS_T_STPO-FLDELETE = 'X'."此字段不为空的话表示删除LV_POSNR和LS_I_ITEM-IDNRK对应的BOM组件APPEND LS_T_STPO TO LT_T_STPO.CLEAR: LS_T_STPO.ENDLOOP.CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'EXPORTINGMATERIAL = LV_MATERIALPLANT = LV_PLANTBOM_USAGE = LV_BOM_USAGEALTERNATIVE = LV_ALTERNATIVEVALID_FROM = LV_VALID_FROMCHANGE_NO = LV_CHANGE_NOI_STKO = LS_I_STKOFL_COMMIT_AND_WAIT = 'X'FL_BOM_CREATE = 'X'FL_NEW_ITEM = 'X'FL_COMPLETE = 'X'
* FL_DEFAULT_VALUES = 'X'IMPORTINGFL_WARNING = LV_FL_WARNINGO_STKO = LS_O_STKOTABLEST_STPO = LT_T_STPOEXCEPTIONSERROR = 1OTHERS = 2.
情况2、在修改BOM组件之前删除掉旧的组件
对于这种情况,在T_STPO中有个字段为FLDELETE,如果情况1中的ITEM数据都给这个字段赋值为X,则表示删除掉该BOM中对应项目号和组件号的BOM组件。
如果直接使用CS_BOM_EXPL_MAT_V2展开这个BOM,则只能得到变更生效的组件项目,而不能得到未生效的组件项目,因此,我们需要先使用函数CSAP_MAT_BOM_OPEN来获得BOM的组件项目,并将组件项目全部删除,主要代码如下:
V_MATERIAL = I_HEAD-MATNR. "父件物料LV_PLANT = I_HEAD-WRKAN. " 工厂LV_BOM_USAGE = I_HEAD-STLAN. "用途LV_ALTERNATIVE = I_HEAD-STLAL. "备选LV_VALID_FROM = I_HEAD-DATUV. "生效时间LV_CHANGE_NO = LV_CHANGE_NO. "变更号
* LS_I_STKO-BOM_STATUS = I_HEAD-STLST. "状态
* LS_I_STKO-BASE_QUAN = I_HEAD-BMENG.
* LS_I_STKO-BOM_GROUP = I_HEAD-STLAL.
* LS_I_STKO-DELETE_INDCALL FUNCTION 'CSAP_MAT_BOM_OPEN'EXPORTINGMATERIAL = LV_MATERIALPLANT = LV_PLANTBOM_USAGE = LV_BOM_USAGEALTERNATIVE = LV_ALTERNATIVEVALID_FROM = LV_VALID_FROMTABLEST_STPO = LT_STPO"这里得到了LV_MATERIAL对应的BOM的所有的组件数据EXCEPTIONSERROR = 1OTHERS = 2.IF SY-SUBRC EQ 0.LOOP AT LT_STPO ASSIGNING FIELD-SYMBOL(<LFS_STPO>).<LFS_STPO>-FLDELETE = 'X'."注意,这里将得到的组件项目打上删除标记ENDLOOP.CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'EXPORTINGMATERIAL = LV_MATERIALPLANT = LV_PLANTBOM_USAGE = LV_BOM_USAGEALTERNATIVE = LV_ALTERNATIVEVALID_FROM = LV_VALID_FROMCHANGE_NO = LV_CHANGE_NOI_STKO = LS_I_STKOFL_COMMIT_AND_WAIT = 'X'FL_BOM_CREATE = 'X'FL_NEW_ITEM = 'X'FL_COMPLETE = 'X'IMPORTINGFL_WARNING = LV_FL_WARNINGO_STKO = LS_O_STKOTABLEST_STPO = LT_STPOEXCEPTIONSERROR = 1OTHERS = 2.ENDIF.
接口全部代码如下所示:
FUNCTION Z_XXXX.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_HEAD) TYPE ZPPS_PDM_ECN
*" VALUE(I_ITEM) TYPE ZPPT_PDM_ECN_ITEM
*" EXPORTING
*" VALUE(E_TYP) TYPE CHAR1
*" VALUE(E_MSG) TYPE CHAR255
*"----------------------------------------------------------------------DATA:RETURN TYPE STRING.DATA:LV_MATERIAL TYPE CSAP_MBOM-MATNR,LV_PLANT TYPE CSAP_MBOM-WERKS,LV_BOM_USAGE TYPE CSAP_MBOM-STLAN,LV_ALTERNATIVE TYPE CSAP_MBOM-STLAL,LV_VALID_FROM TYPE CSAP_MBOM-DATUV,LV_CHANGE_NO TYPE CSAP_MBOM-AENNR,LS_I_STKO TYPE STKO_API01,LS_O_STKO TYPE STKO_API02,LT_T_STPO TYPE TABLE OF STPO_API03,LS_T_STPO TYPE STPO_API03,LT_STPO TYPE TABLE OF STPO_API03,LS_STPO TYPE STPO_API03.DATA:LV_FL_WARNING TYPE CAPIFLAG-FLWARNING."创建变更号参数DATA: LS_CHANGE_HEADER TYPE AENR_API01.DATA: LS_CHG TYPE AENR_API02.DATA: LS_RETURN_MSG TYPE BAPIRET2.DATA: LS_OBJECT_BOM_MAT TYPE AENV_API01..DATA: LS_OBJECT_BOM_PSP TYPE AENV_API01..DATA: LS_OBJECT_DOC TYPE AENV_API01.DATA: LT_OBJMGREC TYPE STANDARD TABLE OF AEOI_API01.DATA: LS_OBJMGREC TYPE AEOI_API01.DATA: LT_EFFECTIVITY TYPE STANDARD TABLE OF AEEF_API01.DATA: LS_EFFECTIVITY TYPE AEEF_API01.DATA:LV_POSNR TYPE I.DATA:LT_STB TYPE TABLE OF STPOX.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGINPUT = I_HEAD-MATNRIMPORTINGOUTPUT = I_HEAD-MATNR.LV_CHANGE_NO = I_HEAD-AENNR.LV_CHANGE_NO = |{ LV_CHANGE_NO ALPHA = IN }|.LS_CHANGE_HEADER-CHANGE_NO = LV_CHANGE_NO.LS_CHANGE_HEADER-STATUS = I_HEAD-AENST.LS_CHANGE_HEADER-VALID_FROM = I_HEAD-DATUV.LS_CHANGE_HEADER-DESCRIPT = I_HEAD-AETXT.LS_OBJECT_BOM_MAT-ACTIVE = 'X'.LS_OBJECT_BOM_MAT-OBJ_REQU = 'X'.LS_OBJECT_BOM_MAT-MGTREC_GEN = 'X'.LS_OBJECT_BOM_MAT-GEN_NEW = 'X'.LS_OBJMGREC-BOM_USAGE = I_HEAD-STLAN. "BOM 用途LS_OBJMGREC-MATERIAL = I_HEAD-MATNR.LS_OBJMGREC-PLANT = I_HEAD-WRKAN.LS_OBJMGREC-CHG_OBJTYP = '1'. "工程更改管理对象\LS_OBJMGREC-BOM_CAT = 'M'.APPEND LS_OBJMGREC TO LT_OBJMGREC.CLEAR LS_OBJMGREC.CALL FUNCTION 'CCAP_ECN_HEADER_READ'EXPORTINGCHANGE_NO = LV_CHANGE_NOIMPORTINGCHANGE_HEADER = LS_CHGEXCEPTIONSNO_RECORD_FOUND = 1OTHERS = 2.IF SY-SUBRC <> 0. "不存在创建CALL FUNCTION 'CCAP_ECN_CREATE'EXPORTINGCHANGE_HEADER = LS_CHANGE_HEADEROBJECT_BOM = LS_OBJECT_BOM_MATOBJECT_BOM_MAT = LS_OBJECT_BOM_MATFL_COMMIT_AND_WAIT = 'X'IMPORTINGCHANGE_NO = LV_CHANGE_NOTABLESOBJMGREC = LT_OBJMGRECEFFECTIVITY = LT_EFFECTIVITYEXCEPTIONSCHANGE_NO_ALREADY_EXISTS = 1ERROR = 2OTHERS = 3.CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGMSGID = SY-MSGIDMSGNR = SY-MSGNOMSGV1 = SY-MSGV1MSGV2 = SY-MSGV2MSGV3 = SY-MSGV3MSGV4 = SY-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT = RETURN.ELSE. "存在做修改CALL FUNCTION 'CCAP_ECN_MAINTAIN'EXPORTINGCHANGE_HEADER = LS_CHANGE_HEADEROBJECT_BOM = LS_OBJECT_BOM_MATOBJECT_BOM_MAT = LS_OBJECT_BOM_MAT
* object_bom_psp = ls_object_bom_matFL_NO_COMMIT_WORK = SPACEFL_SYNCH = SPACETABLESOBJMGREC = LT_OBJMGRECEFFECTIVITY = LT_EFFECTIVITYEXCEPTIONSERROR = 1OTHERS = 2.CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGMSGID = SY-MSGIDMSGNR = SY-MSGNOMSGV1 = SY-MSGV1MSGV2 = SY-MSGV2MSGV3 = SY-MSGV3MSGV4 = SY-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT = RETURN.ENDIF.IF SY-SUBRC = 0 .CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X'..ELSE.E_TYP = 'E'.E_MSG = LV_CHANGE_NO && '创建修改失败,请检查上传的数据.'.ENDIF.IF E_TYP IS INITIAL.LV_MATERIAL = I_HEAD-MATNR. "父件物料LV_PLANT = I_HEAD-WRKAN. " 工厂LV_BOM_USAGE = I_HEAD-STLAN. "用途LV_ALTERNATIVE = I_HEAD-STLAL. "备选LV_VALID_FROM = I_HEAD-DATUV. "生效时间LV_CHANGE_NO = LV_CHANGE_NO. "变更号CALL FUNCTION 'CSAP_MAT_BOM_OPEN'EXPORTINGMATERIAL = LV_MATERIALPLANT = LV_PLANTBOM_USAGE = LV_BOM_USAGEALTERNATIVE = LV_ALTERNATIVEVALID_FROM = LV_VALID_FROMTABLEST_STPO = LT_STPOEXCEPTIONSERROR = 1OTHERS = 2.IF SY-SUBRC EQ 0.LOOP AT LT_STPO ASSIGNING FIELD-SYMBOL(<LFS_STPO>).<LFS_STPO>-FLDELETE = 'X'.ENDLOOP.CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'EXPORTINGMATERIAL = LV_MATERIALPLANT = LV_PLANTBOM_USAGE = LV_BOM_USAGEALTERNATIVE = LV_ALTERNATIVEVALID_FROM = LV_VALID_FROMCHANGE_NO = LV_CHANGE_NOI_STKO = LS_I_STKOFL_COMMIT_AND_WAIT = 'X'FL_BOM_CREATE = 'X'FL_NEW_ITEM = 'X'FL_COMPLETE = 'X'IMPORTINGFL_WARNING = LV_FL_WARNINGO_STKO = LS_O_STKOTABLEST_STPO = LT_STPOEXCEPTIONSERROR = 1OTHERS = 2.ENDIF.LOOP AT I_ITEM INTO DATA(LS_I_ITEM).LV_POSNR = LS_I_ITEM-POSNR.LS_T_STPO-ID_ITEM_NO = LV_POSNR. "项目号CALL FUNCTION 'CONVERSION_EXIT_NUMCV_INPUT'EXPORTINGINPUT = LS_T_STPO-ID_ITEM_NOIMPORTINGOUTPUT = LS_T_STPO-ID_ITEM_NO.CLEAR LV_POSNR.LS_T_STPO-ITEM_CATEG = LS_I_ITEM-POSTP. "项目类型LS_T_STPO-ID_COMP = LS_I_ITEM-IDNRK. "子件物料LS_T_STPO-COMP_QTY = LS_I_ITEM-MENGE. "数量LS_T_STPO-VALID_FROM = LV_VALID_FROM.LS_T_STPO-ITEM_NO = LS_T_STPO-ID_ITEM_NO.LS_STPO-ITEM_NO = LS_T_STPO-ID_ITEM_NO.LS_T_STPO-COMPONENT = LS_T_STPO-ID_COMP.APPEND LS_T_STPO TO LT_T_STPO.CLEAR: LS_T_STPO.ENDLOOP.CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'EXPORTINGMATERIAL = LV_MATERIALPLANT = LV_PLANTBOM_USAGE = LV_BOM_USAGEALTERNATIVE = LV_ALTERNATIVEVALID_FROM = LV_VALID_FROMCHANGE_NO = LV_CHANGE_NOI_STKO = LS_I_STKOFL_COMMIT_AND_WAIT = 'X'FL_BOM_CREATE = 'X'FL_NEW_ITEM = 'X'FL_COMPLETE = 'X'IMPORTINGFL_WARNING = LV_FL_WARNINGO_STKO = LS_O_STKOTABLEST_STPO = LT_T_STPOEXCEPTIONSERROR = 1OTHERS = 2.IF SY-SUBRC NE 0.CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGMSGID = SY-MSGIDMSGNR = SY-MSGNOMSGV1 = SY-MSGV1MSGV2 = SY-MSGV2MSGV3 = SY-MSGV3MSGV4 = SY-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT = RETURN.E_MSG = RETURN.
* BREAK-POINT.ELSE.E_TYP = 'S'.E_MSG = I_HEAD-MATNR && ' BOM修改成功 更改号为' && LV_CHANGE_NO.CLEAR LV_CHANGE_NO.ENDIF.ENDIF.
ENDFUNCTION.
CS01/CS02/CS03 BOM修改 CSAP_MAT_BOM_MAINTAIN相关推荐
- PP-基础操作03(ECN(工程变更单)创建及BOM修改)
ECN(工程变更单)创建及BOM修改 通过路径: 或者tcode-CC01进入工程变更单(ECN)创建界面 (注:PP相关的事务有很多都是以C开头) 输入一个变更编号点击Enter可以进入ECN维护界 ...
- SAP ABAP BOM 更新函数 CSAP_MAT_BOM_MAINTAIN使用
背景: 对于使用PLM系统 或 CAPP系统的企业,SAP 需要承接上游对于BOM的数据,包括 创建.更改.删除等操作. 因管理要求不同,SAP端更新逻辑由原先的 先删除,再创建,改成直接更改,实现S ...
- ABAP CS02物料BOM相关性分配实现
一.SAP前台界面操作 二.代码实现 DATA:bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE. DATA:messtab LIKE bdcmsgcoll ...
- 订单BOM与销售BOM的区别
订单BOM与销售BOM的区别 訂單BOM: 是實際生產時用的BOM, 在標準BOM和銷售BOM基礎上增減物料的BOM 銷售BOM: 是為特定客戶設定的BOM, 在主檔數據層次上的BOM, 在生產時是帶 ...
- SAP 订单BOM与销售BOM的区别
订单BOM与销售BOM的区别 訂單BOM: 是實際生產時用的BOM, 在標準BOM和銷售BOM基礎上增減物料的BOM 銷售BOM: 是為特定客戶設定的BOM, 在主檔數據層次上的BOM, 在生產時是帶 ...
- 订单BOM、销售BOM、标准BOM
訂單BOM: 是實際生產時用的BOM, 在標準BOM和銷售BOM基礎上增減物料的BOM 銷售BOM: 是為特定客戶設定的BOM, 在主檔數據層次上的BOM, 在生產時是帶到訂單BOM中去的. 標準BO ...
- SAP各种BOM详解(包含常用BAPI)
生产订单BOM.销售订单BOM.标准BOM 生产订单BOM ,跑生产订单时,子组件体现作用 . 销售订单BOM ,跑MRP 时体现子组件的作用 . rcdf应用:真空管损耗率.销售bom zpp020 ...
- 订单BOM -销售BOM-标准BOM
订单BOM -销售BOM-标准BOM 订单BOM: 是实际生产时使用的BOM, 在标准BOM和销售BOM基础上增减物料的BOM: 销售BOM: 是为特定客户设定的BOM, 在主档数据层次上的BOM, ...
- 生产BOM、销售BOM、标准BOM的区别
订单BOM: 是生产订单所使用的BOM, 在标准BOM和销售 BOM基礎上增減物料的BOM 销售BOM: 是為特定客戶設定的BOM, 在主檔數據層次上的BOM, 在生產時是帶到訂單BOM中去的. 标准 ...
最新文章
- BCH涨幅超过146%,势必跟BTC争夺王位?
- asp.net webform 与asp.net mvc 混合开发项目总结
- Python之路--前端知识--JavaScript
- VTK:绘制BarChart条形图用法实战
- python顺序结构实验报告_Python 数据结构 之 串 的顺序存储结构
- POI SXSSFWorkbook 实现大批量数据 导出
- 计算机游戏攻略67,保卫萝卜2 67攻略水晶萝卜详解
- 技嘉z77主板msata速度_技嘉小雕、微星迫击炮、华硕电竞特工三款主板对比
- Spring Cloud Config服务器
- grafa导出数据图标_第5章 数据与可视化 - Grafana与数据可视化 - 《Prometheus操作指南》 - 书栈网 · BookStack...
- BAT账号相关1:腾讯开放平台和QQ互联开发者审核步骤
- MySql分页查询limit
- ios 开发证书导出p12文件_iOS 证书(.p12)和描述文件(.mobileprovision)的导出和使用方法...
- 国内打开Cousera方法
- 动态设置Button图片大小
- WIN10打开网络共享文件夹提示0x80004005怎么解决?(转载)
- android id如何修改密码,小编教你忘记Apple ID密码怎么办?以及如何修改密码
- Codeforces 940E: Cashback 单调队列优化DP
- 1996届瑞安市计算机学校,1996届校友
- Android蓝牙bt/ble开发
热门文章
- 【企业】乔吉拉德之 250 定律
- tcl/tk 的原生界面
- QMS-云质-质量管理-海克斯康为什么不断收购质量管理软件(QMS)?
- 勿忘2022,迎接2023
- Kev++之正则表达式系列-视频分享
- 他们为什么离开微软? 创业热情驱动
- 关于客户端断开连接后服务器抛出异常Connection reset
- 如何在Windows和Mac下挂载EFI分区
- mybatis 配置多数据源 java,SpringBoot+MyBatisPlus配置多数据源读写分离
- UE4 | 学习Shader - “赏月、玩灯笼”