BAPI:BAPI_RESERVATION_CREATE1
注:BAPI_RESERVATION_CREATE没有增强字段结构EXTENSIONIN
创建预留BAPI例子:
DATA: reservation_header LIKE bapi2093_res_head."预留表头。
DATA calcheck TYPE bapi2093_calcheck.
DATA: reservation_items LIKE bapi2093_res_item OCCURS 0 WITH HEADER LINE."预留表行项目
DATA: reservation LIKE bapi2093_res_key-reserv_no."输出预留编号
DATA: return LIKE bapiret2 OCCURS 0 WITH HEADER LINE."执行结果提示
DATA: g_repid LIKE sy-repid.
DATA profitabilitysegment LIKE bapi_profitability_segment OCCURS 0 WITH HEADER LINE.
DATA extensionin LIKE bapiparex OCCURS 0 WITH HEADER LINE.
REFRESH reservation_items.
reservation_header-res_date = sy-datum. "基准日期。
reservation_header-created_by = sy-uname. "用户名
reservation_header-move_type = 'Z01'."移动类型
reservation_header-move_plant = '1000'.
reservation_header-costcenter = '1000010101'.
calcheck-calcheck = 'X'.
reservation_items-plant = '1000'."工厂
reservation_items-material = '000000001000000001'. "物料号
*reservation_items-material_long = '000000003100000044'. "物料号
reservation_items-entry_qnt = '10'."数量
reservation_items-stge_loc = 'L001'."库存地点
*reservation_items-item_text = wa_out1-sgtxt.
reservation_items-movement = 'X'.
APPEND reservation_items.
*APPEND profitabilitysegment.
"抬头的增强字段
extensionin-structure = 'ZSRKPF_APPEND'.
extensionin-valuepart1 = '2000'.
APPEND extensionin.
"明细的增强字段
extensionin-structure = 'ZSRESB_APPEND'.
extensionin-valuepart1 = '0001'. "明细行号
extensionin-valuepart2 = 'S'. "状态
APPEND extensionin.
CALL FUNCTION 'BAPI_RESERVATION_CREATE1'
EXPORTING
reservationheader = reservation_header
calcheck = calcheck
IMPORTING
reservation = reservation
TABLES
reservationitems = reservation_items
profitabilitysegment = profitabilitysegment
return = return
extensionin = extensionin.
IF return-type <> 'E' AND return-type <> 'A'.
* IF RESERVATION IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
注:BAPI中的profitabilitysegment不能注释,可以不塞值,但是不能加空行。否则都会报错
增强结构和功能实现
创建结构(抬头或明细)
BADI:MB_RES_BAPI_CREATE1
通过BADI创建增强实施:
在方法EXTENSIONIN_TO_RESB写入代码:
METHOD if_ex_mb_res_bapi_create1~extensionin_to_resb.
DATA: ls_extension LIKE LINE OF it_extension_in,
ls_resb TYPE resb,
ls_zresb TYPE zsresb_append.
LOOP AT it_extension_in INTO ls_extension.
"更新抬头的增强字段
IF ls_extension-structure = 'ZSRKPF_APPEND'.
MOVE ls_extension-valuepart1 TO cs_rkpf-zzgrund. "移动原因
MOVE ls_extension-valuepart2 TO cs_rkpf-zzaufnr. "订单
MOVE ls_extension-valuepart3 TO cs_rkpf-zmblnr. "领料单
ENDIF.
"更新明细的增强字段
IF ls_extension-structure = 'ZSRESB_APPEND'.
MOVE ls_extension-valuepart1 TO ls_zresb-rspos. "预留 / 相关需求的项目编号
MOVE ls_extension-valuepart2 TO ls_zresb-zzstatus. "状态
"确定修改行
READ TABLE resb INTO ls_resb INDEX ls_zresb-rspos.
IF sy-subrc EQ 0.
ls_resb-zzstatus = ls_zresb-zzstatus.
MODIFY resb FROM ls_resb INDEX ls_zresb-rspos TRANSPORTING zzstatus.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
注:抬头的增强字段可以直接用签名中的CS_RKPF结构;明细行的是表结构,所以要通过明确行项来进行修改。