ALV Grid 函数

ALV Grid 函数的输出有两个:REUSE_ALV_GRID_DISPLAY 和 REUSE_ALV_GRID_DISPLAY_LVC

两者的操作大同小异,只是后者能更好的和ALV容器结合使用,前后则不能;而在输入参数属性的结构上也有些差异。

本篇文章主要讲解下ALV函数中输入参数的一些应用。

 

首先了解下ALV函数输入参数的作用(粗体为常用参数):

I_INTERFACE_CHECK: 检查接口一致性

I_BYPASSING_BUFFER: 是否使用缓存

I_BUFFER_ACTIVE:是否激活缓存,如果每次显示ALV都是相同的字段目录,则该字段目录会被放到一特殊的缓存里,加快显示速度。

I_CALLBACK_PROGRAM:调用ALV的程序名称

I_CALLBACK_PF_STATUS_SET:ALV工具栏Subroutine(子程序)

I_CALLBACK_USER_COMMAND:ALV User Command Subroutine(子程序),实现对应菜单项及相应事件功能

I_CALLBACK_TOP_OF_PAGE:ALV抬头内容信息

I_CALLBACK_HTML_TOP_OF_PAGE:ALV HTML格式抬头内容信息

I_CALLBACK_HTML_END_OF_LIST:ALV HTML格式页脚内容信息I_STRUCTURE_NAME:为输出表数据结构的命名,指定了这个参数,域目录将会自动生成

I_BACKGROUND_ID:ALV背景图片Object ID

I_GRID_TITLE:ALV 标题

I_GRID_SETTINGS:GRID信息

IS_LAYOUT / IS_LAYOUT_LVC:ALV输出布局样式

IT_FIELDCAT / IT_FIELDCAT_LVC:设定显示的项目名称及输出设定

IT_EXCLUDING:隐藏设置的ALV工具栏

IT_SPECIAL_GROUPS / IT_SPECIAL_GROUPS_LVC:若内表中一些字段通过SP_GROUP被分组在一起,必须为这些组传递组文本内表IT_SORT / IT_SORT_LVC:ALV排序设置

IT_FILTER / IT_FILTER_LVC:ALV过滤设置

IS_SEL_HIDE:替换或修改屏幕中select-option的值

I_DEFAULT:用户是否可以定义默认的布局,’X'-可以定义默认布局,Space-不可以定义默认布局 (默认:X)

I_SAVE:保存表格布局,’X'-只能保存全局变式;’U'-只能保存特定变式;’A'-都可以保存;Space-不能保存变式 (默认:space)

IS_VARIANT:表格布局变式

IT_EVENTS:设置事件, 类型为slis_t_event的内表(name:事件名称,form:事件的FORM)

IT_EVENT_EXIT:设置回调的方法的执行行为,表明用户所写的代码是在执行标准执行之前还是之后

IS_PRINT:后台打印的相关参数

I_SCREEN_START_COLUMN:以对话框形式显示的开始列

I_SCREEN_START_LINE:以对话框形式显示的开始行

I_SCREEN_END_COLUMN:以对话框形式显示的结束列

I_SCREEN_END_LINE:以对话框形式显示的结束行

I_HTML_HEIGHT_TOP:HTML抬头的高度

I_HTML_HEIGHT_END:HTML页脚的高度

IT_ALV_GRAPHICS:是否可以在图表中显示ALV

IT_HYPERLINK:使用超链接

 

下面详细介绍下常用的输入参数:

1. I_CALLBACK_PROGRAM 参数属性

定义调用程序名称,一般为当前程序sy-repid

 

2. I_CALLBACK_PF_STATUS_SET 参数

定义ALV屏幕菜单,此参数允许报表展现用户自定义的屏幕菜单,

参数类型为:SLIS_FORMNAME,指定自定义按钮的子FORM,该子FORM不显式的调用;

如:

i_callback_pf_status_set = 'FRM_SET_STATUS'

Form中的定义为:

FORM frm_set_status USING p_extab TYPE slis_t_extab.SET PF-STATUS 'Z_ALV_STATUS'  .ENDFORM.                    " frm_set_status

2.1). 没有自定义按钮时候,该参数可以不要,这时会显示ALV标准的按钮;

当然这些按钮可以部分隐藏(见:IT_EXCLUDING 参数属性);

2.2). 当我们使用自定义按钮后,ALV自带的标准按钮,则会失效,这时需要将一些必要的按钮在工具条补上;

2.3). 其中 “分隔符” 的插入方法为:在需要插入分隔符的方框内,选择菜单:Edit->Insert-> Separator line 即可插入分隔符;

2.4). 下面是ALV中的标准工具的名称、代码、图标名称、快捷键:

名称

代码

图标名称

快捷键

刷新

REFRESH

ICON_REFRESH

F8(可随便更改)

导出为EXCEL表格

EXCEL

Shift-F8(可随便更改)

ABC 分析

&ABC

ICON_ABC

Ctrl-F1

按升序排列

&OUP

ICON_SORT_UP

Ctrl-F4

设置过滤器

