关于改造维护工单 BAPI_ALM_ORDER_MAINTAIN 用于生产订单组件批量修改二

作者:斌将军 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, PP, SD, 开发, 生产, 销售分销
关于改造维护工单 BAPI_ALM_ORDER_MAINTAIN 用于生产订单组件批量修改二 - 封面图
关于改造维护工单 BAPI_ALM_ORDER_MAINTAIN 用于生产订单组件批量修改二 - 封面图

> 本文档对上一篇文档做了补充,供读者参考

>

> 斌将军,公众号:斌将军 [ 关于改造维护工单BAPI_ALM_ORDER_MAINTAIN用于生产订单组件批量修改(一)

> ](https://mp.weixin.qq.com/s?__biz=Mzg5OTg3ODg2MQ==&mid=2247484984&idx=1&sn=331cb0d8fcb13ffd8eb1d3fd99d7805d&chksm=c04ddc9af73a558cf3e4b832cb25affc635c828e57923d21634a9d2d231888d69c44bdae56da#rd)

关于改造维护工单 BAPI_ALM_ORDER_MAINTAIN 用于生产订单组件批量修改二 - 封面图
关于改造维护工单 BAPI_ALM_ORDER_MAINTAIN 用于生产订单组件批量修改二 - 封面图

调用BAPI代码示例:

"--------------------@斌将军--------------------LOOP AT lt_alv INTO DATA(ls_alv) GROUP BY ls_alv-aufnr. REFRESH:lt_methods[],lt_component[],lt_componentup[],lt_return[]. CLEAR:lv_rspos.

CLEAR:ls_methods. ls_methods-refnumber = 1. ls_methods-method = 'SAVE'. ls_methods-objectkey = ls_alv-aufnr. APPEND ls_methods TO lt_methods. LOOP AT GROUP ls_alv ASSIGNING FIELD-SYMBOL(<fs_alv>). READ TABLE gt_resb INTO gs_resb WITH KEY aufnr = <fs_alv>-aufnr rspos = <fs_alv>-rspos BINARY SEARCH. IF sy-subrc EQ 0."修改逻辑 IF gs_resb-xloek = 'X'. <fs_alv>-icon = icon_led_red. <fs_alv>-log = <fs_alv>-log && '项目已删除,不允许修改'. MODIFY gt_alv FROM <fs_alv>. CONTINUE. ENDIF. IF gs_resb-enmng > abs( gs_alv-bdmng ). <fs_alv>-icon = icon_led_red. <fs_alv>-log = <fs_alv>-log && '修改的数量小于已提货数,不允许修改'. MODIFY gt_alv FROM <fs_alv>. CONTINUE. ELSE. lv_rspos = lv_rspos + 1. CLEAR:ls_component.* ls_component-item_number = gs_alv-posnr. "BOM ls_component-reserv_no = gs_resb-rsnum. "预留号 ls_component-res_item = gs_resb-rspos. "预留项目 ls_component-material = <fs_alv>-idnrk. "物料编码 ls_component-requirement_quantity = <fs_alv>-bdmng."数量* ls_component-plant = gs_alv-werks. IF <fs_alv>-lgort IS NOT INITIAL. ls_component-stge_loc = <fs_alv>-lgort."存储地点 ENDIF. ls_component-batch = <fs_alv>-charg."批次号 ls_component-req_date = <fs_alv>-bdter."组件的需求日期 IF <fs_alv>-rgekz IS NOT INITIAL. ls_component-backflush = 'X'."反冲标识 ELSE. ls_component-backflush = ''."反冲标识 ENDIF. ls_component-special_stock = <fs_alv>-sobkz."特殊库存 ls_component-activity = gs_resb-vornr."操作/活动编号 APPEND ls_component TO lt_component. CLEAR:ls_componentup.* ls_componentup-item_number = 'X'. "BOM ls_componentup-material = 'X'. "物料编码 ls_componentup-requirement_quantity = 'X'."数量* ls_componentup-plant = 'X'. IF <fs_alv>-lgort IS NOT INITIAL. ls_componentup-stge_loc = 'X'."存储地点 ENDIF. ls_componentup-batch = 'X'."批次号 ls_componentup-req_date = 'X'."组件的需求日期 ls_componentup-backflush = 'X'."反冲标识 ls_componentup-special_stock = 'X'."特殊库存 APPEND ls_componentup TO lt_componentup. CLEAR:ls_methods. ls_methods-refnumber = lv_rspos. "参照组件编号 ls_methods-objecttype = 'COMPONENT'. "组件 ls_methods-method = 'CHANGE'. "修改 ls_methods-objectkey = <fs_alv>-aufnr. "订单号 ls_methods-objectkey+12(4) = gs_resb-rspos. "预留行 APPEND ls_methods TO lt_methods. "组件分配 IF <fs_alv>-vornr IS NOT INITIAL. lv_rspos = lv_rspos + 1. CLEAR:ls_component. ls_component-reserv_no = gs_resb-rsnum. "预留号 ls_component-res_item = gs_resb-rspos. "预留项目 ls_component-activity = <fs_alv>-vornr."新分配的工序 APPEND ls_component TO lt_component. CLEAR:ls_componentup. ls_componentup-activity = 'X'. APPEND ls_componentup TO lt_componentup. CLEAR:ls_methods. ls_methods-refnumber = lv_rspos. "参照组件编号 ls_methods-objecttype = 'COMPONENT'. "组件 ls_methods-method = 'REASSIGN'. "重新分配 ls_methods-objectkey = <fs_alv>-aufnr. "订单号 ls_methods-objectkey+12(4) = gs_resb-rspos. "预留行 APPEND ls_methods TO lt_methods. ENDIF. ENDIF. ELSE."新增逻辑 lv_rspos = lv_rspos + 1. CLEAR:ls_component. ls_component-item_number = <fs_alv>-posnr. "BOM ls_component-material = <fs_alv>-idnrk. "物料编码 ls_component-requirement_quantity = <fs_alv>-bdmng."数量 ls_component-plant = <fs_alv>-werks."工厂 ls_component-stge_loc = <fs_alv>-lgort."存储地点 ls_component-batch = <fs_alv>-charg."批次 ls_component-req_date = <fs_alv>-bdter."组件的需求日期 IF <fs_alv>-rgekz IS NOT INITIAL. ls_component-backflush = 'X'."反冲标识 ELSE. ls_component-backflush = ''."反冲标识 ENDIF. ls_component-special_stock = <fs_alv>-sobkz."特殊库存 ls_component-activity = <fs_alv>-vornr."工序 ls_component-item_cat = 'L'."项目类别 APPEND ls_component TO lt_component. CLEAR:ls_componentup. ls_componentup-item_number = 'X'. "BOM ls_componentup-material = 'X'. "物料编码 ls_componentup-requirement_quantity = 'X'."数量 ls_componentup-plant = 'X'."工厂 ls_componentup-stge_loc = 'X'."存储地点 ls_componentup-batch = 'X'."批次 ls_componentup-req_date = 'X'."组件的需求日期 ls_componentup-backflush = 'X'."反冲标识 ls_componentup-special_stock = 'X'."特殊库存 ls_componentup-activity = 'X'."工序 ls_componentup-item_cat = 'X'."项目类别 APPEND ls_componentup TO lt_componentup. CLEAR:ls_methods. ls_methods-refnumber = lv_rspos. "参照组件编号 ls_methods-objecttype = 'COMPONENT'. "组件 ls_methods-method = 'CREATE'. "创建 ls_methods-objectkey = <fs_alv>-aufnr. "订单号 APPEND ls_methods TO lt_methods. ENDIF. ENDLOOP. READ TABLE gt_afko INTO DATA(ls_afko) WITH KEY aufnr = ls_alv-aufnr BINARY SEARCH. IF sy-subrc EQ 0. CALL FUNCTION 'T350_READ' EXPORTING auart = ls_afko-auart EXCEPTIONS no_t350_entry = 1 OTHERS = 2. * override buffered table T350 ASSIGN ('(SAPLINST)T350') TO <t350>. IF sy-subrc = 0. <t350>-auart = ls_afko-auart. ENDIF. ENDIF. "调用ZBAPI CALL FUNCTION 'ZBAPI_ALM_ORDER_MAINTAIN' TABLES it_methods = lt_methods it_component = lt_component[] it_component_up = lt_componentup[] return = lt_return. CLEAR:lv_check,lv_message. LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'. lv_check = 'E'. lv_message = lv_message && ls_return-message. CLEAR:ls_return. ENDLOOP. IF lv_check = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ls_alv-icon = icon_led_red. ls_alv-log = lv_message. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ls_alv-icon = icon_led_green. ls_alv-log = '添加成功'. ENDIF. MODIFY gt_alv FROM ls_alv TRANSPORTING icon log WHERE aufnr = ls_alv-aufnr AND xloek = '' AND item = 'X' AND icon <> icon_led_red.

CLEAR:ls_alv. ENDLOOP."--------------------@斌将军--------------------

斌将军

关于作者:斌将军

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「关于改造维护工单BAPI_ALM_ORDER_MAINTAIN用于生产订单组件批量修改二.md」整理生成,仅用于内部技术分享与学习交流。