采购订单审批/取消审批程序(BAPI_PO_RESET_RELEASE、BAPI_PO_RELEASE)
data:? gt_t16fs?????? TYPE STANDARD TABLE OF t16fs,??????????? "批準(zhǔn)策略
 ????? "定義采購(gòu)訂單對(duì)應(yīng)的審批信息
 ????? BEGIN OF gt_ekko OCCURS 0,
 ??????? ebeln LIKE ekko-ebeln,??????????????????????????????? "采購(gòu)訂單編號(hào)
 ??????? frggr LIKE ekko-frggr,?????????????????????????????????? "審批組
 ??????? frgsx LIKE ekko-frgsx,????????????????????????????????? "審批策略
 ??????? frgzu LIKE ekko-frgzu,????????????????????????????????? "版本狀態(tài)
 ??????? bsart LIKE ekko-bsart,???????????????????????????????? "采購(gòu)憑證類型
 ??????? ekorg LIKE ekko-ekorg,?????????????????????????????? "采購(gòu)組織
 ????? END?? OF gt_ekko.
 *&———————————————————————*
 *&????? Form? get_Approval_strategy
 *&———————————————————————*
 *?????? 取采購(gòu)訂單對(duì)應(yīng)的審批組和審批策略
 *?????? 再根據(jù)審批組和審批管理取每級(jí)對(duì)應(yīng)的審批組
 *———————————————————————-*
 FORM get_approval_strategy.
 ? "取采購(gòu)訂單對(duì)應(yīng)審批組
 ? SELECT ebeln???????????????????????????? "采購(gòu)訂單
 ??? frggr???????????????????????????????????????????? "審批組
 ??? frgsx???????????????????????????????????????????? "審批策略
 ??? frgzu???????????????????????????????????????????? "版本狀態(tài)
 ??? bsart??????????????????????????????????????????? "采購(gòu)憑證類型
 ??? ekorg?????????????????????????????????????????? "采購(gòu)組織
 ??? INTO TABLE gt_ekko
 ??? FROM ekko
? WHERE ebeln = l_ebeln.
 
 ? "根據(jù)審批組取對(duì)應(yīng)批準(zhǔn)策略
 ? SELECT *
 ??? INTO TABLE gt_t16fs
 ??? FROM t16fs
 ??? FOR ALL ENTRIES IN gt_ekko
 ? WHERE frggr = gt_ekko-frggr?????? "審批組
??????? AND frgsx = gt_ekko-frgsx.????? "審批策略
 
 ENDFORM.??????????????????? "get_Approval_strategy
?
 *&———————————————————————*
 *&????? Form? PROCESS_po
 *&———————————————————————*
 *?????? 處理采購(gòu)訂單,包括取消審批和審批
 *———————————————————————-*
 *????? –>VALUE(FV_APPROVE)? 處理標(biāo)識(shí),N:表示取消審批, Y:表示審批通過(guò)
 *———————————————————————-*
 FORM process_po USING value(fv_approve).
 ? DATA: l_level TYPE n,????????????????????????????????????????????????? "當(dāng)前訂單已審批通過(guò)級(jí)別數(shù)
 ??????? l_last_char TYPE n,???????????????????????????????????????????????? "當(dāng)前訂單最后審批通過(guò)級(jí)別
 ??????? l_pre_field TYPE string VALUE 'FRGC',????????????? "所有審批組對(duì)應(yīng)字段相同部分
 ??????? l_fieldname TYPE string.??????????????????????????????????????? "由l_pre_field + l_last_char組成對(duì)應(yīng)審批組字段
 
 ? FIELD-SYMBOLS: <fs_field> TYPE t16fs-frgc1.????? "當(dāng)前審批組值
 ? CLEAR: l_level,
 ???????? l_last_char,
 ???????? l_fieldname.
 ? READ TABLE gt_ekko ASSIGNING <fs_ekko> WITH KEY ebeln = w_poheader-po_number.
 ? IF sy-subrc EQ 0 AND <fs_ekko>-frgzu IS NOT INITIAL.
 ??? "根據(jù)采購(gòu)訂單的審批組、審批策略取對(duì)應(yīng)的審批組
 ??? READ TABLE gt_t16fs ASSIGNING <fs_t16fs> WITH KEY frggr = <fs_ekko>-frggr
 ???????????????????????????????????????????????????????????????????????????????????????????????????????? frgsx = <fs_ekko>-frgsx.
 ?? "計(jì)算審批通過(guò)級(jí)數(shù)
 ??? l_level = STRLEN( <fs_ekko>-frgzu ).
 ??? "取消采購(gòu)訂單,只取消第一級(jí)審批就可以,不需要逐級(jí)取消審批,如果逐級(jí)取消審批后造成采購(gòu)訂單被鎖定錯(cuò)誤
 ??? IF fv_approve = 'N'.
 ????? "組成字段名
 ????? CONCATENATE l_pre_field '1' INTO l_fieldname.
 ????? "通過(guò)指針獲取批準(zhǔn)代碼
 ????? ASSIGN COMPONENT l_fieldname OF STRUCTURE <fs_t16fs> TO <fs_field>.
