SAP PP ECN CSAP_MAT_BOM_MAINTAIN
刚开始的时候ECN总是加不上,
参考kimi给出的案例
点击链接查看和 Kimi 智能助手的对话 https://kimi.moonshot.cn/share/cth1ipmqvl7f04qkggdg
效果 加上了
FUNCTION ZPBOM_PLM2SAP.
*"----------------------------------------------------------------------
*"*"本地接口:
*" EXPORTING
*" VALUE(OUTPUT) TYPE ZSM8_SALESORDER_CREATE_OUTPUT
*" TABLES
*" INPUT_PBOM STRUCTURE ZPBOM
*" OUTPUT_MESSAGE STRUCTURE ZMAT_MESSAGE
*"----------------------------------------------------------------------
* 新增 input_bom
* 修改 input_bom
* 删除 ECN 日期TABLES: MAST,STPO,STKO,STPU.DATA: TEMP_MAT TYPE MATNR,TEMP_WERKS TYPE WERKS_D,TEMP_STLNR LIKE MAST-STLNR, "物料单号(bom号)RETURN(220) TYPE C,ISFIND(1) TYPE C,FROMDATE(10) TYPE C.DATA:TEMP_MATNR TYPE MATNR.DATA: BEGIN OF ZLOG,MATNR TYPE MATNR,WERKS TYPE WERKS_D,INTERFACENAME(60) TYPE C,LOGDATE TYPE DATUM,LOGTIME TYPE UZEIT,MAKTX TYPE MAKTX,MEINS TYPE MEINS,MBRSH TYPE MBRSH,LVORM TYPE LVORM,MTART TYPE MTART,SPART TYPE SPART,MATKL TYPE MATKL,BISMT TYPE BISMT,LGFSB TYPE LGFSB,EORIGINNO(40) TYPE C,CREATER(20) TYPE C,MESSAGETYPE(1) TYPE C,MESSAGE(220) TYPE C,END OF ZLOG.DATA: BEGIN OF SUBMATNR_COUNT,"用于记录在同一层级下相同子物料,相同数量,出现的次数。SUBMATNR TYPE MATNR,MENGE TYPE KMPMG,COUNT TYPE I,END OF SUBMATNR_COUNT.DATA:SAP_SUBMATNR_COUNT LIKE SUBMATNR_COUNT,PLM_SUBMATNR_COUNT LIKE SUBMATNR_COUNT.DATA: NO1 TYPE I,NO2 TYPE I.DATA:I_STKO LIKE STKO_API01.DATA:BEGIN OF GS_INPUTPBOM,MATNR TYPE MATNR,WERKS TYPE WERKS_D,IDNRK TYPE IDNRK,KMPMG TYPE KMPMG,XUHAO TYPE I,MEINS TYPE MEINS,SORTP TYPE SORTP,LOGDATE TYPE DATUM,LOGTIME TYPE UZEIT,END OF GS_INPUTPBOM.DATA:GT_STPO_INPUT LIKE TABLE OF STPO_API03 WITH HEADER LINE.DATA: SAP_STPO LIKE TABLE OF STPO WITH HEADER LINE.DATA: PDATAV LIKE CSAP_MBOM-DATUV.*1. 根据父物料字段,对输入BOM表排序:SORT INPUT_PBOM BY STLAN WERKS MATNR IDNRK KMPMG.*2.将plm的bom格式转化为SAP能处理的单层bom,并处理(行项目新建或修改和删除的处理)CLEAR TEMP_MAT.CLEAR TEMP_WERKS.I_STKO-BASE_QUAN = 1.I_STKO-BOM_STATUS = '01'.LOOP AT INPUT_PBOM.CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGINPUT = INPUT_PBOM-MATNRIMPORTINGOUTPUT = INPUT_PBOM-MATNR.TRANSLATE INPUT_PBOM-MATNR TO UPPER CASE.* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGINPUT = INPUT_PBOM-IDNRKIMPORTINGOUTPUT = INPUT_PBOM-IDNRK.TRANSLATE INPUT_PBOM-IDNRK TO UPPER CASE.CLEAR GS_INPUTPBOM.*2.1 当从一个小bom切换到另一个小bom时的处理;
*2.1.1 可以是第一个bom的第一条记录,
*2.1.2 或者是另开始一个小bom数据IF ( TEMP_MAT <> INPUT_PBOM-MATNR OR TEMP_WERKS <> INPUT_PBOM-WERKS )."2.1.1当是第一个bom的第一条数据时IF ( TEMP_MAT IS INITIAL ) AND ( TEMP_WERKS IS INITIAL ).TEMP_MAT = INPUT_PBOM-MATNR.TEMP_WERKS = INPUT_PBOM-WERKS.CLEAR PLM_SUBMATNR_COUNT.PLM_SUBMATNR_COUNT-SUBMATNR = INPUT_PBOM-IDNRK.PLM_SUBMATNR_COUNT-MENGE = INPUT_PBOM-KMPMG.PLM_SUBMATNR_COUNT-COUNT = PLM_SUBMATNR_COUNT-COUNT + 1."保存传入的数据到zinputpbom透视表中,作为记录。GS_INPUTPBOM-MATNR = INPUT_PBOM-MATNR.GS_INPUTPBOM-WERKS = INPUT_PBOM-WERKS.GS_INPUTPBOM-IDNRK = INPUT_PBOM-IDNRK.GS_INPUTPBOM-KMPMG = INPUT_PBOM-KMPMG.GS_INPUTPBOM-XUHAO = PLM_SUBMATNR_COUNT-COUNT.GS_INPUTPBOM-MEINS = INPUT_PBOM-MEINS.GS_INPUTPBOM-SORTP = INPUT_PBOM-SORTP.GS_INPUTPBOM-LOGDATE = SY-DATUM.GS_INPUTPBOM-LOGTIME = SY-UZEIT.CLEAR TEMP_MATNR.SELECT SINGLE MATNR INTO TEMP_MATNR FROM ZINPUTPBOMWHERE MATNR = INPUT_PBOM-MATNRAND WERKS = INPUT_PBOM-WERKSAND IDNRK = INPUT_PBOM-IDNRKAND KMPMG = INPUT_PBOM-KMPMGAND XUHAO = PLM_SUBMATNR_COUNT-COUNT.IF TEMP_MATNR IS INITIAL.INSERT INTO ZINPUTPBOM VALUES GS_INPUTPBOM.ELSE.UPDATE ZINPUTPBOM SET SORTP = GS_INPUTPBOM-SORTP LOGDATE = SY-DATUM LOGTIME = SY-UZEITWHERE MATNR = INPUT_PBOM-MATNRAND WERKS = INPUT_PBOM-WERKSAND IDNRK = INPUT_PBOM-IDNRKAND KMPMG = INPUT_PBOM-KMPMGAND XUHAO = PLM_SUBMATNR_COUNT-COUNT.ENDIF.COMMIT WORK AND WAIT."准备行项目数据CLEAR TEMP_STLNR.SELECT SINGLE STLNR INTO TEMP_STLNR FROM MAST WHERE MATNR = TEMP_MAT AND WERKS = TEMP_WERKS AND STLAN = '1'.IF TEMP_STLNR IS INITIAL. "sap原数据没有bom时的处理CLEAR GT_STPO_INPUT.IF INPUT_PBOM-STVKN IS NOT INITIAL.GT_STPO_INPUT-ITEM_NODE = INPUT_PBOM-STVKN.ENDIF.GT_STPO_INPUT-CHG_NO_TO = INPUT_PBOM-AENRA.GT_STPO_INPUT-VALID_TO = INPUT_PBOM-DATUB+0(4) && '-' && INPUT_PBOM-DATUB+4(2) && '-' && INPUT_PBOM-DATUB+6(2).GT_STPO_INPUT-REL_PROD = 'X'."标识 与生产相关项目GT_STPO_INPUT-AI_GROUP = 'A'."替代组GT_STPO_INPUT-AI_PRIO = '1'."优先级GT_STPO_INPUT-AI_STRATEG = '01'."策略GT_STPO_INPUT-USAGE_PROB = '100'."使用比例GT_STPO_INPUT-IDENTIFIER = '1'."标识GT_STPO_INPUT-ITEM_NO = INPUT_PBOM-POSNR. "项目号 默认9000GT_STPO_INPUT-ITEM_CATEG = INPUT_PBOM-POSTP. "项目类别ICT 默认LGT_STPO_INPUT-COMPONENT = INPUT_PBOM-IDNRK. "组件:即子物料GT_STPO_INPUT-COMP_QTY = INPUT_PBOM-KMPMG. "数量GT_STPO_INPUT-COMP_UNIT = INPUT_PBOM-MEINS. "单位GT_STPO_INPUT-REL_COST = 'X'. "成本核算标准相关GT_STPO_INPUT-SORTSTRING = INPUT_PBOM-SORTP. "排序字符串GT_STPO_INPUT-CHANGE_NO = INPUT_PBOM-AENNR.PDATAV = INPUT_PBOM-DATUV+0(4) && '-' && INPUT_PBOM-DATUV+4(2) && '-' && INPUT_PBOM-DATUV+6(2) .GT_STPO_INPUT-VALID_FROM = PDATAV.* gt_stpo_input-comp_scrap = ."部件废品用百分比表示(BTCI)
* gt_stpo_input-issue_loc = ."生产订单的发货地点APPEND GT_STPO_INPUT.ELSE. "sap原数据有bom时的处理,指定bom中要更改的具体条目CLEAR GT_STPO_INPUT.IF INPUT_PBOM-STVKN IS NOT INITIAL.GT_STPO_INPUT-ITEM_NODE = INPUT_PBOM-STVKN.ENDIF.GT_STPO_INPUT-CHG_NO_TO = INPUT_PBOM-AENRA.GT_STPO_INPUT-VALID_TO = INPUT_PBOM-DATUB+0(4) && '-' && INPUT_PBOM-DATUB+4(2) && '-' && INPUT_PBOM-DATUB+6(2).GT_STPO_INPUT-REL_PROD = 'X'."标识 与生产相关项目GT_STPO_INPUT-AI_GROUP = 'A'."替代组GT_STPO_INPUT-AI_PRIO = '1'."优先级GT_STPO_INPUT-AI_STRATEG = '01'."策略GT_STPO_INPUT-USAGE_PROB = '100'."使用比例GT_STPO_INPUT-IDENTIFIER = '1'."标识GT_STPO_INPUT-ITEM_NO = INPUT_PBOM-POSNR. "项目号 默认9000GT_STPO_INPUT-ITEM_CATEG = INPUT_PBOM-POSTP. "项目类别ICT 默认LGT_STPO_INPUT-COMPONENT = INPUT_PBOM-IDNRK. "组件:即子物料GT_STPO_INPUT-COMP_QTY = INPUT_PBOM-KMPMG. "数量GT_STPO_INPUT-COMP_UNIT = INPUT_PBOM-MEINS. "单位GT_STPO_INPUT-REL_COST = 'X'. "成本核算标准相关GT_STPO_INPUT-SORTSTRING = INPUT_PBOM-SORTP. "排序字符串GT_STPO_INPUT-CHANGE_NO = INPUT_PBOM-AENNR.PDATAV = INPUT_PBOM-DATUV+0(4) && '-' && INPUT_PBOM-DATUV+4(2) && '-' && INPUT_PBOM-DATUV+6(2) .GT_STPO_INPUT-VALID_FROM = PDATAV.
* gt_stpo_input-comp_scrap = ."部件废品用百分比表示(BTCI)
* gt_stpo_input-issue_loc = ."生产订单的发货地点CLEAR SAP_STPO.CLEAR SAP_STPO[].SELECT * INTO CORRESPONDING FIELDS OF TABLE SAP_STPO FROM STPOWHERE STLNR = TEMP_STLNR AND STLTY = 'M' AND IDNRK = INPUT_PBOM-IDNRK AND MENGE = INPUT_PBOM-KMPMG ORDER BY STLKN STPOZ.IF LINES( SAP_STPO[] ) >= PLM_SUBMATNR_COUNT-COUNT.CLEAR NO1.LOOP AT SAP_STPO.NO1 = NO1 + 1.IF NO1 = PLM_SUBMATNR_COUNT-COUNT.GT_STPO_INPUT-BOM_NO = SAP_STPO-STLNR.GT_STPO_INPUT-ITEM_NODE = SAP_STPO-STLKN.GT_STPO_INPUT-ITEM_COUNT = SAP_STPO-STPOZ.IF ( SAP_STPO-SORTF IS NOT INITIAL ) AND ( INPUT_PBOM-SORTP IS INITIAL ).GT_STPO_INPUT-SORTSTRING = SAP_STPO-SORTF. "排序字符串ENDIF.EXIT.ENDIF.ENDLOOP.ENDIF.APPEND GT_STPO_INPUT.ENDIF.ELSE."2.1.2 当完成一个小bom,处理该层小bom的数据同步。进入下一个小bom数据的准备CLEAR SAP_STPO.CLEAR SAP_STPO[].CLEAR SAP_SUBMATNR_COUNT.* SELECT * INTO CORRESPONDING FIELDS OF TABLE sap_stpo FROM stpo WHERE stlnr = temp_stlnr AND stlty = 'M' ORDER BY idnrk MENGE STLKN STPOZ.
*
* LOOP AT sap_stpo."比较输入bom数据和SAPbom数据,判断需要删除的行项目(即输入无,而SAP有的行项目):这里是用物料号做的比较,是否ok?
* IF sap_stpo-IDNRK = sap_submatnr_count-submatnr AND sap_stpo-MENGE = sap_submatnr_count-MENGE.
* sap_submatnr_count-COUNT = sap_submatnr_count-COUNT + 1.
* ELSE.
* CLEAR sap_submatnr_count.
* sap_submatnr_count-submatnr = sap_stpo-idnrk.
* sap_submatnr_count-MENGE = sap_stpo-MENGE.
* sap_submatnr_count-COUNT = sap_submatnr_count-COUNT + 1.
* ENDIF.
* 删除用ECN处理
* isfind = '0'.
* CLEAR NO2.
* LOOP AT gt_stpo_input.
* IF sap_stpo-IDNRK = gt_stpo_input-COMPONENT AND sap_stpo-MENGE = gt_stpo_input-comp_qty.
* NO2 = NO2 + 1.
* IF NO2 = sap_submatnr_count-COUNT.
* isfind = '1'.
* EXIT.
* ENDIF.
* ENDIF.
* ENDLOOP.
* IF isfind = '0'."对要删除的行项目做标记,待处理
* gt_stpo_input-bom_no = sap_stpo-STLNR.
* gt_stpo_input-ITEM_NODE = sap_stpo-STLKN.
* gt_stpo_input-ITEM_COUNT = sap_stpo-STPOZ.
* gt_stpo_input-fldelete = 'X'.
* APPEND gt_stpo_input.
* ENDIF.
* ENDLOOP."下面执行小bom的数据同步CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'EXPORTINGMATERIAL = TEMP_MATPLANT = TEMP_WERKSBOM_USAGE = '1' "物料清单用途 默认1CHANGE_NO = INPUT_PBOM-AENNRVALID_FROM = PDATAVI_STKO = I_STKOFL_BOM_CREATE = 'X'FL_NEW_ITEM = 'X'FL_COMPLETE = 'x'TABLEST_STPO = GT_STPO_INPUTEXCEPTIONSERROR = 1OTHERS = 2.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X'."BOM同步成功与否的记录CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGMSGID = SY-MSGIDMSGNR = SY-MSGNOMSGV1 = SY-MSGV1MSGV2 = SY-MSGV2MSGV3 = SY-MSGV3MSGV4 = SY-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT = RETURN.IF SY-SUBRC <> 0.CLEAR OUTPUT_MESSAGE.RETURN = RETURN+12(10).OUTPUT_MESSAGE-MESSAGETYPE = 'E'.ELSE.CLEAR OUTPUT_MESSAGE.OUTPUT_MESSAGE-MESSAGETYPE = 'S'.ENDIF.OUTPUT_MESSAGE-MESSAGE = RETURN.OUTPUT_MESSAGE-MATNR = TEMP_MAT.CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'EXPORTINGINPUT = OUTPUT_MESSAGE-MATNRIMPORTINGOUTPUT = OUTPUT_MESSAGE-MATNR.OUTPUT_MESSAGE-WERKS = TEMP_WERKS.APPEND OUTPUT_MESSAGE.ZLOG-MATNR = OUTPUT_MESSAGE-MATNR.ZLOG-WERKS = OUTPUT_MESSAGE-WERKS.ZLOG-MESSAGETYPE = OUTPUT_MESSAGE-MESSAGETYPE.ZLOG-MESSAGE = OUTPUT_MESSAGE-MESSAGE.ZLOG-LOGDATE = SY-DATUM.ZLOG-LOGTIME = SY-UZEIT.ZLOG-INTERFACENAME = 'ZPBOM_PLM2SAP'.INSERT INTO ZLOGOFMATNRORBOM VALUES ZLOG.COMMIT WORK AND WAIT.CLEAR ZLOG.CLEAR GT_STPO_INPUT[]."进入下一个小bom数据的准备TEMP_MAT = INPUT_PBOM-MATNR.TEMP_WERKS = INPUT_PBOM-WERKS.CLEAR PLM_SUBMATNR_COUNT.PLM_SUBMATNR_COUNT-SUBMATNR = INPUT_PBOM-IDNRK.PLM_SUBMATNR_COUNT-MENGE = INPUT_PBOM-KMPMG.PLM_SUBMATNR_COUNT-COUNT = PLM_SUBMATNR_COUNT-COUNT + 1."保存传入的数据到zinputpbom透视表中GS_INPUTPBOM-MATNR = INPUT_PBOM-MATNR.GS_INPUTPBOM-WERKS = INPUT_PBOM-WERKS.GS_INPUTPBOM-IDNRK = INPUT_PBOM-IDNRK.GS_INPUTPBOM-KMPMG = INPUT_PBOM-KMPMG.GS_INPUTPBOM-XUHAO = PLM_SUBMATNR_COUNT-COUNT.GS_INPUTPBOM-MEINS = INPUT_PBOM-MEINS.GS_INPUTPBOM-SORTP = INPUT_PBOM-SORTP.GS_INPUTPBOM-LOGDATE = SY-DATUM.GS_INPUTPBOM-LOGTIME = SY-UZEIT.CLEAR TEMP_MATNR.SELECT SINGLE MATNR INTO TEMP_MATNR FROM ZINPUTPBOMWHERE MATNR = INPUT_PBOM-MATNRAND WERKS = INPUT_PBOM-WERKSAND IDNRK = INPUT_PBOM-IDNRKAND KMPMG = INPUT_PBOM-KMPMGAND XUHAO = PLM_SUBMATNR_COUNT-COUNT.IF TEMP_MATNR IS INITIAL.INSERT INTO ZINPUTPBOM VALUES GS_INPUTPBOM.ELSE.UPDATE ZINPUTPBOM SET SORTP = GS_INPUTPBOM-SORTP LOGDATE = SY-DATUM LOGTIME = SY-UZEITWHERE MATNR = INPUT_PBOM-MATNRAND WERKS = INPUT_PBOM-WERKSAND IDNRK = INPUT_PBOM-IDNRKAND KMPMG = INPUT_PBOM-KMPMGAND XUHAO = PLM_SUBMATNR_COUNT-COUNT.ENDIF.COMMIT WORK AND WAIT."准备行项目数据CLEAR TEMP_STLNR.SELECT SINGLE STLNR INTO TEMP_STLNR FROM MAST WHERE MATNR = TEMP_MAT AND WERKS = TEMP_WERKS AND STLAN = '1'.IF TEMP_STLNR IS INITIAL.CLEAR GT_STPO_INPUT.IF INPUT_PBOM-STVKN IS NOT INITIAL.GT_STPO_INPUT-ITEM_NODE = INPUT_PBOM-STVKN.ENDIF.GT_STPO_INPUT-CHG_NO_TO = INPUT_PBOM-AENRA.GT_STPO_INPUT-VALID_TO = INPUT_PBOM-DATUB+0(4) && '-' && INPUT_PBOM-DATUB+4(2) && '-' && INPUT_PBOM-DATUB+6(2).GT_STPO_INPUT-ITEM_NO = INPUT_PBOM-POSNR. "项目号 默认9000GT_STPO_INPUT-ITEM_CATEG = INPUT_PBOM-POSTP. "项目类别ICT 默认LGT_STPO_INPUT-COMPONENT = INPUT_PBOM-IDNRK. "组件:即子物料GT_STPO_INPUT-COMP_QTY = INPUT_PBOM-KMPMG. "数量GT_STPO_INPUT-COMP_UNIT = INPUT_PBOM-MEINS. "单位GT_STPO_INPUT-REL_COST = 'X'. "成本核算标准相关GT_STPO_INPUT-SORTSTRING = INPUT_PBOM-SORTP. "排序字符串GT_STPO_INPUT-CHANGE_NO = INPUT_PBOM-AENNR.PDATAV = INPUT_PBOM-DATUV+0(4) && '-' && INPUT_PBOM-DATUV+4(2) && '-' && INPUT_PBOM-DATUV+6(2) .GT_STPO_INPUT-VALID_FROM = PDATAV.
* gt_stpo_input-comp_scrap = ."部件废品用百分比表示(BTCI)
* gt_stpo_input-issue_loc = ."生产订单的发货地点APPEND GT_STPO_INPUT.ELSE.CLEAR GT_STPO_INPUT.IF INPUT_PBOM-STVKN IS NOT INITIAL.GT_STPO_INPUT-ITEM_NODE = INPUT_PBOM-STVKN.ENDIF.GT_STPO_INPUT-CHG_NO_TO = INPUT_PBOM-AENRA.GT_STPO_INPUT-VALID_TO = INPUT_PBOM-DATUB+0(4) && '-' && INPUT_PBOM-DATUB+4(2) && '-' && INPUT_PBOM-DATUB+6(2).GT_STPO_INPUT-ITEM_NO = INPUT_PBOM-POSNR. "项目号 默认9000GT_STPO_INPUT-ITEM_CATEG = INPUT_PBOM-POSTP. "项目类别ICT 默认LGT_STPO_INPUT-COMPONENT = INPUT_PBOM-IDNRK. "组件:即子物料GT_STPO_INPUT-COMP_QTY = INPUT_PBOM-KMPMG. "数量GT_STPO_INPUT-COMP_UNIT = INPUT_PBOM-MEINS. "单位GT_STPO_INPUT-REL_COST = 'X'. "成本核算标准相关GT_STPO_INPUT-SORTSTRING = INPUT_PBOM-SORTP. "排序字符串GT_STPO_INPUT-CHANGE_NO = INPUT_PBOM-AENNR.PDATAV = INPUT_PBOM-DATUV+0(4) && '-' && INPUT_PBOM-DATUV+4(2) && '-' && INPUT_PBOM-DATUV+6(2) .GT_STPO_INPUT-VALID_FROM = PDATAV.
* gt_stpo_input-comp_scrap = ."部件废品用百分比表示(BTCI)
* gt_stpo_input-issue_loc = ."生产订单的发货地点CLEAR SAP_STPO.CLEAR SAP_STPO[].SELECT * INTO CORRESPONDING FIELDS OF TABLE SAP_STPO FROM STPOWHERE STLNR = TEMP_STLNR AND STLTY = 'M' AND IDNRK = INPUT_PBOM-IDNRK AND MENGE = INPUT_PBOM-KMPMG ORDER BY STLKN STPOZ.IF LINES( SAP_STPO[] ) >= PLM_SUBMATNR_COUNT-COUNT.CLEAR NO1.LOOP AT SAP_STPO.NO1 = NO1 + 1.IF NO1 = PLM_SUBMATNR_COUNT-COUNT.GT_STPO_INPUT-BOM_NO = SAP_STPO-STLNR.GT_STPO_INPUT-ITEM_NODE = SAP_STPO-STLKN.GT_STPO_INPUT-ITEM_COUNT = SAP_STPO-STPOZ.IF ( SAP_STPO-SORTF IS NOT INITIAL ) AND ( INPUT_PBOM-SORTP IS INITIAL ).GT_STPO_INPUT-SORTSTRING = SAP_STPO-SORTF. "排序字符串ENDIF.EXIT.ENDIF.ENDLOOP.ENDIF.APPEND GT_STPO_INPUT.ENDIF.ENDIF.*2.2 某一小bom内行项目数据的处理:添加该行行项目。ELSE.IF INPUT_PBOM-IDNRK = PLM_SUBMATNR_COUNT-SUBMATNR AND INPUT_PBOM-KMPMG = PLM_SUBMATNR_COUNT-MENGE.PLM_SUBMATNR_COUNT-COUNT = PLM_SUBMATNR_COUNT-COUNT + 1.ELSE.CLEAR PLM_SUBMATNR_COUNT.PLM_SUBMATNR_COUNT-SUBMATNR = INPUT_PBOM-IDNRK.PLM_SUBMATNR_COUNT-MENGE = INPUT_PBOM-KMPMG.PLM_SUBMATNR_COUNT-COUNT = PLM_SUBMATNR_COUNT-COUNT + 1.ENDIF."保存传入的数据到zinputpbom透视表中GS_INPUTPBOM-MATNR = INPUT_PBOM-MATNR.GS_INPUTPBOM-WERKS = INPUT_PBOM-WERKS.GS_INPUTPBOM-IDNRK = INPUT_PBOM-IDNRK.GS_INPUTPBOM-KMPMG = INPUT_PBOM-KMPMG.GS_INPUTPBOM-XUHAO = PLM_SUBMATNR_COUNT-COUNT.GS_INPUTPBOM-MEINS = INPUT_PBOM-MEINS.GS_INPUTPBOM-SORTP = INPUT_PBOM-SORTP.GS_INPUTPBOM-LOGDATE = SY-DATUM.GS_INPUTPBOM-LOGTIME = SY-UZEIT.CLEAR TEMP_MATNR.SELECT SINGLE MATNR INTO TEMP_MATNR FROM ZINPUTPBOMWHERE MATNR = INPUT_PBOM-MATNRAND WERKS = INPUT_PBOM-WERKSAND IDNRK = INPUT_PBOM-IDNRKAND KMPMG = INPUT_PBOM-KMPMGAND XUHAO = PLM_SUBMATNR_COUNT-COUNT.IF TEMP_MATNR IS INITIAL.INSERT INTO ZINPUTPBOM VALUES GS_INPUTPBOM.ELSE.UPDATE ZINPUTPBOM SET SORTP = GS_INPUTPBOM-SORTP LOGDATE = SY-DATUM LOGTIME = SY-UZEITWHERE MATNR = INPUT_PBOM-MATNRAND WERKS = INPUT_PBOM-WERKSAND IDNRK = INPUT_PBOM-IDNRKAND KMPMG = INPUT_PBOM-KMPMGAND XUHAO = PLM_SUBMATNR_COUNT-COUNT.ENDIF.COMMIT WORK AND WAIT."准备行项目数据CLEAR TEMP_STLNR.SELECT SINGLE STLNR INTO TEMP_STLNR FROM MAST WHERE MATNR = TEMP_MAT AND WERKS = TEMP_WERKS AND STLAN = '1'.IF TEMP_STLNR IS INITIAL.CLEAR GT_STPO_INPUT.GT_STPO_INPUT-REL_PROD = 'X'."标识 与生产相关项目GT_STPO_INPUT-AI_GROUP = 'A'."替代组GT_STPO_INPUT-AI_PRIO = '1'."优先级GT_STPO_INPUT-AI_STRATEG = '01'."策略GT_STPO_INPUT-USAGE_PROB = '100'."使用比例GT_STPO_INPUT-IDENTIFIER = '1'."标识GT_STPO_INPUT-ITEM_NO = INPUT_PBOM-POSNR. "项目号 默认9000GT_STPO_INPUT-ITEM_CATEG = INPUT_PBOM-POSTP. "项目类别ICT 默认LGT_STPO_INPUT-COMPONENT = INPUT_PBOM-IDNRK. "组件:即子物料GT_STPO_INPUT-COMP_QTY = INPUT_PBOM-KMPMG. "数量GT_STPO_INPUT-COMP_UNIT = INPUT_PBOM-MEINS. "单位GT_STPO_INPUT-REL_COST = 'X'. "成本核算标准相关GT_STPO_INPUT-SORTSTRING = INPUT_PBOM-SORTP. "排序字符串PDATAV = INPUT_PBOM-DATUV+0(4) && '-' && INPUT_PBOM-DATUV+4(2) && '-' && INPUT_PBOM-DATUV+6(2) .GT_STPO_INPUT-VALID_FROM = PDATAV.
* gt_stpo_input-comp_scrap = ."部件废品用百分比表示(BTCI)
* gt_stpo_input-issue_loc = ."生产订单的发货地点APPEND GT_STPO_INPUT.ELSE.CLEAR GT_STPO_INPUT.IF INPUT_PBOM-STVKN IS NOT INITIAL.GT_STPO_INPUT-ITEM_NODE = INPUT_PBOM-STVKN.ENDIF.GT_STPO_INPUT-CHG_NO_TO = INPUT_PBOM-AENRA.GT_STPO_INPUT-VALID_TO = INPUT_PBOM-DATUB+0(4) && '-' && INPUT_PBOM-DATUB+4(2) && '-' && INPUT_PBOM-DATUB+6(2).GT_STPO_INPUT-REL_PROD = 'X'."标识 与生产相关项目GT_STPO_INPUT-AI_GROUP = 'A'."替代组GT_STPO_INPUT-AI_PRIO = '1'."优先级GT_STPO_INPUT-AI_STRATEG = '01'."策略GT_STPO_INPUT-USAGE_PROB = '100'."使用比例GT_STPO_INPUT-IDENTIFIER = '1'."标识GT_STPO_INPUT-ITEM_NO = INPUT_PBOM-POSNR. "项目号 默认9000GT_STPO_INPUT-ITEM_CATEG = INPUT_PBOM-POSTP. "项目类别ICT 默认LGT_STPO_INPUT-COMPONENT = INPUT_PBOM-IDNRK. "组件:即子物料GT_STPO_INPUT-COMP_QTY = INPUT_PBOM-KMPMG. "数量GT_STPO_INPUT-COMP_UNIT = INPUT_PBOM-MEINS. "单位GT_STPO_INPUT-REL_COST = 'X'. "成本核算标准相关GT_STPO_INPUT-SORTSTRING = INPUT_PBOM-SORTP. "排序字符串PDATAV = INPUT_PBOM-DATUV+0(4) && '-' && INPUT_PBOM-DATUV+4(2) && '-' && INPUT_PBOM-DATUV+6(2) .GT_STPO_INPUT-VALID_FROM = PDATAV.
* gt_stpo_input-comp_scrap = ."部件废品用百分比表示(BTCI)
* gt_stpo_input-issue_loc = ."生产订单的发货地点CLEAR SAP_STPO.CLEAR SAP_STPO[].SELECT * INTO CORRESPONDING FIELDS OF TABLE SAP_STPO FROM STPOWHERE STLNR = TEMP_STLNR AND STLTY = 'M' AND IDNRK = INPUT_PBOM-IDNRK AND MENGE = INPUT_PBOM-KMPMG ORDER BY STLKN STPOZ.IF LINES( SAP_STPO[] ) >= PLM_SUBMATNR_COUNT-COUNT.CLEAR NO1.LOOP AT SAP_STPO.NO1 = NO1 + 1.IF NO1 = PLM_SUBMATNR_COUNT-COUNT.GT_STPO_INPUT-BOM_NO = SAP_STPO-STLNR.GT_STPO_INPUT-ITEM_NODE = SAP_STPO-STLKN.GT_STPO_INPUT-ITEM_COUNT = SAP_STPO-STPOZ.IF ( SAP_STPO-SORTF IS NOT INITIAL ) AND ( INPUT_PBOM-SORTP IS INITIAL ).GT_STPO_INPUT-SORTSTRING = SAP_STPO-SORTF. "排序字符串ENDIF.EXIT.ENDIF.ENDLOOP.ENDIF.APPEND GT_STPO_INPUT.ENDIF.ENDIF.ENDLOOP.*3. 所有bom项跑完了,对最后一个小bom的处理CLEAR SAP_STPO.CLEAR SAP_STPO[].CLEAR SAP_SUBMATNR_COUNT.* SELECT * INTO CORRESPONDING FIELDS OF TABLE sap_stpo FROM stpo WHERE stlnr = temp_stlnr AND stlty = 'M' ORDER BY idnrk MENGE STLKN STPOZ.
*
* LOOP AT sap_stpo."比较输入bom数据和SAPbom数据,判断需要删除的行项目(即输入无,而SAP有的行项目):这里是用物料号做的比较,是否ok?
* IF sap_stpo-IDNRK = sap_submatnr_count-submatnr AND sap_stpo-MENGE = sap_submatnr_count-MENGE.
* sap_submatnr_count-COUNT = sap_submatnr_count-COUNT + 1.
* ELSE.
* CLEAR sap_submatnr_count.
* sap_submatnr_count-submatnr = sap_stpo-idnrk.
* sap_submatnr_count-MENGE = sap_stpo-MENGE.
* sap_submatnr_count-COUNT = sap_submatnr_count-COUNT + 1.
* ENDIF.
*
* isfind = '0'.
* CLEAR NO2.
* LOOP AT gt_stpo_input.
* IF sap_stpo-IDNRK = gt_stpo_input-COMPONENT AND sap_stpo-MENGE = gt_stpo_input-comp_qty.
* NO2 = NO2 + 1.
* IF NO2 = sap_submatnr_count-COUNT.
* isfind = '1'.
* EXIT.
* ENDIF.
* ENDIF.
* ENDLOOP.
* IF isfind = '0'.
* gt_stpo_input-bom_no = sap_stpo-STLNR.
* gt_stpo_input-ITEM_NODE = sap_stpo-STLKN.
* gt_stpo_input-ITEM_COUNT = sap_stpo-STPOZ.
* gt_stpo_input-fldelete = 'X'.
* APPEND gt_stpo_input.
* ENDIF.
* ENDLOOP.CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'EXPORTINGMATERIAL = TEMP_MATPLANT = TEMP_WERKSBOM_USAGE = '1' "物料清单用途 默认1CHANGE_NO = INPUT_PBOM-AENNRVALID_FROM = PDATAVI_STKO = I_STKOFL_BOM_CREATE = 'X'FL_NEW_ITEM = 'X'FL_COMPLETE = 'x'TABLEST_STPO = GT_STPO_INPUTEXCEPTIONSERROR = 1OTHERS = 2.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X'."BOM同步成功与否的记录CALL FUNCTION 'MESSAGE_TEXT_BUILD'EXPORTINGMSGID = SY-MSGIDMSGNR = SY-MSGNOMSGV1 = SY-MSGV1MSGV2 = SY-MSGV2MSGV3 = SY-MSGV3MSGV4 = SY-MSGV4IMPORTINGMESSAGE_TEXT_OUTPUT = RETURN.IF SY-MSGTY = 'S'.CLEAR OUTPUT_MESSAGE.OUTPUT_MESSAGE-MESSAGETYPE = 'S'.ELSE.CLEAR OUTPUT_MESSAGE.
* RETURN = RETURN+12(10).OUTPUT_MESSAGE-MESSAGETYPE = 'E'.ENDIF.OUTPUT_MESSAGE-MESSAGE = RETURN.OUTPUT-RETURN-MSGTY = OUTPUT_MESSAGE-MESSAGETYPE.OUTPUT-RETURN-MSGTX = OUTPUT_MESSAGE-MESSAGE.OUTPUT_MESSAGE-MATNR = TEMP_MAT.CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'EXPORTINGINPUT = OUTPUT_MESSAGE-MATNRIMPORTINGOUTPUT = OUTPUT_MESSAGE-MATNR.OUTPUT_MESSAGE-WERKS = TEMP_WERKS.APPEND OUTPUT_MESSAGE.ZLOG-MATNR = OUTPUT_MESSAGE-MATNR.ZLOG-WERKS = OUTPUT_MESSAGE-WERKS.ZLOG-MESSAGETYPE = OUTPUT_MESSAGE-MESSAGETYPE.ZLOG-MESSAGE = OUTPUT_MESSAGE-MESSAGE.ZLOG-LOGDATE = SY-DATUM.ZLOG-LOGTIME = SY-UZEIT.ZLOG-INTERFACENAME = 'ZPBOM_PLM2SAP'.INSERT INTO ZLOGOFMATNRORBOM VALUES ZLOG.COMMIT WORK AND WAIT.CLEAR GT_STPO_INPUT[].ENDFUNCTION.
相关文章:

