二维码

[BAPI] ME29N采购订单取消审批BAPI_PO_RESET_RELEASE

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

采购订单审批时需要逐级审批,但是取消审批也可以跨级审批,直接置为未审批状态。

1、逐级取消审批
  1. FUNCTION zpufm010.
  2. *"----------------------------------------------------------------------
  3. *"*"本地接口
  4. *"  IMPORTING
  5. *"     VALUE(I_EBELN) TYPE  EBELN
  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 ls_ekko,
  12.          ebeln TYPE ekko-ebeln,
  13.          frggr TYPE ekko-frggr,
  14.          frgsx TYPE ekko-frgsx,
  15.        END OF ls_ekko.
  16.   DATA:ls_t16fs TYPE t16fs.
  17.   DATA:lv_level TYPE n.
  18.   DATA:lv_pre_field TYPE string VALUE 'FRGC'.
  19.   DATA:lv_fieldname TYPE string.
  20.   FIELD-SYMBOLS:<fs_field> TYPE t16fs-frgc1.

  21.   PERFORM frm_inputsap_ebeln CHANGING i_ebeln.

  22.   SELECT SINGLE
  23.     ebeln  "采购订单
  24.     frggr  "审批组
  25.     frgsx  "审批策略
  26.   INTO ls_ekko
  27.   FROM ekko
  28.   WHERE ebeln = i_ebeln
  29.     AND frgzu = i_frgzu. "空 未审核 X一级审核 XX二级审核
  30.   IF sy-subrc = 0.
  31.     SELECT SINGLE * INTO ls_t16fs FROM t16fs WHERE frggr = ls_ekko-frggr AND frgsx = ls_ekko-frgsx. "审批代码
  32.     IF sy-subrc = 0.
  33.       lv_level = strlen( i_frgzu ).
  34.       CONCATENATE lv_pre_field lv_level INTO lv_fieldname.
  35.       "通过指针获取批准代码
  36.       ASSIGN COMPONENT lv_fieldname OF STRUCTURE ls_t16fs TO <fs_field>.
  37.       IF sy-subrc = 0.
  38.         CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
  39.           EXPORTING
  40.             purchaseorder            = i_ebeln
  41.             po_rel_code              = <fs_field>
  42.             use_exceptions           = 'X'
  43.           TABLES
  44.             return                   = lt_return
  45.           EXCEPTIONS
  46.             authority_check_fail     = 1
  47.             document_not_found       = 2
  48.             enqueue_fail             = 3
  49.             prerequisite_fail        = 4
  50.             release_already_posted   = 5
  51.             responsibility_fail      = 6
  52.             no_release_already       = 7
  53.             no_new_release_indicator = 8
  54.             OTHERS                   = 9.
  55.         LOOP AT lt_return WHERE type CA 'AEX'.
  56.           IF e_message-message IS INITIAL.
  57.             e_message-message   = lt_return-message.
  58.           ELSE.
  59.             CONCATENATE e_message-message lt_return-message INTO e_message-message SEPARATED BY '/'.
  60.           ENDIF.
  61.         ENDLOOP.
  62.         IF sy-subrc = 0.
  63.           e_message-type   = 'E'.
  64.           EXIT.
  65.         ELSE.
  66.           e_message-type    = 'S'.
  67.           e_message-message = '采购订单' && lv_level && '级反审批通过!'.
  68.         ENDIF.
  69.       ENDIF.

  70.     ENDIF.
  71.   ELSE.
  72.     e_message-type    = 'S'.
  73.     e_message-message = '没有发现需要反审批的采购订单!'.
  74.   ENDIF.

  75. ENDFUNCTION.
复制代码

2、直接反审批,一步到位
  1. FUNCTION zpufm010.
  2. *"----------------------------------------------------------------------
  3. *"*"本地接口:
  4. *"  IMPORTING
  5. *"     VALUE(I_EBELN) TYPE  EBELN
  6. *"  EXPORTING
  7. *"     VALUE(E_MESSAGE) TYPE  ZOTS001
  8. *"----------------------------------------------------------------------
  9.   DATA:lt_return TYPE TABLE OF bapireturn WITH HEADER LINE.
  10.   DATA:BEGIN OF ls_ekko,
  11.          ebeln TYPE ekko-ebeln,
  12.          frggr TYPE ekko-frggr,
  13.          frgsx TYPE ekko-frgsx,
  14.        END OF ls_ekko.
  15.   DATA:ls_t16fs TYPE t16fs.
  16.   DATA:lv_pre_field TYPE string VALUE 'FRGC'.
  17.   DATA:lv_fieldname TYPE string.
  18.   FIELD-SYMBOLS:<fs_field> TYPE t16fs-frgc1.

  19.   PERFORM frm_inputsap_ebeln CHANGING i_ebeln.


  20.   SELECT SINGLE
  21.     ebeln  "采购订单
  22.     frggr  "审批组
  23.     frgsx  "审批策略
  24.   INTO ls_ekko
  25.   FROM ekko
  26.   WHERE ebeln = i_ebeln
  27.     AND frgzu NE ''. "空 未审核 X一级审核 XX二级审核
  28.   IF sy-subrc = 0.
  29.     SELECT SINGLE * INTO ls_t16fs FROM t16fs WHERE frggr = ls_ekko-frggr AND frgsx = ls_ekko-frgsx. "审批代码
  30.     IF sy-subrc = 0.
  31.       CONCATENATE lv_pre_field '1' INTO lv_fieldname.
  32.       "通过指针获取批准代码
  33.       ASSIGN COMPONENT lv_fieldname OF STRUCTURE ls_t16fs TO <fs_field>.
  34.       IF sy-subrc = 0.
  35.         CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
  36.           EXPORTING
  37.             purchaseorder            = i_ebeln
  38.             po_rel_code              = <fs_field>
  39.             use_exceptions           = 'X'
  40.           TABLES
  41.             return                   = lt_return
  42.           EXCEPTIONS
  43.             authority_check_fail     = 1
  44.             document_not_found       = 2
  45.             enqueue_fail             = 3
  46.             prerequisite_fail        = 4
  47.             release_already_posted   = 5
  48.             responsibility_fail      = 6
  49.             no_release_already       = 7
  50.             no_new_release_indicator = 8
  51.             OTHERS                   = 9.
  52.         LOOP AT lt_return WHERE type CA 'AEX'.
  53.           IF e_message-message IS INITIAL.
  54.             e_message-message   = lt_return-message.
  55.           ELSE.
  56.             CONCATENATE e_message-message lt_return-message INTO e_message-message SEPARATED BY '/'.
  57.           ENDIF.
  58.         ENDLOOP.
  59.         IF sy-subrc = 0.
  60.           e_message-type   = 'E'.
  61.           EXIT.
  62.         ELSE.
  63.           e_message-type    = 'S'.
  64.           e_message-message = '采购订单反审批通过!'.
  65.         ENDIF.
  66.       ENDIF.

  67.     ENDIF.
  68.   ELSE.
  69.     e_message-type    = 'S'.
  70.     e_message-message = '没有发现需要反审批的采购订单!'.
  71.   ENDIF.

  72. ENDFUNCTION.
复制代码
回复

使用道具 举报

快速回帖

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

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