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示例程序。
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. *----------------------------------------------------------------------* *即使是注释也不能太长。