ALV_LVC的使用模板,参数说明
做SAP项目,我们肯定有各种报表开发。我们都知道ALV grid函数的输出有两个:REUSE_ALV_GRID_DISPLAY 和 REUSE_ALV_GRID_DISPLAY_LVC。我最喜欢用LVC结尾的函数,因为它可以和ALV容器结合使用,且参数可以双击跳转到对应的数据字典查询每个参数的描述和属性用法。
在做了那么项目中,发现过很多人写的报表真的很烂,也杂乱无章,所以我每次写报表,为了方便给后续运维的人看起来代码通俗易懂不杂乱,如果不涉及很复杂的功能,我几乎都是直接用LVC函数直接展示,同时把ALV报表模板复制过来,然后对应的修改对应form,一般就只需要修改一下ALV显示的定义结构,fieldcat字段目录,sql数据抽取就行。下面记录一下模板的代码:同时附加一些常用的功能。(我尽量不涉及status的新建,都是用喜欢用ALV标准自带的GUI)。
大概报表逻辑如下:
1.定义alv显示的内表结构;
2.定义选择屏幕;
3.sql数据获取及整理;
4.定义fieldcat;
5.call function to display data
6.如果有一些按钮触发事件再添加user_command事件和对应的代码
ALV模板代码(无用户响应事件)
PS:特别说明一下就是在定义fieldcat的时候我很喜欢用到ref_table和ref_field,因为加了参考可以避免很多显示的问题,比如单元格是可编辑的时候输入长度受限的问题或者数据筛选器筛选数据长度问题或者筛选结果不正确的问题,加了参考就不怕这些问题了。然后还有一个参数就是seltext,控制在筛选数据或者变更布局的时候筛选字段的描述显示,加上它就可以避免ALV在编辑设置布局字段显示的描述不是你定义描述。
*======================================================================*
* 事务代码: ZMM005 *
* 程序名: ZMMR005 *
* 描述: xxx报表 *
* 类型: 报表 *
* APPLICATION AREA: MM *
*----------------------------------------------------------------------*
* 功能描述: *
* 为了方便xxx,特此开发此报表 *
*----------------------------------------------------------------------*
* 修改记录: *
* 版本 DD/MM/YY 作者 描述 更改请求 *
* ---------------------------------------------------------------------*
* 000 28/08/18 xxxx Initial release *
*======================================================================*
REPORT zmmr005 MESSAGE-ID zmm01.*----------------------------------------------------------------------*
* Tables/声明数据库表
*----------------------------------------------------------------------*
Tables:mara.*----------------------------------------------------------------------*
* Type/自定义类型
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_alv,matnr type mara-matnr,"物料号END OF ty_alv.*----------------------------------------------------------------------*
* Variable/定义变量
*----------------------------------------------------------------------**----------------------------------------------------------------------*
* Define the Macros/定义宏
*----------------------------------------------------------------------*
DEFINEset_fieldcat.CLEAR gs_fcat.gs_fcat-fieldname = &1."内表的字段gs_fcat-coltext = &2.gs_fcat-scrtext_m = &2.gs_fcat-scrtext_s = &2.gs_fcat-scrtext_l = &2.gs_fcat-seltext = &2."布局设置时显示的列名称gs_fcat-ref_table = &3.gs_fcat-ref_field = &4.APPEND gs_fcat TO gt_fcat.
END-OF-DEFINITION.*----------------------------------------------------------------------*
* Internal table and work area/定义内表和工作区
*----------------------------------------------------------------------*
DATA:gt_alv TYPE TABLE OF ty_alv,gs_alv TYPE ty_alv,gs_layout TYPE lvc_s_layo,gt_fcat TYPE lvc_t_fcat,gs_fcat TYPE lvc_s_fcat.*----------------------------------------------------------------------*
* Selection screen/定义屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE TEXT-001.SELECTION-SCREEN END OF BLOCK blk.*----------------------------------------------------------------------*
* Initialization/初始事件
*----------------------------------------------------------------------*
INITIALIZATION.*----------------------------------------------------------------------*
* At selection-screen/屏幕事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.*----------------------------------------------------------------------*
* Start-of-selection/开始选择事件
*----------------------------------------------------------------------*
START-OF-SELECTION.PERFORM frm_get_data.*----------------------------------------------------------------------*
* End-of-selection/结束选择事件
*----------------------------------------------------------------------*
END-OF-SELECTION.PERFORM frm_show_data.*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_get_data .ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_show_data .
* 确定ALV输出列的属性PERFORM frm_fill_fieldcat.
* 确定ALV输出格式的属性PERFORM frm_fill_layout .
* ALV报表输出PERFORM frm_alv_display.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILL_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_fill_fieldcat .REFRESH: gt_fcat.set_fieldcat:'MATNR' '物料号' 'MARA' 'MATNR'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILL_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_fill_layout .CLEAR:gs_layout.gs_layout-zebra = 'X'.gs_layout-cwidth_opt = 'X'.gs_layout-sel_mode = 'A'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_alv_display .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repidis_layout_lvc = gs_layoutit_fieldcat_lvc = gt_fcati_save = 'A'TABLESt_outtab = gt_alvEXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ENDFORM.
当有需要叫双击跳转事件,没有其他自定义的按钮事件的,那不需要定义gui,直接定义事件,然后调用的LVC函数加多参数i_callback_user_command = 'FRM_USER_COMMAND'
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_alv_display .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repidi_callback_user_command = 'FRM_USER_COMMAND'is_layout_lvc = gs_layoutit_fieldcat_lvc = gt_fcati_save = 'A'TABLESt_outtab = gt_alvEXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_user_command USING p_ucomm LIKE sy-ucommp_rs_selfield TYPE slis_selfield.CASE p_ucomm.WHEN '&IC1'."点击跳转READ TABLE gt_alv INTO DATA(ls_alv) INDEX p_rs_selfield-tabindex.IF sy-subrc = 0.CASE p_rs_selfield-fieldname.WHEN 'VBELN'.SET PARAMETER ID: 'VL' FIELD ls_alv-vbeln.CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.WHEN 'VGBEL'.IF ls_alv-vgtyp = 'C'.SET PARAMETER ID: 'AUN' FIELD ls_alv-vgbel.CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.ELSEIF ls_alv-vgtyp = 'V'.SET PARAMETER ID: 'BES' FIELD ls_alv-vgbel.CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.ENDIF.WHEN OTHERS.ENDCASE.CLEAR ls_alv.ENDIF.ENDCASE.ENDFORM.
ALV_LVC的使用模板,参数说明相关推荐
- SupeSite模板参数说明
很多用户想自己修改模板,但是不清楚 SupeSite 的模板机制和模板参数,特此做该教程说明供大家参考. 我们在 SupeSite 系统的每个模板里,都可以看到类似的一段代码: 复制内容到剪贴板Cod ...
- 用vba实现将记录集输出到Excel模板
代码如下: '************************************************ '** 函数名称: ExportTempletToExcel '** 函数功能: ...
- OpenGL函数库详解
1.glClear(GLbitfield mask); 功能:用预先设置的值清除缓冲区. 参数说明:mask指定被刷新的缓冲区,可以是GL_COLOR_BUFFER_BIT. GL_DEPTH_BUF ...
- 模拟实现mapset
模拟实现map&set 文章目录 模拟实现map&set 1. map的特性 2. map的模板参数说明 3. map的构造 4. map的迭代器 5. map的容量与元素访问 6. ...
- 一文学会,胶位偏移、缺胶、断胶、溢胶检测
文章目录 检测任务 检测思路 点胶质量检测代码及解析 图示处理思路 博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 检测任务 点胶检查检测以下缺陷: 1.缺少粘合胶的部分(断胶) ...
- aws linux使用ssh登陆_【Linux】 使用ssh连接远程服务器
[Linux] 使用ssh连接远程服务器 前言:SSH,英文全称是Secure Shell Protocol(安全的壳程序协议).SSH是现在公司基本上都在使用的一种文字接口的加密传输技术,采用的是非 ...
- Android开发笔记(四十九)异步任务处理AsyncTask
AsyncTask异步任务 Thread+Handler方式虽然能够实现多线程的通信处理,但是写起代码来颇为繁琐,所以Android提供了AsyncTask这样一个轻量级的异步任务类,其内部封装好Th ...
- C++【C++11】
文章目录 一.统一的列表初始化 1.用{}来初始化元素 2.initializer_list 二.自动类型推断 3.auto 4.decltype 三.指针 5.nullptr 6.范围for 四.S ...
- 【C++】-- C++11基础常用知识点(下)
上篇: [C++]-- C++11基础常用知识点(上)_川入的博客-CSDN博客 目录 新的类功能 默认成员函数 可变参数模板 可变参数 可变参数模板 empalce lambda表达式 C++98中 ...
最新文章
- windows服务器连接linux nfs,windows设置通过NFS连接到Linux共享数据
- 实例1 -- 判断输入年份是否为闰年
- 《数据库技术原理与应用教程(第2版)》——习 题 1
- java学习笔记day06---匿名内部类
- 什么是OLAP和OLTP
- 白色裤子为什么会沾上蓝色_什么是蓝色的,为什么它可以在Mac上运行?
- .net数据绑定控件中的数据导出到Excel
- 操作类名-对象语法//操作类名-数组语法
- Windows程序中的Lib和Dll文件
- python网络爬虫系列教程——Scrapy框架应用全解
- 源码:Java集合源码之:哈希表(二)
- 全面解析免费及收费SSH工具的基本特性和总结
- Linux-chmod
- 于的繁体字有几种写法_于的繁体字是什么(行书怎么写)
- C++ Template用法总结
- 怎么设置计算机网络访问权限,Win7无Internet访问权限怎么解决?
- 一篇文章教会你使用html+css3制作炫酷效果
- 曾经我们无话不说,如今却渐渐形同陌路
- hive的join,left join,right join,full outer join,left semi join,cross join
- 如何成为一个 IT 界的女装大佬?