面相对象ALV(更新中)

2022-10-02  本文已影响0人  SAP杰

ALV的介绍:

ALV是ABAP list Viewer的缩写,是实际业务中用来查询数据修改数据时经常使用的程序.

ALV主要功能:

过滤设置

变更列宽

变更布局

ABC分析

下载Excel及Word文档保存

ALV在SAP release3.1版本以后开始出现ABAP程序

ALV的类型:

     ALV分为利用函数方法利用GRID控件方法两种,两种方法内部都有相似的结构和功能,当然也存在SALV(NEW ALV) 这些技术出现顺序依次是Function ALV > GRID, ALV>SALV, REUSE_ALV_GRID_DISPLAY 函数也分类基础进行编程,但是SAP公司为了提供方便集合了多样的功能使用函数实现,若是利用函数输出ALV程序,则不易控制画面。

另外NET WEB 2004 平台发布了集合ALV功能的SALV包。

利用ALV 只要运用数据结构内表就可以在短时间内开发报表。ALV GRID是以类的开发技术

是利用ALV查询列表的画面,ALV GRID使用SAP公司开发的控件技术,与其他很多容器相同,ALV GRID容器提供可以通过全局类影响属性的方法,通过这些方法可以为了程序报ALV基本功能基础上适用追加项,另外,ALV GRID容器定义了SAP Context菜单就可以使用标准程序的综合功能.

ALV GRID容器的结构

ALV报表程序使用接口参照CL_GUI_ALV_GRID类的变量定义。

DATA : name TYPE REF TO cl_gui_alv_grid.

上面的语句NAME变量参照 CL_GUI_ALIV_GRID的对象引用变量

另外,用CREATE OBEJCT语句调用类的结构函数并生成ALV GRID接口

CREATE OBJECT name.

ALV GRID容器中拥有画面显示的所有信息,调用类的方法可以重新定义或者修改ALV画面属性

ALV继承树

CL_GUI_OBJECT

CL_GUI_CONTROL

CL_GUI_ALV_GRID_BASE

CL_GUI_ALV_GRID

利用ALV显示数据,至少要经历以下两个步骤:

1.定义内表

2.数据结构

最后启动ALV GRID 则传递给ALV_GRID容器中输入表的一直有效,输出表可以利用ABAP数据字典对象,也可以只用字段目录创建ALV结构,例如定义ALV字段的属性 长度 类型等等 字段目录是LVC_T_FCAT类型的表

为了显示ALV实例画面,首先要定义ALV领域,也可以利用屏幕编辑器的自定义控件设置,另外,显示ALV必须要有连接屏幕领域与ALV的SAP容器控件,ALV是与画面的SAP控件相连显示在画面上

SAP容器以及容器的对象

若要显示ALV画面,必须要有连接屏幕与ALV GRID控件的SAP 容器控件,即SAP容器为了充当连接器,将SAP控件包含在容器中,SAP容器类型有SAP TREE SAP picture SAP Textedit SAP Splitter 控件等,SAP容器是包含其他控件的控件,也称为父控件.

SAP容器的类型

SAP自定义控件: 在使用屏幕编辑器一般画面上定义领域类 :CL_GUI_CUSTOM_CONTAINER

SAP对话框间:对话框或者在全画面上一对话框形式显示 : CL_GUI_DIALOGBOX_CONTAINER.

SAP Docking控件 在画面领域各个领域各边角可以调解其大小,是ALV程序中与自定义控件一起使用的形态类 : CL_GUI_DOCKING_CONTAINER

SAP拆分控件: 拆分容器使用: CL_GUI_SPLITTER_CONTAINER

SAP细分控件:和Splitter控件相同,可以再拆分已被拆分的容器类: CL_GUI_EASY_SPLITTER_CONTAINER

展现ALV画面,在屏幕上指定领域,然后在这个领域制作出ALV容器,利用T-CODE:se38,创建TYPE-1类型程序:

自定义控件属性:

Resizing Vertical/horizontal        根据窗口大小比例调节画面领域大小

MIn.line                                       设置要显示画面上的最小行和字段

Min.columns                     

创建引用变量:

