FUNCTION zrfc_bpm_bapi_po_release. *"---------------------------------------------------------------------- *"*"區域介面: *" IMPORTING *" VALUE(I_EBELN) TYPE EKKO-EBELN *" VALUE(I_LANGUAGE) TYPE SPRAS DEFAULT 'ZF' *" TABLES *" LT_RETURN STRUCTURE BAPIRETURN OPTIONAL *"---------------------------------------------------------------------- TABLES:bapimmpara,t16fk,t16fv,bapireturn. TYPES: BEGIN OF ty_ekko, ebeln TYPE ebeln, "采购单 frggr TYPE frggr, "核发群组 frgsx TYPE frgsx, "核发策略 frgzu TYPE frgzu, "核发指示码 frgrl TYPE frgrl, "是否需要核发 END OF ty_ekko. DATA: l_cod LIKE bapimmpara-po_rel_cod, ls_return TYPE bapireturn, ls_ekko TYPE ty_ekko, l_len TYPE i, e_frgzu LIKE ekko-frgzu. "签核指示吗 DO 8 TIMES. SELECT SINGLE ebeln frggr frgsx frgzu frgrl INTO ls_ekko FROM ekko WHERE ebeln = i_ebeln. IF sy-subrc = 0 AND ls_ekko-frgrl = 'X'. CONCATENATE ls_ekko-frgzu 'X' INTO ls_ekko-frgzu. * WRITE 'X' TO ls_ekko-frgzu+sy-fdpos(1). t16fk+7(8) = ls_ekko-frgzu. SELECT SINGLE * FROM t16fk WHERE frggr EQ ls_ekko-frggr AND frgsx EQ ls_ekko-frgsx AND frga1 EQ t16fk-frga1 AND frga2 EQ t16fk-frga2 AND frga3 EQ t16fk-frga3 AND frga4 EQ t16fk-frga4 AND frga5 EQ t16fk-frga5 AND frga6 EQ t16fk-frga6 AND frga7 EQ t16fk-frga7 AND frga8 EQ t16fk-frga8. IF sy-subrc = 0. e_frgzu = ls_ekko-frgzu. REPLACE ALL OCCURRENCES OF 'X' IN e_frgzu WITH '+'. l_len = strlen( e_frgzu ). l_len = l_len - 1. IF l_len >= 1 . e_frgzu = e_frgzu(l_len). ELSE. e_frgzu = ''. ENDIF. CONCATENATE e_frgzu 'X' INTO e_frgzu. t16fv+9(8) = e_frgzu. SELECT SINGLE * FROM t16fv WHERE frggr EQ ls_ekko-frggr AND frgsx EQ ls_ekko-frgsx AND frga1 EQ t16fv-frga1 AND frga2 EQ t16fv-frga2 AND frga3 EQ t16fv-frga3 AND frga4 EQ t16fv-frga4 AND frga5 EQ t16fv-frga5 AND frga6 EQ t16fv-frga6 AND frga7 EQ t16fv-frga7 AND frga8 EQ t16fv-frga8. IF sy-subrc = 0. CALL FUNCTION 'BAPI_PO_RELEASE' EXPORTING purchaseorder = i_ebeln * po_rel_code = 'A3' po_rel_code = t16fv-frgco * USE_EXCEPTIONS = 'X' * NO_COMMIT = ' ' * IMPORTING * REL_STATUS_NEW = * REL_INDICATOR_NEW = * RET_CODE = TABLES return = lt_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 lt_return[] IS INITIAL. "提交 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. "解锁 CALL FUNCTION 'DEQUEUE_ALL' EXPORTING _synchron = 'X'. ELSE. "回滚 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. EXIT. ENDIF. ENDIF. ENDIF. ELSEIF ls_ekko-frgrl = '' OR sy-subrc <> 0. EXIT. ENDIF. ENDDO. "采购单核发检查 SELECT SINGLE ebeln frggr frgsx frgzu frgrl INTO ls_ekko FROM ekko WHERE ebeln = i_ebeln. IF lt_return[] IS INITIAL AND sy-subrc = 0 AND ls_ekko-frgrl = 'X'. "采购单核发错误提示 ls_return-type = 'E'. ls_return-code = 'ME192'. ls_return-message = 'E'. SELECT SINGLE text INTO ls_return-message FROM t100 WHERE arbgb = 'ME' AND msgnr = '192' AND sprsl = i_language. APPEND ls_return TO lt_return.CLEAR:ls_return. ELSEIF sy-subrc <> 0. "采购单不存在 ls_return-type = 'E'. ls_return-code = 'MN351'. ls_return-message = 'E'. SELECT SINGLE text INTO ls_return-message FROM t100 WHERE arbgb = 'MN' AND msgnr = '351' AND sprsl = i_language. APPEND ls_return TO lt_return.CLEAR:ls_return. ENDIF. ENDFUNCTION.