系统标准ALV写多了,格式觉得单一,不生动,怎样让ALV像EXCEL一样生动呢,网上也有很多案例了,我这里参考借鉴一下,给ABAP小白们提供个思路吧。
本篇基于OOALV CL_GUI_ALV_GRID。
首先,按网上说的扩展ALV类,继承原属性,新增新方法,生成1个新类,这个可以自行百度。
下面是要用到的方法:
每次在ALV首次生成和刷新以后,都要调用这些方法,可以理解成在EXCEL先把数据部署上去,然后合并单元格和格式优化。
下面是2个案例,用的多了可以循环在整个报表用
1、第一列 1~3行合并单元格:
wa_col_merge-col_id = 1
wa_col_merge-outputlen = 3 .
APPEND wa_col_merge TO lt_col_merge.
CALL METHOD lo_grid->z_set_merge_vert2
EXPORTING
col = 1
CHANGING
tab_col_merge = lt_col_merge.
2、第一列居中+加粗+颜色
wa_style-style = alv_style_align_center_center
+ alv_style_font_bold
+ alv_style_color_int_key.
CALL METHOD lo_grid->z_set_cell_style
EXPORTING
row = wa_col_merge-col_id
col = 1
style = wa_style-style.
调用完记得用z_display( )这个方法哦.
格式有很多可选:
ALV_STYLE_COLOR*指背景填充色
ALV_STYLE_FONT_BOLD加粗
ALV_STYLE_FONT_ITALIC斜体
ALV_STYLE_FONT_UNDERLINED下划线
ALV_STYLE_ALIGN_RIGHT_BOTTOM右下对齐
ALV_STYLE2_NO_BORDER_LEFT去除左边框
等等
最终案例样式:
看的出来我合并哪些单元格了吗
不合并单元格但是把边框线隐去,看上去是同一格里显示多行数据,以假乱真
也支持双击,hotspot等事件
24/4/15补充
开发报表时发现会出现以下情况:
会发现报表数据显示不全,且经过断点测试后 超过819 个单元格后的内容都会不显示。
经过调试分析,819 = 256 k / 320
320是cl_gui_alv_grid 内 一个叫MT_DATA内表 的行长度
原来S4版本展示ALV时,并不会一次性展示全,数据较多的时候会仅展示前819个空格,用户通过滚动条需要显示更多数据时,报表再同步刷新数据。
调整:
类:CL_DATAPTABLECACHE
方法:GET_OPT_PACKET_SIZE
将SIZE调整的大一点即可
注意加上条件,否则所有报表打开速度都会有影响