采购订单审批和取消例子

1 Introduction

This is a exmaple for releaseing po and reseting po.

2 Example

  DATA:lw_in   TYPE zmms015,
       lw_out  TYPE zmms015_out,
       lt_head LIKE TABLE OF  ZMMT003_head,
       lw_head TYPE ZMMT003_head,
       lt_item TYPE zmmt003_item_t,
       lt_spjd TYPE ZMMT003_spjd_T.

  DATA:lv_rel_code LIKE  bapimmpara-rel_code.
  DATA:lt_return TYPE TABLE OF bapireturn,
       ls_return TYPE bapireturn.
  DATA:lv_str    TYPE string,lv_offset TYPE i.
  DATA:BEGIN OF ls_grp,
         frgco TYPE t16fc-frgco,
       END OF ls_grp,
       lt_grp LIKE TABLE OF ls_grp.
  FIELD-SYMBOLS:<lfs_v1> TYPE any.


* logic part
  lw_in = ps_in.
  lt_item  =  lw_in-is_value-it_items1.
  lt_spjd  =  lw_in-is_value-it_items2.

  MOVE-CORRESPONDING lw_in-is_value  TO lw_head .

  IF lw_in-is_value-ebeln  IS INITIAL.
    ps_out-es_value-code =   'E'.
    ps_out-es_value-msg  =   '采购单号必填,请核实数据!'.
    RETURN.
  ENDIF.

  LOOP AT lt_item ASSIGNING FIELD-SYMBOL(<fs_item>).

    IF <fs_item>-ebeln  IS INITIAL.
      ps_out-es_value-code =   'E'.
      ps_out-es_value-msg  =   '采购单号必填,请核实数据!'.
      RETURN.
    ENDIF.

    IF <fs_item>-ebelp  IS INITIAL.
      ps_out-es_value-code =   'E'.
      ps_out-es_value-msg  =   '采购行项目必填,请核实数据!'.
      RETURN.
    ENDIF.
  ENDLOOP.


  LOOP AT lt_spjd ASSIGNING FIELD-SYMBOL(<fs_spjd>).

    IF <fs_spjd>-ebeln  IS INITIAL.
      ps_out-es_value-code =   'E'.
      ps_out-es_value-msg  =   '采购订单必填,请核实数据!'.
      RETURN.
    ENDIF.
  ENDLOOP.

* Get po's  approve  code  and get apporve leve code
  IF lw_head-zspbs  =  'R' .  "  Approve po
    SELECT k~ebeln,k~frgzu,s~frgc1,s~frgc2,s~frgc3,s~frgc4,
           s~frgc5,s~frgc6,s~frgc7,s~frgc8
      FROM t16fs AS s
      INNER JOIN ekko AS k
         ON k~frggr = s~frggr
        AND k~frgsx = s~frgsx
      WHERE k~ebeln = @lw_head-ebeln
        AND k~frgrl = @abap_true "FRGRL 字段标示审批是否结束
      INTO TABLE @DATA(lt_t16fs).

    READ TABLE lt_t16fs ASSIGNING FIELD-SYMBOL(<lfs_t16fs>) INDEX 1.
    IF sy-subrc EQ 0.
      DO 8 TIMES.
        lv_str = sy-index.
        lv_str = 'FRGC' && lv_str.
        CONDENSE lv_str NO-GAPS.
        ASSIGN COMPONENT lv_str OF STRUCTURE <lfs_t16fs> TO <lfs_v1>.
        IF sy-subrc EQ 0.
          IF <lfs_v1> IS NOT INITIAL.
            DATA(lv_x) = <lfs_t16fs>-frgzu+lv_offset(1).
            IF lv_x IS INITIAL."未审批
              ls_grp-frgco = <lfs_v1>.
              APPEND ls_grp TO lt_grp.
            ENDIF.
          ENDIF.
        ENDIF.
        lv_offset = lv_offset + 1.
      ENDDO.
      CLEAR lv_str.
    ENDIF.

* Approve po's order
    LOOP AT lt_grp INTO ls_grp.
      CALL FUNCTION 'BAPI_PO_RELEASE'
        EXPORTING
          purchaseorder = lw_head-ebeln
          po_rel_code   = ls_grp-frgco
        TABLES
          return        = lt_return.
      LOOP AT lt_return INTO ls_return
            WHERE type = 'E' OR type = 'A'.
        lv_str = lv_str && '|' && ls_return-message.
        DATA(lv_flag) = abap_true.
      ENDLOOP.
      SHIFT lv_str LEFT DELETING LEADING '|'.
      IF lv_flag EQ abap_true.
        EXIT.
      ENDIF.
      WAIT UP TO 1 SECONDS.
    ENDLOOP.
    IF lv_flag EQ abap_true."失败
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ps_out-es_value-code =   'E'.
      ps_out-es_value-msg  =   '审核失败'.
    ELSE."成功
      ps_out-es_value-code =   'S'.
      ps_out-es_value-msg  =   '审核成功'.
    ENDIF.
