模拟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 ...
随机推荐
- Oracle chr() ascii()
函数简介 实用函数 chr() 和 ascii() chr() 函数将ASCII码转换为字符: ASCII码 –> 字符: ascii() 函数将字符转换为ASCII码: 字符 –> AS ...
- ubuntu 22.04安装NFS
一.概述 1. 定义 NFS(Network File System)是一种分布式文件系统协议,最初由 Sun Microsystems 开发,并于1984年发布.它允许不同主机通过网络共享文件和目录 ...
- 【AI工具实战】一招解决英文视频困境,四步用AI搞定全中文字幕,你也可以!(文末附工具下载)
"AI时代最大的红利,是让每个人都有机会成为那个"想到就能做到"的创造者." AI粉嫩特攻队,2025年4月5日. 故事源于一个我想看的国外视频.本想点开视频准 ...
- Linux halt命令
若系统的 runlevel 为 0 或 6 ,则Linux halt命令关闭系统,否则以 shutdown 指令(加上 -h 参数)来取代. 使用权限:系统管理者. 语法 halt [-n] [-w] ...
- 无耳 Solon Ai MCP,发布工具服务,使用工具服务。效果预览!
solon-ai-mcp 是 solon-ai 的扩展特性.提供 mcp 协议的支持.通过它,可以方便的发布 Tool Service,方便的使用 Tool Service. 引入依赖包 <de ...
- 11. RabbitMQ 消息队列 Federation (Exchange 交换机和 Queue队列) + Shovel 同步的搭建配置
11. RabbitMQ 消息队列 Federation (Exchange 交换机和 Queue队列) + Shovel 同步的搭建配置 @ 目录 11. RabbitMQ 消息队列 Federat ...
- Web前端入门第 33 问:CSS 元素外观常用属性(边框、阴影、轮廓、透明度)
background 作为元素外观里的重点功臣介绍完毕,本文再一览其他常用的外观属性. 本文示例中,盒子基础样式: .box { font-size: 20px; margin: 20px; padd ...
- 什么是 Java 中的 logging write barrier?
什么是 Java 中的 Logging Write Barrier? Logging Write Barrier 是 Java 垃圾回收器在维护堆引用关系时常用的一种机制.它是一种特殊的写屏障(Wri ...
- xna 渲染3d图片
我们在做一个3d显示的时候为了突出模型的某些部位以及更好的区别某些模块我们需要渲染各种不同的颜色来体现, 下面代码演示: public void loade() { spriteBatch = new ...
- Java线程控制: sleep、yield、join深度解析
结论先行 sleep:主动让出CPU但保持锁,适合控制执行节奏和优化CPU占用 yield:建议让出CPU但无强制力,适用场景有限且效果不稳定 join:通过等待机制实现线程顺序控制,底层基于wait ...