BAPI调用 - 创建po的bapi BAPI_PO_CREATE1

*/--------- 採購單 表頭資訊
LOOP AT ITAB_PO_HEADER .

    POHEAD-COMP_CODE = ITAB_PO_HEADER-BUKRS .     " 公司
    POHEAD-DOC_TYPE   = ITAB_PO_HEADER-BSART .    " 單據類別
    POHEAD-CREAT_DATE = SY-DATUM   .              " 建立日期
    POHEAD-VENDOR = ITAB_PO_HEADER-LIFNR.         " 供應商
    POHEAD-PURCH_ORG = ITAB_PO_HEADER-EKORG .     " 採購組織
    POHEAD-PUR_GROUP = ITAB_PO_HEADER-EKGRP.      " 採購群組
    POHEAD-LANGU      = SY-LANGU   .
    POHEAD-DOC_DATE   = SY-DATUM.
    POHEADX-COMP_CODE  = C_X.
    POHEADX-DOC_TYPE   = C_X.
    POHEADX-CREAT_DATE = C_X.
    POHEADX-VENDOR     = C_X.
    POHEADX-PURCH_ORG  = C_X.
    POHEADX-PUR_GROUP  = C_X.
    POHEADX-LANGU      = C_X.
    POHEADX-DOC_DATE   = C_X.


*/------------ 物料數量 資訊
      ITAB_POITEM-PO_ITEM  = W_EBELP .             " 項次編號
      ITAB_POITEM-MATERIAL = ITAB_PO-MATNR .       " 料號
      ITAB_POITEM-PLANT    = ITAB_PO-WERKS .       " 工廠
      ITAB_POITEM-STGE_LOC = ITAB_PO-LGORT .       " 倉別
      ITAB_POITEM-QUANTITY = ITAB_PO-LABST .       " 數量
      ITAB_POITEM-PO_UNIT =  ITAB_PO-MEINS .       " 單位
      ITAB_POITEM-NET_PRICE = ITAB_PO-CURR_PR .    " 單價
      ITAB_POITEM-PRICE_UNIT = ITAB_PO-PEINH.      " 單價基數 ITAB_PO-PEINH ,
      ITAB_POITEM-PREQ_NAME = 'BAPI' .             " 申請人
      ITAB_POITEM-RET_ITEM = 'X' .                 " 退貨註記
      ITAB_POITEM-TRACKINGNO = ITAB_PO-EBELN .     " 上一筆採購單
      ITAB_POITEM-SHORT_TEXT = ITAB_PO-TXZ01 .     " 發票號碼資訊
      APPEND ITAB_POITEM.
      CLEAR ITAB_POITEM.

      ITAB_POITEMX-PO_ITEM    = W_EBELP .
      ITAB_POITEMX-PO_ITEMX   = C_X .
      ITAB_POITEMX-MATERIAL   = C_X .
      ITAB_POITEMX-PLANT      = C_X .
      ITAB_POITEMX-STGE_LOC   = C_X .
      ITAB_POITEMX-QUANTITY   = C_X .
      ITAB_POITEMX-PO_UNIT     = C_X .
      ITAB_POITEMX-NET_PRICE   = C_X .
      ITAB_POITEMX-PRICE_UNIT  = C_X .
      ITAB_POITEMX-PREQ_NAME   = C_X .
      ITAB_POITEMX-RET_ITEM    = C_X .
      ITAB_POITEMX-TRACKINGNO  = C_X .
      ITAB_POITEMX-SHORT_TEXT  = C_X .
      ITAB_POITEMX-TAX_CODE   = C_X .
      ITAB_POITEMX-ITEM_CAT   = C_X .
      ITAB_POITEMX-ACCTASSCAT = C_X .
      APPEND ITAB_POITEMX.
      CLEAR ITAB_POITEMX.


*/---------------- 排程資訊
      ITAB_POSCHED-PO_ITEM        = W_EBELP .
      ITAB_POSCHED-SCHED_LINE     = W_EBELP .
      ITAB_POSCHED-DEL_DATCAT_EXT = 'D'.
      DEL_DATE = SY-DATUM + 1.
      WRITE DEL_DATE TO ITAB_POSCHED-DELIVERY_DATE.
      ITAB_POSCHED-DELIV_TIME     = '000001'.
      ITAB_POSCHED-QUANTITY       = ITAB_PO-LABST.
      APPEND ITAB_POSCHED.
      CLEAR ITAB_POSCHED.

      ITAB_POSCHEDX-PO_ITEM        = W_EBELP.
      ITAB_POSCHEDX-SCHED_LINE     = W_EBELP.
      ITAB_POSCHEDX-PO_ITEMX       = C_X.
      ITAB_POSCHEDX-SCHED_LINEX    = C_X.
      ITAB_POSCHEDX-DEL_DATCAT_EXT = C_X.
      ITAB_POSCHEDX-DELIVERY_DATE  = C_X.
      ITAB_POSCHEDX-QUANTITY       = C_X.
      APPEND ITAB_POSCHEDX.
      CLEAR ITAB_POSCHEDX.


