导语:没有导语,直接看代码吧。
BAPI名称:BAPI_PO_CREATE1
BAPI描述:采购订单创建
DATA: ls_poheader TYPE bapimepoheader,
ls_poheaderx TYPE bapimepoheaderx,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2,
lt_poitem TYPE STANDARD TABLE OF bapimepoitem,
ls_poitem TYPE bapimepoitem,
lt_poitemx TYPE STANDARD TABLE OF bapimepoitemx,
ls_poitemx TYPE bapimepoitemx,
lt_poschedule TYPE STANDARD TABLE OF bapimeposchedule,
ls_poschedule TYPE bapimeposchedule,
lt_poschedulex TYPE STANDARD TABLE OF bapimeposchedulx,
ls_poschedulex TYPE bapimeposchedulx,
lt_pocond TYPE STANDARD TABLE OF bapimepocond,
ls_pocond TYPE bapimepocond,
lt_pocondx TYPE STANDARD TABLE OF bapimepocondx,
ls_pocondx TYPE bapimepocondx,
* lt_pocomponents TYPE STANDARD TABLE OF bapimepocomponent,
* ls_pocomponents TYPE bapimepocomponent,
* lt_pocomponentsx TYPE STANDARD TABLE OF bapimepocomponentx,
* ls_pocomponentsx TYPE bapimepocomponentx,
*
lt_poaccount TYPE STANDARD TABLE OF bapimepoaccount,
lt_poaccountx TYPE STANDARD TABLE OF bapimepoaccountx,
ls_poaccount TYPE bapimepoaccount,
ls_poaccountx TYPE bapimepoaccountx.
DATA: ls_potextitem TYPE bapimepotext, "ADD BY YANG 190628 增加长文本
lt_potextitem TYPE STANDARD TABLE OF bapimepotext.
*
DATA: lt_extensionin TYPE TABLE OF bapiparex WITH HEADER LINE,
* ls_item_ext TYPE bapi_te_mepoitem,
* ls_item_extx TYPE bapi_te_mepoitemx,
ls_header_ext TYPE bapi_te_mepoheader,
ls_header_extx TYPE bapi_te_mepoheaderx.
DATA: lv_ebeln TYPE ekko-ebeln,
lv_kostl TYPE ekkn-kostl.
DATA: lv_ebelp TYPE ebelp,
lv_material TYPE matnr18.
DATA: lv_unit TYPE bstme.
CHECK is_head IS NOT INITIAL AND it_data[] IS NOT INITIAL.
is_head-lifnr = |{ is_head-lifnr ALPHA = IN }|.
* 没有币种,价格翻了10倍 这里判断下
IF is_head-waers EQ ''.
SELECT SINGLE waers INTO is_head-waers FROM lfm1
WHERE lfm1~lifnr = is_head-lifnr
AND lfm1~ekorg = is_head-ekorg.
IF is_head-waers EQ ''.
es_return-type = 'E'.
es_return-message = '请输入币种!'.
ENDIF.
ENDIF.
ls_poheader-doc_type = is_head-bsart. "采购类型
ls_poheader-vendor = is_head-lifnr. "供应商帐户号
ls_poheader-purch_org = is_head-ekorg. "采购组织
ls_poheader-pur_group = is_head-ekgrp. "采购组
ls_poheader-currency = is_head-waers. "货币码
ls_poheader-created_by = sy-uname. "对象创建人姓名
ls_poheader-creat_date = sy-datum. "记录建立日期
ls_poheader-langu = sy-langu. "语言
ls_poheader-status = 'I'. "采购凭证的状态
ls_poheader-comp_code = is_head-bukrs. "公司代码
* ls_poheader-pmnttrms = is_head-zterm."收付条件代码
ls_poheader-item_intvl = space. "项目编号间隔
ls_poheaderx-doc_type = 'X'.
ls_poheaderx-vendor = 'X'.
ls_poheaderx-purch_org = 'X'.
ls_poheaderx-pur_group = 'X'.
ls_poheaderx-comp_code = 'X'.
ls_poheaderx-doc_date = 'X'.
ls_poheaderx-langu = 'X'.
ls_poheaderx-currency = 'X'.
ls_poheaderx-status = 'X'.
ls_poheaderx-comp_code = 'X'.
ls_poheaderx-pmnttrms = 'X'.
ls_poheaderx-item_intvl = 'X'.
"增强字段
lt_extensionin-structure = 'BAPI_TE_MEPOHEADER'.
lt_extensionin-valuepart1 = ls_header_ext.
APPEND lt_extensionin.
CLEAR: ls_header_ext.
lt_extensionin-structure = 'BAPI_TE_MEPOHEADERX'.
lt_extensionin-valuepart1 = ls_header_extx.
APPEND lt_extensionin.
CLEAR: ls_header_extx.
SORT it_data BY ebelp.
LOOP AT it_data ASSIGNING FIELD-SYMBOL(<fs_data>).
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <fs_data>-matnr
IMPORTING
output = lv_material.
IF <fs_data>-ebelp IS NOT INITIAL.
lv_ebelp = <fs_data>-ebelp.
ELSE.
lv_ebelp = lv_ebelp + 10.
ENDIF.
"添加行项目
ls_poitem-po_item = lv_ebelp. "采购凭证的项目编号
ls_poitem-item_cat = <fs_data>-pstyp. "采购凭证中的项目类别
ls_poitem-ematerial = lv_material. "物料编号(18 字符,兼容模式)
ls_poitem-short_text = <fs_data>-txz01. "短文本
ls_poitem-plant = <fs_data>-werks. "工厂
ls_poitem-stge_loc = <fs_data>-lgort. "库存地点
ls_poitem-quantity = <fs_data>-menge. "采购订单数量
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = <fs_data>-meins
language = sy-langu
IMPORTING
output = lv_unit.
ls_poitem-po_unit = lv_unit. "采购订单计量单位
ls_poitem-tax_code = <fs_data>-mwskz. "销售/购买税代码
ls_poitem-acctasscat = <fs_data>-knttp. "科目分配类别
ls_poitem-matl_group = <fs_data>-matkl. "物料组
APPEND ls_poitem TO lt_poitem.
CLEAR: ls_poitem.
"采购订单项目数据(更改参数)
ls_poitemx-po_item = lv_ebelp. "采购凭证的项目编号
ls_poitemx-po_itemx = 'X'. "采购凭证的项目编号
ls_poitemx-item_cat = 'X'. "采购凭证中的项目类别
ls_poitemx-ematerial = 'X'. "物料编号(18 字符,兼容模式)
* ADD BY YANG 20200115
IF is_head-bsart EQ 'ZCAP' OR <fs_data>-txz01 NE ''.
ls_poitemx-short_text = 'X'.
ENDIF.
* lt_poitemx-short_text = 'X'. "短文本
ls_poitemx-plant = 'X'. "工厂
ls_poitemx-stge_loc = 'X'. "库存地点
ls_poitemx-quantity = 'X'. "采购订单数量
ls_poitemx-po_unit = 'X'. "采购订单计量单位
ls_poitemx-tax_code = 'X'. "销售/购买税代码
ls_poitemx-acctasscat = 'X'. "科目分配类别
ls_poitemx-matl_group = 'X'. "物料组
APPEND ls_poitemx TO lt_poitemx.
CLEAR: ls_poitemx.
"采购订单交货计划行的字段
ls_poschedule-po_item = lv_ebelp. "采购凭证的项目编号
ls_poschedule-sched_line = 1. "采购凭证的项目编号
ls_poschedule-delivery_date = <fs_data>-eindt. "交货日期
ls_poschedule-quantity = <fs_data>-menge. "采购订单数量
APPEND ls_poschedule TO lt_poschedule.
CLEAR: ls_poschedule.
"采购订单中的计划行字段 (更改工具栏)
ls_poschedulex-po_item = lv_ebelp. "采购凭证的项目编号
ls_poschedulex-sched_line = 1. "采购凭证的项目编号
ls_poschedulex-delivery_date = 'X'. "交货日期
ls_poschedulex-quantity = 'X'. "采购订单数量
APPEND ls_poschedulex TO lt_poschedulex.
CLEAR: ls_poschedulex.
"采购订单中的条件 使用批导价格
ls_pocond-itm_number = lv_ebelp.
ls_pocond-cond_type = 'PBXX'.
ls_pocond-cond_value = <fs_data>-netpr. "条件金额(价格)
ls_pocond-cond_p_unt = <fs_data>-peinh.
ls_pocond-cond_unit = lv_unit. "条件单位
ls_pocond-cond_p_unt = 1. "价格单位
ls_pocond-currency = is_head-waers. "货币码
ls_pocond-change_id = 'I'. "更改类型
APPEND ls_pocond TO lt_pocond.
CLEAR: ls_pocond.
"采购订单项目数据(更改参数)
ls_pocondx-itm_number = lv_ebelp.
ls_pocondx-cond_type = 'X'.
ls_pocondx-cond_value = 'X'.
ls_pocondX-cond_p_unt = 'X'.
ls_pocondx-cond_unit = 'X'.
ls_pocondx-cond_p_unt = 'X'.
ls_pocondx-currency = 'X'.
ls_pocondx-change_id = 'X'.
APPEND ls_pocondx TO lt_pocondx.
CLEAR: ls_pocondx.
IF <fs_data>-knttp EQ 'K'.
ls_poaccount-po_item = lv_ebelp.
* ls_poaccount-serial_no = '01'.
lv_kostl = |{ <fs_data>-kostl ALPHA = OUT }|.
ls_poaccount-costcenter = |{ <fs_data>-kostl ALPHA = IN }|.
ls_poaccount-gl_account = <fs_data>-saknr.
ls_poaccount-co_area = '1000'.
APPEND ls_poaccount TO lt_poaccount.
ls_poaccountx-po_item = lv_ebelp.
* ls_poaccountx-serial_no = '01'.
ls_poaccountx-gl_account = 'X'.
ls_poaccountx-costcenter = 'X'.
ls_poaccountx-co_area = 'X'.
ls_poaccountx-serial_no = 'X'.
* ls_poaccountx-sd_doc = 'X'.
* ls_poaccountx-itm_number = 'X'.
APPEND ls_poaccountx TO lt_poaccountx.
ENDIF.
"行项目文本
ls_potextitem-po_item = lv_ebelp. "采购凭证的项目编号
ls_potextitem-text_id = 'F01'. "文本 ID
ls_potextitem-text_line = <fs_data>-sgtxt. "文本行
APPEND ls_potextitem TO lt_potextitem.
CLEAR: ls_potextitem.
"增强字段
* gs_item_ext-po_item = lv_ebelp.
** gs_item_ext-zyont = <fs_data>-zyont.
* gs_item_ext-zzhtbh = <fs_data>-zzhtbh.
* lt_extensionin-structure = 'BAPI_TE_MEPOITEM'.
* lt_extensionin-valuepart1 = gs_item_ext.
* APPEND lt_extensionin.
* CLEAR: gs_item_ext.
* gs_item_extx-po_item = lv_ebelp.
* gs_item_extx-zyont = 'X'.
* gs_item_extx-zzhtbh = 'X'.
* lt_extensionin-structure = 'BAPI_TE_MEPOITEMX'.
* lt_extensionin-valuepart1 = gs_item_extx.
* APPEND lt_extensionin.
* CLEAR: gs_item_extx.
ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = ls_poheader
poheaderx = ls_poheaderx
no_price_from_po = 'X'
IMPORTING
exppurchaseorder = lv_ebeln
* expheader =
* EXPPOEXPIMPHEADER =
TABLES
return = lt_return
poitem = lt_poitem
poitemx = lt_poitemx
* POADDRDELIVERY =
poschedule = lt_poschedule
poschedulex = lt_poschedulex
poaccount = lt_poaccount
* POACCOUNTPROFITSEGMENT =
poaccountx = lt_poaccountx
* POCONDHEADER =
* POCONDHEADERX =
pocond = lt_pocond
pocondx = lt_pocondx
extensionin = lt_extensionin
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
potextitem = lt_potextitem.
READ TABLE lt_return INTO ls_return WITH KEY type = 'S'.
IF sy-subrc = '0'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
数据示例:
*&---------------------------------------------------------------------*
*& Report Z_JYH_TEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_jyh_test.
DATA: ls_poheader TYPE bapimepoheader,
ls_poheaderx TYPE bapimepoheaderx,
lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2,
lt_poitem TYPE STANDARD TABLE OF bapimepoitem,
ls_poitem TYPE bapimepoitem,
lt_poitemx TYPE STANDARD TABLE OF bapimepoitemx,
ls_poitemx TYPE bapimepoitemx,
lt_poschedule TYPE STANDARD TABLE OF bapimeposchedule,
ls_poschedule TYPE bapimeposchedule,
lt_poschedulex TYPE STANDARD TABLE OF bapimeposchedulx,
ls_poschedulex TYPE bapimeposchedulx,
lt_pocond TYPE STANDARD TABLE OF bapimepocond,
ls_pocond TYPE bapimepocond,
lt_pocondx TYPE STANDARD TABLE OF bapimepocondx,
ls_pocondx TYPE bapimepocondx,
lt_poaccount TYPE STANDARD TABLE OF bapimepoaccount,
lt_poaccountx TYPE STANDARD TABLE OF bapimepoaccountx,
ls_poaccount TYPE bapimepoaccount,
ls_poaccountx TYPE bapimepoaccountx.
DATA: ls_potextitem TYPE bapimepotext,
lt_potextitem TYPE STANDARD TABLE OF bapimepotext.
*
DATA: lt_extensionin TYPE TABLE OF bapiparex WITH HEADER LINE,
* ls_item_ext TYPE bapi_te_mepoitem,
* ls_item_extx TYPE bapi_te_mepoitemx,
ls_header_ext TYPE bapi_te_mepoheader,
ls_header_extx TYPE bapi_te_mepoheaderx.
DATA: lv_ebeln TYPE ekko-ebeln,
lv_kostl TYPE ekkn-kostl.
DATA: lv_ebelp TYPE ebelp,
lv_material TYPE matnr18.
DATA: lv_unit TYPE bstme.
ls_poheader-doc_type = 'Z001'. "采购类型
ls_poheader-vendor = '0008000012'. "供应商帐户号
ls_poheader-purch_org = '1000'. "采购组织
ls_poheader-pur_group = 'A01'. "采购组
ls_poheader-currency = 'CNY'. "货币码
ls_poheader-created_by = sy-uname. "对象创建人姓名
ls_poheader-creat_date = sy-datum. "记录建立日期
ls_poheader-langu = sy-langu. "语言
ls_poheader-status = 'I'. "采购凭证的状态
ls_poheader-comp_code = '1000'. "公司代码
* ls_poheader-pmnttrms = is_head-zterm."收付条件代码
ls_poheader-item_intvl = space. "项目编号间隔
ls_poheaderx-doc_type = 'X'.
ls_poheaderx-vendor = 'X'.
ls_poheaderx-purch_org = 'X'.
ls_poheaderx-pur_group = 'X'.
ls_poheaderx-comp_code = 'X'.
ls_poheaderx-doc_date = 'X'.
ls_poheaderx-langu = 'X'.
ls_poheaderx-currency = 'X'.
ls_poheaderx-status = 'X'.
ls_poheaderx-comp_code = 'X'.
ls_poheaderx-pmnttrms = 'X'.
ls_poheaderx-item_intvl = 'X'.
"增强字段
lt_extensionin-structure = 'BAPI_TE_MEPOHEADER'.
lt_extensionin-valuepart1 = ls_header_ext.
APPEND lt_extensionin.
CLEAR: ls_header_ext.
lt_extensionin-structure = 'BAPI_TE_MEPOHEADERX'.
lt_extensionin-valuepart1 = ls_header_extx.
APPEND lt_extensionin.
CLEAR: ls_header_extx.
"添加行项目
ls_poitem-po_item = '10'. "采购凭证的项目编号
ls_poitem-item_cat = '0'. "采购凭证中的项目类别
ls_poitem-ematerial = '000000005990000001'. "物料编号(18 字符,兼容模式)
ls_poitem-short_text = '实芯焊丝-φ0.8'. "短文本
ls_poitem-plant = '1000'. "工厂
ls_poitem-stge_loc = ''. "库存地点
ls_poitem-quantity = '2.000'. "采购订单数量
ls_poitem-po_unit = 'KG'. "采购订单计量单位
ls_poitem-tax_code = 'J1'. "销售/购买税代码
ls_poitem-acctasscat = ''. "科目分配类别
ls_poitem-matl_group = '1001'. "物料组
ls_poitem-PREQ_NO = '0010000007'. "采购申请单号
ls_poitem-PREQ_ITEM = '00020'. "采购申请行号
APPEND ls_poitem TO lt_poitem.
CLEAR: ls_poitem.
"采购订单项目数据(更改参数)
ls_poitemx-po_item = '10'. "采购凭证的项目编号
ls_poitemx-po_itemx = 'X'. "采购凭证的项目编号
ls_poitemx-item_cat = 'X'. "采购凭证中的项目类别
ls_poitemx-ematerial = 'X'. "物料编号(18 字符,兼容模式)
ls_poitemx-short_text = 'X'.
ls_poitemx-plant = 'X'. "工厂
ls_poitemx-stge_loc = 'X'. "库存地点
ls_poitemx-quantity = 'X'. "采购订单数量
ls_poitemx-po_unit = 'X'. "采购订单计量单位
ls_poitemx-tax_code = 'X'. "销售/购买税代码
ls_poitemx-acctasscat = 'X'. "科目分配类别
ls_poitemx-matl_group = 'X'. "物料组
ls_poitemx-PREQ_NO = 'X'. "采购申请单号
ls_poitemx-PREQ_ITEM = 'X'. "采购申请行号
APPEND ls_poitemx TO lt_poitemx.
CLEAR: ls_poitemx.
"采购订单交货计划行的字段
ls_poschedule-po_item = '10'. "采购凭证的项目编号
ls_poschedule-sched_line = 1. "采购凭证的项目编号
ls_poschedule-delivery_date = sy-datum. "交货日期
ls_poschedule-quantity = 2. "采购订单数量
APPEND ls_poschedule TO lt_poschedule.
CLEAR: ls_poschedule.
"采购订单中的计划行字段 (更改工具栏)
ls_poschedulex-po_item = '10'. "采购凭证的项目编号
ls_poschedulex-sched_line = 1. "采购凭证的项目编号
ls_poschedulex-delivery_date = 'X'. "交货日期
ls_poschedulex-quantity = 'X'. "采购订单数量
APPEND ls_poschedulex TO lt_poschedulex.
CLEAR: ls_poschedulex.
"采购订单中的条件 使用批导价格
ls_pocond-itm_number = '10'.
ls_pocond-cond_type = 'PBXX'.
ls_pocond-cond_value = '100'. "条件金额(价格)
ls_pocond-cond_unit = 'KG'. "条件单位
ls_pocond-cond_p_unt = 1. "价格单位
ls_pocond-currency = 'CNY'. "货币码
ls_pocond-change_id = 'I'. "更改类型
APPEND ls_pocond TO lt_pocond.
CLEAR: ls_pocond.
"采购订单项目数据(更改参数)
ls_pocondx-itm_number = '10'.
ls_pocondx-cond_type = 'X'.
ls_pocondx-cond_value = 'X'.
ls_pocondX-cond_p_unt = 'X'.
ls_pocondx-cond_unit = 'X'.
ls_pocondx-currency = 'X'.
ls_pocondx-change_id = 'X'.
APPEND ls_pocondx TO lt_pocondx.
CLEAR: ls_pocondx.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = ls_poheader
poheaderx = ls_poheaderx
no_price_from_po = 'X'
IMPORTING
exppurchaseorder = lv_ebeln
TABLES
return = lt_return
poitem = lt_poitem
poitemx = lt_poitemx
* POADDRDELIVERY =
poschedule = lt_poschedule
poschedulex = lt_poschedulex
poaccount = lt_poaccount
* POACCOUNTPROFITSEGMENT =
poaccountx = lt_poaccountx
* POCONDHEADER =
* POCONDHEADERX =
pocond = lt_pocond
pocondx = lt_pocondx.
* extensionin = lt_extensionin
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
* POTEXTHEADER =
* potextitem = lt_potextitem.
READ TABLE lt_return INTO ls_return WITH KEY type = 'S'.
IF sy-subrc = '0'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
作者:小飞猪猪猪猪猪猪猪–CSDN