模拟VL02N交货单批次拆分
昨天听到一个好玩的需求,自开发交货单批次拆分的界面和实现批次拆分。
批次拆分的函数就不提了,这里来说说自开发程序怎么模拟出批次拆分的那种样子。、
效果图:

1,首先定义一个交货行项目表和拆分出来的批次表:

REPORT zvl02n. TYPES:BEGIN OF ty_item,
vbeln TYPE vbeln_vl, "Delivery
posnr TYPE posnr_vl, "Delivery Item
matnr TYPE matnr, "Material Number
charg TYPE charg_d, "Batch Number
icon TYPE icon_d, "
hi_item TYPE posnr_vl, "
END OF ty_item. DATA:gt_item TYPE TABLE OF ty_item,"交货主行
gt_fitem TYPE TABLE OF ty_item,"交货拆分行
gw_item LIKE LINE OF gt_item,
ls_item LIKE LINE OF gt_item,
gv_field TYPE string,"光标列
gv_line TYPE i,"光标行
ok_code TYPE sy-ucomm.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_9000' ITSELF
CONTROLS: tc_9000 TYPE TABLEVIEW USING SCREEN 9000. *&SPWIZARD: LINES OF TABLECONTROL 'TC_9000'
DATA: g_tc_9000_lines LIKE sy-loopc. INITIALIZATION.
"初始化内表
gw_item-vbeln = '1000000000'.
gw_item-posnr = '10'.
gw_item-matnr = 'A1'.
gw_item-icon = '@3S@'.
APPEND gw_item TO gt_item.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '20'.
gw_item-matnr = 'A1'.
gw_item-icon = '@3S@'.
APPEND gw_item TO gt_item.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '30'.
gw_item-matnr = 'A1'.
gw_item-icon = '@3S@'.
APPEND gw_item TO gt_item.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '40'.
gw_item-matnr = 'A1'.
gw_item-icon = '@3S@'.
APPEND gw_item TO gt_item.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '50'.
gw_item-matnr = 'A1'.
gw_item-icon = '@3S@'.
APPEND gw_item TO gt_item.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '60'.
gw_item-matnr = 'A1'.
gw_item-icon = '@3S@'.
APPEND gw_item TO gt_item.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '70'.
gw_item-matnr = 'A1'.
gw_item-icon = '@3S@'.
APPEND gw_item TO gt_item.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '900001'.
gw_item-matnr = 'A1'.
gw_item-hi_item = '10'.
gw_item-icon = ''.
APPEND gw_item TO gt_fitem.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '900002'.
gw_item-matnr = 'A1'.
gw_item-hi_item = '10'.
gw_item-icon = ''.
APPEND gw_item TO gt_fitem. gw_item-vbeln = '1000000000'.
gw_item-posnr = '900001'.
gw_item-matnr = 'A1'.
gw_item-hi_item = '20'.
gw_item-icon = ''.
APPEND gw_item TO gt_fitem.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '900002'.
gw_item-matnr = 'A1'.
gw_item-hi_item = '20'.
gw_item-icon = ''.
APPEND gw_item TO gt_fitem. gw_item-vbeln = '1000000000'.
gw_item-posnr = '900001'.
gw_item-matnr = 'A1'.
gw_item-hi_item = '70'.
gw_item-icon = ''.
APPEND gw_item TO gt_fitem.
gw_item-vbeln = '1000000000'.
gw_item-posnr = '900002'.
gw_item-matnr = 'A1'.
gw_item-hi_item = '70'.
gw_item-icon = ''.
APPEND gw_item TO gt_fitem. START-OF-SELECTION.
CALL SCREEN 9000.
其中添加了7个主行项目,10,20,70分别加了2个次行项目
2,PAI开头获取光标行,这里获取的行号存到全局变量里,为了后面折叠展开事件使用
MODULE get_field INPUT. GET CURSOR FIELD gv_field
LINE gv_line.
IF ( gv_line + tc_9000-top_line - 1 ) > tc_9000-lines.
gv_line = tc_9000-lines.
ELSE.
gv_line = gv_line + tc_9000-top_line - 1.
ENDIF.
ENDMODULE.
3,根据点击的按钮图标添加次行
FORM show_fitem .
DATA:lv_index TYPE i.
lv_index = gv_line.
READ TABLE gt_item INTO gw_item INDEX lv_index.
IF sy-subrc = 0.
IF gw_item-icon = '@3S@'.
gw_item-icon = '@3T@'.
LOOP AT gt_fitem INTO ls_item WHERE hi_item = gw_item-posnr.
lv_index = lv_index + 1.
INSERT ls_item INTO gt_item INDEX lv_index.
ENDLOOP.
ELSEIF gw_item-icon = '@3T@'.
gw_item-icon = '@3S@'.
DELETE gt_item WHERE hi_item = gw_item-posnr.
ENDIF.
MODIFY gt_item FROM gw_item INDEX gv_line TRANSPORTING icon.
ENDIF. ENDFORM.
最后说明下,TC里怎么把文本转成ICON
1,取消输入:

2,右键TC里的列转换BUTTON

并添加事件FOD