&ILT

ICON_FILTER

Ctrl-F5

总计

&UMC

ICON_SUM

Ctrl-F6

邮件查收件

%SL

ICON_MAIL

Ctrl-F7

更改布局…

&OL0

ICON_ALV_VARIANTS

Ctrl-F8

选择布局…

&OAD

ICON_ALV_VARIANT_CHOOSE

Ctrl-F9

保存布局…

&AVE

ICON_ALV_VARIANT_SAVE

Ctrl-F10

信息

&INFO

ICON_INFORMATION

Ctrl-F12

明细

&ETA

ICON_SELECT_DETAIL

Ctrl-Shift-F3

按降序排列

&ODN

ICON_SORT_DOWN

Ctrl-Shift-F4

删除过滤器

&ILD

ICON_FILTER_UNDO

Ctrl-Shift-F5

小计

&SUM

ICON_INTERMEDIATE_SUM

Ctrl-Shift-F6

Microsof

&VEXCEL

ICON_XLS

Ctrl-Shift-F7

字处理

&AQW

ICON_WORD_PROCESSING

Ctrl-Shift-F8

本地文件

%PC

ICON_EXPORT

Ctrl-Shift-F9

打印预览

&RNT_PREV

ICON_LAYOUT_CONTROL

Ctrl-Shift-F10

图形

&GRAPH

ICON_GRAPHICS

Ctrl-Shift-F11

 

2.5). 一般情况下,可以快速拷贝标准程序的菜单栏,再进行修改、筛选;

操作步骤如下:

01). 进入 SE80,打开 Repository Information System;

02). 打开路径: Repository Information System-> Program Library->Program SubObjects->GUI Status;

03). 在右边屏幕的程序名称(Program Name)输入框内输入标准程序名称:SAPLKKBL,然后执行;

04). 在输出的列表中,找到 STANDARD 或 STANDARD_FULLSCREEN:
05).双击进入菜单编辑后,拷贝到需要用到的程序中即可。

 

3. I_CALLBACK_USER_COMMAND 参数属性

响应菜单项及其相应事件,捕捉点击相应的按钮或双击等操作的 Function Code(FCode)

参数类型为:SLIS_FORMNAME,与 I_CALLBACK_PF_STATUS_SET 参数一样,为定义的子 FORM,不显式调用;

如:

i_callback_user_command = 'FRM_ ALV_USER_COMMAND'

Form 的定义为:

*&-----------------------------------------------------------------*
*&      Form  FRM_ALV_USER_COMMAN
*&-----------------------------------------------------------------*
FORM frm_alv_user_command USING p_ucomm        
TYPE sy-ucommp_rs_selfield  TYPE slis_selfield.CASE p_ucomm.WHEN '&IC1' .    " 判断用户的动作"读取用户点击的当前行的一行内容READ TABLE  i_tab INTO wa_tab INDEX p_rs_selfield-tabindex .IF p_rs_selfield-fieldname EQ 'CITYFROM'."判断用户点击的是哪一列IF NOT  wa_tab-cityfrom IS INITIAL .PERFORM frm_show_detail USING p_rs_selfield .    " 显示明细ENDIF.ELSEIF p_rs_selfield-fieldname EQ 'TCODE'  .IF NOT  wa_tab-tcode IS INITIAL .PERFORM frm_call_tran USING p_rs_selfield .      " 调用其他事务ENDIF .ELSEIF p_rs_selfield-fieldname EQ 'ICON_FOLDER'  .PERFORM frm_open_folder USING p_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.p_rs_selfield-refresh = 'X' .    " 当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新 
ENDFORM.                    " frm_alv_user_command

其中,标准按钮的FCode,可以通过类 CL_GUI_ALV_GRID 中的 Attributes 查看;

操作步骤:

01). 进入事务码SE24,输入类名称:CL_GUI_ALV_GRID,点击显示( Display );

02). 切换到 Attributes 标签,找到自己需要的”属性”和”初始值”,这个初始值就是我们要找的标准按钮的FCODE;

 

3.1 热点链接

热点链接,即 Fieldcat中 的 hotspot 属性;

设置之后,当用户点击带有热点的字段时,就会触发 Subroutine(FRM_USER_COMMAND)中的动作;

对于热点链接,所对应的FCode为 “&IC1“;

示例如下:

lv_pos = lv_pos + 1 .
wa_fieldcat-col_pos       = lv_pos .
wa_fieldcat-fieldname     = 'MATNR' .
wa_fieldcat-scrtext_l     = '物料编号'.
wa_fieldcat-fix_column    = 'X' .
wa_fieldcat-hotspot       = 'X' .      " 热点,链接用
APPEND wa_fieldcat TO i_fieldcat .
CLEAR wa_fieldcat.*&------------------------------------------------------------------*
*&      Form  FRM_ALV_USER_COMMAND
*&------------------------------------------------------------------*
FORM frm_alv_user_command USING p_ucomm        
TYPE sy-ucomm
p_rs_selfield  TYPE slis_selfield .CASE p_ucomm.WHEN '&IC1' .  "判断用户的动作"读取用户点击的当前行的一行内容READ TABLE  i_tab INTO wa_tab INDEX p_rs_selfield-tabindex .IF p_rs_selfield-fieldname EQ 'MATNR'.             " 判断用户点击的是哪一列IF NOT  wa_tab-matnr IS INITIAL .………ENDIF.ELSEIF p_rs_selfield-fieldname EQ 'TCODE'  .IF NOT  wa_tab-tcode IS INITIAL .PERFORM frm_call_tran USING p_rs_selfield.      " 调用其他事务ENDIF .ENDIF.CLEAR wa_tab.ENDCASE.p_rs_selfield-refresh = 'X'.ENDFORM.                    " frm_alv_user_command

