SAP BAPI BAPI_PO_CREATE1创建采购订单

这段代码展示了如何使用BAPI_BAPI_PO_CREATE1创建采购订单,包括设置行项目、会计科目、条件价格等信息,并处理可能出现的错误。通过这个过程,可以自动化地为不同的项目分配编号并管理采购流程。

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

使用BAPI: BAPI_PO_CREATE1创建采购订单,默认情况下行项目是自动编号的。

代码示例:
DATA:lt_poheader LIKE TABLE OF bapimepoheader WITH HEADER LINE,
lt_poheaderx LIKE TABLE OF bapimepoheaderx WITH HEADER LINE,"针对要增加的内容做一个标记,其实标记过了才可以被修改的
lt_poitem LIKE TABLE OF bapimepoitem WITH HEADER LINE, "po中item的内容,内表
lt_poitemx LIKE TABLE OF bapimepoitemx WITH HEADER LINE,."po中item增加内容的标记 内表
lt_poschedule LIKE TABLE OF bapimeposchedule WITH HEADER LINE,
lt_poschedulex LIKE TABLE OF bapimeposchedulx WITH HEADER LINE,
lt_poaccount LIKE TABLE OF bapimepoaccount WITH HEADER LINE,
lt_poaccountx LIKE TABLE OF bapimepoaccountx WITH HEADER LINE,
lt_pocond LIKE TABLE OF bapimepocond WITH HEADER LINE,
lt_pocondx LIKE TABLE OF bapimepocondx WITH HEADER LINE,
lt_potextitem LIKE TABLE OF bapimepotext WITH HEADER LINE,
lt_potext_header LIKE TABLE OF bapimepotextheader WITH HEADER LINE,
l_exppurchaseorder LIKE bapimepoheader-po_number,
gt_return LIKE TABLE OF bapiret2 WITH HEADER LINE, "消息返回, 内表
ls_return TYPE bapiret2. "消息 返回 ,工作区

lt_poaccount-po_item = it_body-ebelp.
lt_poaccount-quantity = it_body-menge.
lt_poaccount-gl_account = it_body_q-sakto. "总账科目
lt_poaccount-costcenter = it_body_q-kostl. "成本中心
lt_poaccount-asset_no = it_body_q-anln1. "资产号 20180316
IF lt_poaccount-costcenter IS NOT INITIAL .
lt_poitem-acctasscat = ‘K’.
ENDIF.
lt_poaccount-co_area = ‘SHGC’.

lt_poaccountx-po_item = it_body-ebelp.
lt_poaccountx-quantity = ‘X’.
lt_poaccountx-gl_account = ‘X’. "总账科目
lt_poaccountx-co_area = ‘X’.
lt_poaccountx-wbs_element = ‘X’.
lt_poaccountx-network = ‘X’.
lt_poaccountx-asset_no = ‘X’.
APPEND lt_poaccountx.

lt_poitem-trackingno = it_body-bednr.
lt_poitem-gr_basediv = ‘’.
"Insert by phmzhou on 20200528 begin

CLEAR : lt_poitemx.
lt_poitemx-po_item = it_body-ebelp.
lt_poitemx-acctasscat = 'X'.
lt_poitemx-item_cat = 'X'.
lt_poitemx-material = 'X'.
IF it_body-knttp = 'A'."如果是固定资产采购
  lt_poitemx-short_text = 'X'.
  lt_poitemx-gr_non_val = 'X'.
ENDIF.

lt_poitemx-plant = 'X'.
lt_poitemx-quantity = 'X'.
lt_poitemx-po_unit = 'X'."采购订单单位
lt_poitemx-net_price = 'X'.
lt_poitemx-free_item = 'X'.
lt_poitemx-matl_group = 'X'.
lt_poitemx-price_unit = 'X'.
lt_poitemx-preq_name = 'X'.
lt_poitemx-funds_ctr = 'X'.
lt_poitemx-cmmt_item = 'X'.
lt_poitemx-preq_no = 'X'.
lt_poitemx-preq_item = 'X'.
lt_poitemx-tax_code = 'X'.
lt_poitemx-over_dlv_tol = 'X'.
lt_poitemx-unlimited_dlv ='X'.
lt_poitemx-under_dlv_tol = 'X'.
lt_poitemx-trackingno = 'X'.
lt_poitemx-vend_mat = 'X'.
lt_poitemx-preq_name = 'X'.                            
lt_poitemx-gr_basediv = 'X'.
APPEND lt_poitemx.
  • 增加条件价格
    CLEAR:lt_pocond.
    lt_pocond-itm_number = it_body-ebelp.
    lt_pocond-cond_type = ‘PBXX’.
    lt_pocond-cond_value = ( it_body-netpr / 10 ). "价格
  • if it_body-peinh is INITIAL or it_body-peinh = 0 or it_body-peinh = ‘’.
    lt_pocond-cond_p_unt = ‘1’.
  • ENDIF.
    lt_pocond-change_id = ‘U’.
    APPEND lt_pocond.
    CLEAR:lt_pocondx.
    lt_pocondx-itm_number = it_body-ebelp.
    lt_pocondx-itm_numberx = ‘X’.
    lt_pocondx-cond_type = ‘X’.
    lt_pocondx-cond_value = ‘X’. "价格
    lt_pocondx-cond_p_unt = ‘X’.
    lt_pocondx-change_id = ‘X’.
    APPEND lt_pocondx.
