SAP ABAP 采购申请取消审批 BAPI_PO_RESET_RELEASE

FORM frm_reset_release_po USING lv_ebeln TYPE ekko-ebeln  CHANGING  cs_alv TYPE ty_alv_w.

  DATA:lv_rel_code LIKE  bapimmpara-rel_code.
  DATA:lt_return TYPE TABLE OF bapireturn,
       ls_return TYPE bapireturn.
  DATA:lv_str    TYPE string,lv_offset TYPE i.
  DATA:BEGIN OF ls_grp,
         frgco TYPE t16fc-frgco,
       END OF ls_grp,
       lt_grp LIKE TABLE OF ls_grp.
  DATA:lv_times TYPE i.
  FIELD-SYMBOLS:<lfs_v1> TYPE any.

* 获取采购订单的审批代码
* 根据PO获取审批组和审批策略,然后获取审批级别代码
  SELECT k~ebeln,k~frgzu,s~frgc1,s~frgc2,s~frgc3,s~frgc4,
         s~frgc5,s~frgc6,s~frgc7,s~frgc8
    FROM t16fs AS s
    INNER JOIN ekko AS k
       ON k~frggr = s~frggr
      AND k~frgsx = s~frgsx
    WHERE k~ebeln = @lv_ebeln
*      AND k~frgrl = @abap_true "FRGRL 字段标示审批是否结束
    INTO TABLE @DATA(lt_t16fs).
  READ TABLE lt_t16fs ASSIGNING FIELD-SYMBOL(<lfs_t16fs>) INDEX 1.
  IF sy-subrc EQ 0.
    lv_times = strlen( <lfs_t16fs>-frgzu ).
    DO lv_times TIMES.
      lv_str = sy-index.
      lv_str = 'FRGC' && lv_str.
      CONDENSE lv_str NO-GAPS.
      ASSIGN COMPONENT lv_str OF STRUCTURE <lfs_t16fs> TO <lfs_v1>.
      IF sy-subrc EQ 0.
        IF <lfs_v1> IS NOT INITIAL.
          DATA(lv_x) = <lfs_t16fs>-frgzu+lv_offset(1).
          IF lv_x IS NOT INITIAL."已审批
            ls_grp-frgco = <lfs_v1>.
            APPEND ls_grp TO lt_grp.
          ENDIF.
        ENDIF.
      ENDIF.
      lv_offset = lv_offset + 1.
    ENDDO.
    CLEAR lv_str.
  ENDIF.

* 循环审批码将PO逐级release
* 调用BAPI审批PO
  SORT lt_grp DESCENDING BY frgco.
  LOOP AT lt_grp INTO ls_grp.
    CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
      EXPORTING
        purchaseorder = lv_ebeln
        po_rel_code   = ls_grp-frgco
      TABLES
        return        = lt_return.
    LOOP AT lt_return INTO ls_return
          WHERE type = 'E' OR type = 'A'.
      lv_str = lv_str && '|' && ls_return-message.
      DATA(lv_flag) = abap_true.
    ENDLOOP.
    SHIFT lv_str LEFT DELETING LEADING '|'.
    IF lv_flag EQ abap_true.
      EXIT.
    ENDIF.
    WAIT UP TO 1 SECONDS.
  ENDLOOP.

  IF lv_flag EQ abap_true."失败
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*    cs_alv-icon = icon_red_light.
*    cs_alv-msg =  '反审批出错:' && lv_str.
*    SHIFT cs_alv-msg LEFT DELETING LEADING '|'.
    MESSAGE '反审批出错'&& lv_str TYPE 'E'.
  ELSE."成功
*    cs_alv-icon = icon_green_light.
*    cs_alv-type = '3'.
*    cs_alv-msg =  '反审批通过'.
  ENDIF.
ENDFORM.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值