使用函数

BAPI_OUTB_DELIVERY_CHANGE:拆批bapi

WS_DELIVERY_UPDATE:拣货函数

BAPI_OUTB_DELIVERY_CONFIRM_DEC:过账函数

样例

先做一个测试交货单

事务码:va01 创建销售订单

事务码:vl01n 生成交货单

交货单如下

盘盈两个批次

用于拆分上一个交货单的10个物料,这里简单分一下,

用migo盘盈 两个批次,分别为4个物料和6个物料

代码样例

这里的代码根据我造的数据写死的,只能作为样例参考

而且我将几个函数分开来写了,要用到线上,赋值基本都在一起,最后再连续调用三个函数

下面的代码可以直接用于测试

"批次拆分相关变量
DATA:
lit_header_partner LIKE TABLE OF bapidlvpartnerchg , "交货:合作伙伴更改
lit_header_deadlines LIKE TABLE OF bapidlvdeadln , "交货截止日期
lit_item_data LIKE TABLE OF bapiobdlvitemchg , "更改外向交货拣配数据项目等级
lit_item_control LIKE TABLE OF bapiobdlvitemctrlchg , "外向交货项目级别控制数据
lit_ret LIKE TABLE OF bapiret2 WITH HEADER LINE , "返回参数
lit_item_data_spl LIKE TABLE OF /spe/bapiobdlvitemchg , "更改向外交货拣配数据项目等级(SPE)
is_header_data LIKE bapiobdlvhdrchg , "更改外向交货拣配数据表头等级
is_header_control LIKE bapiobdlvhdrctrlchg , "外向交货标题级别控制数据
iv_delivery LIKE bapiobdlvhdrchg-deliv_numb . "交货 DATA:
lwa_header_partner LIKE bapidlvpartnerchg , "交货:合作伙伴更改
lwa_header_deadlines LIKE bapidlvdeadln , "交货截止日期
lwa_item_data LIKE bapiobdlvitemchg , "更改外向交货拣配数据项目等级
lwa_item_control LIKE bapiobdlvitemctrlchg , "外向交货项目级别控制数据
lwa_item_data_spl LIKE /spe/bapiobdlvitemchg,
lwa_cwm_item_data LIKE /cwm/bapiobdlvitem,
lwa_return LIKE bapiret2 . "返回参数 DATA: l_msg TYPE string. PARAMETERS p_vbeln TYPE vbeln_vl DEFAULT '80000284'. iv_delivery = p_vbeln. "交货单号 SELECT * FROM lips INTO TABLE @DATA(lt_lips) WHERE vbeln = @p_vbeln. READ TABLE lt_lips INTO DATA(ls_lips) INDEX 1. "头信息
is_header_data-deliv_numb = p_vbeln. "交货单号
is_header_control-deliv_numb = p_vbeln. "修改原10行项目数量
CLEAR lwa_item_data.
lwa_item_data-deliv_numb = p_vbeln.
lwa_item_data-deliv_item = '10'. "原行项目
lwa_item_data-dlv_qty = '0'.
lwa_item_data-dlv_qty_imunit = '1'.
lwa_item_data-fact_unit_nom = ls_lips-umvkz. "销售数量转换成SKU的分子(因子)
lwa_item_data-fact_unit_denom = ls_lips-umvkn. "销售数量转换为 SKU 的值(除数)
lwa_item_data-base_uom = ls_lips-meins. "基本单位
lwa_item_data-sales_unit = ls_lips-vrkme. "销售单位
APPEND lwa_item_data TO lit_item_data . CLEAR lwa_item_control.
lwa_item_control-deliv_numb = p_vbeln.
lwa_item_control-deliv_item = '10'. "原行项目
lwa_item_control-chg_delqty = 'X'. "数量修改标志
APPEND lwa_item_control TO lit_item_control. "新拆分的批次
CLEAR lwa_item_data.
lwa_item_data-deliv_numb = p_vbeln.
lwa_item_data-deliv_item = '900001'. "拆分后的新行项目
lwa_item_data-hieraritem = '10'. "上级行项目
lwa_item_data-batch = '2300000001'. "新批次
lwa_item_data-dlv_qty = '4'. "自己重新计算拆分后的数量,
lwa_item_data-dlv_qty_imunit = '4'.
lwa_item_data-fact_unit_nom = ls_lips-umvkz. "销售数量转换成SKU的分子(因子)
lwa_item_data-fact_unit_denom = ls_lips-umvkn. "销售数量转换为 SKU 的值(除数)
lwa_item_data-base_uom = ls_lips-meins. "基本单位
lwa_item_data-sales_unit = ls_lips-vrkme. "销售单位
lwa_item_data-usehieritm = '1'.
APPEND lwa_item_data TO lit_item_data. CLEAR lwa_item_data.
lwa_item_data-deliv_numb = p_vbeln.
lwa_item_data-deliv_item = '900002'. "拆分后的新行项目
lwa_item_data-hieraritem = '10'. "上级行项目
lwa_item_data-batch = '2300000002'."新批次
lwa_item_data-dlv_qty = '6'.
lwa_item_data-dlv_qty_imunit = '6'.
lwa_item_data-fact_unit_nom = ls_lips-umvkz. "销售数量转换成SKU的分子(因子)
lwa_item_data-fact_unit_denom = ls_lips-umvkn. "销售数量转换为 SKU 的值(除数)
lwa_item_data-base_uom = ls_lips-meins. "基本单位
lwa_item_data-sales_unit = ls_lips-vrkme. "销售单位
lwa_item_data-usehieritm = '1'.
APPEND lwa_item_data TO lit_item_data. CLEAR lwa_item_control.
lwa_item_control-deliv_numb = p_vbeln.
lwa_item_control-deliv_item = '900001'. "拆分后的新行项目
lwa_item_control-chg_delqty = 'X'. "数量修改标志
APPEND lwa_item_control TO lit_item_control . CLEAR lwa_item_control.
lwa_item_control-deliv_numb = p_vbeln.
lwa_item_control-deliv_item = '900002'."拆分后的新行项目
lwa_item_control-chg_delqty = 'X'. "数量修改标志
APPEND lwa_item_control TO lit_item_control . CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = is_header_data
header_control = is_header_control
delivery = iv_delivery
TABLES
header_partner = lit_header_partner
header_deadlines = lit_header_deadlines
item_data = lit_item_data
item_control = lit_item_control
item_data_spl = lit_item_data_spl
return = lit_ret. IF lit_ret[] IS INITIAL.
COMMIT WORK AND WAIT.
ENDIF. LOOP AT lit_ret WHERE type = 'E'.
CLEAR l_msg.
MESSAGE ID lit_ret-id
TYPE 'E'
NUMBER lit_ret-number
WITH lit_ret-message_v1
lit_ret-message_v2
lit_ret-message_v3
lit_ret-message_v4
INTO l_msg. WRITE:/ l_msg. ENDLOOP. "拣货相关变量
DATA: ls_vbkok TYPE vbkok.
DATA: lt_vbkok TYPE STANDARD TABLE OF vbkok.
DATA: lt_prott TYPE STANDARD TABLE OF prott.
DATA: ls_prott TYPE prott.
DATA: lt_vbpok TYPE STANDARD TABLE OF vbpok.
DATA: ls_vbpok TYPE vbpok.
DATA: lv_flag TYPE char01.
DATA: lv_message TYPE string.
DATA: lv_all_message TYPE string. ls_vbkok-vbeln_vl = p_vbeln.
ls_vbkok-komue = 'X'. "交货数量 = 捡配数量
ls_vbkok-kzkodat = 'X'. "Picking date
ls_vbkok-kodat = sy-datum. "Picking date CLEAR ls_vbpok.
ls_vbpok-vbeln_vl = p_vbeln.
ls_vbpok-posnr_vl = '900001'.
ls_vbpok-vbeln = '1000000111'. " 交货单对应的销售单
ls_vbpok-posnn = '10'. " 销售单的行项目
ls_vbpok-pikmg = '4'. " 拣货数量
ls_vbpok-vrkme = ls_lips-meins.
APPEND ls_vbpok TO lt_vbpok. CLEAR ls_vbpok.
ls_vbpok-vbeln_vl = p_vbeln.
ls_vbpok-posnr_vl = '900002'.
ls_vbpok-vbeln = '1000000111'. " 交货单对应的销售单
ls_vbpok-posnn = '10'. " 销售单的行项目
ls_vbpok-pikmg = '6'. " 拣货数量
ls_vbpok-vrkme = ls_lips-meins.
APPEND ls_vbpok TO lt_vbpok. "拣货
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok
delivery = p_vbeln
update_picking = 'X'
synchron = 'X'
nicht_sperren = 'X' "L.S Inserted
TABLES
vbpok_tab = lt_vbpok
prot = lt_prott
EXCEPTIONS
error_message = 1
OTHERS = 2. IF sy-subrc = 0 .
LOOP AT lt_prott INTO ls_prott WHERE msgty CA 'EAX'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_prott-msgid
msgnr = ls_prott-msgno
msgv1 = ls_prott-msgv1
msgv2 = ls_prott-msgv2
msgv3 = ls_prott-msgv3
msgv4 = ls_prott-msgv4
IMPORTING
message_text_output = lv_message.
CONCATENATE lv_all_message lv_message INTO lv_all_message .
lv_message = lv_all_message.
lv_flag = 'X' .
CLEAR ls_prott.
ENDLOOP.
ELSE.
CLEAR lv_message.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = sy-msgid
msgnr = sy-msgno
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
IMPORTING
message_text_output = lv_all_message.
lv_message = lv_all_message.
lv_flag = 'X' .
ENDIF .
IF lv_flag IS INITIAL .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. "过账发货相关函数
DATA:
lv_vbeln TYPE bapiobdlvhdrcon-deliv_numb,
ls_header_data LIKE bapiobdlvhdrcon,
ls_header_control LIKE bapiobdlvhdrctrlcon,
lt_return LIKE TABLE OF bapiret2 WITH HEADER LINE. DATA:
es_emkpf TYPE emkpf,
t_mesg LIKE TABLE OF mesg WITH HEADER LINE. DATA:
lt_header_deadlines LIKE TABLE OF bapidlvdeadln WITH HEADER LINE, "交货截止日期
lt_item_data LIKE TABLE OF bapiobdlvitemcon WITH HEADER LINE, "交货单项目
lt_item_control LIKE TABLE OF bapiobdlvitemctrlcon WITH HEADER LINE, "交货单项目控制数据
lt_item_data_spl LIKE TABLE OF /spe/bapiobdlvitemconf WITH HEADER LINE, "库存地点
lt_handle_unit_header LIKE TABLE OF bapidlvhdunhdr WITH HEADER LINE. "工厂 "交货单过账抬头数据
lv_vbeln = p_vbeln.
ls_header_data-deliv_numb = p_vbeln.
ls_header_control-deliv_numb = p_vbeln.
ls_header_control-post_gi_flg = 'X'. "自动过账货物移动 lt_header_deadlines-deliv_numb = p_vbeln.
lt_header_deadlines-timezone = sy-zonlo. "当前用户所在时区
CONVERT DATE sy-datum "过账日期
INTO TIME STAMP lt_header_deadlines-timestamp_utc TIME ZONE lt_header_deadlines-timezone.
APPEND lt_header_deadlines. CLEAR lt_item_data.
lt_item_data-deliv_numb = p_vbeln. "交货单号
lt_item_data-deliv_item = '900001'. "交货单项目号
lt_item_data-dlv_qty = '4'. "实际交货数量
* 数量转换,类似500毫升可乐转换为1瓶可乐
lt_item_data-fact_unit_nom = 1.
lt_item_data-fact_unit_denom = 1.
APPEND lt_item_data. CLEAR lt_item_control.
lt_item_control-deliv_numb = p_vbeln.
lt_item_control-deliv_item = '900001'.
lt_item_control-chg_delqty = 'X'. "允许修改交货数量
lt_item_control-volume_flg = 'X'. "量的确认
APPEND lt_item_control. CLEAR lt_item_data_spl.
lt_item_data_spl-deliv_numb = p_vbeln.
lt_item_data_spl-deliv_item = '900001'.
lt_item_data_spl-stge_loc = '3001'. "库存地点
APPEND lt_item_data_spl. CLEAR lt_item_data.
lt_item_data-deliv_numb = p_vbeln. "交货单号
lt_item_data-deliv_item = '900002'. "交货单项目号
lt_item_data-dlv_qty = '6'. "实际交货数量
* 数量转换,类似500毫升可乐转换为1瓶可乐
lt_item_data-fact_unit_nom = 1.
lt_item_data-fact_unit_denom = 1.
APPEND lt_item_data. CLEAR lt_item_control.
lt_item_control-deliv_numb = p_vbeln.
lt_item_control-deliv_item = '900002'.
lt_item_control-chg_delqty = 'X'. "允许修改交货数量
lt_item_control-volume_flg = 'X'. "量的确认
APPEND lt_item_control. CLEAR lt_item_data_spl.
lt_item_data_spl-deliv_numb = p_vbeln.
lt_item_data_spl-deliv_item = '900002'.
lt_item_data_spl-stge_loc = '3001'. "库存地点
APPEND lt_item_data_spl. CALL FUNCTION 'BAPI_OUTB_DELIVERY_CONFIRM_DEC' "交货单过账
EXPORTING
header_data = ls_header_data
header_control = ls_header_control
delivery = lv_vbeln
TABLES
header_deadlines = lt_header_deadlines
item_data = lt_item_data
item_control = lt_item_control
item_data_spl = lt_item_data_spl
return = lt_return. LOOP AT lt_return WHERE type CA 'AEX'.
MESSAGE ID lt_return-id TYPE lt_return-type NUMBER lt_return-number INTO DATA(msg)
WITH lt_return-message_v1 lt_return-message_v2 lt_return-message_v3 lt_return-message_v4.
l_msg = msg && '!' && l_msg.
ENDLOOP.
IF l_msg = ''.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF.