3.2 显示明细

在使用 REUSE_ALV_GRID_DISPLAY_LVC 时,会发现使用 REUSE_ALV_GRID_DISPLAY 时的双击显示行明细功能没有了;

这是SAP标准程序决定的,REUSE_ALV_GRID_DISPLAY_LVC 已经取消了双击显示行明细功能。

当然,也可以点击工具栏中的放大镜按钮,直接查看明细;

如若想要实现双击显示明细,则可以直接执行FCode:&ETA调用标准功能:

*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PA_UCOMM     text
*      -->PS_SELFIELD  text
*----------------------------------------------------------------------*
FORM frm_alv_user_command USING pa_ucomm TYPE sy-ucommps_selfield TYPE slis_selfield.CASE pa_ucomm.WHEN '&IC1'.          "双击pa_ucomm = '&ETA'.  "查看明细ENDCASE.ENDFORM.                    " FRM_ALV_USER_COMMAND

3.3 调用其他事务

*&---------------------------------------------------------------------*
*&      Form  frm_alv_call_tran
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM frm_alv_call_tran USING p_rs_selfield TYPE slis_selfield  .SET PARAMETER  ID  'LIB'  FIELD  p_rs_selfield-value.CALL TRANSACTION  'SE37'  AND  SKIP  FIRST  SCREEN.ENDFORM.                    " frm_alv_call_tran

其中,”LIB“是指:参数ID(PARAMETER ID)。

查找方法:

01). 用一个事务码进入屏幕界面,在输入框内按 F1;

02). 在弹出来的界面中点击”技术信息”按钮,在字段数据的最后一行,即为参数ID;

“SE37″ 是指我们要调用的事务代码,AND SKIP FIRST SCREEN 表示跳过第一屏屏幕;

 

4. I_CALLBACK_TOP_OF_PAGE / I_CALLBACK_HTML_TOP_OF_PAGE 参数属性

I_CALLBACK_TOP_OF_PAGE 与 I_CALLBACK_HTML_TOP_OF_PAGE 参数属性都用于书写 ALV抬头标题信息,

只是区别在于后者支持 HTML格式;

参数类型:SLIS_FORMNAME,也与 I_CALLBACK_PF_STATUS_SET 参数一样,为定义的子FORM,不显式调用。

如:

i_callback_top_of_page       = 'FRM_TOP_OF_PAGE'i_callback_html_top_of_page  = 'FRM_HTML_TOP_OF_PAGE'

其中,对应 FORM(FRM_HTML_TOP_OF_PAGE)的定义,需要引用类:CL_DD_DOCUMENT(动态文本类)来显示HTML格式。

如:

*&---------------------------------------------------------------------*
*&      Form  frm_html_top_of_page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_CL_DD    text
*----------------------------------------------------------------------*
FORM frm_html_top_of_page USING p_cl_dd TYPE REF  TO  cl_dd_document.…ENDFORM.                    "frm_html_top_of_page

示例如下:

*&---------------------------------------------------------------------*
*&      Form  frm_html_top_of_page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_html_top_of_page USING p_cl_dd TYPE REF  TO  cl_dd_document." 定义登录用户的描述DATA: l_name     TYPE string ,name_first LIKE adrp-name_first ,name_last  LIKE adrp-name_last ." 定义登录日期DATA: l_date TYPE string ." 定义缓冲区变量DATA: m_p      TYPE i ,m_buffer TYPE string ." 得到登录用户的描述SELECT SINGLE  adrp~name_firstadrp~name_lastINTO (name_first,name_last)FROM adrpINNER JOIN  usr21 ON adrp~persnumber = usr21~persnumberWHERE usr21~bname = sy-uname .IF sy-subrc = 0 .CONCATENATE name_last name_first INTO l_name .ELSE .l_name = sy-uname .ENDIF.CLEAR name_first .CLEAR name_last ." 拼接制表日期CONCATENATE sy-datum+0(2) '.'sy-datum+4(2) '.'sy-datum+6(2) '.'INTO l_date .m_buffer = '<h1>ALV DEMO</h1>'  .CALL METHOD  p_cl_dd->html_insertEXPORTINGcontents = m_bufferCHANGINGposition = m_p." 输出制表人和制表日期CONCATENATE '<p>出表人:'  l_name'     ''出表日期:' l_date '</p>'INTO m_buffer .CALL METHOD  p_cl_dd->html_insertEXPORTINGcontents = m_bufferCHANGINGposition = m_p.ENDFORM.                    "frm_html_top_of_page* ALV
CALL FUNCTION  'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program          = sy-repid           " 当前程序i_callback_top_of_page      = 'FRM_TOP_OF_PAGE'i_callback_html_top_of_page = 'FRM_HTML_TOP_OF_PAGE'is_layout_lvc               = i_layout_lvc       " 属性内表it_fieldcat_lvc             = i_fieldcat_lvc[]   " 列明内表i_save                      = 'X'               " 是否保存布局TABLESt_outtab                    = i_tab              " 数据内表EXCEPTIONSprogram_error               = 1OTHERS                      = 2.

