ABAP BAPI:BAPI_PR_CHANGE批量修改采购申请审批状态等

更改PR:BAPI_PR_CHANGE

审批 BAPI_REQUISITION_RELEASE

取消审批 BAPI_REQUISITION_RESET_RELEASE

获取审批策略,审批组

  IF lt_eban[] IS NOT INITIAL.
    SELECT *
      FROM t16fs
      INTO CORRESPONDING FIELDS OF TABLE gt_t16fs
      FOR ALL ENTRIES IN lt_eban
      WHERE frggr = lt_eban-frggr
        AND frgsx = lt_eban-frgst .

  ENDIF.

批量修改采购申请,修改抬头及行项目文本信息,审批和取消审批需要注意审批层级,此例中只有一级审批

FORM fm_check_order .
  DATA: lt_items_old    LIKE TABLE OF bapiebanv   WITH HEADER LINE.
  DATA: lt_items_new    LIKE TABLE OF bapiebanv   WITH HEADER LINE.
  DATA: lt_prheader     LIKE TABLE OF bapimereqheader   WITH HEADER LINE.
  DATA: lt_prheaderx    LIKE TABLE OF bapimereqheaderx   WITH HEADER LINE.
  DATA: lt_text_old     LIKE TABLE OF bapiebantx  WITH HEADER LINE.
  DATA: lt_text_new     LIKE TABLE OF bapiebantx  WITH HEADER LINE.
  DATA: lt_text     LIKE TABLE OF bapimereqitemtext  WITH HEADER LINE.
  DATA: lt_detail       LIKE TABLE OF bapieban    WITH HEADER LINE.
  DATA: lt_account      LIKE TABLE OF bapiebkn    WITH HEADER LINE.
  DATA: lt_bapireturn   LIKE TABLE OF bapireturn  WITH HEADER LINE.
  DATA: ls_header TYPE thead  ,
        lt_lines  TYPE STANDARD TABLE OF tline WITH HEADER LINE,
        lt_items  TYPE STANDARD TABLE OF bapimereqitemimp WITH HEADER LINE,
        lt_itemsx TYPE STANDARD TABLE OF bapimereqitemx WITH HEADER LINE ,
        lt_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE .
  READ TABLE gt_main WITH KEY sel = gc_x .
  IF sy-subrc NE 0 .
    MESSAGE '请先选择更新行!' TYPE 'S' DISPLAY LIKE 'E' .
    RETURN .
  ENDIF.
  "当前审批状态
" frggr     "审批组
" frgst     "批准策略
" frgzu     "审批状态
  IF gt_main[] IS NOT INITIAL.
    SELECT banfn, bnfpo, frgzu
      INTO TABLE @DATA(lt_frgzu)
      FROM eban
     FOR ALL ENTRIES IN @gt_main
     WHERE banfn = @gt_main-banfn
       AND bnfpo = @gt_main-bnfpo
     .
  ENDIF.
  LOOP AT gt_main ASSIGNING FIELD-SYMBOL(<fs_main>) .
   CLEAR: lt_text[],lt_text,lt_items_old,lt_items_old[],<fs_main>-msg.
   <fs_main>-icon = icon_led_yellow .
   CHECK <fs_main>-sel IS NOT INITIAL .

   "add header
   lt_prheader-preq_no = <fs_main>-banfn .
   APPEND lt_prheader.

   lt_prheaderx-preq_no = gc_x .
   APPEND lt_prheaderx.
  "add item text
  lt_text-preq_no   = <fs_main>-banfn .
  lt_text-preq_item = <fs_main>-bnfpo .
  lt_text-text_id   = 'B01'.
  lt_text-text_line = <fs_main>-it_text .
  APPEND lt_text .

  "添加抬头文本

  CLEAR:ls_header,lt_lines[].

  ls_header-tdobject = 'EBANH'."固定值
  ls_header-tdname   = <fs_main>-banfn .
  ls_header-tdid     = 'B01'."固定值
  ls_header-tdspras  = sy-langu.

  lt_lines-tdformat = '*'.
  lt_lines-tdline   = <fs_main>-hd_text .
  APPEND lt_lines .
   CALL FUNCTION 'SAVE_TEXT'
     EXPORTING
       client                  = sy-mandt
       header                  = ls_header
       savemode_direct         = gc_x
     TABLES
       lines                   = lt_lines
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      object                  = 4
      OTHERS                  = 5
             .
     "删除标识,结算标识更改
     CLEAR:lt_items,lt_items[],lt_itemsx,lt_itemsx[].
     lt_items-preq_item  = <fs_main>-bnfpo .
     lt_items-plant      = <fs_main>-werks.
     lt_items-currency   = <fs_main>-waers .
     lt_items-store_loc  = <fs_main>-lgort .
     lt_items-quantity   = <fs_main>-menge .
     lt_items-deliv_date = <fs_main>-lfdat .
     lt_items-pur_group  = <fs_main>-ekgrp .
     lt_items-delete_ind = <fs_main>-loekz .
     lt_items-closed     = <fs_main>-ebakz.
     APPEND lt_items .

     lt_itemsx-preq_item   = <fs_main>-bnfpo .
     lt_itemsx-currency    = gc_x .
     lt_itemsx-plant       = gc_x .
     lt_itemsx-store_loc   = gc_x .
     lt_itemsx-quantity    = gc_x .
     lt_itemsx-deliv_date  = gc_x .
     lt_itemsx-pur_group   = gc_x .
     lt_itemsx-delete_ind = gc_x .
     lt_itemsx-closed     = gc_x.
     APPEND lt_itemsx .

    CALL FUNCTION 'BAPI_PR_CHANGE'
      EXPORTING
        number                       = <fs_main>-banfn
        prheader                     = lt_prheader
        prheaderx                    = lt_prheaderx