*/----CALL BAPI FUNCTION ----------------------------
  CALL FUNCTION 'BAPI_PO_CREATE1'
       EXPORTING
            POHEADER         = POHEAD
            POHEADERX        = POHEADX
            TESTRUN          = ' '
            NO_PRICE_FROM_PO = 'X'
       IMPORTING
            EXPPURCHASEORDER = EX_PO_NUMBER
            EXPHEADER        = EXP_HEAD
       TABLES
            RETURN           = RETURN
            POITEM           = ITAB_POITEM
            POITEMX          = ITAB_POITEMX
            POSCHEDULE       = ITAB_POSCHED
            POSCHEDULEX      = ITAB_POSCHEDX .


  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
            WAIT = 'X' .



转载自:http://blog.youkuaiyun.com/shiyanghua/article/details/2800473


### 使用 BAPI_PO_CREATE1 增加采购订单行项目的实现方法 在 SAP 系统中,`BAPI_PO_CREATE1` 是用于创建采购订单的标准 BAPI 函数模块。为了向采购订单中新增行项目,需要正确填充 `PO_ITEMS` 参数表中的条目,并将其传递给该函数模块。 以下是关于如何通过 `BAPI_PO_CREATE1` 添加新行项目的详细说明: #### 1. **参数结构** `BAPI_PO_CREATE1` 的主要输入参数包括以下几个部分: - `PURCHASEORDERHEADER`: 包含采购订单头部信息。 - `PO_ITEMS[]`: 表示采购订单的行项目集合。 - `PO_PARTNERS[]`: 定义供应商等相关方的信息。 - `PO_ACCOUNTASSIGNMENTS[]`: 账户分配类别(如成本中心、利润中心等)。 - `PO_SCHEDULE_LINES[]`: 计划行定义交付计划。 对于新增行项目而言,重点在于正确配置 `PO_ITEMS[]` 和关联的账户分配 (`PO_ACCOUNTASSIGNMENTS`) 及计划行 (`PO_SCHEDULE_LINES`) 数据[^3]。 --- #### 2. **代码示例** 以下是一个完整的 ABAP 示例代码,展示如何使用 `BAPI_PO_CREATE1` 来增加新的采购订单行项目: ```abap DATA: ls_header TYPE bapipareh, " 头部数据 lt_items TYPE TABLE OF bapipari, " 行项目列表 ls_item TYPE bapipari, " 单个行项目 lt_account_assignments TYPE TABLE OF bapiaccassgnt, ls_account_assignment TYPE bapiaccassgnt, lt_schedule_lines TYPE TABLE OF bapischdle, ls_schedule_line TYPE bapischdle, lv_return TYPE TABLE OF bapiret2. * 设置采购订单头部信息 ls_header-purch_org = '0001'. " 采购组织 ls_header-purch_grp = '001'. " 采购组 ls_header-vendor = '1000001'. " 供应商编号 * 配置第一个行项目 CLEAR ls_item. ls_item-itemnumber = '00010'. " 行号 (固定长度) ls_item-material = 'MAT10001'. " 物料编码 ls_item-plant = 'PLANT1'. " 工厂 ls_item-currency = 'USD'. " 币种 ls_item-netprice = '100.00'. " 单价 APPEND ls_item TO lt_items. * 配置账户分配 (假设为成本中心) CLEAR ls_account_assignment. ls_account_assignment-itemno_acc = '00010'. " 对应行号 ls_account_assignment-acctasscat = 'K'. " 类型 K=成本中心 ls_account_assignment-costcenter = 'COSTCENTER100'. " 成本中心 APPEND ls_account_assignment TO lt_account_assignments. * 配置计划行 CLEAR ls_schedule_line. ls_schedule_line-item_schdl = '00010'. " 对应行号 ls_schedule_line-schedline = '0001'. " 计划行号 ls_schedule_line-deliverydate = sy-datum + 7. " 交货日期 ls_schedule_line-orderqty = '5'. " 数量 APPEND ls_schedule_line TO lt_schedule_lines. * 调用 BAPI 创建采购订单 CALL FUNCTION 'BAPI_PO_CREATE1' EXPORTING purchaseorderheader = ls_header IMPORTING exppurchaseorderid = lv_purchase_order_id TABLES po_items = lt_items po_partners = [] " 如果有合作伙伴需填写此表 po_accountassignments = lt_account_assignments po_schedulelines = lt_schedule_lines return = lv_return. IF lines( lv_return ) > 0. LOOP AT lv_return INTO DATA(ls_return). WRITE: / ls_return-message. ENDLOOP. ELSE. WRITE: / '采购订单已成功创建:', lv_purchase_order_id. ENDIF. ``` 上述代码展示了如何设置采购订单头部信息、行项目及其相关联的数据结构,并最终调用了 `BAPI_PO_CREATE1` 进行处理[^4]。 --- #### 3. **注意事项** - **前导零**: 在某些情况下,例如成本中心或总账科目的字段可能需要补充前导零才能被系统识别。如果遇到类似问题,请确保这些字段格式化正确。 - **返回值检查**: 执行完成后务必验证 `RETURN` 表的内容以确认操作状态。如果有错误发生,则可以通过消息描述定位具体原因[^2]。 - **唯一性约束**: 当尝试修改现有记录而非新建时可能会触发 “无法唯一确定更改标识”的错误(M_011),这通常是因为缺少必要的键值或者存在重复数据所致。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值