ABAP实例之ALV
- 格式:doc
- 大小:200.00 KB
- 文档页数:42
ABAP分享五ALV修改单元格并将修改数据更新到数据表中⽰例1 *下⾯的代码是在alv字段中修改字段的内容,点击保存后就可以保存数据⾄数据表。
TABLES: spfli.DATA:wa_fieldcat TYPE lvc_s_fcat , " 相当于⼯作区i_fieldcat TYPE lvc_t_fcat , " 存放输出栏位名称的列表i_layout TYPE lvc_s_layo . " 负责整个ALV的全局属性DATA tab_spfli LIKE TABLE OF spfli WITH HEADER LINE. " 定义内表DATA wa_spfli TYPE spfli.DATA it_spfli LIKE STANDARD TABLE OF spfli. " 定义内表DATA lt_spfli TYPE spfli.SELECT * FROM spfliINTO CORRESPONDING FIELDS OF TABLE tab_spfli. "将数据表中的数据存⼊内表中PERFORM getfield.PERFORM is_layout.DATA: l_user_command TYPE slis_formname VALUE 'USER_COMMAND'. "定义返回事件CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' "定义显⽰内表EXPORTINGI_CALLBACK_PROGRAM = sy-repidI_CALLBACK_USER_COMMAND = l_user_commandIS_LAYOUT_LVC = i_layoutIT_FIELDCAT_LVC = i_fieldcatI_SAVE = 'A'TABLESt_outtab = tab_spfliEXCEPTIONSPROGRAM_ERROR = 1OTHERS = 2.IF sy-subrc <> 0.* Implement suitable error handling hereENDIF.FORM getfield. "定义显⽰字段wa_fieldcat-col_pos = 1 .wa_fieldcat-fieldname = 'CARRID'.wa_fieldcat-just = 'C'.wa_fieldcat-seltext = '航线代码'.wa_fieldcat-fix_column = 'X'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-col_pos = 2 .wa_fieldcat-fieldname = 'CONNID'.wa_fieldcat-just = 'C'.wa_fieldcat-seltext = '航班连接号'.wa_fieldcat-fix_column = 'X'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-col_pos = 3 .wa_fieldcat-fieldname = 'CITYFROM'.wa_fieldcat-just = 'C'.wa_fieldcat-seltext = '起飞城市'.wa_fieldcat-edit = 'X'. "设置成可编辑状态APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-col_pos = 4 .wa_fieldcat-fieldname = 'CITYTO'.wa_fieldcat-just = 'C'.wa_fieldcat-seltext = '到达城市'.wa_fieldcat-edit = 'X'. "设置成可编辑状态APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-col_pos = 5 .wa_fieldcat-fieldname = 'DERTIME'.wa_fieldcat-just = 'C'.wa_fieldcat-seltext = '出发时间'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.wa_fieldcat-col_pos = 6 .wa_fieldcat-fieldname = 'ARRTIME'.wa_fieldcat-just = 'C'.wa_fieldcat-seltext = '到达时间'.APPEND wa_fieldcat TO i_fieldcat.CLEAR wa_fieldcat.ENDFORM.FORM is_layout. "定义ALV显⽰样式i_layout-ZEBRA = 'X'.i_layout-CWIDTH_OPT = 'X'.ENDFORM.FORM user_command USING r_ucomm LIKE sy-ucomm "执⾏事件rs_selfield TYPE slis_selfield.CASE r_ucomm .WHEN '&DATA_SAVE'. "当点击保存按钮时执⾏下⾯代码SELECT * FROM spfli INTO TABLE it_spfli "tab_spfli 查找数据表中数据到内表FOR ALL ENTRIES IN tab_spfliWHERE carrid = tab_spfli-carrid AND connid = tab_spfli-connid.LOOP AT it_spfli INTO lt_spfli. "循环内表READ TABLE tab_spfli INTO wa_spfli WITH KEY "读取修改后的内表carrid = lt_spfli-carrid connid = lt_spfli-connid.IF sy-subrc = 0. "如果读取⼀致将修改后的内表字段的值赋值给新内表字段lt_spfli-cityfrom = wa_spfli-cityfrom.lt_spfli-cityto = wa_spfli-cityto.MODIFY it_spfli FROM lt_spfli. "更新修改后的内表字段的值ENDIF.CLEAR lt_spfli.CLEAR wa_spfli.ENDLOOP.UPDATE spfli FROM TABLE it_spfli. "根据更新后的内表更新数据表,将更新后的字段的值传⼊数据表中。
abap 中快速调用alv显示的方法全文共四篇示例,供读者参考第一篇示例:在ABAP开发中,经常需要通过ALV(Application List Viewer)显示数据表格,以便更直观、友好地展示数据给用户。
有时候我们需要在程序中快速调用ALV显示数据,而不需要太多繁琐的操作。
本文将介绍一种快速调用ALV显示数据的方法,帮助开发者更高效地展示数据。
在ABAP中,我们可以使用几种方法来显示ALV,比如使用函数模块、类库等。
但是如果我们只需要快速显示一个简单的表格,并且不想在程序中定义太多冗余的内容,可以使用以下方法来快速调用ALV显示数据。
我们需要在程序中定义一个内表和一个字段符号。
内表用来存储我们需要展示的数据,字段符号用来代表内表中的字段。
```ABAPDATA: lt_data TYPE TABLE OF mara,fs_field TYPE ANY.```接下来,我们需要获取数据并填充到内表中。
这里以从表MARA 中获取数据为例,我们可以使用SELECT语句获取数据并填充到内表中。
然后,我们可以调用函数模块REUSE_ALV_GRID_DISPLAY来显示ALV表格。
这个函数模块会自动创建一个ALV显示表格,并展示我们所填充的数据。
这样,我们就可以快速调用ALV显示数据了。
值得注意的是,在调用REUSE_ALV_GRID_DISPLAY函数模块前,我们需要确保内表lt_data已经填充了数据,并且字段符号fs_field已经对应了内表中的字段。
通过这种方法,我们可以快速、简便地在ABAP程序中调用ALV 显示数据。
当我们只需要展示一个简单的表格时,这种方法可以帮助我们避免繁琐的定义和配置,提高开发效率。
快速调用ALV显示数据的方法虽然简单,但在实际开发中却很实用。
当我们需要快速展示一个简单的表格时,善用这种方法可以让我们更专注于业务逻辑的实现,提高开发效率,也给用户提供更好的交互体验。
ABAP开发者可以根据自己的实际需求,选择适合的方法来显示ALV表格,提高开发效率,为用户提供更好的体验。
ALV Report是SAP中一种常见的报表展现形式,它可以标准化、简单化R/3系统中的表单,可以提供给用户一个统一的表单格式以及用户接口。
ALV既能显示简单表单(SIMPLE LIST)又能显示有序表单(SEQUENTIAL LIST)在这里我给初学者示范一个实例,讲讲abap开发报表的简单过程。
程序的正确与否我们不与讨论,我们只关心这个程序的编写过程。
首先,在任何程序的开始阶段,我们都要确定将会用到的表。
我们所讲的这个程序是查询采购订单是否完成的。
将会用到以下三个表:EKKO,EKPO,EKET。
程序的开头为:REPORT TEST.TABLES: EKKO,EKET,EKPO.现在我们已经定义了所要用到的表,接下来的工作就是定义内表和数据。
内表是用来存储我们从上述三个表中查询到的数据。
相关定义如下:DATA: BEGIN OF ITAB OCCURS 0,EBELN LIKE EKKO-EBELN,MENGE LIKE EKPO-MENGE,WEMNG LIKE EKET-WEMNG,END OF ITAB.现在我们已经定义完了内表ITAB。
接着我们该定义数据了。
数据就像C语言里的常量。
其相关定义如下:DATA: MATNR LIKE EKPO-MATNR,MENGE LIKE EKPO-MENGE,WEMNG LIKE EKET-WEMNG,EBELN LIKE EKPO-EBELN.到这里我们已经把程序里要用到的数据和内表都定义好了。
接着我们要做的工作就是选择屏幕。
所谓选择屏幕是指程序运行时,你要从屏幕上输入的内容。
比如说一个程序运行时,你输入一个物料号,就可以得到该物料的当前的库存数,那你就要编写一个屏幕以供查询者输入查询的条件。
其相关定义如下:SELECT-OPTIONS: EBELN1 FOR EKKO-EBELN,BEDAT FOR EKKO-BEDAT,EKGRP FOR EKKO-EKGRP.PARAMETERS: R1 RADIOBUTTON GROUP RADI,R2 RADIOBUTTON GROUP RADI,R3 RADIOBUTTON GROUP RADI.现在我们已经完成了程序的前期准备,接着就开始真正的到表里查询我们需要的相关数据了。
abap alv分类汇总案例ABAP(Advanced Business Application Programming)是一种针对SAP软件系统开发的编程语言。
在ABAP中,ALV(ABAP List Viewer)是一种用于在SAP系统中创建和显示表格的工具。
ALV的分类汇总功能可以根据指定的字段对表格数据进行分类,并将分类后的数据进行汇总统计。
下面列举了10个ABAP ALV分类汇总的案例。
1. 根据销售订单对销售数据进行分类汇总在SAP系统中,可以使用ABAP ALV来对销售数据进行分类汇总。
根据销售订单号,可以将销售数据按照订单进行分类,并对每个订单的销售额进行汇总统计。
这样可以方便用户对销售数据进行分析和监控。
2. 根据物料号对库存数据进行分类汇总在SAP系统中,可以使用ABAP ALV来对库存数据进行分类汇总。
根据物料号,可以将库存数据按照物料进行分类,并对每个物料的库存量进行汇总统计。
这样可以方便用户对库存数据进行查询和管理。
3. 根据供应商对采购数据进行分类汇总在SAP系统中,可以使用ABAP ALV来对采购数据进行分类汇总。
根据供应商,可以将采购数据按照供应商进行分类,并对每个供应商的采购金额进行汇总统计。
这样可以方便用户对采购数据进行分析和对比。
4. 根据地区对销售数据进行分类汇总在SAP系统中,可以使用ABAP ALV来对销售数据进行分类汇总。
根据地区,可以将销售数据按照地区进行分类,并对每个地区的销售额进行汇总统计。
这样可以方便用户对销售数据进行地区间的比较和分析。
5. 根据部门对人员数据进行分类汇总在SAP系统中,可以使用ABAP ALV来对人员数据进行分类汇总。
根据部门,可以将人员数据按照部门进行分类,并对每个部门的人员数量进行汇总统计。
这样可以方便用户对人员数据进行部门间的比较和统计。
6. 根据年龄段对客户数据进行分类汇总在SAP系统中,可以使用ABAP ALV来对客户数据进行分类汇总。
ABAP ALV F4标准一、概述ABAP ALV(Advanced List Viewer)是SAP系统中用于生成、显示和修改表格数据的一套标准工具。
而F4标准则是ALV的一个重要功能,用于提供字段值的可选择清单。
本文将从ABAP ALV和F4标准的基本概念介绍开始,逐步深入到具体的实践应用和案例分析,帮助读者全面了解和掌握这一重要功能。
二、ABAP ALV的基本概念1. ABAP ALV是什么ABAP ALV是SAP系统中的一套标准工具,用于生成、显示和修改表格数据。
它不仅提供了丰富的表格显示和编辑功能,还具有灵活的定制能力,可根据用户需求进行定制开发。
2. ABAP ALV的使用场景ABAP ALV广泛应用于SAP系统中的各个模块,如采购管理、生产管理、财务会计等领域。
它可以用于显示各种业务数据,如订单信息、库存数据、财务报表等,并支持用户对数据的查看、编辑和导出等操作。
三、F4标准的基本概念1. F4标准是什么F4标准是ABAP ALV的一个重要功能,用于提供字段值的可选择清单。
它在输入字段时,可通过F4键或按下候选按钮,弹出可选择清单供用户选择,从而减少用户的输入工作并提高数据准确性。
2. F4标准的使用场景F4标准通常用于需要输入字段值的场景,如订单创建、物料信息维护等。
它可以弹出各种可选择清单,如物料清单、供应商清单、客户清单等,为用户提供便捷的数值选择功能。
四、ABAP ALV F4标准的实践应用1. 如何在ABAP程序中使用F4标准在ABAP程序中使用F4标准,首先需要定义输入字段的参数和事件处理逻辑。
然后通过调用相应的函数模块或方法,将F4标准与输入字段关联起来,实现字段值的可选择清单功能。
2. F4标准的定制开发除了使用标准的F4功能外,ABAP开发人员还可以根据具体需求进行定制开发。
他们可以通过修改F4帮助事件、使用自定义帮助对象等方式,实现更灵活、个性化的F4功能。
3. F4标准与其他功能的结合应用F4标准还可以与其他功能结合应用,如输入带有F4帮助的字段值后,自动填充相关字段信息、触发特定的逻辑处理等。
abap alv使用手册【实用版】目录1.ABAP ALV 简介2.ABAP ALV 的基本语法3.ABAP ALV 的内置函数4.ABAP ALV 的应用实例5.ABAP ALV 的优缺点正文【ABAP ALV 简介】ABAP ALV,全称 ABAP List Viewer,是 SAP 公司开发的一种用于展示列表数据的工具。
它主要用于在 SAP 系统中实现自定义列表的显示和操作,可以方便地让用户查看、编辑和维护数据。
【ABAP ALV 的基本语法】ABAP ALV 的基本语法主要包括以下几个部分:1.DEFINE VARIABLES:定义数据结构和变量,用于存储列表数据。
2.CREATE VIEW:创建一个新的列表视图,并指定数据结构和变量。
3.DEFINE LIST:定义列表的显示格式和排序规则。
4.SET LIST:设置列表的数据。
5.DISPLAY:显示列表。
【ABAP ALV 的内置函数】ABAP ALV 提供了丰富的内置函数,用于实现列表的动态操作和自定义功能。
常用的内置函数有:1.FUNCTION "GET_INFO":获取列表项的详细信息。
2.FUNCTION "CHANGE_VALUE":修改列表项的值。
3.FUNCTION "ADD_NEW_VALUE":添加新的列表项。
4.FUNCTION "DELETE_VALUE":删除列表项。
【ABAP ALV 的应用实例】以下是一个简单的 ABAP ALV 应用实例,用于展示一个员工列表:1.定义数据结构和变量:```DATA(lv_employees)NAME EmployeesTYPE TABLE OF EmployeeKEY NameVALUE ( "John Doe" "Jane Smith" "Tom Brown" )END_DATA```2.创建列表视图:```CREATE VIEW lv_employeesAS TABLE OF EmployeeWITH KEY NameLINKS INTO DATA(lv_employees)END_CREATE_VIEW```3.定义列表显示格式和排序规则:```DEFINE LISTlv_employeesCOLUMNS NameSORT BY NameEND_DEFINE_LIST```4.设置列表数据:```SET LISTlv_employeesTO DATA(lv_employees) END_SET_LIST```5.显示列表:```DISPLAYlv_employeesEND_DISPLAY```【ABAP ALV 的优缺点】1.优点:ABAP ALV 易于使用,提供了丰富的内置函数,可以实现各种复杂的列表操作。
abap alv fieldcat 例子ABAP(Advanced Business Application Programming)是一种面向SAP的编程语言,用于开发和定制SAP应用程序。
在ABAP中,使用ALV(ABAP List Viewer)来显示和处理数据。
在ALV中,使用fieldcat(字段目录)来定义显示的列和格式。
下面列举了一些ABAP ALV fieldcat的例子,以帮助读者更好地理解其用法和语法。
1. 显示单个字段:在ALV中,可以使用fieldcat来定义单个字段的显示。
例如,可以使用以下代码将一个名称字段添加到ALV中:```ls_fieldcat-fieldname = 'NAME'.ls_fieldcat-seltext_l = '姓名'.ls_fieldcat-col_pos = 1.APPEND ls_fieldcat TO lt_fieldcat.```这将在ALV中显示一个名为“姓名”的列。
2. 显示多个字段:除了单个字段外,还可以使用fieldcat来定义多个字段的显示。
例如,可以使用以下代码将多个字段添加到ALV中:```ls_fieldcat-fieldname = 'ID'.ls_fieldcat-seltext_l = '编号'.ls_fieldcat-col_pos = 1.APPEND ls_fieldcat TO lt_fieldcat.ls_fieldcat-fieldname = 'NAME'.ls_fieldcat-seltext_l = '姓名'.ls_fieldcat-col_pos = 2.APPEND ls_fieldcat TO lt_fieldcat.```这将在ALV中显示两个列,一个名为“编号”,一个名为“姓名”。
3. 显示可编辑字段:在ALV中,可以使用fieldcat来定义可编辑字段。
在SAP ABAP中,要实现ALV(ABAP List Viewer)的自动列宽,可以使用以下步骤:
1. 设置布局参数:
在创建或修改ALV网格控件时,需要设置布局参数以启用自动列宽功能。
abap代码:
2. 设置布局参数:
使用SET_TABLE_FOR_FIRST_DISPLAY方法设置表格数据和布局参数。
在这个方法中,你可以设置LAYOUT-CWIDTH_OPT参数为X来启用自动列宽。
abap代码:
在<layout_parameter>结构中,设置CWIDTH_OPT字段为X:
abap代码:
3. 刷新ALV:
调用refresh_table_display方法来应用新的布局参数并刷新ALV。
abap代码:
通过以上步骤,ALV应该会根据内容自动调整列宽。
请注意,这可能会导致某些列宽过大或过小,如果需要更精细的控制,可能需要手动调整特定列的宽度或者使用其他的布局策略。
SAP:SAPALV标准范例程序介绍SAP: SAP ALV标准范例程序介绍2007-12-07 13:25下面介绍几个学习ALV的SAP自带标准程序实例1. BALVSD06 : Output flights (simple version + save)这是该系列范例最简单的一个,建议以此入门。
使用的Function Modules :REUSE_ALV_LIST_DISPLAY : 此FM非常重要,用来显示simple interactive list。
大家要熟练掌握该FM的输入参数名称和作用,对ALV编程很有帮助。
输入参数:I_CALLBACK_PROGRAM : FM执行完之后回调的程序名I_STRUCTURE_NAME : internal table的结构。
栏位格式(field catalog, 含输出栏位的名称)都参考自Data Dictionary的这个结构 (注意:如果不是所有栏位都要输出显示,或要自行定义栏位格式而不用Data Dictionary內的结构,则请参考其他的输入参数设定) I_SAVE : 是否要储存variants, “A” : standard and user-specific savingTables :T_OUTTAB :要输出数据的internal table2. BALVSD01 : Simple list flight model使用的Function Modules :REUSE_ALV_VARIANT_DEFAULT_GETREUSE_ALV_EVENTS_GETREUSE_ALV_COMMENTARY_WRITEREUSE_ALV_VARIANT_F4REUSE_ALV_VARIANT_EXISTENCEREUSE_ALV_LIST_DISPLAY3. BALVSD11 : Simple list with interactions and layouts使用的Function Modules :REUSE_ALV_FIELDCATALOG_MERGEREUSE_ALV_LIST_DISPLAY4. BALVHD01 : Hierarchical-sequential list flight model显示分级层次式的interactive list, 也就是Header – Item 两阶层的list使用的Function Modules :REUSE_ALV_VARIANT_DEFAULT_GETREUSE_ALV_FIELDCATALOG_MERGEREUSE_ALV_EVENTS_GETREUSE_ALV_COMMENTARY_WRITEREUSE_ALV_VARIANT_F4REUSE_ALV_VARIANT_EXISTENCEREUSE_ALV_HIERSEQ_LIST_DISPLAY : 该FM用来显示Hierarchical-sequential interactive list,很重要5. BALVHD01_GROUP : Hierarchical-sequential list flight model使用的Function Modules :REUSE_ALV_EVENTS_GETREUSE_ALV_HIERSEQ_LIST_DISPLAY在SE38环境下的程序名输入栏输入'DEMO*'后按F4,你可以查到SAP所有的DEMO示例程序,会学到很多ABAP功能的实现方法,输入'BCALV*'后按F4,你可以查到很多ALV示例程序。
ABAP-ALV报表开发ALV相关概念ALV是系统的一种网格的显示方式,这种方式带有汇总\排序\筛选等功能,ALV格式的数据是以单元格为单位显示,不象一般的写屏方式拷出来或是导出成文件不同列的内容粘在一块,这种方式便于数据导出来放在电子表格里进行加工。
ALV即能显示简单表单(SIMPLE LIST)又能显示有序表单(SEQUENTIAL LIST):ALV实现方式:ALV 可以通过两种方式实现:Two ApproachesConventional (Using SAP Standard Function Modules).Object Oriented (Using SAP Standard Classes and Methods).以下我们要讲的为Function Modules方式。
ALV实现流程:第一步:定义将要用到的表,即TALBES定义部分,然后定义TYPE-POOLS: SLIS.第二步:定义数据类型或者内表的实体对象.第三步:定义一些需要用到的变量.第四步:定义自己的选择屏幕.第五步:start-of-selection部分.1)用一个子函数完成对ALV表单标题区域的赋值(i_list_comments).2)用一个子函数完成自己所需要数据的抓取.3)用一个子函数完成要显示列表的列名行(第一行)的相关赋值(i_fieldcat_alv)以及设置.4)用一个子函数完成输出格式的设置(i_layout),比如双击一条记录是否弹出对话框啊?是用哪个功能键触发等等.5)用一个子函数FORM DISPLAY_DATA来显示上面我们已经分别封装好的数据,需要调用两个常用的FUNCTION MODULE.下面根据一个普通的例子(purchase order)来具体解释各步骤:*第一步:TABLES:EKKO,EKPO,T001,LFA1.TYPE-POOLS SLIS."有时可以还要包含*第二步:TYPES : BEGIN OF TYP_PURORDER, "TYPE OF Purchase Order InformationAEDAT TYPE EKKO-AEDAT, "Date on Which Record Was CreatedEBELN TYPE EKKO-EBELN, "Purchasing Document NumberMATNR TYPE EKPO-MATNR, "Material NumberTXZ01 TYPE EKPO-TXZ01,MENGE TYPE EKPO-MENGE, "Purchase Order QuantityMEINS TYPE EKPO-MEINS, "Purchase Order Unit of MeasureNETPR TYPE EKPO-NETPR, "Net Price in Purchasing DocumentWAERS TYPE EKKO-WAERS, "Currency KeyNETWR TYPE EKPO-NETWR, "Net Order Value in PO CurrencyEND OF TYP_PURORDER.DATA: ST_PURORDER TYPE TYP_PURORDER, "MAIN STRUCTERTD_PURORDER TYPE STANDARD TABLE OF TYP_PURORDER. "MAIN TABLE*第三步:*----------------------------------------------------------------------** COUNTER DEF*----------------------------------------------------------------------*DATA: W_BUKRS TYPE T001-BUKRS, "用于公司代码的检索W_LIFNR TYPE LFA1-LIFNR, "用于购买者代码的检索W_DATUM TYPE EKKO-AEDAT,W_DATE(10) TYPE C.*----------------------------------------------------------------------** FOR ALV DEF*----------------------------------------------------------------------*DATA: ST_LAYO TYPE SLIS_LAYOUT_ALV, "ALV LAYOUT STRTD_EVENT TYPE SLIS_T_EVENT, "ALV EVENT TABST_EVENT TYPE SLIS_ALV_EVENT, "ALV EVENT STRTD_COMMENT TYPE SLIS_T_LISTHEADER, "SET HEADER TABST_COMMENT LIKE LINE OF TD_COMMENT, "SET HEADER STRST_FIELDCAT TYPE SLIS_FIELDCAT_ALV, "ALV FIELDCAT STRTD_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "ALV FIELDCAT TABST_SORT TYPE SLIS_SORTINFO_ALV, "ALV SORT STRTD_SORT TYPE SLIS_T_SORTINFO_ALV. "ALV SORT TAB*1)SLIS_LAYOUT_ALV是一个类型,它用来定义ALV报表的整体属性例如:*ST_LAYO-ZEBRA = 'X'.“显示成斑马纹样式*ST_LAYO-DETAIL_POPUP = 'X'.“是否弹出详细信息窗口*ST_LAYO-F2CODE = '&ETA'. “设置触发弹出详细信息窗口的功能码,这里是双击*ST_LAYO-COLWIDTH_OPTIMIZE = 'X'. “优化列宽选项是否设置*ST_LAYO-DETAIL_INITIAL_LINES = 'X'.*ST_LAYO -no_vline = 'X'.“这个用来设置列间隔线*ST_LAYO -detail_titlebar = '详细内容'. “设置弹出窗口的标题栏*2)SLIS_T_EVENT是一个取得事件的内表,通过函数REUSE_ALV_EVENTS_GET取得多个事件(包括操作页眉页脚的事件).*3)SLIS_T_LISTHEADER操作页眉页脚的内表.*4)SLIS_T_FIELDCAT_ALV操作ALV报表列的内表.*5)SLIS_T_SORTINFO_ALV对显示数据排序的内表。
sap alv写法SAP ABAP List Viewer(ALV)是一种用于在SAP系统中创建交互式报表和列表的工具。
下面是一个示例,展示了如何使用SAP ALV来创建一个简单的报表:```ABAPREPORT Z_SIMPLE_ALV_REPORT.* 定义内表和工作区DATA: gt_data TYPE TABLE OF spfli, " 内表类型gs_data TYPE spfli. " 单行数据* 创建数据SELECT * FROM spfli INTO TABLE gt_data.* 创建ALV对象CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_structure_name = 'SPFLI' " 内表结构TABLESt_outtab = gt_data. " 数据表* 结束报表QUIT.```在上述示例中,我们首先定义了一个内表`gt_data`和一个工作区`gs_data`,用于存储报表的数据。
然后,我们使用`SELECT`语句从数据库表`SPFLI`中获取数据,并将其放入内表`gt_data`中。
接下来,我们使用函数模块`REUSE_ALV_GRID_DISPLAY`来创建ALV对象,并将内表`gt_data`传递给`TABLES`参数`t_outtab`。
`i_structure_name`参数指定了内表的结构,这里使用了数据库表`SPFLI`的结构。
最后,我们使用`QUIT`语句来结束报表的执行。
这只是一个简单的示例,SAP ALV的用法非常丰富,可以进行更多自定义和功能的添加。
具体的使用方法和配置参数可通过SAP的官方文档和ALV相关的函数模块的帮助文档进行参考和了解。
ABAP学习(11):ALV显⽰之OOALV使⽤⽰例2、OO ALVOOALV主要通过CL_GUI_ALV_GRID这个类来控制alv的显⽰。
ALV显⽰需要屏幕容器,容器对应类:1、cl_gui_custom_container,默认容器alv⾃动占满整个容器;2、cl_gui_docking_container,docking容器alv宽度可以直接调整;3、cl_gui_splitter_contianer,splitter容器,可以将屏幕划分区域显⽰多个alv;2.1、cl_gui_custom_container容器⽰例1:OO ALV使⽤cl_gui_custom_container容器TABLES:spfli.CLASS cl_event_handle DEFINITION."事件处理类定义PUBLIC SECTION."初始化ALV⼯具栏对象事件,如增加按钮并设定属性METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_gridIMPORTINGe_objecte_interactive."该事件⽤于在下ALV⼯具栏的下拉菜单按钮中增加选项METHODS handle_menu_button FOR EVENT menu_button OF cl_gui_alv_gridIMPORTINGe_objecte_ucomm."ALV⼯具栏按钮的点击事件METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_gridIMPORTINGe_ucomm."ALV表格双击事件METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_gridIMPORTINGe_row "作废e_column "通过e_column-fieldname 获取点击字段名,点击列es_row_no. "通过es_row_no-row_id 返回当前⾏号"字段的字段⽬录HOTSPOT设置为"X",热点单击事件METHODS handle_hotspot_click FOR EVENT HOTSPOT_CLICK of cl_gui_alv_gridIMPORTINGE_ROW_ID "作废E_COLUMN_ID "通过e_column_id-fieldname 获取点击字段名,点击列ES_ROW_NO. "通过es_row_no-row_id 返回当前⾏号ENDCLASS.DATA: gs_toolbar TYPE stb_button.DATA:t_sflight LIKE TABLE OF sflight WITH HEADER LINE.CLASS cl_event_handle IMPLEMENTATION."事件处理类实现部分METHOD handle_toolbar.gs_toolbar-function = 'B_SUM'."按钮的FunctionCodegs_toolbar-icon = icon_display."按钮图标,通过Tcode:ICON可以查看gs_toolbar-text = '总⾏数'."按钮标签gs_toolbar-butn_type = '0'."定义按钮类型,0为标准按钮,具体取值可参考这⾥APPEND gs_toolbar TO e_object->mt_toolbar."添加按钮到⼯具栏中gs_toolbar-function = 'B_LIST'."按钮的FunctionCodegs_toolbar-quickinfo = '⾃定义下拉菜单按钮'."按钮的冒泡提⽰gs_toolbar-icon = icon_biw_report_view."按钮图标gs_toolbar-text = '下拉菜单按钮'."按钮标签gs_toolbar-butn_type = '1'."定义按钮类型,1为下拉菜单按钮APPEND gs_toolbar TO e_object->mt_toolbar."添加下拉菜单按钮到⼯具栏中ENDMETHOD.METHOD handle_menu_button.IF e_ucomm = 'B_LIST'."给下拉菜单按钮增加选项,可以多次调⽤该⽅法以增加多⾏CALL METHOD e_object->add_functionEXPORTINGicon = icon_displayfcode = 'B_SUM'"字菜单按钮的FunCodetext = '显⽰ALV总⾏数'.ENDIF.ENDMETHOD.METHOD handle_user_command.DATA: sum TYPE i .IF e_ucomm = 'B_SUM'.DESCRIBE TABLE t_sflight[] LINES sum.MESSAGE i001(00) WITH'当前ALV表格中的数据总⾏数为:' sum.ENDIF.ENDMETHOD."双击事件METHOD handle_double_click.DATA:temp_message TYPE String.READ TABLE t_sflight INTO t_sflight INDEX es_row_no-row_id.temp_message = '点击列:' && e_column-fieldname && ',⾏号:' && es_row_no-row_id. MESSAGE i001(00) WITH temp_message.ENDMETHOD."字段的字段⽬录HOTSPOT设置为"X",热点单击事件METHOD handle_hotspot_click.DATA:temp_message TYPE String.temp_message = '点击列:' && e_column_id-fieldname && ',⾏号:' && es_row_no-row_id. MESSAGE i001(00) WITH temp_message.ENDMETHOD.ENDCLASS."定义cl_gui_alv_grid 类引⽤DATA:alv_grid TYPE REF TO cl_gui_alv_grid."定义cl_gui_custom_container 容器DATA:alv_container TYPE REF TO cl_gui_custom_container."alv显⽰参数"字段⽬录HOTSPOT,热点单击DATA:fieldcat TYPE lvc_t_fcat.DATA:s_fieldcat TYPE lvc_s_fcat.DATA:layout TYPE lvc_s_layo."事件DATA: event_handle TYPE REF TO cl_event_handle."定义类对象的引⽤SELECTION-SCREEN BEGIN OF SCREEN101 as SUBSCREEN.SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE title.SELECT-OPTIONS:s_carrid FOR spfli-carrid,s_connid FOR spfli-connid.SELECTION-SCREEN END OF BLOCK blk1.SELECTION-SCREEN END OF SCREEN101.*初始化INITIALIZATION.title = '查询条件'.START-OF-SELECTION.CALL SCREEN100.MODULE STATUS_0100 OUTPUT.SET PF-STATUS'STA_0100'.* SET TITLEBAR 'xxx'.ENDMODULE. " STATUS_0100 OUTPUTMODULE USER_COMMAND_0100 INPUT.CASE sy-ucomm.WHEN 'EXEC'."查询数据SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE t_sflightWHERE carrid IN s_carrid AND connid IN s_connid.IF alv_container IS INITIAL.CREATE OBJECT alv_container"创建ALV容器对象EXPORTING container_name = 'CONTAINER1'.CREATE OBJECT alv_grid"创建ALV控件EXPORTING i_parent = alv_container.CALL METHOD alv_grid->set_table_for_first_displayEXPORTINGi_structure_name = 'sflight'is_layout = layouti_save = 'X'"可以保存变式CHANGINGit_outtab = t_sflight[]it_fieldcatalog = fieldcat[]."如果fieldcat内表为空,则相当于没有配置,采⽤默认⽅式显⽰CREATE OBJECT :event_handle."为ALV按钮注册监听事件SET HANDLER :event_handle->handle_toolbar FOR alv_grid,event_handle->handle_menu_button FOR alv_grid,event_handle->handle_user_command FOR alv_grid,event_handle->handle_double_click FOR alv_grid,event_handle->handle_hotspot_click FOR alv_grid."调⽤此⽅法才能激活⼯具栏上增加的⾃定义按钮CALL METHOD alv_grid->set_toolbar_interactive.ELSE.CALL METHOD alv_grid->refresh_table_display.ENDIF.WHEN 'BACK'or'EXIT'or'QUIT'.LEAVE TO SCREEN0.ENDCASE.ENDMODULE. " USER_COMMAND_0100 INPUT创建屏幕100逻辑代码:PROCESS BEFORE OUTPUT."屏幕输出前操作MODULE STATUS_0100."调⽤⼦屏幕CALL SUBSCREEN sub1 INCLUDING sy-repid '101'.*PROCESS AFTER INPUT."先调⽤⼦屏幕,后⾯module使⽤到⼦屏幕数据CALL SUBSCREEN sub1."屏幕输⼊后操作MODULE USER_COMMAND_0100.2.2、cl_gui_docking_container容器⽰例2:使⽤cl_gui_docking_container容器:TABLES:sflight."alv显⽰设置DATA:fieldcat TYPE lvc_t_fcat.DATA:layout TYPE lvc_s_layo."cl_gui_alv_grid类引⽤DATA:alv_grid TYPE REF TO cl_gui_alv_grid.DATA:alv_container TYPE REF TO cl_gui_docking_container.DATA:t_sflight LIKE TABLE OF sflight WITH HEADER LINE.START-OF-SELECTION.CALL SCREEN100.MODULE USER_COMMAND_0100 INPUT.CASE sy-ucomm.WHEN 'BACK'or'QUIT'or'EXIT'.LEAVE TO SCREEN0.ENDCASE.ENDMODULE. " USER_COMMAND_0100 INPUTMODULE STATUS_0100 OUTPUT.SET PF-STATUS'STA_0100'.* SET TITLEBAR 'xxx'.ENDMODULE. " STATUS_0100 OUTPUT*&---------------------------------------------------------------------**& Module OUT_SCREEN OUTPUT*&---------------------------------------------------------------------** 查询数据,⽣成docking container对象,显⽰alv*----------------------------------------------------------------------*MODULE OUT_SCREEN OUTPUT."查询数据SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE t_sflight WHERE carrid = 'AA'. "创建container对象CREATE OBJECT alv_containerEXPORTINGrepid = sy-repiddynnr = sy-dynnrextension = 300."alv宽度"创建alv对象CREATE OBJECT alv_gridEXPORTINGi_parent = alv_container."调⽤显⽰⽅法CALL METHOD alv_grid->set_table_for_first_displayi_structure_name = 'sflight'is_layout = layouti_save = 'X'"可以保存变式CHANGINGit_outtab = t_sflight[]it_fieldcatalog = fieldcat[]."如果fieldcat内表为空,则相当于没有配置,采⽤默认⽅式显⽰ENDMODULE. " OUT_SCREEN OUTPUT2.3、cl_gui_splitter_container容器⽰例3:使⽤cl_gui_splitter_container容器TABLES:sflight."alv显⽰设置DATA:fieldcat TYPE lvc_t_fcat.DATA:layout TYPE lvc_s_layo."cl_gui_alv_grid类引⽤DATA:alv_grid TYPE REF TO cl_gui_alv_grid.DATA:alv_grid1 TYPE REF TO cl_gui_alv_grid.DATA:alv_container TYPE REF TO cl_gui_docking_container."spillter container 对象引⽤DATA:alv_splitter_container TYPE REF TO cl_gui_splitter_container."屏幕容器DATA:ref_container TYPE REF TO cl_gui_container.DATA:t_sflight LIKE TABLE OF sflight WITH HEADER LINE.START-OF-SELECTION.CALL SCREEN100.*&---------------------------------------------------------------------**& Module USER_COMMAND_0100 INPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE USER_COMMAND_0100 INPUT.CASE sy-ucomm.WHEN 'BACK'or'QUIT'or'EXIT'.LEAVE TO SCREEN0.ENDCASE.ENDMODULE. " USER_COMMAND_0100 INPUT*&---------------------------------------------------------------------**& Module STATUS_0100 OUTPUT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*MODULE STATUS_0100 OUTPUT.SET PF-STATUS'STA_0100'.* SET TITLEBAR 'xxx'.ENDMODULE. " STATUS_0100 OUTPUT*&---------------------------------------------------------------------**& Module OUT_SCREEN OUTPUT*&---------------------------------------------------------------------** 查询数据,⽣成docking container对象,显⽰alv*----------------------------------------------------------------------*MODULE OUT_SCREEN OUTPUT."查询数据SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE t_sflight WHERE carrid = 'AA'. "创建container对象CREATE OBJECT alv_containerEXPORTINGrepid = sy-repiddynnr = sy-dynnrextension = 1200."alv宽度"创建spillter container对象CREATE OBJECT alv_splitter_containerEXPORTINGparent = alv_containerrows = 1columns = 2. "将⽗容器分为1⾏两列,两个容器"调⽤cl_splitter_container对象⽅法,获取容器CALL METHOD alv_splitter_container->get_containerEXPORTINGrow = 1column = 1container = ref_container."创建左边容器alv对象"创建alv对象CREATE OBJECT alv_gridEXPORTINGi_parent = ref_container."调⽤显⽰⽅法CALL METHOD alv_grid->set_table_for_first_displayEXPORTINGi_structure_name = 'sflight'is_layout = layouti_save = 'X'"可以保存变式CHANGINGit_outtab = t_sflight[]it_fieldcatalog = fieldcat[]."如果fieldcat内表为空,则相当于没有配置,采⽤默认⽅式显⽰"调⽤cl_splitter_container对象⽅法,获取容器CALL METHOD alv_splitter_container->get_containerEXPORTINGrow = 1column = 2RECEIVINGcontainer = ref_container."创建右边容器alv对象"创建alv对象CREATE OBJECT alv_grid1EXPORTINGi_parent = ref_container."调⽤显⽰⽅法CALL METHOD alv_grid1->set_table_for_first_displayEXPORTINGi_structure_name = 'sflight'is_layout = layouti_save = 'X'"可以保存变式CHANGINGit_outtab = t_sflight[]it_fieldcatalog = fieldcat[]."如果fieldcat内表为空,则相当于没有配置,采⽤默认⽅式显⽰ENDMODULE. " OUT_SCREEN OUTPUT。
abap alv 代码模板ALV (ABAP List Viewer) 是SAP 提供的一个非常强大的报表工具。
下面是一个简单的ALV 代码模板,你可以根据自己的需求进行修改:REPORT ZEXAMPLE.PARAMETERS: p_matnr TYPE matnr OBLIGATORY,p_werks TYPE werks OBLIGATORY.START-OF-SELECTION.* 创建ALV 结构体DATA: lt_matkl LIKE TABLE OF matkl,lt_matnr_werks TYPE TABLE OF matnr werks.* 填充数据INSERT INTO lt_matkl VALUES ('MATERIAL', 'MATERIAL', 'DESCRIPTION').INSERT INTO lt_matkl VALUES ('MAT1000', 'ZINC', 'ZINC MATERIAL').INSERT INTO lt_matkl VALUES ('MAT2000', 'IRON', 'IRON MATERIAL').APPEND TO TABLE lt_matnr_werks VALUES ('MAT1000', '100').APPEND TO TABLE lt_matnr_werks VALUES ('MAT2000', '200').* 创建ALV 实例DATA: l_options TYPE REF TO cl_salv_table_options,l_alv TYPE REF TO cl_salv_list.CALL METHOD cl_salv_table_options=>create_by_nameEXPORTINGname = 'alv'IMPORTINGoptions = l_options.CALL METHOD cl_salv_list=>createEXPORTINGi_parent = l_options->get_parent( )IMPORTINGe_outtab = lt_matnr_werks.CALL METHOD l_alv->display.这个模板创建了一个简单的ALV 报表,显示了两个材料(MAT1000 和MAT2000)和它们的工厂(100 和200)。
ALV知识一、ALV相关概念ALV――ABAP LIST VIEWER,这里我姑且称之为ABAP表单浏览器,用它可以标准化,简单化R/3系统中的表单,它可以提供给用户一个统一的表单格式以及用户接口。
ALV即能显示简单表单(SIMPLE LIST)又能显示有序表单(SEQUENTIAL LIST):●简单表单(SIMPLE LIST)包含一系列不分层次的(NON-HIERARCHICAL),用户自定义的列。
●层次表(即有序表SEQUENTIAL LIST)包含列表头以及它的子行,一个列表头的关键行能带出它下面的一些列项目(我们自己理解的时候可以想到BOM表的层次结构)。
●我们还可以在简单表单以及关联表单中显示小计和总计二、结合一个具体的实例来看ALV的功能首先我们看下图中的这个ALV的布局(这是一般ALV程序表单的典型布局):根据上面对ALV的直观形象,下面讲屏幕上的区域划分成几块,分别来解释它的作用:1.快捷工具栏(如下图)细节按钮,你首先必须选中列表中的一行,然后点击它的话,就会弹出一个窗口,显示选中行的细节内容。
(另外:你双击你要选择的行,也可以显示细节)按升序排列,首先选中一列,然后再点击它,就可以看到该列是按照升序重新排列。
按降序排列,首先选中一列,然后再点击它,就可以看到该列是按照降序重新排列。
设置过滤器,通过设置它可以达到筛选的目的,以列名称作为筛选的筛选标准,填入过滤器相应的标准值,然后就可以筛选出满足自己条件的记录。
打印预览,点击它之后,就可以预览一下将要打印内容的布局情况。
Microsoft Excel,调用MS的Excel到当前ALV的列表显示区域。
(前提:必须安装了MS的Excel)字处理,字处理的相关设置。
本地文件,将当前表单存储到本地机器上,有几种供选择的存储格式。
邮件收件人,给系统内用户发邮件图形,点击它可以根据表单情况绘制相关图表。
更改布局,点击它可以对表单中的列项目排列次序的互换,删减等。
ABAP学习(10):ALV显⽰之functionalvABAP的ALV1、Function ALV调⽤function,传⼊要显⽰的内表,显⽰样式等参数,显⽰alv。
可以调⽤REUSE_ALV_GRID_DISPLAY这个function,也可以调⽤REUSE_ALV_GRID_DISPLAY_LVC这个function,输⼊的参数⼀致,但是⼀些细节传⼊参数类型不同。
REUSE_ALV_GRID_DISPLAY调⽤⽰例:"调⽤function,显⽰alvCALL FUNCTION'REUSE_ALV_GRID_DISPLAY'* EXPORTING* I_INTERFACE_CHECK = ' '* I_BYPASSING_BUFFER = ' '* I_BUFFER_ACTIVE = ' '* I_CALLBACK_PROGRAM = ' '* I_CALLBACK_PF_STATUS_SET = ' '* I_CALLBACK_USER_COMMAND = ' '* I_CALLBACK_TOP_OF_PAGE = ' '* I_CALLBACK_HTML_TOP_OF_PAGE = ' '* I_CALLBACK_HTML_END_OF_LIST = ' '* I_STRUCTURE_NAME =* I_BACKGROUND_ID = ' '* I_GRID_TITLE =* I_GRID_SETTINGS =* IS_LAYOUT =* IT_FIELDCAT =* IT_EXCLUDING =* IT_SPECIAL_GROUPS =* IT_SORT =* IT_FILTER =* IS_SEL_HIDE =* I_DEFAULT = 'X'* I_SAVE = ' '* IS_VARIANT =* IT_EVENTS =* IT_EVENT_EXIT =* IS_PRINT =* IS_REPREP_ID =* I_SCREEN_START_COLUMN = 0* I_SCREEN_START_LINE = 0* I_SCREEN_END_COLUMN = 0* I_SCREEN_END_LINE = 0* I_HTML_HEIGHT_TOP = 0* I_HTML_HEIGHT_END = 0* IT_ALV_GRAPHICS =* IT_HYPERLINK =* IT_ADD_FIELDCAT =* IT_EXCEPT_QINFO =* IR_SALV_FULLSCREEN_ADAPTER =* IMPORTING* E_EXIT_CAUSED_BY_CALLER =* ES_EXIT_CAUSED_BY_USER =TABLEST_OUTTAB = t_outtab EXCEPTIONSPROGRAM_ERROR = 1OTHERS = 2.View CodeREUSE_ALV_GRID_DISPLAY_LVC调⽤⽰例:CALL FUNCTION'REUSE_ALV_GRID_DISPLAY_LVC'* EXPORTING* I_INTERFACE_CHECK = ' '* I_BYPASSING_BUFFER =* I_BUFFER_ACTIVE =* I_CALLBACK_PROGRAM = ' '* I_CALLBACK_PF_STATUS_SET = ' '* I_CALLBACK_USER_COMMAND = ' '* I_CALLBACK_TOP_OF_PAGE = ' '* I_CALLBACK_HTML_TOP_OF_PAGE = ' '* I_CALLBACK_HTML_END_OF_LIST = ' '* I_STRUCTURE_NAME =* I_BACKGROUND_ID = ' '* I_GRID_TITLE =* I_GRID_SETTINGS =* IS_LAYOUT_LVC =* IT_FIELDCAT_LVC =* IT_EXCLUDING =* IT_SPECIAL_GROUPS_LVC =* IT_SORT_LVC =* IT_FILTER_LVC =* IT_HYPERLINK =* IS_SEL_HIDE =* I_DEFAULT = 'X'* I_SAVE = ' '* IS_VARIANT =* IT_EVENTS =* IT_EVENT_EXIT =* IS_PRINT_LVC =* IS_REPREP_ID_LVC =* I_SCREEN_START_COLUMN = 0* I_SCREEN_START_LINE = 0* I_SCREEN_END_COLUMN = 0* I_SCREEN_END_LINE = 0* I_HTML_HEIGHT_TOP =* I_HTML_HEIGHT_END =* IT_ALV_GRAPHICS =* IT_EXCEPT_QINFO_LVC =* IR_SALV_FULLSCREEN_ADAPTER =* I_YCBN =* IMPORTING* E_EXIT_CAUSED_BY_CALLER =* ES_EXIT_CAUSED_BY_USER =TABLEST_OUTTAB = t_outtabEXCEPTIONSPROGRAM_ERROR = 1OTHERS = 2.View Code1.1、Function参数解析I_INTERFACE_CHECK:检查接⼝⼀致性,默认Space;I_BYPASSING_BUFFER:是否使⽤缓存buffer,类型:字符型1;I_BUFFER_ACTIVE:是否激活缓存;I_CALLBACK_PROGRAM:调⽤alv程序名,⼀般就是当前程序,sy-repid,类型:sy-repid,默认Space;I_CALLBACK_PF_STATUS_SET:ALV⼯具栏Subroutine, ALV屏幕菜单,此参数允许报表展现⽤户⾃定义的屏幕菜单,类型:SLIS_FORMNAME,默认Space,I_CALLBACK_USER_COMMAND:ALV user Command Subroutine(⼦程序),类型:SLIS_FORMNAME,默认Space;I_CALLBACK_TOP_OF_PAGE:ALV抬头内容信息,类型:SLIS_FORMNAME,默认Space;I_CALLBACK_HTML_TOP_OF_PAGE:ALV HTML格式抬头内容信息,类型:SLIS_FORMNAME,默认Space;I_CALLBACK_HTML_END_OF_LIST:ALV HTML格式页脚内容信息,类型:SLIS_FORMNAME,默认Space;I_STRUCTURE_NAME:为输出表数据结构的命名,类型:DD02L-TABNAME;I_BACKGROUND_ID:ALV背景图⽚Object ID,类型:SDYDO_KEY,默认Space;I_GRID_TITLE: ALV 标题,类型:LVC_TITLE;I_GRID_SETTINGS:GRID设置信息,类型:LVC_S_GLAY;IS_LAYOUT_LVC:ALV输出布局样式,类型:LVC_S_LAYO;IT_FIELDCAT_LVC:设定显⽰的栏位名称及输出设定,类型:LVC_T_FCAT;IT_EXCLUDING:隐藏设置的ALV⼯具栏,未激活的功能码,类型:SLIS_T_EXTAB;IT_SPECIAL_GROUPS_LVC:若内表中⼀些字段通过SP_GROUP被分组在⼀起,必须为这些组传递组⽂本内表,类型:LVC_T_SGRP;IT_SORT_LVC:ALV排序,类型:LVC_T_SORT;IT_FILTER_LVC:ALV过滤器,类型:LVC_T_FILT;IT_HYPERLINK:超链接,类型:LVC_T_HYPE;IS_SEL_HIDE:替换或修改屏幕中select-option的值,类型:SLIS_SEL_HIDE_ALV;I_DEFAULT:⽤户是否可以定义默认布局,Space-不可以定义默认布局(默认:X);I_SAVE: 保存表格布局,’X'-只能保存全局变式;’U'-只能保存特定变式;’A'-都可以保存;Space-不能保存变式(默认:space);IS_VARIANT:表格布局变式,类型:DISVARIANT;IT_EVENTS:设置事件,类型为slis_t_event的内表(name:事件名称,form:事件的FORM),类型:SLIS_T_EVENT;IT_EVENT_EXIT:设置回调的⽅法的执⾏⾏为,表明⽤户所写的代码是在执⾏标准执⾏之前还是之后,类型:SLIS_T_EVENT_EXIT;IS_PRINT_LVC:打印信息,类型:LVC_S_PRNT;IS_REPREP_ID_LVC:re/re接⼝初始化信息,类型:LVC_S_RPRP;I_SCREEN_START_COLUMN:对话框形式显⽰开始列,默认:0;I_SCREEN_START_LINE:对话框形式显⽰开始⾏,默认:0;I_SCREEN_END_COLUMN:对话框形式显⽰结束列,默认:0;I_SCREEN_END_LINE:对话框形式显⽰结束⾏,默认:0;I_HTML_HEIGHT_TOP:HTML抬头的⾼度,类型:I;I_HTML_HEIGHT_END: HTML页脚的⾼度,类型:I;IT_ALV_GRAPHICS:是否可以在图表中显⽰ALV,类型:DTC_T_TC;IT_EXCEPT_QINFO_LVC:Exception的信息,类型:SLIS_T_QINFO_ALV;IR_SALV_FULLSCREEN_ADAPTER:类型:CL_SALV_FULLSCREEN_ADAPTER;I_YCBN:类型:char1;1.2、⾃定义屏幕菜单使⽤I_CALLBACK_PF_STATUS_SET参数,可以设置⾃定义屏幕菜单。
*&---------------------------------------------------------------------**& Report ZTEST_ALV2*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------* REPORT ZTEST_ALV2.*定义所需要的报表tables : EINE,LFA1,EKPO,eina.*for alvtype-pools: slis.data:i_fieldcat_alv type slis_t_fieldcat_alv, "定义列标题(属性/信息) i_layout type slis_layout_alv, "alv格式i_fieldcat type slis_fieldcat_alv, "i_events type slis_t_event, "alv事件w_events like line of i_events,i_list_comments type slis_t_listheader, "alv表单标题区域设置w_list_comments like line of i_list_comments,w_repid like sy-repid. "当前程序*定义内表字段*1.选择屏幕data:begin of hd_itab occurs 0,infnr like eine-infnr, "采购信息记录ekorg like eine-ekorg, "采购组织matnr like eina-matnr, "物料号码lifnr like eina-lifnr, "供应商erdat like eine-erdat, "记录建立时间loekz like eine-loekz, "删除标记urznr like eina-urznr, "批准号color(4) type c, "颜色*2.显示屏幕aplfz like eine-aplfz, "计划交货时间netpr like eine-netpr, "净价peinh like eine-peinh, "价格单位dwjj like eine-netpr, "单位净价bprme like eine-bprme, "计量单位MAKTX like MAKT-MAKTX, "物料名称name1 like lfa1-name1, "供应商名称end of hd_itab.*定义选择屏幕selection-screen begin of block b1 with frame title t1.select-options:s_infnr for eine-infnr memory id INF. "信息记录号码PARAMETERS: PR_LOEKZ TYPE C AS CHECKBOX DEFAULT ' '. "显示有删除标记的信息记录select-options:s_ekorg for eine-ekorg memory id EKO. "采购组织select-options:s_matnr for eina-matnr memory id MA T. "物料号码select-options:s_lifnr for eina-lifnr memory id LIF. "供应商号码select-options:s_erdat for eine-erdat memory id s_erdat. "创建日期select-options:s_urznr for eina-urznr memory id s_urznr. "批准号selection-screen end of block b1.*程序初始化initialization.t1 = '采购查询'.*数据选择start-of-selection.perform getdata. "读取数据perform events_build. "alv事件perform layout_build. "定义alv格式属性perform fields_build. "定义列标题信息perform display_data. "显示数据end-of-selection.data:pagenum type i value 1. "报表页码end-of-page.pagenum = pagenum + 1.*行项目双击事件at line-selection.*&--------------------------------------------------------------------**& Form getdata*&--------------------------------------------------------------------** 获取数据从数据库表中选择相应字段*---------------------------------------------------------------------*form getdata.clear hd_itab.clear hd_itab[].*hd_itab表if PR_LOEKZ = ' '.select * from eineinner join eina on eine~infnr = eina~infnrinto corresponding fields of hd_itabwhere eine~infnr in s_infnrand eine~ekorg in s_ekorgand eina~matnr in s_matnrand eina~lifnr in s_lifnrand eina~loekz <> 'X'and eine~erdat in s_erdatand eina~urznr in s_urznrorder by eine~infnr descending.select single MAKTX from MAKTinto corresponding fields of hd_itabwhere matnr = hd_itab-matnr.select single name1 from lfa1into corresponding fields of hd_itabwhere lifnr = hd_itab-lifnr.append hd_itab.clear hd_itab.endselect.else.select * from eineinner join eina on eine~infnr = eina~infnrinto corresponding fields of hd_itabwhere eine~infnr in s_infnrand eine~ekorg in s_ekorgand eina~matnr in s_matnrand eina~lifnr in s_lifnrand eine~erdat in s_erdatand eina~urznr in s_urznrorder by eine~infnr descending.select single MAKTX from MAKTinto corresponding fields of hd_itabwhere matnr = hd_itab-matnr.select single name1 from lfa1into corresponding fields of hd_itabwhere lifnr = hd_itab-lifnr.append hd_itab.clear hd_itab.endselect.endif.loop at hd_itab.if hd_itab-loekz = 'X'.hd_itab-color = 'C610'. "如果此采购信息记录被删除,则显示红色endif.hd_itab-dwjj = hd_itab-netpr / hd_itab-peinh.modify hd_itab.clear hd_itab.endloop.endform. "getdata**&--------------------------------------------------------------------**& Form layout_build*&--------------------------------------------------------------------** 定义ALV格式属性*---------------------------------------------------------------------*form layout_build .i_layout-zebra = 'X'.* i_layout-detail_popup = 'X'.i_layout-no_vline = ' '.* i_layout-colwidth_optimize = 'X'.* i_layout-detail_initial_lines = 'X'.* i_layout-detail_titlebar = '详细内容'.* i_layout-box_fieldname = 'LINE'.* i_layout-f2code = '&ETA'.* i_layout-f2code = '&IC1'.i_layout-info_fieldname = 'COLOR'. "颜色值i_layout-no_colhead = ' '.w_repid = sy-repid.endform. " layout_build*&--------------------------------------------------------------------**& Form fields_build*&--------------------------------------------------------------------* * 设置报表显示列属性信息*---------------------------------------------------------------------* form fields_build .refresh i_fieldcat_alv.clear i_fieldcat.data colnum type i value 1.i_fieldcat-col_pos = colnum.* "i_fieldcat-tabname = 'hd_itab'.* i_fieldcat-ref_tabname = 'zorder_purchase'.* i_fieldcat-outputlen ='14'.i_fieldcat-fieldname = 'INFNR'.i_fieldcat-seltext_s = '采购信息记录号'.i_fieldcat-seltext_m = '采购信息记录号'.i_fieldcat-seltext_l = '采购信息记录号'.i_fieldcat-reptext_ddic = '采购信息记录号'.i_fieldcat-lzero = 'X'.i_fieldcat-key = 'X'.i_fieldcat-hotspot = 'X'.* i_fieldcat-emphasize = 'X'.* i_fieldcat-tech = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.*i_fieldcat-ref_tabname = 'zorder_purchase'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'LIFNR'.i_fieldcat-seltext_s = '供应商号码'.i_fieldcat-seltext_m = '供应商号码'.i_fieldcat-seltext_l = '供应商号码'.i_fieldcat-reptext_ddic = '供应商号码'.i_fieldcat-lzero = 'X'.i_fieldcat-key = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.*i_fieldcat-ref_tabname = 'zorder_purchase'.i_fieldcat-col_pos = colnum.i_fieldcat-seltext_s = '供应商名称'.i_fieldcat-seltext_m = '供应商名称'.i_fieldcat-seltext_l = '供应商名称'.i_fieldcat-reptext_ddic = '供应商名称'.i_fieldcat-lzero = 'X'.i_fieldcat-key = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'MATNR'.* i_fieldcat-ref_tabname = 'zorder_purchase'. i_fieldcat-seltext_s = '物料代码'.i_fieldcat-seltext_m = '物料代码'.i_fieldcat-seltext_l = '物料代码'.i_fieldcat-reptext_ddic = '物料代码'.i_fieldcat-lzero = 'X'.* i_fieldcat-key = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1.* "i_fieldcat-tabname = 'hd_itab'.*i_fieldcat-ref_tabname = 'zorder_purchase'. i_fieldcat-col_pos = colnum.i_fieldcat-outputlen ='30'.i_fieldcat-fieldname = 'MAKTX'.i_fieldcat-seltext_s = '物料名称'.i_fieldcat-seltext_m = '物料名称'.i_fieldcat-seltext_l = '物料名称'.i_fieldcat-reptext_ddic = '物料名称'.i_fieldcat-lzero = 'X'.* i_fieldcat-key = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.* i_fieldcat-outputlen ='30'.i_fieldcat-seltext_s = '净价'.i_fieldcat-seltext_m = '净价'.i_fieldcat-seltext_l = '净价'.i_fieldcat-reptext_ddic = '净价'.* i_fieldcat-no_sum = 'X'.* i_fieldcat-icon = 'X'.append i_fieldcat to i_fieldcat_alv. clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'PEINH'.i_fieldcat-seltext_s = '价格单位'.i_fieldcat-seltext_m = '价格单位'.i_fieldcat-seltext_l = '价格单位'.i_fieldcat-reptext_ddic = '价格单位'. * i_fieldcat-no_sum = 'X'.* i_fieldcat-icon = 'X'.append i_fieldcat to i_fieldcat_alv. clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'DWJJ'.i_fieldcat-seltext_s = '单位净价'.i_fieldcat-seltext_m = '单位净价'.i_fieldcat-seltext_l = '单位净价'.i_fieldcat-reptext_ddic = '单位净价'. * i_fieldcat-no_sum = 'X'.* i_fieldcat-icon = 'X'.append i_fieldcat to i_fieldcat_alv. clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'BPRME'.i_fieldcat-seltext_s = '计量单位'.i_fieldcat-seltext_m = '计量单位'.i_fieldcat-seltext_l = '计量单位'.i_fieldcat-reptext_ddic = '计量单位'.* i_fieldcat-no_sum = 'X'.* i_fieldcat-icon = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'EKORG'.i_fieldcat-seltext_s = '采购组织'.i_fieldcat-seltext_m = '采购组织'.i_fieldcat-seltext_l = '采购组织'.i_fieldcat-reptext_ddic = '采购组织'.i_fieldcat-Emphasize = 'X'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'APLFZ'.i_fieldcat-seltext_s = '计划交货时间'.i_fieldcat-seltext_m = '计划交货时间'.i_fieldcat-seltext_l = '计划交货时间'.i_fieldcat-reptext_ddic = '计划交货时间'.* i_fieldcat-do_sum = 'X'.i_fieldcat-Emphasize = 'C211'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'ERDA T'.i_fieldcat-seltext_s = '信息记录创建日期'.i_fieldcat-seltext_m = '信息记录创建日期'.i_fieldcat-seltext_l = '信息记录创建日期'.i_fieldcat-reptext_ddic = '信息记录创建日期'. * i_fieldcat-do_sum = 'X'.i_fieldcat-Emphasize = 'C211'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'LOEKZ'.i_fieldcat-seltext_s = '删除标记'.i_fieldcat-seltext_m = '删除标记'.i_fieldcat-seltext_l = '删除标记'.i_fieldcat-reptext_ddic = '删除标记'.* i_fieldcat-do_sum = 'X'.i_fieldcat-Emphasize = 'C211'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.colnum = colnum + 1."i_fieldcat-tabname = 'hd_itab'.i_fieldcat-col_pos = colnum.i_fieldcat-fieldname = 'URZNR'.i_fieldcat-seltext_s = '批准标记'.i_fieldcat-seltext_m = '批准标记'.i_fieldcat-seltext_l = '批准标记'.i_fieldcat-reptext_ddic = '批准标记'.* i_fieldcat-do_sum = 'X'.i_fieldcat-Emphasize = 'C211'.* i_fieldcat-do_sum = 'X'.append i_fieldcat to i_fieldcat_alv.clear i_fieldcat.endform. " fields_build*&--------------------------------------------------------------------* *& Form display_data*&--------------------------------------------------------------------* * 显示报表内容*---------------------------------------------------------------------* form display_data .call function 'REUSE_ALV_GRID_DISPLAY'exportingi_callback_program = w_repidis_layout = i_layoutit_fieldcat = i_fieldcat_alv[]it_events = i_events[]i_grid_title = ' 采购信息记录汇总查询表'i_callback_user_command = 'USER_COMMAND'* i_save = 'A'tablest_outtab = hd_itab.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. " display_data*---------------------------------------------------------------------** FORM USER_COMMAND **---------------------------------------------------------------------*FORM user_command USING i_ucomm LIKE sy-ucommis_selfield TYPE slis_selfield. "#EC CALLEDCASE i_ucomm.WHEN '&IC1'. " PickREAD TABLE hd_itab INDEX is_selfield-tabindex.IF sy-subrc EQ 0.SET PARAMETER ID 'INF' FIELD hd_itab-infnr.SET PARAMETER ID 'MAT' FIELD hd_itab-matnr.SET PARAMETER ID 'LIF' FIELD hd_itab-lifnr.SET PARAMETER ID 'EKO' FIELD hd_itab-ekorg.CALL TRANSACTION 'ME13' AND SKIP FIRST SCREEN.ENDIF.ENDCASE.ENDFORM. " USER_COMMAND*&--------------------------------------------------------------------**& Form whole_toolbar*&--------------------------------------------------------------------** text*---------------------------------------------------------------------** -->EXTAB text*---------------------------------------------------------------------*form whole_toolbar using extab type slis_t_extab. "#EC CALLED set pf-status 'WHOLE_TOOLBAR' excluding extab.endform. "whole_toolbar*&--------------------------------------------------------------------**& Form alv_top_of_page*&--------------------------------------------------------------------** 页头格式设置*---------------------------------------------------------------------*form alv_top_of_page.clear: i_list_comments.w_list_comments-typ = 'H'.w_list_comments-key = ''.w_list_comments-info = '采购信息记录查询报表'.append w_list_comments to i_list_comments.clear w_list_comments.data: data_temp(16).write sy-datum to: data_temp mm/dd/yyyy.concatenate '日期: ' data_temp into data_temp.concatenate data_temp ' IT部' into data_temp. w_list_comments-typ = 'S'.w_list_comments-key = ''.w_list_comments-info = data_temp.append w_list_comments to i_list_comments.clear w_list_comments.call function 'REUSE_ALV_COMMENTARY_WRITE'exportingit_list_commentary = i_list_commentsI_LOGO = 'ENJOYSAP_LOGO' "标题图标.i_end_of_list_grid = 'X'.* i_logo = 'ENJOYSAP_LOGO'. "标题图标endform. "alv_top_of_page*&--------------------------------------------------------------------**& Form alv_end_of_list*&--------------------------------------------------------------------** text*---------------------------------------------------------------------*form alv_end_of_list.clear: i_list_comments.w_list_comments-typ = 'S'.w_list_comments-info = '制作单:IT部'.append w_list_comments to i_list_comments.clear w_list_comments.call function 'REUSE_ALV_COMMENTARY_WRITE'exportingit_list_commentary = i_list_commentsi_end_of_list_grid = 'X'. "I_LOGO = 'ENJOYSAP_LOGO' "标题图标CLEAR: i_list_comments.w_list_comments-typ = 'S'.w_list_comments-info = '确认: ______________ 采购申请分配员: ______________ '. APPEND w_list_comments TO i_list_comments.CLEAR w_list_comments.w_list_comments-typ = 'S'.w_list_comments-info = '制表单位: IT部'.APPEND w_list_comments TO i_list_comments.CLEAR w_list_comments.* CLEAR data_temp.* CONCATENATE '打印者:' sy-uname INTO data_temp.w_list_comments-typ = 'S'.* w_list_comments-info = data_temp.APPEND w_list_comments TO i_list_comments.CLEAR w_list_comments.CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'EXPORTINGit_list_commentary = i_list_commentsI_LOGO = 'ENJOYSAP_LOGO' "标题图标i_end_of_list_grid = 'X'.endform. "alv_end_of_list**&--------------------------------------------------------------------**& Form events_build*&--------------------------------------------------------------------** 定义ALV事件*---------------------------------------------------------------------*FORM events_build .CALL FUNCTION 'REUSE_ALV_EVENTS_GET'EXPORTINGi_list_type = 0IMPORTINGet_events = i_events.READ TABLE i_events WITH KEY name = 'TOP_OF_PAGE'INTO w_events.IF sy-subrc = 0.MOVE 'ALV_TOP_OF_PAGE' TO w_events-form.MODIFY i_events FROM w_events INDEX sy-tabix.ENDIF.READ TABLE i_events INTO w_events WITH KEY name = 'USER_COMMAND'. IF sy-subrc EQ 0.w_events-name = 'USER_COMMAND'.MODIFY i_events FROM w_events INDEX sy-tabix.ENDIF.READ TABLE i_events WITH KEY name = 'END_OF_LIST'"slis_ev_end_of_pageINTO w_events.IF sy-subrc = 0.MOVE 'ALV_END_OF_LIST' TO w_events-form.MODIFY i_events FROM w_events INDEX sy-tabix.ENDIF.ENDFORM. " events_build。
2、3年前写的代码,之后由于各种内因外因,没能继续测试下去。
欢迎有兴趣的同学继续测试各个参数。
*&---------------------------------------------------------------------**& Report ZLG_ALV **& **&---------------------------------------------------------------------**& 测试alv各项参数 **& 未完全 - v01 - 20081212 **& 未完全 - v02 - 20090731 **&---------------------------------------------------------------------**& ALV显示可以用的FM包括: **& 1、REUSE_ALV_GRID_DISPLAY **& 2、REUSE_ALV_GRID_DISPLAY_LVC **& 3、REUSE_ALV_BLOCK_LIST_DISPLAY **& **& ALV显示相关FM包括: **& 1、REUSE_ALV_FIELDCATALOG_MERGE - 制作类型的 fieldcatalog **& 2、LVC_FIELDCATALOG_MERGE - 制作 LVC_T_FCAT 类型的 fieldcatalog **& 3、REUSE_ALV_BLOCK_LIST_INIT **& 4、REUSE_ALV_BLOCK_LIST_APPEND **& 5、REUSE_ALV_EVENTS_GET **& **&---------------------------------------------------------------------**& ALV(REUSE_ALV_GRID_DISPLAY)输出必须的内容: **& 1、output itab **& 2、fieldcatalog **&---------------------------------------------------------------------**& 相关FM注意事项 **& 一、REUSE_ALV_FIELDCATALOG_MERGE **& 1、I_INTERNAL_TABNAME所用的变量对应结构体必须用DATA+BEGIN申明, **& 不可以使用DATA+TYPE line type,否则不会返回Fieldcatalog。
**& 2、修改了I_INTERNAL_TABNAME对应结构体后, **& 必须/N后重新进去SE38时,才会生效。
**& 3、程序代码每行不能太长,不然容易报错, **& 具体内容见FORM f_fieldcatalog。
**& **& **& 二、REUSE_ALV_GRID_DISPLAY **& 1、使用标准GUI:STANDARD_FULLSCREEN **& 2、标准GUI中的&OLO中显示的列名取决于fieldcatalog中的设置 **& **& 三、REUSE_ALV_BLOCK_LIST_DISPLAY **& 1、首先用 REUSE_ALV_BLOCK_LIST_INIT 初始化 **& 2、然后用 REUSE_ALV_BLOCK_LIST_APPEND 添加需要显示的ALV **& 3、最后用 REUSE_ALV_BLOCK_LIST_DISPLAY 显示 **& **&---------------------------------------------------------------------**& 参考自:*& /viewthread.php?tid=1051462&highlight=ALV%2B%D7%DC%BD %E1*&---------------------------------------------------------------------* REPORT zlg_alv .*&---------------------------------------------------------------------**& 导入 **&---------------------------------------------------------------------**include:<ICON>.*-----------------------------------------------------------------------* Instead of statement 'INCLUDE <icon>.', please use* statement 'TYPE-POOLS: icon.' directly.*-----------------------------------------------------------------------*&---------------------------------------------------------------------**& 类型池引用申明 **&---------------------------------------------------------------------* TYPE-POOLS:slis.TYPE-POOLS:icon."代替 include <icon>*&---------------------------------------------------------------------**& 类型定义 **&---------------------------------------------------------------------**ALV输出表类型TYPES:BEGIN OF typ_alv,icon TYPE icon-id,box(1) TYPE c,c10(10) TYPE c,n10(10) TYPE n,n5(5) TYPE n,c TYPE c,d TYPE d,t TYPE t,x TYPE x,i TYPE i, "普通I型数字i2 TYPE i, "负数普通显示i3 TYPE i, "no_signi4 TYPE i, "负号前置quantity TYPE p DECIMALS 5,"数量qunit TYPE meins,"数量参考单位p TYPE p DECIMALS 5,cp(33) TYPE c, "放置P,32+1?currency TYPE p DECIMALS 5,cunit TYPE bkpf-waers,cunit2 TYPE c LENGTH 5,f TYPE f,string TYPE string, "内表型类型?xstring TYPE xstring,"内表型类型?bname TYPE bname,bnamel(30) TYPE c, "与bname对齐方式不同bnamel2(30) TYPE c, "热点matnr TYPE matnr, "F4help - 1 datum TYPE datum, "F4help - 2 linecolor(4) TYPE c, "用于保存行颜色代码cellcolor TYPE slis_t_specialcol_alv,"用于保存单元格颜色代码END OF typ_alv.*&---------------------------------------------------------------------* *& 变量定义 * *&---------------------------------------------------------------------* *ALV输出用内表相关DATA:itab_alv TYPE STANDARD TABLE OF typ_alv,wa_alv TYPE typ_alv.*ALV Layout相关DATA:wa_layout TYPE slis_layout_alv.*ALV Sort相关DATA:itab_alv_sort TYPE slis_t_sortinfo_alv,wa_alv_sort TYPE slis_sortinfo_alv.*ALV Event相关DATA:itab_alv_event TYPE slis_t_event,wa_alv_event TYPE slis_alv_event.*ALV Fieldcatalog相关DATA:itab_alv_fieldcatalog TYPE slis_t_fieldcat_alv,wa_alv_fieldcatalog TYPE slis_fieldcat_alv.*只用于REUSE_ALV_FIELDCATALOG_MERGEDATA:BEGIN OF cns_alv,icon LIKE icon-id,"这里只能用like,用type会无效box(1) TYPE c,c10(10) TYPE c,n10(10) TYPE n,n5(5) TYPE n,c TYPE c,d TYPE d,t TYPE t,x TYPE x,i TYPE i,i2 TYPE i, "负数i3 TYPE i, "显示no_sign效果i4 TYPE i, "显示负号前置效果quantity TYPE p DECIMALS 5,"数量qunit TYPE meins,"数量参考单位p TYPE p,cp(33) TYPE c, "放置P,32+1?currency TYPE p DECIMALS 5,cunit TYPE bkpf-waers,cunit2 TYPE c LENGTH 5,"货币单位没有被FM加入fieldcatlog中f TYPE f,string TYPE string, "内表型类型?xstring TYPE xstring,"内表型类型?bname TYPE bname,bnamel(30) TYPE c, "与bname对齐方式不同bnamel2(30) TYPE c, "热点matnr TYPE matnr, "F4help - 1 datum TYPE datum, "F4help - 2 linecolor(4) TYPE c, "用于保存行颜色代码cellcolor TYPE slis_t_specialcol_alv,"用于保存单元格颜色代码END OF cns_alv.*隐藏标准按钮DATA:itab_alv_excluding TYPE slis_t_extab ,wa_alv_excluding TYPE slis_extab .*全局常量DATA:cns_tabname TYPE slis_tabname VALUE 'CNS_ALV',cns_repid TYPE sy-repid VALUE 'ZLG_ALV'," sy-repid cns_pf_status_set TYPE slis_tabname VALUE '',cns_user_command TYPE slis_formname VALUE 'F_USER_COMMAND',cns_html_top_of_page TYPE slis_formname VALUE 'F_HTML_TOP_OF_PAGE', cns_grid_title TYPE lvc_title VALUE 'ALV title',cns_l(1) TYPE c VALUE 'L',cns_c(1) TYPE c VALUE 'C',cns_r(1) TYPE c VALUE 'R',cns_a(1) TYPE c VALUE 'A',cns_u(1) TYPE c VALUE 'U',cns_x(1) TYPE c VALUE 'X',cns_space(1) TYPE c VALUE space,cns_half TYPE i VALUE '0.5'.*全局变量DATA:g_color_id(1) TYPE c,g_cellcolor TYPE slis_specialcol_alv,g_datum TYPE datum,g_flg_alv TYPE i,"ALV类型标识g_flg_random TYPE i."分歧变量*&---------------------------------------------------------------------* *& 选择屏幕 * *&---------------------------------------------------------------------* *与form f_check_alv_type相关PARAMETERS:fagd TYPE c RADIOBUTTON GROUP alv DEFAULT 'X',"alv gridfagdlvc TYPE c RADIOBUTTON GROUP alv,"alv grid lvcfabl TYPE c RADIOBUTTON GROUP alv."alv block list*&---------------------------------------------------------------------* *& 初始化 * *&---------------------------------------------------------------------* INITIALIZATION.CLEAR:itab_alv_fieldcatalog.*生成随机数PERFORM f_get_random.*&---------------------------------------------------------------------* *& 填充数据及部分设置 **&---------------------------------------------------------------------* START-OF-SELECTION.*ALV输出用内表 - 填充PERFORM f_get_data.*&---------------------------------------------------------------------* *& 设置及显示 * *&---------------------------------------------------------------------* END-OF-SELECTION.*判断显示哪种ALVPERFORM f_check_alv_type CHANGING g_flg_alv.*ALV Fieldcatalog - 设置PERFORM f_fieldcatalog_all .*ALV layout - 设置PERFORM f_layout_all.*ALV Sort - 设置PERFORM f_sort_all.*ALV Evnet - 设置PERFORM f_event_all.*ALV GUI - 设置PERFORM f_gui_all.*ALV输出结果PERFORM f_show_alv_all.*&---------------------------------------------------------------------* *& Form f_get_data*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------* FORM f_get_data .g_datum = sy-datum.DO 100 TIMES .CLEAR wa_alv."清空内表型组件(如cellcolor)的值wa_alv-icon = '@0A@'."red light 可以查看类型池ICON中的值wa_alv-c10 = sy-index.wa_alv-n10 = sy-index ** 2.wa_alv-i = sy-index.wa_alv-i2 = wa_alv-i * -1.wa_alv-i3 = wa_alv-i2.wa_alv-i4 = wa_alv-i2 * wa_alv-i * wa_alv-i.CASE sy-index.WHEN 1.wa_alv-p = 1.WHEN 2.wa_alv-p = '1.5436'.WHEN OTHERS.wa_alv-p = '0.5436'.ENDCASE.wa_alv-quantity = sy-index * 1000.wa_alv-qunit = 'MT'.CASE sy-index.WHEN 1.wa_alv-qunit = 'MT'.WHEN 2.wa_alv-qunit = 'MT'.WHEN OTHERS.wa_alv-qunit = 'KG'.ENDCASE.wa_alv-cp = wa_alv-p.wa_alv-currency = 1000.CASE sy-index.WHEN 1.wa_alv-cunit = 'RMB'.WHEN 2.wa_alv-cunit = 'CNY'.WHEN OTHERS.wa_alv-cunit = 'JPY'.ENDCASE.wa_alv-cunit2 = wa_alv-cunit.wa_alv-datum = g_datum.g_datum = g_datum + 1.wa_alv-bname = sy-uname.wa_alv-bnamel = sy-uname.wa_alv-bnamel2 = sy-uname.*--颜色相关PERFORM f_alv_color.APPEND wa_alv TO itab_alv.ENDDO .ENDFORM. " f_get_data*&---------------------------------------------------------------------* *& Form f_check_alv_type*&---------------------------------------------------------------------* * 判断显示哪种ALV*----------------------------------------------------------------------* * <--P_FLG_ALV ALV种类*----------------------------------------------------------------------* FORM f_check_alv_type CHANGING p_flg_alv.*----------------------------------------------------------------------* * 注意修改各个ALL中的CASE语句:*FORM f_layout_all .*FORM f_fieldcatalog_all .*FORM f_sort_all .*FORM f_gui_all .*FORM f_show_alv_all .*----------------------------------------------------------------------* IF fagd = 'X'.p_flg_alv = 1.ELSEIF fagdlvc = 'X'.p_flg_alv = 2.ELSEIF fabl = 'X'.p_flg_alv = 3.ENDIF.ENDFORM. " f_check_alv_type*&---------------------------------------------------------------------* *& Form f_layout_all*&---------------------------------------------------------------------* * 各种ALV处理LAYOUT相关设置*----------------------------------------------------------------------* FORM f_layout_all .CASE g_flg_alv.WHEN 1 OR 3.PERFORM f_layout CHANGING wa_layout.WHEN 2.WHEN OTHERS.ENDCASE.ENDFORM. " f_layout_all*&---------------------------------------------------------------------* *& Form f_fieldcatalog_reuse*&---------------------------------------------------------------------* * REUSE_ALV_FIELDCATALOG_MERGE*----------------------------------------------------------------------* * -->P_REPID text* -->P_TABNAME text* <--PT_FIELDCATALOG text*----------------------------------------------------------------------* *form f_fieldcatalog_reuse tables* PT_FIELDCATALOG1 structure wa_alv_fieldcatalogFORM f_fieldcatalog_reuse USING p_repid TYPE sy-repidp_tabname LIKE cns_tabnameCHANGING pt_fieldcatalog LIKEitab_alv_fieldcatalog. *----------------------------------------------------------------------* *即使是注释也不能太长。