4.1 REUSE_ALV_COMMENTARY_WRITE 函数

上面文档中出现 REUSE_ALV_COMMENTARY_WRITE 函数,这里顺便了解下该函数的应用。

该函数与 CL_DD_DOCUMENT 类一样,用于 I_CALLBACK_TOP_OF_PAGE FORM 中输出抬头/页脚内容信息;

所以一般情况下:

I_CALLBACK_TOP_OF_PAGE Form 与 REUSE_ALV_COMMENTARY_WRITE 函数配合使用;

I_CALLBACK_HTML_TOP_OF_PAGE Form 与 CL_DD_DOCUMENT 类配合使用。

 

REUSE_ALV_COMMENTARY_WRITE 函数包括一个必须参数,三个可选参数:

01). IT_LIST_COMMENTARY(必须):一个类型为 SLIS_T_LISTHEADER 的内表;

* Header table for top of page
TYPES: BEGIN OF  slis_listheader,typ(1)  TYPE C,    " H = Header, S = Selection, A = Actionkey(20) TYPE C,info    TYPE slis_entry,END OF  slis_listheader.TYPES: slis_t_listheader TYPE slis_listheader OCCURS 1.

02). I_LOGO(可选):图片/Logo 的 Object ID

03). I_END_OF_LIST_GRID(可选):用于页脚的信息

04). I_ALV_FORM(可选):是否用于 ALV 的FORM中,默认为:Space

 

接下来,看下示例:

*&---------------------------------------------------------------------*
*&      Form  frm_top_of_page
*&---------------------------------------------------------------------*
*       ALV 标题
*----------------------------------------------------------------------*
FORM frm_top_of_page.DATA: i_header  TYPE  slis_t_listheader,wa_header TYPE slis_listheader.* 定义登录用户的描述DATA: l_name     TYPE string ,name_first LIKE adrp-name_first ,name_last  LIKE adrp-name_last .* 定义登录日期DATA: l_date TYPE string .* 得到登录用户的描述SELECT SINGLEadrp~name_firstadrp~name_lastINTO (name_first,name_last)FROM adrpINNER JOIN  usr21 ON adrp~persnumber = usr21~persnumberWHERE usr21~bname = sy-uname .IF sy-subrc = 0 .CONCATENATE name_last name_first INTO l_name .ELSE .l_name = sy-uname .ENDIF.CLEAR name_first.CLEAR name_last.* 拼接制表日期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 i_header .CLEAR  wa_header .* 相关内容信息,这里用于显示登录用户信息描述wa_header-typ  = 'S'.wa_header-key  = l_name .wa_header-info = l_date .APPEND wa_header TO i_header .CLEAR  wa_header .CALL FUNCTION  'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = i_headeri_alv_form         = 'X'.ENDFORM.                  "frm_top_of_page* ALV
CALL FUNCTION  'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program          = sy-repid           " 当前程序i_callback_top_of_page      = 'FRM_TOP_OF_PAGE'is_layout_lvc               = i_layout_lvc       " 属性内表it_fieldcat_lvc             = i_fieldcat_lvc[]   " 列明内表i_save                      = 'X'               " 是否保存布局TABLESt_outtab                    = i_tab              " 数据内表EXCEPTIONSprogram_error               = 1OTHERS                      = 2.

4.2 上传图片

01).通过事务码:OAER,进入 Business Document Navigator 参数界面;

02).输入值:

ClassName 输入:”PICTURES”;

Class Type 输入: “OT”

Object Key 输入: 自定义ID名称(这里输入ZJX_LOGO),用于标记上上传图片的唯一标识

03).按F8执行后,进入到导航界面:

04) 选择 PICTURES 节点后,在创建标签中,打开标准文档类型节点;

05) 双击屏幕节点,会弹出文件框,直接上传现有的图片;

06) 选择文件后,输入描述与关键字,便于搜索查找;

07) 上传成功后,记录下Object Key:”ZJX_LOGO”

 

然后在 ALV抬头中加入上传后的LOGO:

CALL FUNCTION  'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = i_headeri_logo             = 'ZJX_LOGO'  “ OAER 中的Object Keyi_alv_form         = 'X'.

5. I_GRID_TITLE 参数属性

该参数为 ALV 小标题,位于 ALV 抬头信息下方;示例如下:

