上次我们讲到了采购申请的创建bapi_pr_create,和采购申请PR创建ME51N差不多。
我们今天学习采购订单创建(PO CREATE)ME21N事务代码的BAPI函数BAPI_PO_CREATE1。
采购订单创建隶属于SAP系统的MM模块。是实施项目中批量创建/接口使用的比较多的BAPI函数之一。
由于ME21N是属于SAP Enjoy Tcode。不能友好的支持BDC技术(Contain的屏幕动态变化,类似OO ALV不支持BDC)。
所以,掌握这个BAPI函数是ABAP顾问必备的技能哦~很多高级一点的JAVA顾问或者.Net顾问,甚至可以直接调用呢。
JCO直连或者NCO直连代码都有的。如果需要,请联系~
导入参数:
参数名称 | 关联类型 | 可选的 | 说明 |
POHEADER | BAPIMEPOHEADER | 必选 | 抬头 |
POHEADERX | BAPIMEPOHEADERX | 可选 | 抬头 |
POHEADER与POHEADER X常用字段大多数是一一匹配对应的。
字段名 | 类型 | 简短描述 |
DOC_TYPE | ESART | 采购凭证类型 |
VENDOR | ELIFN | 供应商帐户号 |
PURCH_ORG | EKORG | 采购组织 |
PUR_GROUP | BKGRP | 采购组 |
COMP_CODE | BUKRS | 公司代码 |
DOC_DATE | EBDAT | 采购凭证日期 |
导出参数:
参数名称 | 关联类型 | 说明 |
EXPPURCHASEORDER | BAPIMEPOHEADER-PO_NUMBER | 采购文件编号 |
EXPHEADER | BAPIMEPOHEADER | 抬头 |
EXPPOEXPIMPHEADER | BAPIEIKP | 抬头 |
对应的表结构:
参数名称 | 关联类型 | 可选的 | 说明 |
RETURN | BAPIRET2 | 可选 | 返回信息 |
POITEM | BAPIMEPOITEM | 必选 | 行项目 |
POITEMX | BAPIMEPOITEMX | 可选 | 行项目 |
POSCHEDULE | BAPIMEPOSCHEDULE | 可选 | 交货时间表 |
POSCHEDULEX | BAPIMEPOSCHEDULX | 可选 | 交货时间表 |
POCOND | BAPIMEPOCOND | 可选 | 条件(项) |
POCONDX | BAPIMEPOCONDX | 可选 | 条件(项) |
EXTENSIONIN | BAPIPAREX | 可选 | 增强,扩展字段 |
PO_ITEM:
字段名 | 类型 | 简短描述 |
PO_ITEM | EBELP | 采购凭证的项目编号 |
QUANTITY | BSTMG | 采购订单数量 |
PO_UNIT | BSTME | 采购订单计量单位 |
STGE_LOC | LGORT_D | 库存地点 |
MATERIAL | MATNR18 | 物料编码 |
TAX_CODE | MWSKZ | 销售税/采购税代码 |
PLANT | EWERK | 工厂 |
PREQ_NO | BANFN | 采购申请编号 |
PREQ_ITEM | BNFPO | 采购申请的项目编号 |
TRACKINGNO | BEDNR | 需求跟踪号 |
PREQ_NAME | AFNAM | 需求者/要求者名称 |
ITEM_CAT | PSTYP | 采购凭证中的项目类别 |
NET_PRICE | BAPICUREXT | BAPIs 的货币金额(带有 9 个小数位) |
POSCHEDULE与POSCHEDULE X常用字段:
字段名 | 类型 | 简短描述 |
PO_ITEM | EBELP | 采购凭证的项目编号 |
SCHED_LINE | ETENR | 计划行 |
DEL_DATCAT_EXT | LPEIN | 交货日的类别 |
DELIVERY_DATE | EEIND | 交货日期 |
QUANTITY | ETMEN | 计划数量 |
POCOND与POCONDX常用字段:
字段名 | 类型 | 简短描述 |
ITM_NUMBER | KPOSN | 条件项目号 |
COND_VALUE | BAPIKBETR1 | 条件金额 |
作为HOT583.com的创始人,多年前也是SAP ABAP beginners ,最开始学习会有些难度,到处去找Tutorial for Constant。
ME21N的总结代码demo如下,希望能够给您一点启发~
DATA: POHEADER TYPE BAPIMEPOHEADER,
POHEADERX TYPE BAPIMEPOHEADERX,
LT_RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE,
LT_POITEM TYPE TABLE OF BAPIMEPOITEM WITH HEADER LINE,
LT_POITEMX TYPE TABLE OF BAPIMEPOITEMX WITH HEADER LINE,
LT_POSCHEDULE TYPE TABLE OF BAPIMEPOSCHEDULE WITH HEADER LINE,
LT_POSCHEDULEX TYPE TABLE OF BAPIMEPOSCHEDULX WITH HEADER LINE,
LT_POCOND TYPE TABLE OF BAPIMEPOCOND WITH HEADER LINE,
LT_POCONDX TYPE TABLE OF BAPIMEPOCONDX WITH HEADER LINE,
LT_EXTENSIONIN TYPE TABLE OF BAPIPAREX WITH HEADER LINE,
LS_HEADER_EXT LIKE BAPI_TE_MEPOHEADER,
LS_HEADER_EXTX LIKE BAPI_TE_MEPOHEADERX.
*抬头
CONSTANTS CON_X TYPE C VALUE ‘X’.
POHEADER-DOC_TYPE = EKKO-BSART.
POHEADER-VENDOR = EKKO-LIFNR.
POHEADER-PURCH_ORG = EKKO-EKORG.
POHEADER-PUR_GROUP = EKKO-EKGRP.
POHEADER-COMP_CODE = EKKO-BUKRS.
POHEADER-DOC_DATE = SY-DATUM.
POHEADERX-DOC_TYPE = CON_X.
POHEADERX-VENDOR = CON_X.
POHEADERX-PURCH_ORG = CON_X.
POHEADERX-PUR_GROUP = CON_X.
POHEADERX-COMP_CODE = CON_X.
POHEADERX-DOC_DATE = CON_X.
LOOP AT PT_DETAIL.
ADD 10 TO LV_EBELP.
*行项目WWW.HOT583.COM
LT_POITEM-PO_ITEM = LV_EBELP.
LT_POITEM-QUANTITY = PT_DETAIL-MENGE.
LT_POITEM-PO_UNIT = PT_DETAIL-MEINS.
LT_POITEM-MATERIAL = PT_DETAIL-MATNR.
LT_POITEM-PLANT = PT_DETAIL-WERKS.
* LT_POITEM-NET_PRICE = PT_DETAIL-ZDJ . “净价
LT_POITEM-PREQ_NO = PT_DETAIL-BANFN.
LT_POITEM-PREQ_ITEM = PT_DETAIL-BNFPO.
LT_POITEM-TRACKINGNO = PT_DETAIL-BEDNR.
LT_POITEM-PREQ_NAME = SY-UNAME.
LT_POITEM-ITEM_CAT = ‘0’.
PERFORM FRM_SET_LGORT CHANGING LT_POITEM.
APPEND LT_POITEM.
CLEAR LT_POITEM.
LT_POITEMX-PO_ITEM = LV_EBELP .
LT_POITEMX-QUANTITY = CON_X.
LT_POITEMX-PO_UNIT = CON_X.
LT_POITEMX-MATERIAL = CON_X.
LT_POITEMX-PLANT = CON_X.
LT_POITEMX-STGE_LOC = CON_X.
LT_POITEMX-TAX_CODE = CON_X.
LT_POITEMX-NET_PRICE = CON_X.
LT_POITEMX-PREQ_NO = CON_X.
LT_POITEMX-PREQ_ITEM = CON_X.
LT_POITEMX-TRACKINGNO = CON_X.
LT_POITEMX-PREQ_NAME = CON_X.
LT_POITEMX-ITEM_CAT = CON_X.
APPEND LT_POITEMX.
CLEAR LT_POITEMX.
*交货时间表
LT_POSCHEDULE-PO_ITEM = LV_EBELP .
LT_POSCHEDULE-SCHED_LINE = ‘0001’.
LT_POSCHEDULE-DEL_DATCAT_EXT = ‘D’.
* LT_POSCHEDULE-DELIVERY_DATE = SY-DATUM + 5.
LT_POSCHEDULE-QUANTITY = PT_DETAIL-MENGE.
APPEND LT_POSCHEDULE.
CLEAR LT_POSCHEDULE.
LT_POSCHEDULEX-PO_ITEM = LV_EBELP.
LT_POSCHEDULEX-SCHED_LINE = ‘0001’.
LT_POSCHEDULEX-DEL_DATCAT_EXT = CON_X.
LT_POSCHEDULEX-DELIVERY_DATE = CON_X.
LT_POSCHEDULEX-QUANTITY = CON_X.
APPEND LT_POSCHEDULEX.
CLEAR LT_POSCHEDULEX.
* LT_POCOND-ITM_NUMBER = LV_EBELP.
** LT_POCOND-COND_VALUE = PT_DETAIL-ZDJ. “价格
* APPEND LT_POCOND.
* CLEAR LT_POCOND.
*
* LT_POCONDX-ITM_NUMBER = LV_EBELP.
* LT_POCONDX-COND_VALUE = ‘X’.
* APPEND LT_POCONDX.
* CLEAR LT_POCONDX.
*增强,扩展字段
LS_HEADER_EXT-ZZ001 = EKKO-ZZ001.
LS_HEADER_EXTX-ZZ001 = ‘X’.
CLEAR: LT_EXTENSIONIN.
LT_EXTENSIONIN-STRUCTURE = ‘BAPI_TE_MEPOHEADER’.
LT_EXTENSIONIN-VALUEPART1 = LS_HEADER_EXT.
APPEND LT_EXTENSIONIN.
CLEAR: LT_EXTENSIONIN.
LT_EXTENSIONIN-STRUCTURE = ‘BAPI_TE_MEPOHEADERX’.
LT_EXTENSIONIN-VALUEPART1 = LS_HEADER_EXTX.
APPEND LT_EXTENSIONIN.
ENDLOOP.
CALL FUNCTION ‘BAPI_PO_CREATE1’
EXPORTING
POHEADER = POHEADER
POHEADERX = POHEADERX
IMPORTING
EXPPURCHASEORDER = LV_EBELN
TABLES
RETURN = LT_RETURN[]
POITEM = LT_POITEM[]
POITEMX = LT_POITEMX[]
POSCHEDULE = LT_POSCHEDULE[]
POSCHEDULEX = LT_POSCHEDULEX[]
POCOND = LT_POCOND[]
POCONDX = LT_POCONDX[]
EXTENSIONIN = LT_EXTENSIONIN[].
READ TABLE LT_RETURN WITH KEY TYPE = ‘E’.
IF SY-SUBRC <> 0.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
WAIT = ‘X’.
MESSAGE S001(00) WITH LV_MSGTX.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
MESSAGE S001(00) WITH LV_MSGTX DISPLAY LIKE ‘E’.
ENDIF.
如果出错了。可以查看表EKKO,EKPO等相关表去对照信息哦。
本文链接 :http://www.hot583.com/2022/04/19/bapi_po_create1/
本文为作者原创,如果这篇文章对您有用,欢迎转载,
转载请务必注明来源《今日热点在看》http://www.hot583.com/
我的微信公众号【 hot583 】 或者在这个链接联系我
微信原文《全文完》