![](http://image109.360doc.com/DownloadImg/2023/05/1410/265945064_2_20230514103139570_wm.jpeg)
声明:本文仅代表作者观点和立场,不代表任何公司!仅用于SAP软件应用学习参考,文中操作截图来源于SAP软件,相应著作权归SAP公司所有
在SAP/EPR项目实施中MM模块的采购订单审批的业务需求一般情况下通过配置就可以实现,但有些项目上也会遇到一些特别的需求是无法通过配置实现的,比如:一些公司会要求采购订单在审批中的时候,如果国际贸易条件、付款条款等字段发生变化时候,需要重置审批,即要重新审批。 如果是采购订单审批策略相关的一些关键字段发生变化,比如:采购金额,一般是可以通过配置实现发生变化时自动触发重审的,但一些非审批策略相关的特征字段发生变化时候,就无法通过配置来触发采购订单的重新审批,比如上面提到采购订单的国际贸易条件、付款条款等字段,但可以通过实施增强非常灵活的满足这些特殊的业务需求。 通过增强触发重审的具体解决方法: 通过实施BADI增强在增强程序中判断如果哪些字段有变化,则调用BAPI:BAPI_PO_RESET_RELEASE,重置采购订单的审批状态,实现采购订单的重新审批。 BADI增强: BADI名称: ME_PURCHDOC_POSTED 方法: IF_EX_ME_PURCHDOC_POSTED~POSTED 下面通过一个实际案例来详细介绍下增强的具体实施步骤
业务需求: 某公司采购订单需要进行二级审批,一级审批为采购经理,二级审批为采购总监,该公司采购订单审批的业务要求:采购经理审批完成,采购总监未审批的时候,允许采购员对采购订单进行修改,但是如果修改的是金额和付款条件则需要触发重审,即采购经理需要重新审批这个采购订单(如下图说明)。 ![](http://image109.360doc.com/DownloadImg/2023/05/1410/265945064_3_20230514103139913_wm.png)
具体解决方案:
采购订单金额的变化触发重审可以通过配置实现,具体配置方法可以参考采购订单审批策略配置的相关文章,但是付款条件变化是无法通过配置实现触发重审的,只能通过增强实现,下面是这增强的具体实施步骤。 实施BADI增强(事务码SE19)
双击方法:POSTED,进入如下编辑界面。
![](http://image109.360doc.com/DownloadImg/2023/05/1410/265945064_5_20230514103140475_wm.png)
本例增强源代码: METHOD if_ex_me_purchdoc_posted~posted. DATA:BEGIN OF ls_ekko, ebeln TYPE ekko-ebeln, frggr TYPE ekko-frggr, frgsx TYPE ekko-frgsx, END OF ls_ekko. DATA: wa_ekko TYPE ekko. DATA:ls_t16fs TYPE t16fs. DATA:lv_pre_field TYPE string VALUE 'FRGC'. DATA:lv_fieldname TYPE string. DATA: lt_return TYPE TABLE OF bapireturn . DATA: ls_return TYPE bapireturn. DATA:lw_t16fs TYPE t16fs. FIELD-SYMBOLS:<fs_field> TYPE t16fs-frgc1.
IF im_ekko_old-zterm <> im_ekko-zterm. "付款条件有变更
SELECT SINGLE ebeln "采购订单 frggr "审批组 frgsx "审批策略 INTO ls_ekko FROM ekko WHERE ebeln = im_ekko-ebeln AND frgzu NE ''. "空 未审核 X一级审核 XX二级审核 IF sy-subrc = 0. SELECT SINGLE * INTO ls_t16fs FROM t16fs WHERE frggr = ls_ekko-frggr AND frgsx = ls_ekko-frgsx. "审批代码 IF sy-subrc = 0. CONCATENATE lv_pre_field '1' INTO lv_fieldname. "通过指针获取批准代码 ASSIGN COMPONENT lv_fieldname OF STRUCTURE ls_t16fs TO <fs_field>. IF sy-subrc = 0. CALL FUNCTION 'BAPI_PO_RESET_RELEASE' EXPORTING purchaseorder = im_ekko-ebeln po_rel_code = <fs_field> use_exceptions = 'X' 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 no_release_already = 7 no_new_release_indicator = 8 OTHERS = 9.
LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'. EXIT. ENDLOOP. IF sy-subrc NE 0 . WAIT UP TO 2 SECONDS. ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. ENDMETHOD.
上面增强代码写完后激活就OK了。 具体实施效果:
如果采购员对采购订单的付款条件或金额进行修改,在采购订单保存时候会自动触发重审,将采购订单审批状态重置创建状态(如下图) ![](http://image109.360doc.com/DownloadImg/2023/05/1410/265945064_6_20230514103140757_wm.png)
|