*       TESTRUN                      =
*     IMPORTING
*       PRHEADEREXP                  =
      TABLES
        return                       = lt_return
        pritem                       = lt_items
        pritemtext                   = lt_text
        pritemx                      = lt_itemsx
              .
    READ TABLE lt_return INDEX 1 .
    IF lt_return-type = 'S'.
        <fs_main>-icon = icon_led_green .
        IF gv_okcode = 'CHECK'.
          <fs_main>-msg = '检查无误!'  .
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
           EXPORTING
             wait          = 'X'
*         IMPORTING
*           RETURN        =
          .
          <fs_main>-msg = <fs_main>-msg && '/' && lt_return-message  .

        ENDIF.

    ELSE.
      LOOP AT lt_return.
        <fs_main>-msg = <fs_main>-msg && '/' && lt_return-message  .
      ENDLOOP.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*         IMPORTING
*           RETURN        =
          .
      <fs_main>-icon = icon_led_red .
    ENDIF.

   CHECK lt_return-type EQ 'S' .
   "审批设置
   IF gv_okcode = 'EXECUTE'.
      READ TABLE lt_frgzu INTO DATA(ls_frgzu) WITH KEY banfn = <fs_main>-banfn
                                                       bnfpo = <fs_main>-bnfpo.
      IF sy-subrc EQ 0.
        IF ls_frgzu-frgzu NE <fs_main>-apstatus.
          CLEAR gt_t16fs .
          READ TABLE gt_t16fs WITH KEY frggr = <fs_main>-frggr
                                       frgsx = <fs_main>-frgst.
          IF <fs_main>-apstatus IS INITIAL ."取消审批
             CALL FUNCTION 'BAPI_REQUISITION_RESET_RELEASE'
                   EXPORTING
                     number                   = <fs_main>-banfn
                     item                     = <fs_main>-bnfpo
                     rel_code                 = gt_t16fs-frgc1
                   TABLES
                     return                   = lt_bapireturn
                   EXCEPTIONS
                     authority_check_fail     = 1
                     requisition_not_found    = 2
                     enqueue_fail             = 3
                     prerequisite_fail        = 4
                     release_already_posted   = 5
                     responsibility_fail      = 6
                     no_release_already       = 7
                     no_new_release_indicator = 8
                     OTHERS                   = 9.
          ELSE.
             CALL FUNCTION 'BAPI_REQUISITION_RELEASE'
               EXPORTING
                 number                 = <fs_main>-banfn         "采购申请号
                 item                   = <fs_main>-bnfpo         "行项目号
                 rel_code               = gt_t16fs-frgc1
               TABLES
                 return                 = lt_bapireturn
               EXCEPTIONS
                 authority_check_fail   = 1
                 requisition_not_found  = 2
                 enqueue_fail           = 3
                 prerequisite_fail      = 4
                 release_already_posted = 5
                 responsibility_fail    = 6
                 OTHERS                 = 7.
          ENDIF.
          READ TABLE lt_bapireturn WITH KEY type = 'E'.
          IF sy-subrc EQ 0.
            <fs_main>-icon = icon_led_red .
            LOOP AT lt_bapireturn.
              <fs_main>-msg = <fs_main>-msg && '/' && lt_bapireturn-message  .
            ENDLOOP.
            RETURN .
          ENDIF.
        ENDIF.
      ENDIF.
   ENDIF.
  ENDLOOP .

ENDFORM.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gong JX

多谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值