二维码

[BAPI] ME54N采购申请取消审批BAPI_REQUISITION_RESET_REL_GEN

Twilight发表于 2019-08-07 10:00Twilight 最后回复于 2019-08-07 10:00 [复制链接] 5877 0

由于采购申请只有项目数据,没有抬头数据,所以SAP提供了两个取消审批的BAPI,分别按照采购申请取消审批、PR行项目取消审批。采购申请审批时需要逐级审批,但是取消审批可以跨级审批,直接置为未审批状态。

1、BAPI_REQUISITION_RESET_REL_GEN 按照采购申请取消审批
  1. FUNCTION ZPUFM006.
  2. *"----------------------------------------------------------------------
  3. *"*"本地接口
  4. *"  IMPORTING
  5. *"     VALUE(I_BANFN) TYPE  BANFN
  6. *"  EXPORTING
  7. *"     VALUE(E_MESSAGE) TYPE  ZOTS001
  8. *"----------------------------------------------------------------------
  9.   DATA:lt_return TYPE TABLE OF bapireturn WITH HEADER LINE.
  10.   DATA:BEGIN OF lt_eban OCCURS 0,
  11.         banfn TYPE eban-banfn,
  12.         bnfpo TYPE eban-bnfpo,
  13.         frgst TYPE eban-frgst, "批准策略
  14.         frggr TYPE eban-frggr, "审批组
  15.       END OF lt_eban.
  16.   DATA:ls_t16fs TYPE t16fs.
  17.   DATA:lv_pre_field TYPE string VALUE 'FRGC'.
  18.   DATA:lv_fieldname TYPE string.
  19.   FIELD-SYMBOLS:<fs_field> TYPE t16fs-frgc1.

  20.   PERFORM frm_inputsap_banfn CHANGING i_banfn.

  21.   SELECT banfn
  22.          bnfpo
  23.          frgst  "批准策略
  24.          frggr  "审批组
  25.   INTO TABLE lt_eban
  26.   FROM eban
  27.   WHERE banfn = i_banfn
  28.     AND frgzu NE ''. "空 未审核 X一级审核 XX二级审核
  29.   IF sy-subrc = 0.
  30.     READ TABLE lt_eban INDEX 1.
  31.     IF sy-subrc = 0.
  32.       SELECT SINGLE * INTO ls_t16fs FROM t16fs WHERE frggr = lt_eban-frggr AND frgsx = lt_eban-frgst.
  33.       IF sy-subrc = 0.
  34.         "多级审批需逐级审批,反审批可以直接置为未审批状态
  35.         CONCATENATE lv_pre_field '1' INTO lv_fieldname.
  36.         "通过指针获取批准代码
  37.         ASSIGN COMPONENT lv_fieldname OF STRUCTURE ls_t16fs TO <fs_field>.

  38.         CALL FUNCTION 'BAPI_REQUISITION_RESET_REL_GEN'
  39.           EXPORTING
  40.             number   = i_banfn
  41.             rel_code = <fs_field>
  42.           TABLES
  43.             return   = lt_return.

  44.         LOOP AT lt_return WHERE type CA 'AEX'.
  45.           IF e_message-message IS INITIAL.
  46.             e_message-message   = lt_return-message.
  47.           ELSE.
  48.             CONCATENATE e_message-message lt_return-message INTO e_message-message SEPARATED BY '/'.
  49.           ENDIF.
  50.         ENDLOOP.
  51.         IF sy-subrc = 0.
  52.           e_message-type   = 'E'.
  53.           EXIT.
  54.         ELSE.
  55.           e_message-type    = 'S'.
  56.           e_message-message = '采购申请反审批通过!'.
  57.         ENDIF.
  58.       ENDIF.
  59.     ENDIF.

  60.   ELSE.
  61.     e_message-type    = 'S'.
  62.     e_message-message = '没有发现需要反审批的采购申请!'.
  63.   ENDIF.

  64. ENDFUNCTION.
复制代码

2、BAPI_REQUISITION_RESET_RELEASE 按照采购申请行项目取消审批
  1. CALL FUNCTION 'BAPI_REQUISITION_RESET_RELEASE'
  2.   EXPORTING
  3.     number                 = i_banfn
  4.     rel_code               = ls_t16fs-frgc1
  5.     item                   = lt_eban-bnfpo
  6.     use_exceptions         = 'X'
  7.   TABLES
  8.     return                 = lt_return
  9.   EXCEPTIONS
  10.     authority_check_fail   = 1
  11.     requisition_not_found  = 2
  12.     enqueue_fail           = 3
  13.     prerequisite_fail      = 4
  14.     release_already_posted = 5
  15.     responsibility_fail    = 6
  16.     OTHERS                 = 7.
复制代码
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表