SAP ABAP BAPI函数50连载之19-BAPI_PO_CREATE1采购订单创建

上次我们讲到了采购申请的创建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 】 或者在这个链接联系我

微信原文《全文完》

今日热点在看SAP HOT583