DATA: i_grid_title TYPE lvc_title .i_grid_title = '小标题' .CALL FUNCTION  'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program          = sy-repid           " 当前程序i_callback_top_of_page      = 'FRM_TOP_OF_PAGE'i_callback_html_top_of_page = 'FRM_HTML_TOP_OF_PAGE'i_grid_title                = i_grid_titleis_layout_lvc               = i_layout_lvc       " 属性内表it_fieldcat_lvc             = i_fieldcat_lvc[]   " 列明内表i_save                      = 'X'               " 是否保存布局TABLESt_outtab                    = i_tab              " 数据内表EXCEPTIONSprogram_error               = 1OTHERS                      = 2.

6. I_GRID_SETTINGS 参数属性

该参数用于设置Grid相关参数(打印、单元格回调);

类型为:LVC_S_GLAY,该结构包括:

01) COLL_TOP_P:最小化 TOP_OF_PAGE

02) COLL_END_L:最小化 END_OF_LIST

03) TOP_P_ONLY:仅打印TOP_OF_PAGE

04) EOL_P_ONLY:仅打印END_OF_LIST

05) NO_COLWOPT:不优化打印的列宽

06) EDT_CLL_CB:退出可编辑单元格时回调

其中,常用的是 EDT_CLL_CB 字段,该字段用于回调输入的变量;

即,当我们在ALV的显示界面可编辑字段上修改了数据,回车后会回调我们修改的数据到内表中,并对其修改;

这个字段在编辑操作中很关键。

 

示例代码如下:

 定义回调变量
DATA: i_grid_settings TYPE  lvc_s_glay.i_grid_settings-edt_cll_cb  = 'X' .* 在ALV中使用
CALL FUNCTION  'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repidis_layout_lvc      = i_layout_lvcit_fieldcat_lvc    = i_fieldcat_lvc[]i_grid_settings    = i_grid_settingsi_save             = 'X'TABLESt_outtab           = i_tabEXCEPTIONSprogram_error      = 1OTHERS             = 2.

7. IS_LAYOUT/ IS_LAYOUT_LVC 参数属性

关于该参数,前面文章《ALV简介和Fieldcat与Layout相关参数属性》中已经讲述过其相关参数属性;

可查看相关参数属性:Layout属性,这里列举下常用的一些属性:

7.1 设置grid的字段列宽度自动适应

i_layout-colwidth_optimize = 'X'

7.2 设置grid的行颜色变换显示

i_layout-zebra  = 'X'

7.3 设置弹出窗口的标题栏

i_layout-detail_titlebar = '详细内容'

7.4 设置grid的多行选择列,其中box必须为内表的一列,为一个字符长度

1

i_layout-box_fieldname= 'BOX'

7.5 设置grid是否显示行分割线

1

i_layout-no_vline= 'X'

7.6 设置grid的合计行显示在明细的上面

1

i_layout-totals_before_items= 'X'

7.7 设置grid不显示弹出明细显示窗口

1

i_layout-detail_popup= 'X'

7.8 设置grid显示led列, light为内表字段,,一个字符长,,值范围为1-3

1

i_layout-excp_fname= 'light'

7.9 设置grid的没有标题

1

i_layout-no_colhead = 'X'

 

8. IT_FIELDCAT/ IT_FIELDCAT_LVC 参数属性

与 IS_LAYOUT/ IS_LAYOUT_LVC 参数一样,前面文章《ALV简介和Fieldcat与Layout相关参数属性》中已经讲述过该参数的相关属性;

可查看相关参数属性:Fieldcat属性,这里列举下常用的一些属性:

8.1 单列优化宽度

1

wa_fieldcat-col_opt   = 'X'.

 

8.2 单列求和或者取消求和,添加属性

1

2

wa_fieldcat-do_sum    = ‘X’.    " 求和

wa_fieldcat-no_sum    = ‘X’.    " 取消求和

 

如若在IS_LAYOUT属性中加上下列属性,则求和后的行就会在第一行出现

1

i_layout-totals_bef   = 'X'.

 

8.3 对齐方式

1

2

3

wa_fieldcat-just    = 'L' .    " 左对齐

wa_fieldcat-just    = 'C' .    " 居中对齐

wa_fieldcat-just    = 'R' .   " 右对齐

默认情况下,ABAP 的各种数据类型优默认的对其方式:

字符串是默认为左对齐;

货币、数量默认为右对齐;

 

8.4 以图标方式输出

需要作为图标输出,首先要引入图标的信息:Include <list>;

然后在内表中添加显示图标的字段名称;

在 Fieldcat 添加属性的时候,则可以为内表显示图标的字段添加相关图标。

 

示例如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

* 内表字段

i_tab-icon_folder = icon_object_folder.

* FieldCat 属性

lv_pos = lv_pos + 1 .

wa_fieldcat-col_pos    = lv_pos .

wa_fieldcat-fieldname  = 'ICON_FOLDER'.

wa_fieldcat-scrtext_l  = 'ICON' .

wa_fieldcat-icon       = 'X' .       "启用图标