* Disapprove po's order .
  ELSE.  "

    CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
      EXPORTING
        purchaseorder            = lw_head-ebeln
        po_rel_code              = 'R2'
        use_exceptions           = 'X'
      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.
      ps_out-es_value-code =   'E'.
      ps_out-es_value-msg  =   '审核失败'.
    ELSE.
      ps_out-es_value-code =   'S'.
      ps_out-es_value-msg  =   '审核成功'.
    ENDIF.
  ENDIF.



  MODIFY ZMMT003_head FROM lw_head.
  MODIFY ZMMT003_item FROM  TABLE lt_item.
  MODIFY ZMMT003_spjd FROM TABLE  lt_spjd.

  IF sy-subrc = 0.
    COMMIT WORK.
  ELSE.
    ROLLBACK WORK .
  ENDIF.
<think>好的,我现在需要帮助用户解决在SAP系统中取消采购订单审批的问题。首先,我要回顾用户提供的引用内容,看看有没有相关的信息。根据引用[2],SAP采购订单在打印后通常不能直接取消审批,如果强行弃审会出现ME175错误。不过,用户提到可以通过一些临时方法或配置调整来实现。 首先,用户的问题是关于取消采购订单审批的步骤或配置方法。我需要结合引用中的信息,整理出可能的解决方案。引用[2]提到两种方法:临时解决方案配置修改。临时方法是用ME9F插入一条消息,让SAP认为订单未完成,从而允许ME28撤销。配置修改则是通过SPRO调整审批过程的“可变性”设置,允许打印后修改。 接下来,我需要考虑用户可能的实际场景。用户可能是在处理已经审批但需要修改的采购订单,但由于系统限制无法直接取消审批。这时候,他们可能需要临时解决方案或长期配置调整。同时,用户可能需要了解不同可变性设置的影响,如设置为2允许修改且无需重新审批。 另外,引用[5]提到采购申请的审批设置,但用户的问题是关于采购订单的,所以可能需要区分这两者。确保回答不混淆采购申请采购订单的不同流程。 还需要注意,引用[2]详细说明了可变性的不同值及其影响,如设置为2或4的情况。需要将这些信息清晰传达给用户,帮助他们根据实际需求选择合适的配置。 此外,用户可能希望了解如何执行这些步骤,包括事务代码(如ME28、ME9F、SPRO)以及具体操作路径。需要分步骤说明,确保用户能够跟随操作。 最后,需要提醒用户修改配置可能带来的影响,例如设置为可变性2后,任何修改都不需要重新审批,可能存在风险。建议根据企业审批策略谨慎调整。 总结回答的结构:首先介绍常规限制,然后分临时解决方案配置调整两部分,详细步骤,注意事项,以及相关建议。同时生成相关问题,帮助用户进一步了解相关配置潜在问题。</think>在SAP系统中取消采购订单审批需根据系统配置订单状态采取不同方案,以下是详细操作指南: ### 一、常规限制与临时解决方案 1. **已打印订单的限制** 采购订单通过标准事务代码$ME9F$打印后,系统默认禁止取消审批(事务代码$ME28/ME29N$会报错ME175:*"Document has already been outputted"*)[^2]。 2. **临时规避方法** - 执行$ME9F$插入一条采购订单消息(类型可设为中性消息如$MEDIUM$) - 系统将判定订单未完成输出,此时可通过$ME28$撤销审批 - *注意:此方法需逐单操作,适用于少量紧急处理*[^2] ### 二、系统配置长期解决方案 通过调整审批策略的**可变性(Mobility)**参数实现: 1. **配置路径** ```SPRO > 物料管理 > 采购 > 采购订单 > 下达过程 > 定义采购订单审批过程``` - 选择对应审批策略的**发布标识** - 修改**可变性**字段值[^2] 2. **可变性参数详解** | 值 | 功能说明 | 适用场景 | |---|---|----| | 2 | 审批后允许修改且无需重新审批 | 高灵活低风险环境 | | 4 | 修改审批条件字段需重新审批 | 平衡灵活性与管控 | | 6 | 已打印则任何修改需重审 | 强审计要求场景 | *建议选择值4并设置"价值变化%"阈值,例如超过5%金额变动触发重审* ### 三、关键操作步骤 1. **配置修改流程** ```T-CODE: SPRO 路径:物料管理→采购采购订单→下达过程→定义审批过程 1. 选择审批策略 2. 定位到"释放标识"行 3. 修改"可变性"字段值 4. 保存配置``` *需 BASIS 团队配合传输配置变更* 2. **弃审操作** - 未打印订单:直接使用$ME28$撤销 - 已打印订单:先通过$ME9F$添加消息再执行$ME28$ ### 四、注意事项 1. 修改配置前需评估: - 是否影响历史订单追溯 - 与外围系统集成接口的兼容性(特别是采用外围系统集中审批的场景[^1]) 2. 一步法STO订单需确保维护库存地点,否则影响后续发货[^3] 3. 批量审批操作可通过$ME55$实现,但需匹配权限角色[^4]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值