二维码

[BAPI] ME54N采购申请逐级审批BAPI_REQUISITION_RELEASE_GEN

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

采购申请只有行项目数据,没有抬头数据,所以审批SAP也提供了两个BAPI,分别按行项目审批和订单审批。采购申请只能逐级审批不能跨级审批。

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

  22.   PERFORM frm_inputsap_banfn CHANGING i_banfn.

  23.   SELECT banfn
  24.          bnfpo
  25.          frgst  "批准策略
  26.          frggr  "审批组
  27.   INTO TABLE lt_eban
  28.   FROM eban
  29.   WHERE banfn = i_banfn
  30.     AND frgzu = i_frgzu "批准状态
  31.     AND frgrl = 'X'.    "X有待审批,未审核完成
  32.   IF sy-subrc = 0.
  33.     READ TABLE lt_eban INDEX 1.
  34.     IF sy-subrc = 0.
  35.       SELECT SINGLE * INTO ls_t16fs FROM t16fs WHERE frggr = lt_eban-frggr AND frgsx = lt_eban-frgst.
  36.       IF sy-subrc = 0.
  37.         lv_level = strlen( i_frgzu ).
  38.         lv_level = lv_level + 1.
  39.         CONCATENATE lv_pre_field lv_level INTO lv_fieldname.
  40.         "通过指针获取批准代码
  41.         ASSIGN COMPONENT lv_fieldname OF STRUCTURE ls_t16fs TO <fs_field>.

  42.         CALL FUNCTION 'BAPI_REQUISITION_RELEASE_GEN'
  43.           EXPORTING
  44.             number   = i_banfn
  45.             rel_code = <fs_field>
  46.           TABLES
  47.             return   = lt_return.

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

  64.   ELSE.
  65.     e_message-type    = 'S'.
  66.     e_message-message = '没有发现需要审批的采购订单!'.
  67.   ENDIF.

  68. ENDFUNCTION.
  69. FORM frm_inputsap_banfn CHANGING pc_banfn TYPE eban-banfn.
  70.   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  71.     EXPORTING
  72.       input  = pc_banfn
  73.     IMPORTING
  74.       output = pc_banfn.
  75. ENDFORM.
复制代码

2、BAPI_REQUISITION_RELEASE 按行项目审批
  1. CALL FUNCTION 'BAPI_REQUISITION_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.
复制代码
回复

使用道具 举报

快速回帖

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

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