wa_fieldcat-hotspot    = 'X' .

APPEND wa_fieldcat TO i_fieldcat .

CLEAR wa_fieldcat .

这样图标就可以在ALV界面中显示了,其中添加”热点”的目的是为了当用户点击该图标的时候,可以触发一系列的操作,如文件的选择等等;

 

注意:图标的名称用事务码”ICON“进入后,第二列就是图标代码,根据需要进行选择;

 

8.5 单元格的F1、F4帮助

8.5.1 F1帮助

在Fieldcat的RollName属性中,添加指定的数据元素,即可激活F1帮助;如:

1

wa_fieldcat-rollname  = 'PS_PSPID' .  " 指定数据元素

 

8.5.2 F4帮助

在Fieldcat中添加下列属性:

1

2

3

wa_fieldcat-ref_field = 'PSPID'. " 对应DDIC中的参考字段

wa_fieldcat-ref_table = 'PROJ'.  "  对应DDIC中的参考表

这样在ALV的显示界面,在该字段处就可以按F4来查看相关的内容了;

 

8.6 字段类型保留

对于货币或数量字段,需要在其设置字段中再添加一个”指定数据类型”的属性,如下:

1

2

3

4

5

6

* 货币字段

wa_fieldcat-datatype  = 'CURR' .      " 指定数据类型

* 数量字段

wa_fieldcat-datatype  = 'QUAN' .     " 指定数据类型

wa_fieldcat-inttype   = 'C' .      " 数据类型以C类型输出

 

9. IT_EXCLUDING 参数属性

该参数可对ALV标准工具栏隐藏不必要的功能;

对于该参数的应用,需要知道ALV标准按钮对应的 FCode,这里在上面讲过,可以查看 CL_GUI_ALV_GRID 类的属性及其初始值;

示例代码如下:

* 定义隐藏标准按钮的变量DATA: wa_excluding TYPE slis_t_extab ,it_excluding   TYPE slis_extab .* 将需要隐藏的标准按钮的"FCODE"添加到内表IT_EXCLUDING中wa_excluding-fcode = '&ABC' .APPEND wa_excluding TO it_excluding.CALL FUNCTION  'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repidis_layout_lvc      = i_layout_lvcit_fieldcat_lvc    = i_fieldcat_lvc[]it_excluding       = it_excluding       " 添加隐藏按钮的属性参数i_save             = 'X'TABLESt_outtab           = i_tabEXCEPTIONSprogram_error      = 1OTHERS             = 2.

​​​​​​​

 

10. IT_SORT/ IT_SORT_LVC 参数属性

ALV 字段排序设置;

两个参数的类型定义虽然不一样,但结构是一样的,所以操作上并无差异;

下面查看下IT_SORT参数的类型结构定义:

TYPES: BEGIN OF  slis_sortinfo_alv,spos      LIKE alvdynp-sortpos,   “ 排序顺序序号fieldname TYPE slis_fieldname,    “ 排序内表字段名称tabname   TYPE slis_fieldname,    “ 排序内表名称up        LIKE alvdynp-sortup,    “ 升序down      LIKE alvdynp-sortdown,  “ 降序group     LIKE alvdynp-grouplevel,“subtot    LIKE alvdynp-subtotals, “ 输出小计comp(1)   TYPE c,expa(1)   TYPE c,obligatory(1) TYPE c,ENF OF slis_sortinfo_alv.

 

示例代码如下:

* 定义排序变量DATA: wa_sort_lvc TYPE lvc_s_sort ,it_sort_lvc TYPE lvc_t_sort .* 设置排序参数wa_sort_lvc-spos        = 1 .            " 排序顺序wa_sort_lvc-fieldname   = 'WERKS' .   " 排序字段wa_sort_lvc-up          = 'X' .          " 升序APPEND wa_sort_lvc TO it_sort_lvc .CLEAR wa_sort_lvc .wa_sort_lvc-spos        = 2 .            " 排序顺序wa_sort_lvc-fieldname   = ‘matnr’ .   " 排序字段wa_sort_lvc-up          = 'X' .          " 升序APPEND wa_sort_lvc TO it_sort_lvc .CLEAR wa_sort_lvc .* ALV 中添加排序属性CALL FUNCTION  'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program          = sy-repid           "is_layout_lvc               = i_layout_lvc       "it_fieldcat_lvc             = i_fieldcat_lvc[]   "it_sort_lvc                 = it_sort_lvcTABLESt_outtab                    = i_tab              "EXCEPTIONSprogram_error               = 1OTHERS                      = 2.

 

11. I_DEFAULT/ I_SAVE/ IS_VARIANT 参数属性

这三个参数都是用于ALV 布局的保存设置:

01). I_DEFAULT参数用于设置用户是否可以定义默认的布局: ’X' 可以定义默认布局, SPACE 不可以定义默认布局 (默认:X)

02). I_SAVE 参数 保存表格布局: ’X' 只能保存全局变式 ’U' 只能保存特定变式 ’A' 都可以保存 SPACE 不能保存变式 (默认:space)

