美文网首页
面相对象ALV(更新中)

面相对象ALV(更新中)

作者: SAP杰 | 来源:发表于2022-10-02 09:41 被阅读0次

    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   输出表的指定行字段与字典名相关的信息结构

    相关文章

      网友评论

          本文标题:面相对象ALV(更新中)

          本文链接:https://www.haomeiwen.com/subject/lwteartx.html