分享

SAP/ERP系统MM模块常用增强之六:采购订单审批增强

 ERP文库 2023-05-14 发布于广东


SAPSAPSAP

在SAP/EPR项目实施中MM模块的采购订单审批的业务需求一般情况下通过配置就可以实现,但有些项目上也会遇到一些特别的需求是无法通过配置实现的,比如:一些公司会要求采购订单在审批中的时候,如果国际贸易条件、付款条款等字段发生变化时候,需要重置审批,即要重新审批。

如果是采购订单审批策略相关的一些关键字段发生变化,比如:采购金额,一般是可以通过配置实现发生变化时自动触发重审的,但一些非审批策略相关的特征字段发生变化时候,就无法通过配置来触发采购订单的重新审批,比如上面提到采购订单的国际贸易条件、付款条款等字段,但可以通过实施增强非常灵活的满足这些特殊的业务需求。

通过增强触发重审的具体解决方法:

通过实施BADI增强在增强程序中判断如果哪些字段有变化,则调用BAPI:BAPI_PO_RESET_RELEASE,重置采购订单的审批状态,实现采购订单的重新审批。

BADI增强:

BADI名称: 

ME_PURCHDOC_POSTED

方法: IF_EX_ME_PURCHDOC_POSTED~POSTED

下面通过一个实际案例来详细介绍下增强的具体实施步骤

业务需求:

某公司采购订单需要进行二级审批,一级审批为采购经理,二级审批为采购总监,该公司采购订单审批的业务要求:采购经理审批完成,采购总监未审批的时候,允许采购员对采购订单进行修改,但是如果修改的是金额和付款条件则需要触发重审,即采购经理需要重新审批这个采购订单(如下图说明)。

具体解决方案:

采购订单金额的变化触发重审可以通过配置实现,具体配置方法可以参考采购订单审批策略配置的相关文章,但是付款条件变化是无法通过配置实现触发重审的,只能通过增强实现,下面是这增强的具体实施步骤。

实施BADI增强(事务码SE19)

双击方法:POSTED,进入如下编辑界面。

本例增强源代码:

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了。

具体实施效果:

如果采购员对采购订单的付款条件或金额进行修改,在采购订单保存时候会自动触发重审,将采购订单审批状态重置创建状态(如下图)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多