在报表中创建CON1,CON2对象引用变量

参照类CL_GUI_CUSTOM_CONTAINER的对象变量追加到程序的定义全局变量

创建PBO是为了在画面100里生成SAP自定义的PBO模块,

创建容器对象,利用CREATE OBJECT语句容器对象并名字指定成功CON1,这是连接对象和屏幕自定义控件的操作:

自定义控件的参数属性:

Parent                   指定控件实例上级控件

Container               指定在屏幕编辑器中指定自定义控件

Style                      指定控件外部样式

Dynnr                    要追加控件里的屏幕编号

Repid                     要追加控件上的程序ID

Lifetime                  设置控件的生命周期

No_autodef_progid_dynnr  自动指定程序ID和屏幕编号(设置X则是OFF)

创建控件变量:

创建ALV对象:

追加一下控件的相关代码

重新执行程序:

创建ALV GRID容器的过程:

1.屏幕中创建自定义(con1)

2. 连接SAP容器引用变量(con1_ref)

3.连接SAP容器对象屏幕和自定义控件

4. 创建ALV GRID参考变量放入SAP容器上

创建ALV步骤:

第一. 创建要追加ALV GRID 控件实例

第二.创建ALV字段后查询要显示到画面上数据

第三. 调用set_table_for_first_display方法将数据显示在画面上

创建ALV GRID容器

1. 参照创建的程序类型,另外创建屏幕100,使用方法用屏幕编辑器追加自定义控件CON1,然后追加参加ALV GRID容器引用变量,在此同时套创建显示屏幕上的内表gt_sfight.

1.创建SAP容器.

在屏幕100创建适当大小的自定义控件,另外,在PBO模块init_con中追加下列代码创建SAP容器, CREATE OBJECT 语句会调用类 CL_GUI_CUSTOM_CONTAINER的结构函数,创建SAP容器的实例,此时,参数指定屏幕上创建的自定义控件

创建ALV GRID控件

   利用CREATE OBJECT 语句创建参考 CL_GUI_ALV_GRID 的 ALV GRID 控件实例,参数i_parent为了显示ALV指定连接屏幕使用SAP容器。

查询数据

在主程序追加执行事件START-OF-SELECTION 来查询数据,然后调用存在自定义控件屏幕100.

调用ALV显示方法

只要调用显示ALV的G_GRID方法就可以简单地结束ALV画面,此时,参数利用SFLIGHT结构体要显示在画面上的数据使用内表gt_sflight

执行程序

执行程序会自动显示结果:

我这里使用断点调试显示的表数据:

利用Docking容器创建程序:

自定义容器在画面领域,与此相反Docking容器是创建实例时直接指定屏幕大小,即就是Docking单词的本意一样,不过通过自定义容器直接指定ALV要使用的领域和屏幕编号

除了决定SAP容器的类不同不指定屏幕领域的这两点,其余使用方法和自定义控件相似,首先,定义参照Docking容器类参照对象变量和ALV实例.

DATA :  go_docking TYPE REF TO cl_gui_docking_container

G_grid    TYPE REF TO cl_gui_alv_drid.

利用CREATE OBJECT 语句调用类 cl_gui_docking_container 的构造函数创建g_docking实例,创建Docking容器组件时参数还需要指定程序编号sy-repid 和屏幕sy-dynnr

CREATE OBJECT go_docking

EXPORTING

REPID = sy-repid

DYNNR = sy-dynnr

EXTENSION = 800.

利用CREATE OBJECT语句创建参照CL_GUI_ALV_GRID的ALV GRID控件实例,然后创建ALV GRID控件实例同时连接Docking容器。

CREATE OBJECT g_grid

EXPORTING

I_parent       =  g_docking

修改后的代码:

使用PATTEENT功能:

 在程序中制作调用类的方法代码,需要挣钱的了解方法名和参数名,但是大部分方法存在多个参数并且参数名称比较长,不容易直接输入,因此需要利用ABAP编辑器里的PATTENT自动生成代码:

选择ABAP Object patterns

填写名称:

