一、ALV是什么?

ALV(SAP LIST VIEW)是一种比较美观的报表显示工具,具有网格显示方式,有排序、筛选、过滤、(分类)汇总等功能,数据以单元格为单位显示。

二、 ALV实现方法

ALV的实现方法有三种:

使用类CL_SALV_TABLE;

使用类CL_GUI_GRID_DISPLAY

使用Founction来实现的,REUSE_ALV_GRID_DISPLAY_LVC和REUSE_ALV_GRID_DISPLAY,两个函数都可以将数据用ALV的形式显示出来,只是在一些小的地方有些不同。这两个Function的底层也是基于类CL_GUI_GRID_DISPLAY。

其中这两个函数都用到的全局变量为:

1个类型池SLIS和一个指定列数的变量DATA: v_pos TYPE i ." 指定第几列

REUSE_ALV_GRID_DISPLAY_LVC函数用到的全局变量:

DATA: wa_fieldcat TYPE lvc_s_fcat , " 列名表的工作区

i_fieldcat TYPE lvc_t_fcat , " 存放列名的表

i_layout TYPE lvc_s_layo . " 负责整个ALV的布局属性 ```

#####三、 ALV实例

下面以REUSE_ALV_GRID_DISPLAY来介绍ALV的用法:

1. 全局变量声明

----------------------------------ALV 常用变量声明:------------------------

TYPE-POOLS:slis. "类型池

DATA: it_fieldcat TYPE slis_t_fieldcat_al WITH HEADER LINE, "列名集

i_layout TYPE slis_layout_alv, "设置布局

g_repid LIKE sy-repid . "程序名

*页头

DATA: wa_header TYPE slis_listheader,

it_header TYPE slis_t_listheader.

*排序、过滤

DATA: wa_sort_lvc TYPE slis_sortinfo_alv,

it_sort TYPE slis_t_sortinfo_alv,

it_filter TYPE slis_t_filter_alv .

2. 调用ALV Founction 显示

调用alv显示函数:

FORM display_data .

PERFORM f_alv_layout_build CHANGING i_layout.

PERFORM f_alv_fieldcat_build CHANGING it_fieldcat[].

PERFORM f_filter_build TABLES it_filter.

PERFORM f_sort_build TABLES it_sort.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = g_repid

i_callback_pf_status_set = 'SET_PF_STATUS' "ALV工具栏Subroutine(子程序名),没有自定义按钮时候,该参数可以不要,这时会显示ALV标准的按钮;

i_callback_user_command = 'USER_COMMAND' "LV User Command Subroutine(子程序名)实现对应菜单项的操作响应

i_callback_top_of_page = 'TOP_OF_PAGE '

is_layout = i_layout

it_fieldcat = it_fieldcat[]

it_sort = it_sort[]

it_filter = it_filter[]

TABLES

t_outtab = it_data[]

EXCEPTIONS

program_error = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM.

其中部分参数使用子程序名传递,部分参数变量传递,常用参数如下。

2. 设置显示的字段集,直接将处理后的it_fieldcat[]赋值给1中的it_fieldcat参数。

一种是手动设置

宏声明,放在数据定义部分:

DEFINE mar_out.

clear it_fieldcat.

it_fieldcat-fieldname = &1. "字段

it_fieldcat-tabname = &2. "alv使用的内表

it_fieldcat-seltext_l = &3. "字段展示文本

append it_fieldcat.

if it_fieldcat-fieldname = 'SAKNR' . "为字段SAKNR设置热点

it_fieldcat-hostpot = 'X' .

endif.

END-OF-DEFINITION.

设置列名的子程序

FORM f_alv_fieldcat_build CHANGING pt_fieldcat TYPE slis_t_fieldcat_alv.

FIELD-SYMBOLS LIKE LINE OF pt_fieldcat.

mar_out 'BUKRS' 'it_data' '公司代码'. "注意这个地方字段名要大写否则报错

mar_out 'BUTXT' 'it_data' '公司代码描述'.

mar_out 'SAKNR' 'it_data' '科目编号'.

mar_out 'TXT20' 'it_data' '科目名称'.