lt_poitem-po_unit = it_body-meins."采购订单单位20180524
lt_poitem-net_price = it_body-netpr. "价格
IF lt_poitem-net_price = 0.
  lt_poitem-free_item = 'X'.
ENDIF.
lt_poitem-matl_group = it_body-matkl. "物料组
lt_poitem-price_unit = it_body-peinh.
lt_poitem-preq_name = it_body-afnam.
lt_poitem-funds_ctr = it_body-fistl."基金中心
lt_poitem-cmmt_item = it_body-fipos."承诺项目
lt_poitem-preq_no = it_body-banfn."采购申请
lt_poitem-preq_item = it_body-bnfpo.
lt_poitem-tax_code = it_body-mwskz. "税码
lt_poitem-over_dlv_tol = it_body-uebto.
lt_poitem-unlimited_dlv = it_body-uebtk.
lt_poitem-under_dlv_tol = it_body-untto.
lt_poitem-preq_name = it_body-afnam. 

CALL FUNCTION
‘BAPI_PO_CREATE1’
EXPORTING
poheader = lt_poheader
poheaderx = lt_poheaderx
IMPORTING
exppurchaseorder = l_exppurchaseorder
TABLES
poitem = lt_poitem
poitemx = lt_poitemx
poschedule = lt_poschedule
poschedulex = lt_poschedulex
potextheader = lt_potext_header
potextitem = lt_potextitem "20191024新增 行项目文本
poaccount = lt_poaccount
poaccountx = lt_poaccountx
pocond = lt_pocond
pocondx = lt_pocondx
return = gt_return.

LOOP AT gt_return INTO ls_return WHERE type = ‘E’ OR type = ‘A’.
lv_flag = ‘X’.
lv_bapi_msg = lv_bapi_msg && ls_return-message.
ENDLOOP.

IF lv_flag = ‘X’.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
ls_return-type = ‘F’.
e_result = lv_bapi_msg.
CONCATENATE ‘{’ ‘“EBELN”:" "’ ‘,’ ‘“ZRES_SIGN”:“F”’ ‘,’ ‘“ZRES_MES”:’ ‘"‘e_result’"’ '}'INTO e_result.

ELSE.
IF status = ‘0’.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
lv_bapi_msg = ‘采购订单数据检查正确’.
CLEAR l_exppurchaseorder.

  •  LV_BAPI_MSG = E_RESULT.
    
    ELSE.
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
    EXPORTING
    wait = ‘X’.
    CONCATENATE ‘物资采购订单:’ l_exppurchaseorder ‘创建成功’ ‘时间’ sy-datum ‘日期’ sy-uzeit INTO lv_bapi_msg.
    CONCATENATE
    ‘{’ ‘“EBELN”:’ ‘"‘l_exppurchaseorder’"’ ‘,’ ‘“ZRES_SIGN”:“S”’ ‘,’ ‘“ZRES_MES”:’ ‘"‘lv_bapi_msg’"’ ‘}’
    INTO e_result.

ENDIF.

SAP BAPI_PO_CREATE1是一个SAP系统中的功能模块,用于创建采购订单(Purchase Order)。通过该功能模块,我们可以使用SAP系统来快速创建和维护采购订单的相关数据。 使用BAPI_PO_CREATE1,我们可以通过调用该功能模块来向SAP系统中创建新的采购订单。在调用该功能模块时,我们需要提供一些必要的输入参数,如采购订单的相关信息、采购组织和公司代码等。 这个功能模块可以帮助我们在SAP系统中自动化采购订单创建流程。它可以根据输入的参数,自动生成采购订单,并将相关的物料、供应商和价格等信息添加到订单中。 通过使用BAPI_PO_CREATE1,我们可以实现以下功能: 1. 创建采购订单:我们可以通过调用该功能模块来创建新的采购订单。在调用时,我们需要提供订单的相关信息,如供应商、物料、数量、交货日期等。系统会根据提供的信息自动创建采购订单。 2. 修改采购订单:除了创建新的采购订单,我们还可以使用BAPI_PO_CREATE1来修改现有的采购订单。在调用时,我们需要提供订单的标识符和要修改的字段及对应的值。系统将根据提供的信息来更新采购订单的数据。 3. 检查采购订单:在调用BAPI_PO_CREATE1之前,我们可以先使用BAPI_PO_EXISTENCE_CHECK来检查采购订单是否存在。这可以帮助我们避免重复创建订单或更新不存在的订单。 总而言之,SAP BAPI_PO_CREATE1是一个用于创建和维护采购订单的功能模块。它可以帮助我们在SAP系统中实现自动化的采购订单处理,并提高采购过程的效率和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值