MODULE user_command_9000 INPUT.
CASE ok_code.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'FOD'.
PERFORM show_fitem.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
模拟VL02N交货单批次拆分的更多相关文章
- 「SAP技术」SAP VL02N 执行批次拆分报错,说不允许批次拆分?
1,如下新建的DN 80017843,storage location 字段值为空.VL02N 试图去做批次拆分失败,系统报错说,Batch split is not permitted for ma ...
- 读取交货单拣配数量PIKMG(转)
原文链接:https://www.591sap.com/thread-953-1-1.html SAP交货单交货数量在lips中直接读取,但是拣配数量lfimg,只存在vbfa中,且如果基本计量单位和 ...
- SAP 订单状态跟踪
*&--------------------------------------------------------------------- *& Program name: *& ...
- SAP销售模块塑工常见问题和解决方案(自己收藏)
当创建订单时出现提示不存在该产品层次,如图: 解决方案:将该物料正确的产品层次提供给创建物料主数据的相关人员,将其改正. 对于包装膜类物料,在创建完销售订单进行后续的动作时,如开票,发现没有带出相应的 ...
- ABAP 拆批拣货交货bapi以及实例
使用函数 BAPI_OUTB_DELIVERY_CHANGE:拆批bapi WS_DELIVERY_UPDATE:拣货函数 BAPI_OUTB_DELIVERY_CONFIRM_DEC:过账函数 样例 ...
- 用C语言做一个横板过关类型的控制台游戏
前言:本教程是写给刚学会C语言基本语法不久的新生们. 因为在学习C语言途中,往往只能写控制台代码,而还能没接触到图形,也就基本碰不到游戏开发. 所以本教程希望可以给仍在学习C语言的新生们能提前感受到游 ...
- Filebeat配置参考手册
Filebeat的配置参考 指定要运行的模块 前提: 在运行Filebeat模块之前,需要安装并配置Elastic堆栈: 安装Ingest Node GeoIP和User Agent插件.这些插件需要 ...
- 一文看懂Transformer内部原理(含PyTorch实现)
Transformer注解及PyTorch实现 原文:http://nlp.seas.harvard.edu/2018/04/03/attention.html 作者:Alexander Rush 转 ...
- Spark学习之路(十四)—— Spark Streaming 基本操作
一.案例引入 这里先引入一个基本的案例来演示流的创建:获取指定端口上的数据并进行词频统计.项目依赖和代码实现如下: <dependency> <groupId>org.apac ...
- Spark 系列(十四)—— Spark Streaming 基本操作
一.案例引入 这里先引入一个基本的案例来演示流的创建:获取指定端口上的数据并进行词频统计.项目依赖和代码实现如下: <dependency> <groupId>org.apac ...
随机推荐
- HTTP/1.1、HTTP/2、HTTP/3
HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销. 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来, ...
- centos7 挂载未分配的硬盘空间 (测试可用)
=============================================== 2019/7/28_第1次修改 ccb_warlock == ...
- ELF-Virus简易病毒程序分析
系统功能概述 ELF-Virus实现了一个简单的病毒程序,能够感染当前目录下的ELF格式的可执行文件.病毒程序通过将自身代码附加到目标文件中,并在文件末尾添加一个特定的签名来标记文件已被感染.感染后的 ...
- This APT has Super Cow Powers.
在Debian/Ubuntu上,apt包管理器内嵌着一个彩蛋. 如果你在命令行界面输入 apt help 在最后一行能找到This APT has Super Cow Powers. 说明该apt具有 ...
- Visual Studio Browser Link
用Visual Studio 2013 | 2015(不知道其他版本会不会)创建的项目(WebForm & MVC), 直接运行访问的页面源码会出现如下内容: 而这个莫名其妙多出来的Visua ...
- ubuntu16.04安装SQLite
主流的sqlite3,占用内存小,处理时速度快,跨平台. 几乎所有版本的 Linux 操作系统都附带 SQLite.所以,只要使用下面的命令来检查您的机器上是否已经安装了 SQLite. 一.检查是否 ...
- C# 窗口过程消息处理 WndProc
C# 窗口过程消息处理 WndProc WinForm WndProc 在 WinForm 中一般采用重写 WndProc 的方法对窗口或控件接受到的指定消息进行处理 示例:禁止通过关闭按钮或其他发送 ...
- 探秘Transformer系列之(30)--- 投机解码
探秘Transformer系列之(30)--- 投机解码 目录 探秘Transformer系列之(30)--- 投机解码 0x00 概述 0x01 背景 1.1 问题 1.2 自回归解码 0x02 定 ...
- 1.4K star!几分钟搞定AI视频创作,这个开源神器让故事可视化如此简单!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 story-flicks 是一个基于AI技术的自动化视频生成工具,能够将文字剧本快速转化为高 ...
- ZYNQ PL端向PS端发出中断
在之前的项目中知道zynq的PS端可以通过AXI总线向PL端的IP核写入数据,而PL端也可以通过AXI总线去访问PS端的DDR等设备.然而当PL端的IP在接收到PS端的指令完成操作后,该如何告知PS端 ...