abap对采购订单强制置为”交货已完成“状态(BAPI_PO_CHANGE、BAPI_PO_RELEASE、BAPI_PO_RESET_RELEASE)

本文介绍了一种在SAP系统中对已批准的采购订单进行强制“交货已完成”状态修改的方法。通过先解除批准状态,然后修改状态,最后重新设置批准状态的过程,详细展示了如何使用BAPI函数实现这一操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中,需要对一些采购订单做强制“交货已完成”,如果采购订单已批准,是不能用BAPI_PO_CHANGE更改状态的,只有先除去“批准”状态 ,再“交货已完成”,然后再置为批准状态,下面是函数代码,希望对用到的兄弟有帮助。

DATA:PO_NUMBER LIKE EKKO-EBELN.

DATA:T_POITEM LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE.
DATA:T_POITEMX LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE.
DATA:T_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA: LV_FRGKE LIKE EKKO-FRGKE,
LV_FRGSX LIKE EKKO-FRGSX.

DATA:RETURN TYPE TABLE OF BAPIRETURN WITH HEADER LINE.

REFRESH OUTPUT.
CLEAR OUTPUT.

SORT INPUT BY EBELN.
LOOP AT INPUT.
CLEAR T_POITEM.
REFRESH T_POITEM.
CLEAR T_POITEMX.
REFRESH T_POITEMX.

 MOVE-CORRESPONDING INPUT TO OUTPUT.

 CLEAR LV_FRGKE.
 SELECT SINGLE
        FRGKE
        FRGSX
        INTO (LV_FRGKE,LV_FRGSX)
        FROM EKKO
        WHERE EBELN = INPUT-EBELN.
  • 如果采购订单被批准了,则先取消批准,才能修改
    IF LV_FRGKE = 'R'.
    
       CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
            EXPORTING
              PURCHASEORDER = INPUT-EBELN
              PO_REL_CODE   = LV_FRGSX
              USE_EXCEPTIONS = 'X'
            TABLES
              RETURN = RETURN.
       CLEAR RETURN.
       READ TABLE RETURN WITH KEY TYPE = 'E'.
       IF SY-SUBRC EQ 0.
          OUTPUT-FLAG = 'E'.
          OUTPUT-MESSAGE = RETURN-MESSAGE.
       ENDIF.
    ENDIF.
    
    IF OUTPUT-FLAG <> 'E'.
       PO_NUMBER = INPUT-EBELN.
    
       T_POITEM-PO_ITEM = INPUT-EBELP.
       T_POITEM-NO_MORE_GR = 'X'.
       APPEND T_POITEM.
       CLEAR T_POITEM.
    
       T_POITEMX-PO_ITEM = INPUT-EBELP.
       T_POITEMX-PO_ITEMX = 'X'.
       T_POITEMX-NO_MORE_GR = 'X'.
       APPEND T_POITEMX.
       CLEAR T_POITEMX.
    
    
       CALL FUNCTION 'BAPI_PO_CHANGE'
          EXPORTING
            PURCHASEORDER = PO_NUMBER
          TABLES
            RETURN        = T_RETURN
            POITEM        = T_POITEM
            POITEMX       = T_POITEMX.
         READ TABLE T_RETURN WITH KEY TYPE = 'E'.
         IF SY-SUBRC EQ 0.
           OUTPUT-FLAG = 'E'.
           OUTPUT-MESSAGE = T_RETURN-MESSAGE.
           ROLLBACK WORK.
         ELSE.
           OUTPUT-FLAG = 'S'.
           OUTPUT-MESSAGE = '交货已完成更改成功!'.
           CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
             EXPORTING
               WAIT = 'X'.
         ENDIF.
    ENDIF.
    
  • 如果采购订单被批准了,则先取消批准,修改交货已完成后,在重新设置上批准状态
    IF LV_FRGKE = 'R' AND OUTPUT-FLAG <> 'E'.
       CALL FUNCTION 'BAPI_PO_RELEASE'
            EXPORTING
              PURCHASEORDER = INPUT-EBELN
              PO_REL_CODE   = LV_FRGSX
              USE_EXCEPTIONS = 'X'
            TABLES
              RETURN = RETURN.
    ENDIF.
    
    APPEND OUTPUT.
    CLEAR OUTPUT.
    

ENDLOOP.

### 使用 `BAPI_PO_CHANGE` 修改 SAP 采购订单数量 为了修改 SAP 中的采购订单数量,可以使用 `BAPI_PO_CHANGE` 函数模块。此函数允许更新现有采购订单中的各种属性,包括项目级别的数量字段。 以下是具体实现方法: #### 调用参数设 在调用 `BAPI_PO_CHANGE` 前需准备输入结构体来指定要更改的具体项及其新值。对于调整数量的操作主要涉及两个表:一个是用于传递采购订单头信息;另一个则是明细条目(`PO_ITEMS`)的信息,在这里定义需要变更的商品编号以及新的订购量[^1]。 ```abap DATA: lt_itemscheds TYPE TABLE OF bapiparex, ls_itemscheds LIKE LINE OF lt_itemscheds. " 设采购订单号和其他必要条件... CALL FUNCTION 'BAPI_PO_GETDETAIL' EXPORTING purchaseorder = lv_purchase_order_number IMPORTING purchasdocument = wa_purdoc. ``` #### 更新物品详情 针对特定商品增加或减少其预定数目时,则应构建相应的调度记录并加入到上述提到的数据集中去。注意每一条这样的记录都代表了一次独立的变化操作,并且必须指明对应的物料序号(Item Number)以便系统能够准确定位待处理的对象[^2]。 ```abap ls_itemscheds-number = '1'. " 物料序列号, 需依据实际情况设定 ls_itemscheds-purchasingvaluefield-name = 'ORDERQUANTITY'. ls_itemscheds-purchasingvaluefield-value = new_quantity. " 新的数量值 APPEND ls_itemscheds TO lt_itemscheds. ``` #### 执 BAPI 变更请求 最后一步就是实际执这个事务性的命令了。这通常意味着提交整个交易以保存所做的任何改动至数据库中永久存储起来。如果一切顺利的话,那么所选项目的订货数就会按照预期被刷新成最新的数值。 ```abap CALL FUNCTION 'BAPI_PO_CHANGE' EXPORTING purCHASEORDER = lv_purchase_order_number * OTHER_PARAMETERS... AS NEEDED TABLES poitems = lt_poitems poschedulelines = lt_itemscheds EXCEPTIONS document_not_found = 1 no_change_necessary = 2 error_occurred = 3 others = 99. IF sy-subrc <> 0. " Handle errors here as appropriate ENDIF. ``` 通过以上步骤即可完成利用 `BAPI_PO_CHANGE` 对于已存在采购单内某件货物所需总量做出相应增减的任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值