03). IS_VARIANT 参数用于启用用户表格布局变式

12. IT_EVENTS 参数属性

IT_EVENTS 参数属性,传入一个 SLIS_T_EVENT 类型的内表,设置相应处理FORM;

通过与REUSE_ALV_EVENTS_GET函数配合使用,可自定义ALV事件。

 

首先,查看下SLIS_T_EVENT的类型结构定义,如下所示:

*--- Structure for event handlingTYPES: BEGIN OF  slis_alv_event,name(30),form(30),END OF  slis_alv_event.TYPES: slis_t_event TYPE slis_alv_event OCCURS 0.

 

再看下 REUSE_ALV_EVENTS_GET 函数,该函数可以获取ALV中现有的事件,其参数也较为简单:

Import 参数:I_LIST_TYPE,类型为SLIS_LIST_TYPE,即为ALV事件的序号,其输入可以为:0,1,2,4

Export 参数:ET_EVENTS,类型为 SLIS_T_EVENT;

 

接下来,查看下示例:

* 全局变量DATA: gv_index  TYPE sy_tabix.DATA: gt_events TYPE slis_t_event.      "ALV 事件*&---------------------------------------------------------------------**&      Form  FRM_GET_EVENT*&---------------------------------------------------------------------*FORM frm_get_event.DATA formname_top_of_page TYPE slis_formname VALUE 'FRM_TOP_OF_PAGE'.DATA lw_events            TYPE LINE  OF  slis_t_event.CALL FUNCTION  'REUSE_ALV_EVENTS_GET'EXPORTINGi_list_type     = 0IMPORTINGet_events       = gt_eventsEXCEPTIONSlist_type_wrong = 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.* 修改TOP_OF_PAGE以加入表头,设置处理子程序为'FRM_TOP_OF_PAGE'CLEAR gv_index.CLEAR lw_events.READ TABLE  gt_events INTO lw_events WITH KEYname = slis_ev_top_of_page.IF sy-subrc = 0.gv_index = sy-tabix.MOVE 'FRM_TOP_OF_PAGE'  TO  lw_events-form.MODIFY gt_events FROM lw_events INDEX gv_index.ELSE.lw_events-form = 'FRM_TOP_OF_PAGE'.lw_events-name = slis_ev_top_of_page.APPEND lw_events TO gt_events.ENDIF.lw_events-name = 'CALLER_EXIT'.lw_events-form = 'FRM_BUTTON'.APPEND lw_events TO gt_events.ENDFORM.                    " FRM_GET_EVENT*&---------------------------------------------------------------------**&      Form  frm_button*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------*FORM frm_button USING e_grid TYPE slis_data_caller_exit.*ENDFORM.                    "FRM_BUTTON

 

通过IT_EVENTS 参数属性,就可以为ALV添加自定义的事件 CALLER_EXIT;

其事件的相应处理,则放在FORM中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress建站入门教程:忘记数据库名称、用户名和密码了怎么办?

有时候我们需要进入phpMyAdmin管理一些数据库&#xff0c;但是登录phpMyAdmin时却需要我们输入数据库的用户名和密码&#xff0c;但是我们不记得了应该怎么办呢&#xff1f; 其实&#xff0c;我们只需要进入WordPress网站根目录找到并打开wp-config.php文件&#xff0c;就可以…

vue2数据响应式原理解析

vue2与vue3区别浅析&#xff1a;vue2和vue3区别 浅析-CSDN博客 vue是mvvm框架&#xff0c;即“模型—视图—视图模型”&#xff0c;数据模式还是javascript对象&#xff0c;通过模型中应用程序数据和业务逻辑影响到视图的改变&#xff0c;视图(用户的操作)的改变会影响到底层数…

Git 进阶 高级用法,重要命令记录

本篇文章用于记录Git高级用法&#xff0c;新手可以看我的另一篇文章&#xff1a;Git基础教学。 Git git fetch 是git pull 的细分步骤&#xff0c;git pull 包含了git fetch git pull origin master 上述命令其实相当于git fetch git merge 在实际使用中&#xff0c;git fetc…

如何使用ArcGIS Pro进行坡度分析

坡度分析是地理信息系统中一种常见的空间分析方法&#xff0c;用于计算地表或地形的坡度&#xff0c;这里为大家介绍一下如何使用ArcGIS Pro进行坡度分析&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&…

uniapp报错:request:fail abort statusCode:-1 Chain validation failed

uniapp报错信息记录 场景: 半年没碰过的app&#xff0c;今个儿突然无法登录了。 打开控制台&#xff0c;报错信息如下 {msg: request:fail abort statusCode:-1 Chain validation failed}奇怪的是用 apifox 调用相关的接口&#xff0c;可以正常运行&#xff0c;app却不行。 好…

防坑指南!说说Six Sigma咨询公司排名的那些事

在企业管理领域&#xff0c;六西格玛&#xff08;Six Sigma&#xff09;已成为一种流行的质量管理方法。然而&#xff0c;面对众多的Six Sigma咨询公司&#xff0c;如何选择一家真正专业、有实力的合作伙伴&#xff0c;成为了许多企业面临的难题。本文&#xff0c;天行健咨询将…

