接上一篇传统ALV:https://www.cnblogs.com/BruceKing/p/11320165.html。

首先介绍下什么是ALV,在R/3 4.6C之前ALV全称为ABAP List Viewer,在其后的版本中,已经正式更名为SAP List Viewer。ALV是SAP系统中心的列表标准,可以在ABAP程序中进行报表输出。除去传统列表的显示和少量交互功能之外,ALV还提供给系统用户多种其它丰富的交互功能。

使用ALV有两种方式,一种为传统的Call Function,另一种为面向对象的编程,为了有良好的编程习惯和跟随SAP技术的发展,在此,强烈推荐使用面向对象的编程来实现ALV,在此,本文档也是根据此来写的。

下面进行OALV的演示练习

1、使用se80创建程序及建立屏幕8002.

2、绘制容器

点击保存,激活后关闭。

3、创建对象时候的调用类

调用方法

REPORT YJQCS003.
*定义变量
DATA:CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "存放ALV容器
ALV TYPE REF TO CL_GUI_ALV_GRID, "ALV的网格实例
LT_FIELDCAT TYPE LVC_T_FCAT, "存放字段目录的内表
LS_FIELDCAT TYPE LVC_S_FCAT,
WA_LAYOUT TYPE LVC_S_LAYO. "布局结构
DATA:OK_CODE TYPE SY-UCOMM."元素清单里的一致
*定义内表结构
TYPES:BEGIN OF TY_ALVSHOW,
VBELN LIKE VBAK-VBELN,
ERDAT LIKE VBAK-ERDAT,
ERNAM LIKE VBAK-ERNAM,
KUNNR LIKE VBAK-KUNNR,
POSNR LIKE VBAP-POSNR,
MATNR LIKE VBAP-MATNR,
MATKL LIKE VBAP-MATKL,
ZMENG LIKE VBAP-ZMENG,
ZIEME LIKE VBAP-ZIEME,
WERKS LIKE VBAP-WERKS,
LGORT LIKE VBAP-LGORT,
END OF TY_ALVSHOW.
*定义内表及工作区
DATA:IT_ALVSHOW TYPE STANDARD TABLE OF TY_ALVSHOW.
DATA:WA_ALVSHOW TYPE TY_ALVSHOW. CALL SCREEN ."在调用module前调用屏幕,很重要 MODULE DISPLAY_ALV OUTPUT.
PERFORM DISPLAY_ALV. "封装显示数据函数
ENDMODULE. FORM DISPLAY_ALV.
"创建容器对象
IF ALV IS INITIAL.
CREATE OBJECT CONTAINER "创建容器对象
EXPORTING
CONTAINER_NAME = 'CONTAINER'.
IF CONTAINER IS NOT INITIAL.
CREATE OBJECT ALV "创建ALV的网格实例
EXPORTING
I_PARENT = CONTAINER.
ENDIF. PERFORM SET_FIELDCAT ."封装定义显示字段 PERFORM SET_LAYOUT ."封装定义布局 PERFORM GET_DATA."封装取数 CALL METHOD ALV->SET_TABLE_FOR_FIRST_DISPLAY "调用显示ALV的方法
EXPORTING
I_SAVE = 'A'
IS_LAYOUT = WA_LAYOUT
CHANGING
IT_OUTTAB = IT_ALVSHOW
IT_FIELDCATALOG = LT_FIELDCAT
EXCEPTIONS
INVALID_PARAMETER_COMBINATION =
PROGRAM_ERROR =
TOO_MANY_LINES =
OTHERS = .
IF SY-SUBRC <> .
ENDIF.
ELSE.
CALL METHOD ALV->REFRESH_TABLE_DISPLAY "如果有容器的话,调用刷新ALV的方法
EXCEPTIONS
FINISHED =
OTHERS = .
IF SY-SUBRC <> .
ENDIF.
ENDIF.
ENDFORM. MODULE STATUS_8002 OUTPUT.
SET PF-STATUS 'STANDARD'. "这里使用SE41复制一个菜单
* SET TITLEBAR 'xxx'.
ENDMODULE. MODULE USER_COMMAND_8002 INPUT. "调用屏幕事件
CLEAR:OK_CODE.
CASE OK_CODE.
WHEN '&ADD'.
LEAVE SCREEN.
WHEN OTHERS.
ENDCASE.
ENDMODULE. FORM SET_FIELDCAT . "定义显示字段
DATA:COL_POS TYPE I.
* fieldcat
COL_POS = .
*销售凭证列
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'VBELN'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-KEY = 'X'.
LS_FIELDCAT-SCRTEXT_M = '销售凭证'. "这个字段和常规的不一样,常规的为SELTEXT_M
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*创建日期
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'ERDAT'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-REF_TABLE = 'VBAK'."这个字段和常规的不一样,常规的为REF_TABNAME
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*创建者
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'ERNAM'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-SCRTEXT_M = '创建人'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*售达方 自己起字段描述
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'KUNNR'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-SCRTEXT_M = '客户'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*售达方1 参考数据字典表名
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'KUNNR'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-REF_TABLE = 'VBAK'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*行号
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'POSNR'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-REF_TABLE = 'VBAP'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*物料
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'MATNR'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-SCRTEXT_M = '物料编码'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*物料组
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'MATKL'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-SCRTEXT_M = '物料组'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*数量
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'ZMENG'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-SCRTEXT_M = '数量'.
LS_FIELDCAT-DO_SUM = 'X'. "总计
LS_FIELDCAT-EDIT = 'X'. "总计
LS_FIELDCAT-DECIMALS = . "因为当编辑数量的时候,如果是小数,要指定小数位,否则输入数据之后回车会自动缩小,如果使用ref则不需要设置 APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*单位
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'ZIEME'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-SCRTEXT_M = '单位'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*工厂
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'WERKS'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-REF_TABLE = 'VBAP'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
*库位
COL_POS = COL_POS + .
LS_FIELDCAT-FIELDNAME = 'LGORT'.
LS_FIELDCAT-COL_POS = COL_POS.
LS_FIELDCAT-SCRTEXT_M = '库位'.
APPEND LS_FIELDCAT TO LT_FIELDCAT.
CLEAR:LS_FIELDCAT.
ENDFORM.
FORM SET_LAYOUT . "定义页面布局
WA_LAYOUT-CWIDTH_OPT = 'X'.
WA_LAYOUT-ZEBRA = 'X'.
WA_LAYOUT-GRID_TITLE = '销售订单查询报表'. "小标题
WA_LAYOUT-SMALLTITLE = 'X'.
ENDFORM.
FORM GET_DATA."取数
SELECT
VBAK~VBELN VBAK~ERDAT VBAK~ERNAM VBAK~KUNNR VBAP~POSNR VBAP~MATNR VBAP~MATKL
VBAP~ZMENG VBAP~ZIEME VBAP~WERKS VBAP~LGORT FROM VBAK
INNER JOIN VBAP ON VBAK~VBELN = VBAP~VBELN
INTO CORRESPONDING FIELDS OF TABLE IT_ALVSHOW UP TO ROWS.
ENDFORM.

