ABAP 拆批拣货交货bapi以及实例
使用函数
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以及实例的更多相关文章
- 销售订单、外向交货单、交货 bapi
转自[http://www.cnblogs.com/elegantok/archive/2009/10/18/1585398.html]***********SALES ORDER INPUT CRE ...
- 挂sqlserver计划,系统自动分配拣货任务
USE [P2WMS_WH43] GO /****** Object: StoredProcedure [dbo].[sp_fru_CalcAllocatePickData] Script Date: ...
- Super超级ERP系统---(9)订单管理--订单拣货
订单审核完成后,库房就可以开始备货,安排相应的人员去拣货了.订单拣货主要分为一次分拣和二次分拣,这里我们先看下一次分拣的流程.一次分拣就是根据订单去拣货,可以简单的理解为拿着一个订单,推着购物车,把当 ...
- [SAP ABAP开发技术总结]业务对象和BAPI
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- SAP 参照sto订单创建外向交货BAPI
DATA: SHIP_POINT TYPE TVST-VSTEL, "装运点/接收点 NUM_DELIVERIES TYPE VBNUM, STOCK_TRANS_ITEMS WITH HE ...
- 收货确定 BAPI BAPI_GOODSMVT_CREATE
CLEAR gmhead. gmhead-pstng_date = ls_table-gzdate."sy-datum . gmhead-doc_date = sy-datu ...
- SAP交货单过账自动生产采购订单、采购订单自动收货入库
公司间需要买卖操作,由于发货和收货都是同一批人在操作,为了减少业务人员的工作量,提高工作效率,特实现以上功能 1.增强实现:增强点为交货单过账成功时触发,在提交前触发,如果遇到不可预知问题,可能造成数 ...
- .NET面试题解析(02)-拆箱与装箱
系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 装箱和拆箱几乎是所有面试题中必考之一,看上去简单,就往往容易被忽视.其实它一点都不简单的,一个简单的问题也 ...
- 转 C# 装箱和拆箱[整理]
1. 装箱和拆箱是一个抽象的概念 2. 装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的 ...
- C# 装箱与拆箱
知识点 值类型. 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null. 值类型超出作用范围系统自动释放内存. 主要由两类组成:结构,枚举(enum),结构分为以下几类: ...
随机推荐
- Ng-Matero v15 正式发布
前言 Angular 按照既定的发版计划在 11 月中旬发布了 v15 版本.推迟了一个月(几乎每个版本都是这个节奏),ng-matero 也终于更新到了 v15.其实 ng-matero 本身的更新 ...
- react 高效高质量搭建后台系统 系列 —— 请求数据
其他章节请看: react 高效高质量搭建后台系统 系列 请求数据 后续要做登录模块(主页),需要先和后端约定JSON数据格式,将 axios 进行封装,实现本地的数据模拟 mockjs. Tip:s ...
- 在Ubuntu上安装OpenShift并使用
服务器信息 在阿里云买了个抢占式的服务器,地区为华南广州,系统为Ubuntu 20.04,8核16GB. 安装Docker 命令如下: $ apt-get update -y $ apt-get up ...
- (补12月19)ORM查询优化、ORM事物操作、ORM常用字段参数、Ajax请求、Content-Type
ORM查询优化.ORM事物操作.ORM常用字段参数.Ajax请求.Content-Type Q查询进阶操作 先产生一个对象 q_obj = Q() 修改默认对象 q_obj.connector = ' ...
- 五种传统IO模型
五种传统I/O模型 作者:tsing 本文地址:https://www.cnblogs.com/TssiNG-Z/p/17089759.html 简介 提起I/O模型, 就会说到同步/异步/阻塞/非阻 ...
- 【分析笔记】Linux 4.9 backlight 子系统分析
相关信息 内核版本:Linux version 4.9.56 驱动文件:lichee\linux-4.9\drivers\video\backlight\backlight.c 驱动作用 对上,面对应 ...
- 记一次使用gdb诊断gc问题全过程
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 上次解决了GC长耗时问题后,系统果然平稳了许多,这是之前的文章<GC耗时高,原因竟是服务流量小?> 然 ...
- bbs大作业
1.项目开发基本流程 1.需求分析 2.架构设计 3.分组开发 4.提交测试 5.交付上线 2.项目流程 仿造博客园项目(核心:文章的增删改查) 1.表分析: 1.1用户表 1.2个人站点表 1.3文 ...
- springboot FilterRegistrationBean 拦截器的使用
1.创建一个filter package com.ruoyi.weixin.user.interator; import com.ruoyi.common.utils.SecurityUtils; i ...
- 你好 ChatGPT, 帮我看下这段代码有什么问题?
点赞再看,动力无限. 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多系列文章. 今天一个很简单的功能,触发了一个 BUG,处 ...