SAP PP ECN CSAP_MAT_BOM_MAINTAIN
刚开始的时候ECN总是加不上, 参考kimi给出的案例 点击链接查看和 Kimi 智能助手的对话 https://kimi.moonshot.cn/share/cth1ipmqvl7f04qkggdg 效果 加上了 FUNCTION ZPBOM_PLM2SAP. *"------------------------------------------------------------------…...

html中实用标签dl dt dd(有些小众的标签 但是很好用)
背景描述 html <dl> <dt> <dd>是一组合标签,他们与ol li、ul li标签很相似 但是他却是没有默认前缀并且有缩进的标签 使用方式与table表格的标签一致 使用方式 dt和dd是放于dl标签内,dt与dd处于dl下相同级。就是dt不能放入dd内&am…...

ONES 功能上新|ONES Copilot、ONES Wiki 新功能一览
ONES Copilot 可基于工作项的标题、描述、属性信息,对工作项产生的动态和评论生成总结。 针对不同类型的工作项,总结输出的内容有对应的侧重点。 应用场景: 在一些流程步骤复杂、上下游参与成员角色丰富的场景中,工作项动态往往会…...

实现Python将csv数据导入到Neo4j
目录 一、获取数据集 1.1 获取数据集 1.2 以“记事本”方式打开文件 1.3 另存为“UTF-8”格式文件 1.4 选择“是” 二、 打开Neo4j并运行 2.1 创建新的Neo4j数据库 2.2 分别设置数据库名和密码 编辑 2.3 启动Neo4j数据库 2.4 打开Neo4j数据库 2.5 运行查看该数据库…...
QML Rectangle组件
文章目录 前言主体**简单的矩形****渐变的矩形****带边框的矩形****圆角矩形****圆形 & 圆环** 总结 前言 在 QML 中,Rectangle 是一个常见且非常实用的元素,它允许开发者轻松创建矩形形状的图形。通过调整 Rectangle 的多种属性,我们不…...