输入实例名类名方法后按(ENTER)键,方法利用检索很容易找到查询,上面的CREATE OBJECT语句利用了PATTERN功能追加:

完成以后自动生成实例方法和参数:

ALV方法

IS_VARIANT参数

可以设置ALV列表变式,列表变式把修改的画面字段顺序,排序字段等操作保存到一个变式,以便以后查询以同样方式显示,首先需要在报表中追加用选择布局的参加以及功能,

I_SAVE参数

函数set_table_for_first_display 的参数I_SAVE相关的值

X     只能设置全局

U     只能限定用户和布局

A      同时包含X和A

SPACE   不保存布局

I_DEFAULT参数

决定用户能否保存默认变式

X       可以设置默认变式

SPACE    不能设置默认变式

I_LAYOUT的参数:

字段编辑参数:

CTAB_FNAME : 指定字体列颜色

CWIDTH_OPT : 自动调整列宽

DETAILINIT  : 决定是否在详细画面显示

DETAILTITL  : 显示详细画面的标题栏

EXCP_CONDS : 显示列外处理字段

EXCP_LED : 列外处理字段不用信号灯显示,而是LED

EXCP_ROLLN : 显示关于列外处理字段

GRID_TITLE : 指定标题描述

INFO_FNAME : 指定行颜色

KEYHOT : 指定HOTSPOT 显示主键

NO_HGRIDLNS: 不显示字段标题

NO_HGRIDLN : 不显示GIRD的水平线

NO_MERGING : 排序字段防止合并相同列

NO_ROWMARK : 删除GRID的行选择按钮

NO_TOOLBAR : 不显示工具栏

NO_TOTLINE : 不显示所有行

NO_VGRIDLN : 不显示Grid的垂直线

NUMC_TOTAL : 显示NUMC字段合计金额

S_DRAGDROP : 设置Drag & Drop控件

SGL_CLK_HD : 单击字段标题进行排序

SMALLTITLE : 决定标题大小

TOTALS_BEF : 合计金额显示最上行

ZEBRA : 表换颜色

设置属性:

P_LATOUT-cwidth_OPT = ‘X’自动调节长度

P_LAYOUT-grid-title = ‘LAYOUT TEST’标题栏

P_LAYOUT-sel_mode = ‘D’选择模式:可选择多行

P_LAYOUT-zebra = ‘X’指定Sripe属性

IT_OUTTAB参数

IT_OUTTAB参数定义要显示数据的输出表的参数,换句话说是指定包含显示数据内表的参数    

IT_FIRLDCATALOG参数

 决定要显示数据类型及输出结构,这个要说明内容比较多.

IT_TOOLBAR_EXCLUDING参数

在ALV GRID控件中需要隐藏的按钮时使用,例如技术类职员显示时候必要隐藏保存布局的按钮,此时可以根据用户显示或者隐藏布局按钮, 先定义Ui_function类型内表,然后把次Function 代码插入此表中,相应就按钮会隐藏

IT_SORT参数

设置ALV数据排列顺序参数,定义参照LVC_T_SORT类型内表后,加入要用于排序字段到此内表中即可, LVC_T_SORT 中的T指是表,LVC_S_SORT 中的S指定是结构体,排序表中选项Subtot设置排序字段基准显示合计金额和全体合计金额

SPOS                    数字             指定排序顺序

FIELDNAME         字段名称        指定需要排序的字段名

UP                       “,’X’升序排序

DOWN                “,’X’降序排序

ALV其他方法:

get_current_cell 方法

方法返回ALV GRID 控件中鼠标所在的位置的值和属性,若没有选择任何单元格,则行的ROW值为0,ALV GRID 控件返回两行字和字段的索引号,一个是现在被选择的行和字段索引,另一个是输出表的字段索引号

Get_current_cell方法参数:

E_ROW      ALV GRID 控件的现指定行的索引

E_VALUE     ALV GRID 控件现指定单元格值

E_COL       ALV GRID 控件的现指定字段名

ES_ROW_ID  输出表的指定行类型与索引的相关信息结构

ES_COL_ID   输出表的指定行字段与字典名相关的信息结构

上一篇下一篇

猜你喜欢

热点阅读