如何使用BAPI删除采购申请单(PR)

编程语言 2026-07-12

这是我第一次使用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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章