uniapp开发app,cover-view不能隐藏,使用v-if,v-show都不行的解决办法
先上解决方案 在最后多写一个v-else <cover-view class"point-info" v-if"selectedPoint"><cover-view class"info-content"><cover-view class"info-item">。。。</cover-view><cover-view class"i…...

用adb命令给APP做压力测试,有什么不同?
压力测试 app做压力测试目的是模拟用户在使用软件时随意向软件发出指令,例如操作app的点击,滑动,返回等一系列随机事件,来检测app的承受能力 第一步:手机安装包需要待测的app 第二步:输入adb start-ser…...

netcore 集成Prometheus
一、安装包 <ItemGroup><PackageReference Include"prometheus-net" Version"8.2.1" /><PackageReference Include"prometheus-net.AspNetCore" Version"8.2.1" /> </ItemGroup> 二、添加代码 #region Pro…...

同城外卖系统源码扩展指南:搭建海外外卖APP平台详解
本篇文章,笔者将探讨如何基于同城外卖系统源码,搭建适合不同国家的海外外卖APP平台,涵盖多语言支持、支付接口对接、本地化适配等方面的实践经验和技术要点。 一、确定目标市场与用户需求 在开发海外外卖APP平台之前,首先需要深…...
JavaScript 中常见内置对象的知识点及示例总结
一、String(字符串)对象 知识点: 用于处理文本数据,它有许多内置的属性和方法来操作字符串,比如获取字符串长度、提取子字符串、替换字符等。字符串在 JavaScript 中是不可变的,即一旦创建,就不…...
CSSmodule的作用是什么
CSS Modules的作用主要体现在以下几个方面: 1. 解决全局样式污染问题 在传统的CSS管理方式中,样式定义通常是全局的,这很容易导致全局样式污染。当多个组件或页面共享同一个样式时,可能会出现样式冲突和覆盖的情况,从…...
python\shell\c++语法对比
语法区别举例: itempythonshellc变量定义a 10a10int a 10数组定义arr[1, add, 3]arr(1 a hello) declare -A arr([a]1 [b]2)int arr[] {1, 2, 3}if条件判断 if xxx: xxx elif xxx: xxx else: xxx if [ expressions ];then xxx e…...
优先队列【东北大学oj数据结构9-3】C++
优先队列 优先级队列是一种数据结构,其中保存了一组数据 S,其中每个元素都有一个键,并执行以下操作: insert(S, k):将元素k插入集合S extractMax(S):从S中取出S中key最大的元素并返回其值 创建一个程序&am…...