mar_out 'B_BALANCE' 'it_data' '期初余额'.

mar_out 'E_BALANCE' 'it_data' '期末余额'.

mar_out 'C_BALANCE' 'it_data' '当期发生额'.

LOOP AT it_fieldcat ASSIGNING WHERE fieldname = 'BUKRS'.

-do_sum = 'X'. "设置按bukrs字段汇总

ENDLOOP.

ENDFORM. "f_alv_fieldcat_build

另一种如果内表结构与数据字典的表结构一致,可以调用REUSE_ALV_FIENDCATALOG_MERGE 函数半自动创建列名集。

3. 设置布局,将处理后的i_layout 赋值给1中的is_layout。

FORM f_alv_layout_build CHANGING p_layout TYPE slis_layout_alv.

p_layout-colwidth_optimize = 'X'. " 自动调整列

p_layout-zebra = 'X'. "间隔行颜色变换显示

" p_layout-detail_titlebar = '详细内容'. "设置弹出窗口的标题栏

" p_layout-box_fieldname= 'BOX' "设置grid的多行选择列,其中box必须为内表的一列,为一个字符长度

" p_layout_no_colhead = 'X'. "不显示列名

" p_layout_no_vline = 'X'. "不显示列间竖线

" p_layout-totals_before_items= 'X' "设置grid的合计行显示在明细的上面

" p_layout-detail_popup= 'X' "设置grid不显示弹出明细显示窗口

" p_layout-box_fieldname = 'SELFLAG'. "表示ALV行项目选中的字段

ENDFORM. "f_alv_layout_build

4. 设置页头,将子程序名 top_of_page赋值给 1中i_callback_top_of_page,注意大写。

FORM top_of_page.

"定义登录用户的描述

DATA: l_name TYPE string VALUE '张三',

l_date TYPE string.

"拼接制表日期

CONCATENATE sy-datum+0(4) '.' sy-datum+4(2) '.' sy-datum+6(2) INTO l_date.

CONCATENATE '制表人:' l_name INTO l_name .

CONCATENATE '制表日期:' l_date INTO l_date .

"位于标题第一行

wa_header-typ = 'H'.

wa_header-info = 'ALV DEMO' .

APPEND wa_header TO it_header .

CLEAR wa_header .

"相关内容信息,这里用于显示登录用户信息描述

wa_header-typ = 'S'.

wa_header-key = l_name .

wa_header-info = l_date .

APPEND wa_header TO it_header .

CLEAR wa_header .

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

it_list_commentary = it_header

i_alv_form = 'X'. "是否用于 ALV 的FORM中,默认为:Space

ENDFORM. "top_of_page

5. 设置排序、过滤、汇总,变量赋值给1中对应参数。

(1)排序用到类型slis_t_sortinfo_alv,按条件把过滤的字段和规则设置好,添加到一个参考slis_t_sortinfo_alv类型的内表,在调用Function的时候指导内表赋给it_sort参数。

(2)过滤用到类型slis_t_filter_alv,按条件把排序的字段和规则设置好,添加到一个参考slis_t_filter_alv类型的内表,在调用Function的时候把内表的值赋给it_fitler参数。

(3)分类汇总是汇总和排序两。功能来进行分类和汇总的。按照排序的字段的值进行分类,对已经汇总的字段进行分类汇总。在设置排序的时候设置类型。

(4)汇总是设置要汇总的字段的Fieldcat属性,设置slis_t_fieldcat_alv-do_sum = ‘X’。

&---------------------------------------------------------------------

*& Form f_filter_build

&---------------------------------------------------------------------

FORM f_filter_build TABLES pt_filter TYPE slis_t_filter_alv.

DATA wa_filter LIKE LINE OF pt_filter.

wa_filter-fieldname = 'BUKRS'.

wa_filter-sign0 = 'E'.

wa_filter-optio = 'EQ'.

wa_filter-valut = 'MI '.

APPEND wa_filter TO pt_filter.

ENDFORM. "f_filter_build

&---------------------------------------------------------------------

*& Form f_sort_build

&---------------------------------------------------------------------

