采购订单审批/取消审批程序(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