圣诞快乐(h5 css js(圣诞树))
一,整体设计思路 圣诞树h5(简易) 1.页面布局与样式: 页面使用了全屏的黑色背景,中央显示圣诞树,树形由三层绿色的三角形组成,每一层的大小逐渐变小。树干是一个棕色的矩形,位于三角…...

基于MATLAB的图像增强
目录 一、背景及意义介绍背景图像采集过程中的局限性 意义 二、概述三、代码结构及说明(一)整体结构(二)亮度增强部分(三)对比度增强部分(四)锐度增强部分 四、复现步骤(…...

大数据之Hbase环境安装
Hbase软件版本下载地址: http://mirror.bit.edu.cn/apache/hbase/ 1. 集群环境 Master 172.16.11.97 Slave1 172.16.11.98 Slave2 172.16.11.99 2. 下载软件包 #Master wget http://archive.apache.org/dist/hbase/0.98.24/hbase-0.98.24-hadoop1-bin.tar.gz…...

javaEE--计算机是如何工作的-1
目录 一.计算机的组成: 各组件的功能: 衡量cpu好坏的标准: 二.指令(instruction) 三.操作系统Operating System 四.进程/任务process/tesk 五.进程在系统中如何管理 1.进程在系统中的管理,从两个角度来分类: 2.进程控制块PCB(Process Control Block)) 3.P…...
vue.js 指令的修饰符
Vue.js 提供了一些指令修饰符,用于在指令的行为上添加额外的功能。下面详细解析一些常用的指令修饰符,并提供相应的代码实例。 .prevent:阻止默认事件 通过添加 .prevent 修饰符,可以阻止指令绑定的元素触发默认事件。 代码实例&a…...

基于java web在线商城购物系统源码+论文
一、环境信息 开发语言:JAVA JDK版本:JDK8及以上 数据库:MySql5.6及以上 Maven版本:任意版本 操作系统:Windows、macOS 开发工具:Idea、Eclipse、MyEclipse 开发框架:SpringbootHTMLjQueryMysq…...

Autosar入门_架构(Architecture)
上一篇 | 返回主目录 | 下一篇 架构(Architecture) 1 Autosar架构分层概述2 MCAL3 ECU抽象层4 复杂设备驱动5 服务层6 RTE7 应用软件层1 Autosar架构分层概述 整体架构分为三层:应用软件(APP)、实时运行环境(RTE)、基础软件(BSW)以下架构对BSW进行了细化,主要包含四…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...