FORM f_sort_build TABLES pt_sort TYPE slis_t_sortinfo_alv.

DATA wa_sort LIKE LINE OF pt_sort.

wa_sort_lvc-spos = 1 . " 排序顺序

wa_sort-fieldname = 'BUKRS'. "要排序的字段

wa_sort-up = 'X'.

wa_sort-subtot = 'X'. "分类汇总

APPEND wa_sort TO pt_sort.

ENDFORM. "f_sort_build

6. 状态栏和user_usercommand

&---------------------------------------------------------------------

*& Form set_pf_status

&---------------------------------------------------------------------

FORM set_pf_status USING rt_extab TYPE slis_t_extab.

SET PF-STATUS 'ST_FULL' .

ENDFORM. "set_pf_status

&---------------------------------------------------------------------

*& Form user_command

&---------------------------------------------------------------------

FORM user_command USING r_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield.

CASE r_ucomm.

WHEN '&IC1' . " 判断用户的动作

READ TABLE i_tab INTO wa_tab INDEX rs_selfield-tabindex . "读取用户点击的当前行的一行内容

IF rs_selfield-fieldname EQ 'saknr'. "判断用户点击的是哪个字段

IF NOT wa_tab-saknr IS INITIAL .

PERFORM frm_show_detail USING rs_selfield . " 显示明细

ENDIF.

ELSEIF it_data-belnr IS NOT INITIAL AND rs_selfield-fieldname = 'BELNR' .

SET PARAMETER ID 'BLN' FIELD it_data-belnr. "将字段值传递给FB03的参数

SET PARAMETER ID 'BUK' FIELD it_data-bukrs.

SET PARAMETER ID 'GJR' FIELD it_data-gjahr.

CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN . "调用事务码FB03并跳转屏幕

ELSEIF rs_selfield-fieldname EQ 'ICON_FOLDER' .

PERFORM frm_open_folder USING rs_selfield . " 打开文件

ENDIF.

CLEAR wa_tab.

WHEN '&SAVE_DATA' .

PERFORM frm_save_data . " 保存数据

WHEN 'PRINT' .

PERFORM frm_print_data. " 打印数据

WHEN 'EXCEL' .

PERFORM frm_export . " 导出数据

ENDCASE.

rs_selfield-refresh = 'X' . " 当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新

ENDFORM. "USER_COMMAND

对于r_ucomm的值,WHEN '&IC1' . " 判断用户的动作

#####四、ALV更多应用

在SE38环境下的程序名输入栏输入**’DEMO’**后按F4,可以查到SAP所有的DEMO示例程序,会学到很多ABAP功能的实现方法,输入**’BCALV’**后按F4,可以查到很多ALV示例程序。

1. BALVSD06 : Output flights (simple version + save)这是该系列范例最简单的一个,建议以此入门。使用的Function Modules :REUSE_ALV_LIST_DISPLAY : 此FM非常重要,用来显示simple interactive list。大家要熟练掌握该FM的输入参数名称和作用,对ALV编程很有帮助。

2. BALVSD01 : Simple list flight model

3. BALVSD11 : Simple list with interactions and layouts

4. BALVHD01 : Hierarchical-sequential list flight model

5. BALVHD01_GROUP : Hierarchical-sequential list flight model

更过细节参考:

http://www.cnblogs.com/VerySky/articles/3388126.html

http://blog.sina.com.cn/s/blog_55c871720102w86j.html