显示效果如下

SAP-简单的OALV演示练习的更多相关文章

  1. 支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示

    随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Angularjs的框架来做UI,而数据则由另一个Web Api 的网站项目来支撑.注意,这里是 ...

  2. Mockito的简单使用方法演示样例

    Mockito是一个流行的Mocking框架.它使用起来简单,学习成本非常低.并且具有非常简洁的API,測试代码的可读性非常高.因此它十分受欢迎,用 户群越来越多.非常多的开源的软件也选择了Mocki ...

  3. Html5 简单选择排序演示

    简单选择排序,是选择排序算法的一种.基本思想:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止.由于在每次循环中,会对数值相等的元素改变位置,所以属于非稳定 ...

  4. beego框架的最简单登入演示

    一.controllers逻辑代码 func (c *UserController) Get() { c.TplName="login.html" } func (c *UserC ...

  5. 一个简单的实例演示vuex模块化和命名空间

    因为Vuex Store是全局注册的,不利于较大的项目,引入模块分离业务状态和方法,引入命名空间解决不同模块内(getters,mutaions,actions)名称冲突的问题 ----------- ...

  6. Vue router拦截 如果用户并未登录直接跳转到登录界面(最简单的cookie演示)

    router.beforeEach(function(to,from,next){ console.log('路由拦截') console.log(to.name) console.log(from. ...

  7. 简单ALV得演示(用到了ALV可编辑及保存后修改数据库)

    *&---------------------------------------------------------------------* *& Report YPMRP010_ ...

  8. SAP和Java系统的Webservice实例

    简介: 关于Webservice的概念和原理,简单来讲,Webservice是一种基于SOAP传输协议,用WSDL描述,用XML封装数据的接口技术.由于其跨平台.跨防火墙.开发成本低.开发周期短等优势 ...

  9. 使用jMeter对基于SAP ID service进行Authentication的Restful API进行并发测试

    这篇文章本来Jerry只在SAP社区上写了英文版的,可以通过点击文末的"阅读原文"获得.后来有两位做Marketing Cloud开发的德国同事,写邮件询问关于文章的更多细节,声称 ...

随机推荐

  1. Python爬取前程无忧网站上python的招聘信息

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 我姓刘却留不住你的心 PS:如有需要Python学习资料的小伙伴可以 ...

  2. 1G内存VPS安装 mysql5.6 经常挂

    背景介绍 去年3月份的时候参加了腾讯云主机活动,5年362,非常优惠.当时的想法是买来可以瞎整一波,虽然配置不高,但是搞点事情也够用. 配置如下,上海机房 1 核 1 GB 1 Mbps 系统盘:普通 ...

  3. TCP协议如何保证可靠传输?

    一.TCP的可靠传输如何保证? 在TCP连接中,数据流必须以正确的顺序传送给对方.TCP的可靠性是通过顺序编号和确认(ACK)实现的.TCP在开始传送一个段时,为准备重传而首先将该段插入到发送队列中, ...

  4. 易优CMS:小白学代码之notempty

    [基础用法] 名称:notempty 功能:判断某个变量是否为空,可以嵌套到任何标签里面使用,比如:channel.type等 语法: {eyou:notempty name='$eyou.field ...

  5. JS基础语法---分支语句总结

    分支语句: if语句:一个分支 if-else语句:两个分支,最终只执行一个分支 if-else if-else if...语句: 多个分支,也是只会执行一个 switch-case语句:多分支语句, ...

  6. 移动端rem适应布局

    移动端rem适应布局 rem rem(root em)是一个相对单位,类似于em,em是父元素字体大小. 不同的是rem的基准是相对于html元素的字体大小. 比如,根元素(html)设置font-s ...

  7. input监听回车

    1.el-input 2.强制监听

  8. canvas绘制流程图

    最近在做一个需求,根据数据动态生成以下类似的流程图,需要可以设置每个节点的颜色,每个节点可添加点击移动等相关的事件 代码中有做很多的注释和说明,相关的文档说明链接:https://9eb75i.axs ...

  9. python中的随机模块random

    random模块是 python 中为随机数所使用的模块 ```import random # 随机生成0-1范围内的随机浮点数i = random.random()print(i) # 随机生成范围 ...

  10. Python Pyinstaller 打包程序及遇到的问题总结

    一.如何打包py程序 1.安装打包模块 pip install pyinstaller 2.定义保存包的路径 CMD ,CD 比方:把最终*.exe运行文件,保存到H盘 install 文件夹下. 输 ...