MB21MB22操作预留

作者:斌将军 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, CO, Data Engineering, FI, MM, WM, 仓库管理, 开发, 数据工程, 物料管理, 财务
MB21MB22操作预留 - 封面图
MB21MB22操作预留 - 封面图

## 1.1MB21前台操作

MB21MB22操作预留 - 封面图
MB21MB22操作预留 - 封面图

输入物料等信息,保存即可

MB21MB22操作预留 - 封面图
MB21MB22操作预留 - 封面图

## 1.2调用BAPI:BAPI_RESERVATION_CREATE1

"-----------------------@斌将军--------------------------DATA:ls_header TYPE bapi2093_res_head, ls_calcheck TYPE bapi2093_calcheck, lv_res TYPE bapi2093_res_key-reserv_no, lt_item TYPE TABLE OF bapi2093_res_item, ls_item TYPE bapi2093_res_item, lt_extensionin TYPE TABLE OF bapiparex WITH HEADER LINE, ls_resb_append TYPE zwms_resb_append, lt_pro TYPE TABLE OF bapi_profitability_segment, ls_pro TYPE bapi_profitability_segment, lt_return TYPE TABLE OF bapiret2, ls_return TYPE bapiret2.

*ls_header-plant = '1000'."工厂ls_header-res_date = '20220316'."预订基准日期ls_header-move_type = '311'."移动类型ls_header-vendor_no = '0000100000'."供应商ls_header-move_plant = '1000'."收货工厂/发货工厂ls_header-move_stloc = '1029'."收货/发货库存地点*ls_header-costcenter = '1000'."成本中心*ls_header-orderid = '1000'."订单号*ls_header-wbs_elem = '1000'."WBS 要素 ls_calcheck-calcheck = 'X'."标识,工厂日历是否应该检查 CLEAR:ls_item.ls_item-material = 'HYM01'."物料编号(18 个字符)ls_item-plant = '1000'."工厂ls_item-stge_loc = '1001'."存储地点ls_item-batch = ''."批次编号ls_item-entry_qnt = 1."以录入项单位表示的数量ls_item-entry_uom = 'ST'."条目单位ls_item-req_date = '20220316'."组件的需求日期ls_item-item_text = '111'."项目文本APPEND ls_item TO lt_item. CLEAR:ls_resb_append.ls_resb_append-rspos = '1'.ls_resb_append-sobkz = 'Q'.lt_extensionin-structure = 'ZWMS_RESB_APPEND'.lt_extensionin-valuepart1 = ls_resb_append.APPEND lt_extensionin. CALL FUNCTION 'BAPI_RESERVATION_CREATE1' EXPORTING reservationheader = ls_header* TESTRUN =* ATPCHECK = calcheck = ls_calcheck* RESERVATION_EXTERNAL = IMPORTING reservation = lv_res TABLES reservationitems = lt_item profitabilitysegment = lt_pro extensionin = lt_extensionin return = lt_return. IF lv_res IS NOT INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ENDIF."-----------------------@斌将军--------------------------

## 1.3、增强字段

里面涉及到特殊库存标识SOBKZ,在RESB表中存在,但是在BAPI中没有,需要用增强导入

创建结构:

MB21MB22操作预留 - 封面图
MB21MB22操作预留 - 封面图

BADI:MB_RES_BAPI_CREATE1

"-----------------------@斌将军--------------------------METHOD if_ex_mb_res_bapi_create1~extensionin_to_resb. DATA:ls_extension LIKE LINE OF it_extension_in. DATA:ls_resb LIKE LINE OF resb. DATA:ls_resb_append TYPE zwms_resb_append.

LOOP AT it_extension_in INTO ls_extension. IF ls_extension-structure = 'ZWMS_RESB_APPEND'. ls_resb_append = ls_extension-valuepart1. READ TABLE resb ASSIGNING FIELD-SYMBOL(<fs_resb>) INDEX ls_resb_append-rspos. IF sy-subrc EQ 0. <fs_resb>-sobkz = ls_resb_append-sobkz."特殊标识 ENDIF. ENDIF. ENDLOOP. ENDMETHOD."-----------------------@斌将军--------------------------

调用BAPI时,传入特殊标识,RSPOS传入个行号就行

MB21MB22操作预留 - 封面图
MB21MB22操作预留 - 封面图

修改已完成标识

MB21MB22操作预留 - 封面图
MB21MB22操作预留 - 封面图

调用BAPI:BAPI_RESERVATION_CHANGE

"-----------------------@斌将军--------------------------DATA:lv_reservation TYPE bapi2093_res_key-reserv_no, lt_reservationitems_changed TYPE TABLE OF bapi2093_res_item_change, ls_reservationitems_changed TYPE bapi2093_res_item_change, lt_reservationitems_changedx TYPE TABLE OF bapi2093_res_item_changex, ls_reservationitems_changedx TYPE bapi2093_res_item_changex, lt_reservationitems_new TYPE TABLE OF bapi2093_res_item_new, ls_reservationitems_new TYPE bapi2093_res_item_new, lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.

DATA:lv_check TYPE char1, lv_message TYPE char200. lv_reservation = 2989. CLEAR:ls_reservationitems_changed.ls_reservationitems_changed-res_item = 1."预留 / 相关需求的项目编号ls_reservationitems_changed-withdrawn = 'X'."该预定的最后发货KZEARAPPEND ls_reservationitems_changed TO lt_reservationitems_changed. CLEAR:ls_reservationitems_changedx.ls_reservationitems_changedx-res_item = 1."预留 / 相关需求的项目编号ls_reservationitems_changedx-withdrawn = 'X'."该预定的最后发货KZEARAPPEND ls_reservationitems_changedx TO lt_reservationitems_changedx. CALL FUNCTION 'BAPI_RESERVATION_CHANGE' EXPORTING reservation = lv_reservation TABLES reservationitems_changed = lt_reservationitems_changed reservationitems_changedx = lt_reservationitems_changedx* RESERVATIONITEMS_NEW = return = lt_return. CLEAR:lv_check,lv_message.LOOP AT lt_return WHERE type CA 'EAX'. lv_message = lv_message && lt_return-message. lv_check = 'E'.ENDLOOP. IF lv_check = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.ENDIF."-----------------------@斌将军--------------------------
斌将军

关于作者:斌将军

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

来源说明:本文内容由「MB21MB22操作预留.md」整理生成,仅用于内部技术分享与学习交流。