**创建公司内调拨单变量
"必要参数
DATA: ls_poheader TYPE bapimepoheader, "PO抬头数据
ls_poheaderx TYPE bapimepoheaderx,
lt_poitem TYPE TABLE OF bapimepoitem, "PO行项目
lt_poitemx TYPE TABLE OF bapimepoitemx,
lt_poschedule TYPE TABLE OF bapimeposchedule, "PO计划行
lt_poschedulex TYPE TABLE OF bapimeposchedulx,
lw_poitem TYPE bapimepoitem, "PO行项目
lw_poitemx TYPE bapimepoitemx,
lw_poschedule TYPE bapimeposchedule, "PO计划行
lw_poschedulex TYPE bapimeposchedulx,
lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE, "返回消息
lv_message TYPE bapiret2-message.
DATA: lv_error TYPE c, " 出错标识
lv_ebeln TYPE ekpo-ebeln, " 采购单号
ebeln TYPE ekpo-ebeln, " 采购单号
etenr TYPE eket-etenr, " 采购计划行计数器
ebelp TYPE ekpo-ebelp. " 采购行号
" 1、PO抬头数据
ls_poheader-po_number = ebeln. " 自定义格式的采购凭证
ls_poheader-doc_date = sy-datum. " 采购凭证日期,sy-datum
ls_poheader-doc_type = ''. " 采购凭证类型 bsart
ls_poheaderx-po_number = 'X'.
ls_poheaderx-doc_date = 'X'.
ls_poheaderx-doc_type = 'X'.
"当公司采购时
ls_poheader-suppl_plnt = ''. " 供应工厂 RESWK
ls_poheader-comp_code = ''. " 公司代码 BURKS
ls_poheader-purch_org = '8000'. " 采购组织
ls_poheader-pur_group = '023'. " 采购组
ls_poheaderx-suppl_plnt = 'X'.
ls_poheaderx-comp_code = 'X'.
ls_poheaderx-purch_org = 'X'.
ls_poheaderx-pur_group = 'X'.
LOOP AT lt_data INTO lw_data.
" 2、PO行项目数据
ebelp = ebelp + '10'.
lw_poitem-po_item = ebelp. " 采购凭证的行项目编号
lw_poitem-material = lw_data-matnr. " 物料代码
lw_poitem-plant = lw_data-reswk. " 接收工厂
lw_poitem-quantity = lw_data-menge. " 数量
lw_poitem-stge_loc = lw_data_lgort. " 接收库存地点
lw_poitem-suppl_stloc = lw_data-reslo. " 发货存储地点
lw_poitem-po_unit = lw_data-meins. " 采购单位
APPEND lw_poitem TO lt_poitem.
CLEAR lw_poitem.
lw_poitemx-po_item = ebelp.
lw_poitemx-material = 'X'.
lw_poitemx-plant = 'X'.
lw_poitemx-stge_loc = 'X'.
lw_poitemx-suppl_stloc = 'X'.
lw_poitemx-quantity = 'X'.
lw_poitemx-po_unit = 'X'.
APPEND lw_poitemx TO lt_poitemx.
CLEAR lw_poitemx.
" 3、计划行数据
etenr = 1.
lw_poschedule-po_item = ebelp. " 采购凭证的项目编号
lw_poschedule-sched_line = etenr. " 交货计划行计数器
lw_poschedule-delivery_date = sy-datum. " 交货日期
lw_poschedule-quantity = lw_DATA-menge. " 已计划数量
lw_poschedule-com_qty = lw_DATA-menge. " 承诺数量
APPEND lw_poschedule TO lt_poschedule.
CLEAR lw_poschedule.
lw_poschedulex-po_item = ebelp.
lw_poschedulex-sched_line = etenr.
lw_poschedulex-del_datcat_ext = 'X'.
lw_poschedulex-delivery_date = 'X'.
lw_poschedulex-quantity = 'X'.
lw_poschedulex-com_qty = 'X'.
APPEND lw_poschedulex TO lt_poschedulex.
CLEAR lw_poschedulex.
ENDLOOP.
" 4、调用BAPI生成采购订单
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = ls_poheader " 必须参数,接收抬头数据的结构
poheaderx = ls_poheaderx " 必要参数,指定poheader更新字段
IMPORTING
exppurchaseorder = lv_ebeln " 建议参数,采购订单创建成功会返回一个采购订单号
TABLES
return = lt_return " 建议参数,返回报错信息
poitem = lt_poitem " 必要参数,接收行项目数据的表
poitemx = lt_poitemx " 必要参数,PO行项目更新字段
poschedule = lt_poschedule " 必要参数,接收计划行数据的表
poschedulex = lt_poschedulex. " 必要参数,PO计划行更新字段
IF LV_EBELN NE SPACE.
LV_MESSAGE = |生成的采购订单号为:{ LV_EBELN }|.
ELSE.
LOOP AT LT_RETURN WHERE TYPE = 'E'.
LV_MESSAGE = |{ LV_MESSAGE } { LT_RETURN-MESSAGE }|.
ENDLOOP.
ENDIF.
ABAP - 创建采购订单BAPI:BAPI_PO_CREATE1
于 2023-12-12 11:25:09 首次发布