alv布局 sap_ABAP报表开发:ALV运用相关推荐

  1. SAP ALV报表开发实战案例(三)

    SAP ALV报表开发实战案例 嗨!大家好~我是SAP小白,今天给大家分享一下我今天,不!是这几天开发的"实战级"的案例开发.如果有哪里感到疑惑或错误,欢迎大家评论区留言哦,让我们 ...

  2. ABAP 关于ALV布局保存选项的讲解

    关于ALV布局保存选项: 1:I_SAVE = SPACE. 布局不能被保存 2:I_SAVE = 'U'.              仅自定义的布局可以被保存 3:I_SAVE = 'X'.     ...

  3. 释疑の删除多余的ALV布局以及选择条件变式

    1.选择条件变式 在选择条件界面上的"转到"菜单中选择. 由于这个变式是所有用户都可以看到,所以会有这样的提示,是删除个人用户的,还是在集团内均删除. 2.ALV布局 由于无良的用 ...

  4. alv布局 sap_ALV详解_SAP精华篇.pdf

    ALV详解_SAP精华篇.pdf ALV 详解_SAP 精华篇 一.ALV 介绍 The ALV Grid Control (ALV = SAP List Viewer)是一个显示列表的灵活的 工具, ...

  5. FineReport 11.0 五大全新功能,让报表开发更快、更好看

    在FineReport 11.0 剧透中,大师兄给大家预告了很多亮点功能!布局推荐.复用组件.主题切换等功能对应的痛点场景更是引起了超多的共鸣! 这些让我们困扰已久的问题,在 FineReport 1 ...

  6. 低代码开发初体验一分钟——Jeecg-Boot 在线报表开发

     Online开发系列专题 1. online 表单开发 2. online 报表开发 3. online 流程开发 Online开发--初体验(在线配置图表) 01 通过JSON数据,快速配置图形报 ...

  7. 靠着零代码报表工具,转行报表开发后月薪超过3万

    作为一个在IT行业摸爬滚打多年的老油条,我刚进某东公司做程序开发时工资只有不到一万,当时公司的数据仓库非常原始,基本上都靠我一个人写SQL花了三年才完成. 虽然不同于其他程序员拧螺丝的工作,但我们部门 ...

  8. 这个低代码报表开发平台,操作类似Excel,用好了不需要加班

    现在低代码开发平台很火,能够通过零代码或少量代码就可以快速创建应用. 但是从实践结果来看,完全的零代码开发应用是不可能的,机器替代人类智慧还需要很长的路要走.但是介于两者之间的低代码模式开发应用是值得 ...

  9. 从数据平台到报表开发,我靠这个零代码报表工具,转行后月薪3W

    偶尔会跟大数据这行里的朋友聊天,先说一个我听到的故事:有一京东的哥们,在那工作三年了,大数据平台岗.数仓搭好了之后,天天就是写SQL,一个月28k. 在京东待两年,那业务和调优的手法,再熟悉不过了,就 ...

最新文章

  1. table 在网页无法顶到头部问题
  2. DotNetBar 中 SuperGridControl 加载数据、获取数据、设置样式
  3. 无连接可靠传输_尽力传输是什么 尽力传输原理介绍【图文】
  4. mongodb创建用户
  5. dede linux下oss上传问题
  6. 切换ubuntu启动方式 命令行/图形界面
  7. php hibernate,Hibernate总结
  8. oracle删除数据库表空间
  9. 预告 | 大咖Live X 数字绿土 CTO 赵宝林:高精度地图上车之路究竟还有多远?
  10. asp.net Coolite 学习
  11. common.css
  12. dp动态规划分类详解
  13. 【阿里云IoT+YF3300】10.快速开发188协议设备驱动
  14. 使用高德地图API获取天气
  15. spring cloud 实现服务不间断
  16. tablueau地图标记圆形_高德/百度地图画圆标记
  17. shardingsphere读写分离+分表【笔记】
  18. 中学教师资格证常考的73道简答题
  19. 华科教授因学生住宿问题投诉后勤处:被学校处分,取消两年评优资格
  20. 账号联合运营--花漾指纹浏览器引领跨境电商新趋势

热门文章

  1. c语言程序 管理员,ShellExecuteEX(获取管理员权限) | C/C++程序员之家
  2. 自定义异常 RuntimeException
  3. JVM运行时参数查看
  4. 采样坦克4音色库-IK Multimedia SampleTank 4 Sound Library
  5. 后备保护器安装在浪涌保护器前的作用和意义
  6. web前端35个jQuery小技巧!
  7. linux shell chmod,Shell chmod 命令简介
  8. AGPS定位基本机制
  9. Blender-烘焙动画,解除约束父子级,导入UE4
  10. 报错 Promises must be handled appropriately