我们之前学习过事务代码TCODE ME21N创建采购订单PO的BAPI函数BAPI_PO_CREATE1
,
今天我们学习前台事务代码TCODE:ME22N的BAPI函数,作用是修改PO或者删除PO采购订单。
隶属于MM模块,函数名字:BAPI_PO_CHANGE
导入参数:
| 参数名称 | 关联类型 | 可选的 | 说明 |
| PURCHASEORDER | BAPIMEPOHEADER-PO_NUMBER | 必选 | |
| POHEADER | BAPIMEPOHEADER | 可选 | 抬头 |
| POHEADERX | BAPIMEPOHEADERX | 可选 | 抬头 |
| TESTRUN | BAPIFLAG-BAPIFLAG | 可选 | |
| VERSIONS | BAPIMEDCM | 可选 | |
| NO_MESSAGING | BAPIFLAG-BAPIFLAG | 可选 |
备注:POHEADER与POHEADER X常用字段:
| 字段名 | 类型 | 简短描述 |
| DOC_TYPE | ESART | 采购凭证类型 |
| VENDOR | ELIFN | 供应商帐户号 |
| PURCH_ORG | EKORG | 采购组织 |
| PUR_GROUP | BKGRP | 采购组 |
| COMP_CODE | BUKRS | 公司代码 |
| DOC_DATE | EBDAT | 采购凭证日期 |
TABLE表参数
| 参数名称 | 关联类型 | 可选的 | 说明 |
| RETURN | BAPIRET2 | 可选 | 返回信息 |
| POITEM | BAPIMEPOITEM | 必选 | 行项目 |
| POITEMX | BAPIMEPOITEMX | 可选 | 行项目 |
| POACCOUNT | BAPIMEPOACCOUNT | 可选 | 帐户分配字段 |
| POACCOUNTX | BAPIMEPOACCOUNTX | 可选 | 帐户分配字段 |
| SERIALNUMBER | BAPIMEPOSERIALNO | 可选 | 采购订单BAPI中的序列号 |
| SERIALNUMBERX | BAPIMEPOSERIALNOX | 可选 | 采购订单BAPI中的序列号 |
| EXTENSIONIN | BAPIPAREX | 可选 | 增强,扩展字段 |
(1)POITEM与POITEM X常用字段,根据具体需求添加字段,对应的结构名为:BAPIMEPOITEM
| 字段名 | 类型 | 简短描述 |
| PO_ITEM | EBELP | 采购凭证的项目编号 |
| FINAL_INV | EREKZ | 最后发票标识 |
| NET_PRICE | BAPICUREXT | BAPIs 的货币金额(带有 9 个小数位) |
(2)POCOND与POCONDX常用字段:根据具体需求添加字段,对应的结构名为:BAPIMEPOCOND
| 字段名 | 类型 | 简短描述 |
| ITM_NUMBER | KPOSN | 条件项目号 |
| COND_VALUE | BAPIKBETR1 | 条件金额 |
封装好的实例demo代码,非常好理解。
FORM bapi_po_change CHANGING p_alv LIKE ls_alv.
DATA : l_purchaseorder TYPE bapimepoheader-po_number.
DATA : lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE .
DATA : lt_poitem TYPE TABLE OF bapimepoitem WITH HEADER LINE .
DATA : lt_poitemx TYPE TABLE OF bapimepoitemx WITH HEADER LINE .
l_purchaseorder = p_alv-ebeln.
lt_poitem-po_item = p_alv-ebelp.
lt_poitem-no_more_gr = &_no_more_gr.
APPEND lt_poitem.
CLEAR lt_poitem.
lt_poitemx-po_item = p_alv-ebelp.
lt_poitemx-po_itemx = ‘X’.
lt_poitemx-no_more_gr = ‘X’.
APPEND lt_poitemx.
CLEAR lt_poitemx.
CALL FUNCTION ‘BAPI_PO_CHANGE’
EXPORTING
purchaseorder = l_purchaseorder
TABLES
return = lt_return
poitem = lt_poitem
poitemx = lt_poitemx.
READ TABLE lt_return WITH KEY type = ‘E’.
IF sy-subrc = 0.
*——–失败———-*
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
p_alv-icon = icon_led_red.
LOOP AT lt_return WHERE type = ‘E’ OR type = ‘A’.
p_alv-zmsg = p_alv-zmsg && ‘;’ && lt_return-message.
ENDLOOP.
ELSE.
*——–成功———WWW.HOT583.COM-*
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.
ENDIF.
ENDFORM.
您学会了吗?
如果出错了。可以查看表EKKO,EKPO等相关表去对照信息哦。
本文链接 :http://www.hot583.com/2022/04/20/bapi_po_change/
本文为作者原创,如果这篇文章对您有用,欢迎转载,
转载请务必注明来源《今日热点在看》http://www.hot583.com/
我的微信公众号【 hot583 】 或者在这个链接联系我
微信原文《全文完》

