更改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.