????? PERFORM approve_po USING <fs_ekko>-ebeln 'N' <fs_field>.
??? ENDIF.
??? "批準(zhǔn)采購(gòu)訂單,由前往后逐級(jí)審批
 ??? IF fv_approve = 'Y'.
 ????? DO l_level TIMES.
 ??????? l_last_char = sy-index.
 ??????? CONCATENATE l_pre_field l_last_char INTO l_fieldname.
 ??????? ASSIGN COMPONENT l_fieldname OF STRUCTURE <fs_t16fs> TO <fs_field>.
 ????????? PERFORM approve_po USING <fs_ekko>-ebeln 'Y' <fs_field>.
 ????? ENDDO.
 ??? ENDIF.
 ? ENDIF.
ENDFORM.??????????????????? "PROCESS_po
?
 *&———————————————————————*
 *&????? Form? approve_po
 *&———————————————————————*
 *?????? 審批或取消采購(gòu)訂單審批
 *———————————————————————-*
 *????? –>VALUE(FV_EBELN)??? 采購(gòu)訂單編號(hào)
 *????? –>VALUE(FV_APPROVE)? 審批狀態(tài)
 *????? –>VALUE(FV_REL_COD)? 審批代碼
 *———————————————————————-*
 FORM approve_po USING value(fv_ebeln)
 ????????????????????? value(fv_approve)
 ????????????????????? value(fv_rel_cod).
 ? CALL FUNCTION 'Z_MM_APPROVE_PO'
 ??? EXPORTING
 ????? purchaseorder = fv_ebeln
 ????? approve??????????? = fv_approve
 ????? rel_cod???????????? = fv_rel_cod.
 ? IF sy-subrc EQ 0.
 ??? WAIT UP TO 1 SECONDS.
 ? ENDIF.
ENDFORM.??????????????????? "approve_po
 FUNCTION z_mm_approve_po.
 *"———————————————————————-
 *"*"Update function module:
 *"
 *"*"Local interface:
 *"? IMPORTING
 *"???? VALUE(PURCHASEORDER) TYPE? BAPIMMPARA-PO_NUMBER
 *"???? VALUE(APPROVE) TYPE? CHAR1
 *"???? VALUE(REL_COD) TYPE? BAPIMMPARA-PO_REL_COD
 *"———————————————————————-
 ? IF approve = 'Y'.
 ??? CALL FUNCTION 'BAPI_PO_RELEASE'
 ????? EXPORTING
 ??????? purchaseorder??????????????? = purchaseorder
 ??????? po_rel_code????????????????? = rel_cod
 *???? USE_EXCEPTIONS?????????????? = 'X'
 *???? NO_COMMIT??????????????????? = ' '
 *?? IMPORTING
 *???? REL_STATUS_NEW?????????????? =
 *???? REL_INDICATOR_NEW??????????? =
 *???? RET_CODE???????????????????? =
 *?? TABLES
 *???? RETURN?????????????????????? = return
 ???? EXCEPTIONS
 ?????? authority_check_fail???????? = 1
 ?????? document_not_found?????????? = 2
 ?????? enqueue_fail???????????????? = 3
 ?????? prerequisite_fail??????????? = 4
 ?????? release_already_posted?????? = 5
 ?????? responsibility_fail????????? = 6
 ?????? OTHERS?????????????????????? = 7
 ????????????? .
 ??? IF sy-subrc <> 0.
 ????? MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
 ????????????? WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
 ??? ENDIF.
 ? ELSEIF approve = 'N'.
 ??? CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
 ????? EXPORTING
 ??????? purchaseorder????????????????? = purchaseorder
 ??????? po_rel_code???????????????????? = rel_cod
 *???? USE_EXCEPTIONS???????????????? = 'X'
 *?? IMPORTING
 *???? REL_STATUS_NEW???????????????? =
 *???? REL_INDICATOR_NEW????????????? =
 *?? TABLES
 *???? RETURN???????????????????????? = return
 ???? EXCEPTIONS
 ?????? authority_check_fail?????????? = 1
 ?????? document_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
 ????????????? .
 ??? IF sy-subrc <> 0.
 ????? MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
 ????????????? WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
 ??? ENDIF.
 ? ENDIF.
 ENDFUNCTION.?
總結(jié)
以上是生活随笔為你收集整理的采购订单审批/取消审批程序(BAPI_PO_RESET_RELEASE、BAPI_PO_RELEASE)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 交货单批次拆分(BAPI_OUTB_DE
- 下一篇: Bapi-BAPI_GOODSMVT_C