高级语言讲义2019计专(仅高级语言部分)

1.编写函数&#xff0c;对给定的整数数组a&#xff08;数组长度和元素个数均为N&#xff09;进行判定&#xff1a;是否存在某个整数a[i]&#xff08;0<i<N&#xff09;&#xff0c;等于在其之前的所有整数的和 #include <stdio.h> #include <stdbool.h>bool…

编写 Ansible Playbooks

简介 简而言之&#xff0c;服务器配置管理&#xff08;也被广泛称为 IT 自动化&#xff09;是将基础设施管理转化为代码库的解决方案&#xff0c;描述了部署服务器所需的所有流程&#xff0c;并将其转化为一组可以进行版本控制和轻松重复使用的配置脚本。它可以极大地提高任何…

在训练过程中,如何动态调整哪些层被冻结或解冻

在训练过程中动态调整哪些层被冻结或解冻通常涉及到在训练的不同阶段改变模型参数的requires_grad属性。这可以通过编写一个自定义的训练循环或者利用深度学习框架提供的回调函数&#xff08;callbacks&#xff09;来实现。以下是一些可能的方法&#xff1a; 自定义训练循环: 在…

JVM相关知识

JVM相关知识 &#x1f333;1.JVM概述&#x1fab4;1.1 JVM作用:&#x1fab4;1.2JVM构成&#x1fab4;1.3JVM整体结构图 &#x1f333;2.类加载子系统&#x1fab4;2.1作用&#x1fab4;2.2类加载过程&#x1f331;2.2.1加载:&#x1f331;2.2.2连接&#x1f331;2.2.3初始化 &…

浅谈 Vue3 静态提升和预字符串化

前言 很多朋友在看到 Vue3静态提升 的时候很不理解&#xff0c;不明白这句话到底是什么意思&#xff0c;今天我们就通过这篇日记来搞明白。如果有什么地方描述不正确&#xff0c;请多多指正。 静态类型&#xff08;前置信息&#xff09; 判断节点是否为静态类型&#xff0c;…

【BUUCTF Misc】通关 3.0

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

利用GPT开发应用001:GPT基础知识及LLM发展

文章目录 一、惊艳的GPT二、大语言模型LLMs三、自然语言处理NLP四、大语言模型LLM发展 一、惊艳的GPT 想象一下&#xff0c;您可以与计算机的交流速度与与朋友交流一样快。那会是什么样子&#xff1f;您可以创建哪些应用程序&#xff1f;这正是OpenAI正在助力构建的世界&#x…

Qt多弹窗实现包括QDialog、QWidget、QMainWindow

1.相关说明 独立Widget窗口、嵌入式Widget、嵌入式MainWindow窗口、独立MainWindow窗口等弹窗的实现 相关界面包含关系 2.相关界面 3.相关代码 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "tformdoc.h" #incl…

理解CPU指令执行:从理论到实践

理解CPU指令执行&#xff1a;从理论到实践 在探讨现代计算机的核心——中央处理单元&#xff08;CPU&#xff09;的工作原理时&#xff0c;我们经常遇到“时钟周期”和“指令执行”这两个概念。这些概念不仅对于理解CPU的性能至关重要&#xff0c;而且对于揭示计算机如何处理任…

挑战杯 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

羊大师揭秘,羊奶有哪些好处和不足呢?

羊大师揭秘&#xff0c;羊奶有哪些好处和不足呢&#xff1f; 羊奶的好处主要包括&#xff1a; 营养丰富&#xff1a;羊奶中含有多种人体所需的营养成分&#xff0c;如蛋白质、脂肪、碳水化合物、矿物质和维生素等。尤其是蛋白质含量高&#xff0c;且易于人体吸收利用。 增强免…

Spring——Bean的作用域

bean的作用域 Bean Scope Scope说明singleton&#xff08;默认情况下&#xff09;为每个Spring IoC容器将单个Bean定义的Scope扩大到单个对象实例。prototype将单个Bean定义的Scope扩大到任何数量的对象实例。session将单个Bean定义的Scope扩大到一个HTTP Session 的生命周期…

Unity用Shader将一张图片变成描边图片素描风格。

环境&#xff1a; unity2021.3.x 效果&#xff1a; 实现核心思路(shader)&#xff1a; fixed4 frag (v2f i) : SV_Target {fixed4 col tex2D(_MainTex, i.uv);// 调整相似度bool isRedMatch abs(col.r - _TargetColor.r) < 0.15;bool isGreenMatch abs(col.g - _Target…

什么是系统工程(字幕)45

0 00:00:01,030 --> 00:00:03,910 那首先呢&#xff0c;我们就要 1 00:00:04,380 --> 00:00:05,974 加一个分流器了 2 00:00:05,974 --> 00:00:07,568 它是一个三通接头 3 00:00:07,568 --> 00:00:09,960 三通接头在这里嘛&#xff0c;拖上来 4 00:00:11,530 -…