ABAP 外向交货单拆分批次 BAPI
前台事务码:VL02N
程序使用BAPI对交货单进行批次拆分,并且赋值库位。
使用BAPI: BAPI_OUTB_DELIVERY_CHANGE
使用BAPI_OUTB_DELIVERY_CHANGE创建批次,在参数正确的情况下,依旧报错,可能导致的原因是库位赋值不上。
代码分成两部的情况下依旧出错,需考虑前台配置0VLP。
代码案例如下:
"头信息
ls_header_data-deliv_numb = gs_code_scll-vbeln . "交货单号
ls_header_control-deliv_numb = gs_code_scll-vbeln . "交货单号
lv_delivery = gs_code_scll-vbeln . "交货单号
* ls_techn_control-upd_ind = 'U'.
"修改原来行项目的数量
CLEAR lt_item_data.
lt_item_data-deliv_numb = gs_code_scll-vbeln.
lt_item_data-deliv_item = gs_code_scll-posnr.
* lt_item_data-material = gs_code_scll-matnr. "物料
* lt_item_data-batch = ''. "批次为空
* lt_item_data-usehieritm = '1'.
lt_item_data-dlv_qty = 0.
lt_item_data-dlv_qty_imunit = 0. "数量为0
lt_item_data-fact_unit_nom = 1.
lt_item_data-fact_unit_denom = 1.
lt_item_data-base_uom = gs_code_scll-meins. "基本单位
lt_item_data-sales_unit = gs_code_scll-meins. "销售单位
APPEND lt_item_data.
CLEAR : lt_item_control.
lt_item_control-deliv_numb = gs_code_scll-vbeln.
lt_item_control-deliv_item = gs_code_scll-posnr.
lt_item_control-chg_delqty = 'X'.
APPEND lt_item_control.
CLEAR lt_item_data.
CLEAR : lt_item_control.
"新拆分的批次 **行项目(根据自己的情况进行修改)**
LOOP AT gt_code_scll INTO DATA(ls_code_scll) WHERE zbarcode IS NOT INITIAL AND vbeln IS NOT INITIAL .
lv_num = lv_num + 1 .
lt_item_data-deliv_numb = ls_code_scll-vbeln.
lt_item_data-deliv_item = 900000 + lv_num. "交货单行项目
* lt_item_data-material = ls_code_scll-matnr. "物料
lt_item_data-batch = ls_code_scll-charg. "批次
lt_item_data-hieraritem = ls_code_scll-posnr. "项目层次中的高级项目
lt_item_data-usehieritm = '1'.
lt_item_data-dlv_qty = ls_code_scll-erfmg. "数量
lt_item_data-dlv_qty_imunit = ls_code_scll-erfmg. "数量
lt_item_data-fact_unit_nom = 1.
lt_item_data-fact_unit_denom = 1.
lt_item_data-base_uom = ls_code_scll-meins. "基本单位
lt_item_data-sales_unit = ls_code_scll-meins. "销售单位
APPEND lt_item_data.
lt_item_control-deliv_numb = gs_code_scll-vbeln.
lt_item_control-deliv_item = 900000 + lv_num. "拆分后的新项目
lt_item_control-chg_delqty = 'X'. "数量修改标志
APPEND lt_item_control.
ENDLOOP.
"第一次调用 进行批次拆分
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = ls_header_data
header_control = ls_header_control
delivery = lv_delivery
TECHN_CONTROL = ls_techn_control
* HEADER_DATA_SPL =
* HEADER_CONTROL_SPL =
* SENDER_SYSTEM =
TABLES
* HEADER_PARTNER =
* HEADER_PARTNER_ADDR =
* HEADER_DEADLINES =
ITEM_DATA = lt_item_data
ITEM_CONTROL = lt_item_control
* ITEM_SERIAL_NO =
* SUPPLIER_CONS_DATA =
* EXTENSION1 =
* EXTENSION2 =
return = lt_return
* TOKENREFERENCE =
ITEM_DATA_SPL = lt_item_data_spl
* COLLECTIVE_CHANGE_ITEMS =
* NEW_ITEM_DATA =
* NEW_ITEM_DATA_SPL =
* NEW_ITEM_ORG =
* ITEM_DATA_DOCU_BATCH =
* CWM_ITEM_DATA =
.
"批次拆分没问题 再给拆分批次的库位进行赋值
赋值库位
LOOP AT gt_code_scll INTO DATA(ls_code_scll1) WHERE zbarcode IS NOT INITIAL AND vbeln IS NOT INITIAL.
lt_item_data_spl-deliv_numb = ls_code_scll1-vbeln.
lt_item_data_spl-deliv_item = 900000 + lv_num.
lt_item_data_spl-stge_loc = ls_code_scll1-lgort.
APPEND lt_item_data_spl.
ENDLOOP.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = ls_header_data
header_control = ls_header_control
delivery = lv_delivery
TECHN_CONTROL = ls_techn_control
* HEADER_DATA_SPL =
* HEADER_CONTROL_SPL =
* SENDER_SYSTEM =
TABLES
* HEADER_PARTNER =
* HEADER_PARTNER_ADDR =
* HEADER_DEADLINES =
ITEM_DATA = lt_item_data
ITEM_CONTROL = lt_item_control
* ITEM_SERIAL_NO =
* SUPPLIER_CONS_DATA =
* EXTENSION1 =
* EXTENSION2 =
return = lt_return
* TOKENREFERENCE =
ITEM_DATA_SPL = lt_item_data_spl.
* COLLECTIVE_CHANGE_ITEMS =
* NEW_ITEM_DATA =
* NEW_ITEM_DATA_SPL =
* NEW_ITEM_ORG =
* ITEM_DATA_DOCU_BATCH =
* CWM_ITEM_DATA =
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!