如何使用BAPI删除采购申请单(PR)
这是我第一次使用BAPI的任务。我在尝试编写一个脚本来删除请购单。我使用了 BAPI_REQUISITION_DELETE,结果仍然收到这个提示:
没有符合这些筛选条件的请购单。
我确实有我的请购单号、行项目和删除指示符。
这是我的代码:
WHEN gc_func-delete_pr.
lt_rows = go_alv->get_selections( )->get_selected_rows( ).
IF lt_rows IS INITIAL.
MESSAGE e009(zmm_mssg).
RETURN.
ENDIF.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = gc_delete_confirm-comfirm_delete
text_button_1 = gc_delete_confirm-yes_delete
text_button_2 = gc_delete_confirm-no_delete
IMPORTING
answer = lv_answer.
IF lv_answer <> '1'.
RETURN.
ENDIF.
CLEAR: lt_items_to_delete, lt_success_rows, lt_banfn.
LOOP AT lt_rows INTO lv_row.
READ TABLE gt_final ASSIGNING <lfs_final> INDEX lv_row.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
IF ( <lfs_final>-statu <> 'N' AND <lfs_final>-statu <> space )
OR <lfs_final>-loekz = 'X'.
MESSAGE | { gc_pr }{ <lfs_final>-banfn } { gc_item } { <lfs_final>-bnfpo } { gc_string_pr } | TYPE 'W'.
CONTINUE.
ENDIF.
CLEAR ls_item_to_delete.
ls_item_to_delete-preq_no = <lfs_final>-banfn.
ls_item_to_delete-preq_item = <lfs_final>-bnfpo.
ls_item_to_delete-delete_ind = 'X'.
APPEND ls_item_to_delete TO lt_items_to_delete.
INSERT <lfs_final>-banfn INTO TABLE lt_banfn.
APPEND lv_row TO lt_success_rows.
ENDLOOP.
IF lt_items_to_delete IS INITIAL.
MESSAGE e011(zmm_mssg).
RETURN.
ENDIF.
LOOP AT lt_banfn INTO lv_banfn.
CLEAR: lt_items_per_pr, lt_return_delete.
LOOP AT lt_items_to_delete INTO ls_item_to_delete
WHERE preq_no = lv_banfn.
APPEND ls_item_to_delete TO lt_items_per_pr.
ENDLOOP.
CALL FUNCTION 'BAPI_REQUISITION_DELETE'
EXPORTING
number = lv_banfn
TABLES
requisition_items_to_delete = lt_items_per_pr
return = lt_return_delete.
LOOP AT lt_return_delete INTO ls_return_delete.
CASE ls_return_delete-type.
WHEN 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
MESSAGE ls_return_delete-message TYPE 'E'.
RETURN.
ENDCASE.
ENDLOOP.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
SORT lt_success_rows DESCENDING.
LOOP AT lt_success_rows INTO lv_row.
DELETE gt_final INDEX lv_row.
ENDLOOP.
go_alv->refresh( refresh_mode = if_salv_c_refresh=>full ).
cl_gui_cfw=>flush( ).
MESSAGE s012(zmm_mssg).
解决方案
问题解决了! 我只是把lt_items_per_pr的 TYPE改成与BAPI中 requisition_items_to_delete的 TYPE相匹配,也就是bapieband。错误产生的原因是TYPE不匹配。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。