代码执行结果

如图可以看到,该交货单已经拆批完成,从两个批次进行交货,并且完成相应拣货以及过账发货

ABAP 拆批拣货交货bapi以及实例的更多相关文章

  1. 销售订单、外向交货单、交货 bapi

    转自[http://www.cnblogs.com/elegantok/archive/2009/10/18/1585398.html]***********SALES ORDER INPUT CRE ...

  2. 挂sqlserver计划,系统自动分配拣货任务

    USE [P2WMS_WH43] GO /****** Object: StoredProcedure [dbo].[sp_fru_CalcAllocatePickData] Script Date: ...

  3. Super超级ERP系统---(9)订单管理--订单拣货

    订单审核完成后,库房就可以开始备货,安排相应的人员去拣货了.订单拣货主要分为一次分拣和二次分拣,这里我们先看下一次分拣的流程.一次分拣就是根据订单去拣货,可以简单的理解为拿着一个订单,推着购物车,把当 ...

  4. [SAP ABAP开发技术总结]业务对象和BAPI

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. SAP 参照sto订单创建外向交货BAPI

    DATA: SHIP_POINT TYPE TVST-VSTEL, "装运点/接收点 NUM_DELIVERIES TYPE VBNUM, STOCK_TRANS_ITEMS WITH HE ...

  6. 收货确定 BAPI BAPI_GOODSMVT_CREATE

    CLEAR gmhead.     gmhead-pstng_date = ls_table-gzdate."sy-datum .     gmhead-doc_date = sy-datu ...

  7. SAP交货单过账自动生产采购订单、采购订单自动收货入库

    公司间需要买卖操作,由于发货和收货都是同一批人在操作,为了减少业务人员的工作量,提高工作效率,特实现以上功能 1.增强实现:增强点为交货单过账成功时触发,在提交前触发,如果遇到不可预知问题,可能造成数 ...

  8. .NET面试题解析(02)-拆箱与装箱

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 装箱和拆箱几乎是所有面试题中必考之一,看上去简单,就往往容易被忽视.其实它一点都不简单的,一个简单的问题也 ...

  9. 转 C# 装箱和拆箱[整理]

    1.      装箱和拆箱是一个抽象的概念 2.      装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型       利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的 ...

  10. C# 装箱与拆箱

    知识点  值类型.    值类型是在栈中分配内存,在声明时初始化才能使用,不能为null.    值类型超出作用范围系统自动释放内存.    主要由两类组成:结构,枚举(enum),结构分为以下几类: ...

随机推荐

  1. 低版本客户端连接高版本数据库报错ORA-28040、ORA-01017

    测试环境: 客户端:Oracle 11.2.0.1 服务端:Oracle 19.16 测试过程: 1.低版本客户端连接高版本数据库报错ORA-28040 2.低版本客户端连接高版本数据库报错ORA-0 ...

  2. ActiveMQ 常见集群模式

    Master Slave 架构模式 这种模式是基于文件共享锁的高可用集群,个人理解其实是一种 Failover 模式,可以是一主一从,也可以是一主两从. 本文使用 Docker 搭建一个主从模式的 A ...

  3. FalseSharing-伪共享

    1.CPU缓存 要了解什么是伪共享,首先得了解CPU缓存架构与缓存行的知识 (1)<CPU缓存架构> 主内存RAM是数据存在的地方,CPU和主内存之间有好几级缓存,因为即使直接访问主内存相 ...

  4. ionic+vue+capacitor系列笔记--手机从安卓10升级到安卓11以后,之前的代码不管用了,无法跳转其他应用

    之前手机是安卓10版本,没什么问题,升级以后,手机出现了一些异常,发现原来代码里写的跳转功能,无法使用了哦~~脑壳痛 解决方案 本项目:build.gradle targetSdkVersion 30 ...

  5. 高并发环境下3种方式优化Tomcat性能

    摘要:Tomcat作为最常用的Java Web服务器,随着并发量越来越高,Tomcat的性能会急剧下降,那有没有什么方法来优化Tomcat在高并发环境下的性能呢? 本文分享自华为云社区<[高并发 ...

  6. win32com操作word API精讲 第十集 Paragraphs & Paragraph接口 (一)

    本课程<win32com操作word API精讲&项目实战>以视频为主,文字为辅,公众号ID:一灯编程 在word编程中,Range和Paragraph(s)接口无愧于劳模接口的称 ...

  7. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(5)-Charles如何设置捕获Https会话

    1.简介 在大数据时代,互联网时代,个人信息安全尤为重要,网络安全在近日多起电信诈骗事情发酵下的情况下,引起国家,企业,个人对于互联网安全进一步的重视.而之前很多以http协议传输的网站出现的网站信息 ...

  8. Java JDK1.5: 泛型 新特性的讲解说明

    Java JDK1.5: 泛型 新特性的讲解说明 每博一文案 听到过这样一句话:"三观没有标准.在乌鸦的世界里,天鹅也有罪." 环境.阅历的不同,造就了每个人独有的世界观.人生观. ...

  9. 快速实现一个简单阉割版的HashMap

    简单实现一个底层数据结构为数组 + 链表的HashMap,不考虑链表长度超过8个时变为红黑树的情况. 1.示例图 2.分析需求 put数据时: key值hash后的索引处没有元素,需要创建链表头节点, ...

  10. P31_全局配置 - window - 设置上拉触底的距离

    window 设置上拉触底的距离 概念:上拉触底是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为. 设置步骤: app.json -> window -> 为 o ...