ALV总结
- 格式:pdf
- 大小:399.77 KB
- 文档页数:23
主题一:ABAP ALV 总结整理目录一、ALV简介1、简介2、ALV_GRID介绍3、其它描述二、开发ALV的基本流程三、ALV相关开发细节1、标准ALV与对象ALV的共同开发细节2、标准ALV开发相关细节3、对象ALV开发相关细节四、注意事项五、附属信息1、ALV快捷工具栏功能说明(如下图)2、类型SLIS_FIELDCAT_ALV常用参数说明3、类型SLIS_T_SORTINFO_ALV常用参数说明4、类型SLIS_LAYOUT_ALV常用参数说明5、类型SLIS_T_EVENT常用参数说明6、结构LVC_S_FCAT参数说明(清单观察器控制的字段目录)7、结构LVC_S_LAYO参数说明(ALV 控制: 布局结构)8、打印的参数控制请参考结构 [LVC_S_PRNT]9、排序的参数控制请参考结构[LVC_S_SORT]11、'REUSE_ALV_GRID_DISPLAY'函数常用参数12、'REUSE_ALV_LIST_DISPLAY'函数常用参数13、方法"set_table_for_first_display"的参数说明14、方法"REFRESH_TABLE_DISPLAY"的参数说明六、ALV常见问题七、示例程序一、ALV简介1、简介ALV――SAP LIST VIEWER是SAP中的一种报表方式,这里姑且称之为ABAP表单浏览器,用它可以标准化,简单化R/3系统中的表单,它可以提供给用户一个统一的表单格式及用户接口。
ALV是系统的一种网格的显示方式,这种方式带有汇总\排序\筛选等功能,ALV格式的数据是以单元格为单位显示,SAP提供了一套ALV的功能模块,可以对输出报表的样式作修饰,提高报表输出的可读性和功能性,对于动态报表程序是一个很有效率的工具。
ALV家族包含3中ALV工具:简易的,两层ALV,分等级连续的列表和树形结构的ALV。
sap abap屏幕显示调用总结-alv双击打开窗口和弹出窗1)alv及其事件定义CLASS lcl_event_receiver DEFINITION.PUBLIC SECTION.METHODS handle_f4FOR EVENT onf4 OF cl_gui_alv_gridIMPORTING e_fieldnamees_row_noer_event_dataet_bad_cells.METHODS catch_doubleclickFOR EVENT double_click OF cl_gui_alv_gridIMPORTING e_rowe_columnes_row_no .ENDCLASS. "lcl_event_receiver DEFINITION *---------------------------------------------------------------------* * CLASS lcl_event_receiver IMPLEMENTATION*---------------------------------------------------------------------* CLASS lcl_event_receiver IMPLEMENTATION. METHOD handle_f4.PERFORM f4 USING e_fieldnamees_row_noer_event_dataet_bad_cells.ENDMETHOD. "handle_f4 METHOD catch_doubleclick.PERFORM atdoubleclick USING e_rowe_columnes_row_no.ENDMETHOD. "catch_doubleclickENDCLASS. "lcl_event_receiver IMPLEMENTATIONFORM atdoublec lick USING p_e_rowp_e_columnp_es_row_no.* MESSAGE '双击' TYPE 'I'.READ TABLE itab INDEX p_e_row.IF p_e_column = 'EBELN'.SET PARAMETER ID 'BES' FIELD itab-ebeln.CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT' "相应双击事件,根据双击列进行调用相应的方法EXPORTINGi_ebeln = itab-ebelni_enjoy = 'X'.ELSEIF p_e_column = 'LIFNR'.CALL FUNCTION 'MMPUR_VENDOR_DISPLAY'EXPORTINGim_lifnr = itab-lifnrim_ekorg = 'B000'.else.CALL SCREEN 200."(弹出窗口)ENDIF.ENDFORM. " atdoubleclickMODULE status_0100 OUTPUT.SET PF-STATUS 'MAIN200'.gs_variant-report = sy-repid."注册事件到alvIF g_custom_container IS INITIAL.CREATE OBJECT g_custom_containerEXPORTING container_name = g_container.IF go_grid IS INITIAL.CREATE OBJECT go_gridEXPORTINGi_parent = g_custom_container."cl_gui_container=>screen0."CREATE OBJECT event_receiver.SET HANDLER event_receiver->handle_f4 FOR go_grid.CALL METHOD go_grid->register_f4_for_fieldsEXPORTINGit_f4 = gt_f4."gt_f4用于保存产生f4事件的字段SET HANDLER event_receiver->catch_doubleclick FOR go_grid.IF sy-batch IS INITIAL.CALL METHOD go_grid->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_enter.ENDIF.PERFORM load_data_into_grid.ENDIF.ENDIF.ENDMODULE.(2)弹出窗口200显示:CLASS lcl_event_handler DEFINITION.PUBLIC SECTION.CLASS-METHODS:on_close FOR EVENT close OF cl_gui_dialogbox_container IMPORTING sender.ENDCLASS. "lcl_event_handler DEFINITION*----------------------------------------------------------------------** CLASS lcl_event_handler IMPLEMENTATION*----------------------------------------------------------------------* CLASS lcl_event_handler IMPLEMENTATION.METHOD on_close.CALL METHOD sender->free.FREE: con_diabox, l_alv.CALL SCREEN '100'.ENDMETHOD. "on_closeENDCLASS.MODULE STATUS_0200 OUTPUT.SELECT * FROM sflight INTO TABLE lt_sflight.IF con_diabox IS INITIAL.CREATE OBJECT con_diaboxEXPORTINGwidth = 600height = 200top = 70left = 140caption = 'Title'EXCEPTIONSOTHERS = 1.SET HANDLER lcl_event_handler=>on_close FOR con_diabox .CREATE OBJECT l_alvEXPORTINGi_parent = con_diabox.ENDIF.CALL METHOD l_alv->set_table_for_first_display EXPORTINGi_structure_name = 'SFLIGHT'CHANGINGit_outtab = lt_sflight.ENDMODULE.。
一.ALV介绍The ALV Grid Control (ALV =S A P L ist V iewer)是一个显示列表的灵活的工具,它提供了基本功能的列表操作,也可以通过自定义来进行增强,因此可以允许你可以在大型的应用程序中使用.SAP提示: 在SAP的开发项目中,ALV GRID也可以作为修改和创建数据的一种工具,然而,目前这个功能只在实验计划中使用,还没有向客户发布.下面是一个ALV GRID的图片:它包括3大部分,工具栏,标题,用于显示数据的网格控制器.如果有必要,用户可以隐藏标题和工具栏.ALV家族包含3中ALV工具:简易的,两层ALV,分等级连续的列表和树形结构的ALV.二.ALV GRID CONTROL (ALV网格控制器)ALV GRID CONTROL使用了控制器技术以实现艺术性的屏幕显示,象所有的控制器一样,ALV GRID CONTROL法,以响应它的动作.使用了ABAP的对象以后,列表是通过ALV的一个实例(INSTANCE)来显示的,程序员可以使用ABAP对象的事件管理.三.ALV GRID CONTROL 实例ALV GRID实例的定义,参照CL_GUI_ALV_GRID类data ALV_GRID1 type ref to cl_gui_alv_grid.ALV GRID继承结构:四、ALV GRID相关的几个控制结构1.字段目录 [Field catalog]字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.常用的控制字段如下:(下面的示例将说明这些字段的使用,参考STRUCT URE LVC_S_FCAT)93INDX_ROUND 自然数 94INDX_DECML 自然数 95GET_STYLE 字符字段长度 1 96MARK字符字段长度 12.布局控制[layout]布局是用来控制整个ALV 的一个布局,比如ALV 的标题,是否可编辑,行颜色,列颜色.参照ALV 的控制结构[LVC_S_LAYO ],以后的例子我将详细介绍如何设置行颜色和列颜色. 详细的结构说明字段名 描述 Value range CWIDTH_OPT 最优化宽度 SPACE, 'X'SMALLTITLE 小标题,如果设置了这个字段,则标题与列标题大小一样SPACE, 'X'GRID_TITLE 标题,在网格和工具条之间 最长70个字符 NO_HEADERS 如果被设置,列标题隐藏 SPACE, 'X' NO_HGRIDLN 隐藏水平线 SPACE, 'X' NO_MERGING 禁用单元格合并 SPACE, 'X'NO_ROWMARK 如果被设置,选择列在选择模式为D 和A 的时候隐藏SPACE, 'X'NO_TOOLBAR 隐藏工具条 SPACE, 'X' NO_VGRIDLN 隐藏垂直线 SPACE, 'X' SEL_MODE 选择模式 SPACE, 'A', 'B', 'C', 'D' EXCP_CONDS 合计例外 SPACE, 'X' EXCP_FNAME 字段名称带有例外编码 最长30个字符 EXCP_LED 例外作为 LED SPACE, 'X' EXCP_ROLLN 例外文档的数据元素 SPACE, 'X'CTAB_FNAME 带有复杂单元格颜色编码的字段名称最长30个字符INFO_FNAME 带有简单行彩色代码的字段名称 最长30个字符ZEBRA 可选行颜色,如果设置了,出现了间隔色带SPACE, 'X'NO_TOTLINE 没有总计 SPACE, 'X' NUMC_TOTAL 可以对NUMC 字段进行合计 SPACE, 'X'TOTALS_BEF 总计输出在第一行,小计在新的值之前SPACE, 'X'STYLEFNAME 设置单元格,比如PUSHBUTTON 最长30个字符3.打印和排序,过滤控制打印的参数控制请参考结构[LVC_S_PRNT]排序的参数控制请参考结构[LVC_S_SORT]过滤的参数控制请参考结构[LVC_S_FILT]这里不再一一解释,进入中文版本,里面应该也有解释的,虽然一些不是很清楚.五.编写简单的ALV程序.首先这里就不详细介绍DIALOG的用法了.OO的ALV GRID必须存在于一个容器当中,就是FUNCTION的ALV,其实也是一样的,底层也是使用CL_GUI_ALV_GRID这个类的.首先ALV的显示需要有几个先决条件.1,字段目录,这个是必须的,如果没有这个参数,参考一个数据字典也是可以的,就是参数I_STRUCTUR E_NAME.2.存放数据的内表,最好内表的结构和字段目录是一致的,否则可能会出现一些无法预知的错误,当然你说我非要不一样,那也不一定会出现错误.我建议是最好一样的.这2个是必须的,布局的话,应该是可以不设置的,使用默认的就可以了.第一步:创建个SCREEN,在屏幕上创建个容器,CONTAINER.定义变量.DATA:WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,WCL_ALV TYPE REF TO CL_GUI_ALV_GRID .*--- 存放字段目录的内表DATA gt_fieldcat TYPE lvc_t_fcat .*--- 布局结构DATA gs_layout TYPE lvc_s_layo .*----声明需要显示的内表(以SFLIGHT为例)DATA BEGIN OF gt_list OCCURS 0 .INCLUDE STRUCTURE SFLIGHT .DATA END OF gt_list .第二步: 创建ALV这个对象,它的父组件是那个容器.在PBO中写入如下代码:PROCESS BEFORE OUTPUT .MODULE display_alv .创建DISPLAY_ALV的MODULE后,写下如下代码:MODULE display_alv OUTPUT .PERFORM display_alv .ENDMODULE .在FORM DISPLAY_ALV中,判断ALV实例是否存在,如果不存在,则创建:IF WCL_ALV IS INITIAL .CREATE OBJECT: WCL_CONTAINEREXPORTINGCONTAINER_NAME = 'ALV_CON'.CREATE OBJECT WCL_ALVEXPORTINGI_PARENT = WCL_CONTAINER.*-----准备获取字段目录PERFORM prepare_field_catalog CHANGING gt_fieldcat .*-----设置布局PERFORM prepare_layout CHANGING gs_layout .*-----显示ALVCALL METHOD gr_alvgrid->set_table_for_first_display EXPORTING* I_BUFFER_ACTIVE =* I_CONSISTENCY_CHECK =* I_STRUCTURE_NAME =* IS_VARIANT =* I_SAVE =* I_DEFAULT = 'X'is_layout = gs_layout* IS_PRINT =* IT_SPECIAL_GROUPS =* IT_TOOLBAR_EXCLUDING =* IT_HYPERLINK =CHANGINGit_outtab = gt_list[]it_fieldcatalog = gt_fieldcat* IT_SORT =* IT_FILTER =EXCEPTIONSinvalid_parameter_combination = 1program_error = 2too_many_lines = 3OTHERS = 4 .ELSE .*----刷新ALVCALL METHOD gr_alvgrid->refresh_table_display * EXPORTING* IS_STABLE =* I_SOFT_REFRESH =EXCEPTIONSfinished = 1OTHERS = 2 .IF sy-subrc <> 0.*--异常处理ENDIF.ENDIF .方法"set_table_for_first_display"的参数说明I_DEFAULT 决定用户是否可以定义默认的布局:'X' 可以定义默认布局,这个参数是默认的SPACE 不可以定义默认布局IS_LAYOUT布局参数,传递布局控制的一些信息IS_PRINT后台打印属性的参数IT_SPECIAL_GROUPS 如果在字段目录中,一些字段通过SP_GROUP被分组在一起.我们就必须为这些组传递一个组的文本内表进去IT_TOOLBAR_EXCLUDING需要隐藏的标准的按钮的内表IT_HYPERLINK 为每个句柄分配了超连接的内表,LVC_S_HYPE中的HREF存放了超连接的地址,HANDLE指定了句柄,使用这些句柄,你可以在GRID中使用超连接IT_ALV_GRAPHICS 比较复杂,没有用过,意思好象是可以在图表中显示ALV.IT_OUTTAB输出数据存放的内表,数据都是存放在这个内表里IT_FIELDCATALOG字段目录IT_SORT排序的标准IT_FILTER过滤的标准方法"REFRESH_TABLE_DISPLAY"的参数说明参数含义IS_STABLE 刷新的稳定性,有2个参数,一个是行,一个是列.如果设置了相应的值,那么对应的行,或者列,在刷新的时候,将会保持稳定,就是滚动条保持不动.I_SOFT_REFRESH 这个参数只是在异常情况下被使用,如果设置了这个参数,任何创建的合计,任何排序次序,任何为了显示数据而设置的过滤都将保持不变.这个是非常有意义的.例如:当然你没有修改数据内表里的数据而想刷新ALV,仅仅只是改变一下布局和字段目录.第三步,获取要显示数据的字段目录.有两种方式.1.手动创建FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat . DATA ls_fcat type lvc_s_fcat .ls_fcat-fieldname = 'CARRID' .ls_fcat-inttype = 'C' .ls_fcat-outputlen = '3' .ls_fcat-coltext = 'Carrier ID' .ls_fcat-seltext = 'Carrier ID' .APPEND ls_fcat to pt_fieldcat .CLEAR ls_fcat .ls_fcat-fieldname = 'CONNID' .ls_fcat-ref_table = 'SFLIGHT' .ls_fcat-ref_table = 'CONNID' .ls_fcat-outputlen = '3' .ls_fcat-coltext = 'Connection ID' .ls_fcat-seltext = 'Connection ID' .APPEND ls_fcat to pt_fieldcat .ENDFORM .2.半自动的创建FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .DATA ls_fcat type lvc_s_fcat .CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'EXPORTINGi_structure_name = 'SFLIGHT'CHANGINGct_fieldcat = pt_fieldcat[]EXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3.IF sy-subrc <> 0.*--Exception handlingENDIF.LOOP AT pt_fieldcat INTO ls_fcat .CASE pt_fieldcat-fieldname .WHEN 'CARRID' .ls_fcat-outpulen = '10' .ls_fcat-coltext = 'Airline Carrier ID' .MODIFY pt_fieldcat FROM ls_fcat .WHEN 'PAYMENTSUM' .ls_fcat-no_out = 'X' .MODIFY pt_fieldcat FROM ls_fcat .ENDCASE .ENDLOOP .ENDFORM .第四步,设置布局FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.ps_layout-zebra = 'X' .ps_layout-grid_title = 'Flights' .ps_layout-smalltitle = 'X' .ENDFORM. " prepare_layout第五步,排除不需要的标准按钮(可选,这个是第一种方法,还有另外一种,在添加自定义的按钮的时候介绍)在你的ALV上,如果你想排除一些你不想要的标准按钮,你可以把需要排除的按钮填入到表UI_FUNC TIONS中,然后传给set_table_for_first_display方法的参数"IT_TOOLBAR_EXCLUDING".这些按钮的功能码一般都可以通过查看类cl_gui_alv_grid的常量属性中获取到,或者自己加个断点,在after_us er_command事件中.如果你要隐藏全部的工具条,你可以把layout中的no_toolbar设置为"X".FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions .DATA ls_exclude TYPE ui_func.ls_exclude = cl_gui_alv_grid=>mc_fc_maximum .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_fc_minimum .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_fc_subtot .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_fc_sum .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_fc_average .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_mb_sum .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_mb_subtot .ENDFORM .按照上面的步骤,一个ALV的DEMO基本可以创建了.下面我们将讲述一些功能.功能一:在第一次显示以后,修改字段目录和布局.在运行的时候,很有可能需要在显示之后,需要设置一个新的布局或者字段目录.有下面这些方法去实现.字段目录: get_frontend_fieldcatalogset_frontend_fieldcatalog布局:get_frontend_layoutset_frontend_layout使用这些方法,你在执行的任何时候,可以获取这些内容,然后修改他们.DATA ls_fcat TYPE lvc_s_fcat .DATA lt_fcat TYPE lvc_t_fcat .DATA ls_layout TYPE lvc_s_layo .CALL METHOD gr_alvgrid->get_frontend_fieldcatalogIMPORTINGet_fieldcatalog = lt_fcat[] .LOOP AT lt_fcat INTO ls_fcat .IF ls_fcat-fieldname = 'PAYMENTSUM' .ls_fcat-no_out = space .MODIFY lt_fcat FROM ls_fcat .ENDIF .ENDLOOP .CALL METHOD gr_alvgrid->set_frontend_fieldcatalogEXPORTINGit_fieldcatalog = lt_fcat[] .CALL METHOD gr_alvgrid->get_frontend_layoutIMPORTINGes_layout = ls_layout .ls_layout-grid_title = 'Flights (with Payment Sums)' .CALL METHOD gr_alvgrid->set_frontend_layoutEXPORTINGis_layout = ls_layout .功能二:设置排序条件有时候我们需要使用到数据的排序.这个可以通过填充参考结构LVC_T_SORT创建的内表来实现,这个内表中包含了排序的标准.可以传递给set_table_for_first_display这个方法的IT_SORT参数来初始化一个排序.FORM prepare_sort_table CHANGING pt_sort TYPE lvc_t_sort .DATA ls_sort TYPE lvc_s_sort .ls_sort-spos = '1' .ls_sort-fieldname = 'CARRID' .ls_sort-up = 'X' . "A to Zls_sort-down = space .APPEND ls_sort TO pt_sort .ls_sort-spos = '2' .ls_sort-fieldname = 'SEATSOCC' .ls_sort-up = space .ls_sort-down = 'X' . "Z to AAPPEND ls_sort TO pt_sort .ENDFORM. " prepare_sort_table这有2点特别的说明:1.如果这边排序的字段名,不存在于字段目录中,那将出现DUMP.2.排序以后,垂直的网格中,如果出现相同的内容,就会合并,如果要避免,请在布局中设置"no_mer ging"为"X" .你可以通过使用方法“get_sort_criteria” 和“set_sort_criteria”来获取和设置排序的标准.功能三:设置过滤(和排序类似)ALV的标准按钮中已经有过滤的功能,我们也可以在初始显示的时候就设置过滤条件.我们需要把过滤条件填充到参考表类型"LVC_T_FILT"创建的内表中.过滤条件是类似一个RANGES结构的.然后把这个内表传递给方法"SET_TABLE_FOR_FIRST_DISPLAY"中的参数"IT_FILTER"FORM prepare_filter_table CHANGING pt_filt TYPE lvc_t_filt .DATA ls_filt TYPE lvc_s_filt .ls_filt-fieldname = 'FLDATE' .ls_filt-sign = 'E' .ls_filt-option = 'BT' .ls_filt-low = '20030101' .ls_filt-high = '20031231' .APPEND ls_filt TO pt_filt .ENDFORM. " preparefiltertable我们可以使用"get_filter_criteria" 和"set_filter_criteria"来获取过滤条件和设置过滤条件.功能四:选择方式有时候,我们需要选择一些单元格,行或者列,在布局中,有个参数"SEL_MODE"可以设置我们不同的选择方式.下面是参数的介绍.和不同的地方.值模式可能的选择注释SPACE等同于B参考B默认设置'A'行和列的选择,无法选择单元格多行,多列用户可以使用最左边的选择按钮来选择多行'B'单选,不可以多选行,不可以多选单元格多行,多列'C'多选,可以多选行,不可以多选单元格多行,多列'D'单元格的选择,可以多选单元格多行,多列,任何单元格多选用户可以使用最左边的选择按钮来选择多行注意:1.如果你设置了ALV是可编辑的,可能会覆盖你在布局中选择方式的设置的.2.设置了选择方式以后,我们可以使用很多方法来获取用户的选择.比如"GET_SELECTED _CELLS","GET_SELECTED_CELLS_ID","GET_SELECTED_ROWS","GET_SEL ECTED_COLUMNS"3.在执行PAI以后,用户所选择的单元格,行或者列可能丢失.你可以在PBO中,使用对应的S ET方法来恢复这些选择.功能五:颜色设置有的时候,我们需要在ALV网格上绘上一些颜色.可以给特定的行,某个特定的列,某个特定的单元格绘制颜色.如果某列被设置为关键列,这列的颜色将被自动绘制,而不需要我们额外的指定.先介绍ALV里色码.就是颜色编码,4位CHAR型.Cx y z---Color | | || 1/0: 相反开/关1/0: 强化开/关其中C是固定的第一位,第二位代表是颜色编码(1到7),第三位是加强的设置,第四位是相反,人理解,在强化关闭的情况下,相反的作用是背景和字体的变化.颜色编码:x颜色主要使用在1Gray-blue headers2Light gray List bodies3yellow totals4Blue-green Key columns5green Positive threshold value6red Negative threshold value7orange Control levelsA)设置列的颜色.我们可以通过字段目录的"emphasize"控制字段来控制某列的颜色.这个字段同样是4位的CHAR型,传入上述的颜色编码.例如:LS_FCAT-EMPHASIZE = 'C701'.如果这列被设置为关键列,就是 LS_FCAT-KEY = 'X' ,那么颜色设置就不会起作用.请注意,自动产生的字段目录中,KEY的设置是自动获取的.B)设置行的颜色为某行设置颜色,是有点复杂的,我们需要在要显示的数据内表中增加一个字段,这个字段不需要在字段目录中存在.同样,这个字段也是4位的CHAR型,符合颜色编码的定义.那我们就需要这样来定义我们的数据内表:DATA BEGIN OF gt_list OCCURS 0 .INCLUDE STRUCTURE SFLIGHT .DATA rowcolor(4) TYPE c .DATA END OF gt_list .很明显,填入颜色编码以后,ALV怎么知道它是我们用来设置颜色的呢,在布局中,有个控制字段"INFO_FNAME",我们可以设置这个字段来告诉ALV,我们的颜色字段是哪个.ps_layout-info_fname = 'ROWCOLOR'.请注意,这个字段随便你起名字,但是记住,一定是数据内表里的字段,一定要大写.你可以在任何时候设置行的颜色,只需要去修改内表里的这个字段的值,但是记得一定要刷新以后才起作用.C)设置单元格的颜色设置单元格和设置行的颜色,本质上没有什么大的区别,但是定位单元格需要2个参数.我们需要在数据内表中插入一个表类型的字段,这样我们的数据内表就变成了DEEP结构了,不过ALV是可以处理的.不需要担心.插入的这个表类型的类型为"LVC_T_SCOL".里面有3个参数:FNAME告诉我们你需要设置的是哪个字段,如果为空,然后直接在COLOR中设置颜色,就是整行设置为这个颜色.如果具体到某个单元格,必须指定是哪个字段.COLOR字段是用来设置颜色的.NOKEYCOL字段比较关键了.设置为关键列的一些字段,我们的颜色设置可能被覆盖.通过这个字段的设置,可以避免被关键列覆盖.同样,ALV在布局中有个字段"CTAB_FNAME"告诉我们,数据内表中,哪个字段是用来设置单元格的颜色的.DATA BEGIN OF gt_list OCCURS 0 .INCLUDE STRUCTURE SFLIGHT .DATA rowcolor(4) TYPE c .DATA cellcolors TYPE lvc_t_scol .DATA END OF gt_list .DATA ls_cellcolor TYPE lvc_s_scol ....READ TABLE gt_list INDEX 5 .ls_cellcolor-fname = 'SEATSOCC' .ls_cellcolor-color-col = '7' .ls_cellcolor-color-int = '1' .APPEND ls_cellcolor TO gt_list-cellcolors .MODIFY gt_list INDEX 5 .注意:颜色设置中有优先级顺序,他们是单元格--->行--->列.功能六:插入超链接插入超链接是通过一个含有超级链接和句柄的表来实现的.这个表类型为"LVC_T_HYPE" ,句柄是一个INT4类型的字段,我们需要在数据显示的内表中,加入这样的字段,来告诉ALV,我们的字段指定的句柄,从而找到对应的超级链接.在字段目录中,WEB_FIELD是用来指定对应的句柄名的.下面举个例子来说明,我们要为字段CARRID,CONNID建立超级链接:首先,内表定义中,我们加入2个句柄字段:DATA BEGIN OF gt_list OCCURS 0 .INCLUDE STRUCTURE SFLIGHT .DATA rowcolor(4) TYPE c .DATA cellcolors TYPE lvc_t_scol .DATA carrid_handle TYPE int4 .DATA connid_handle TYPE int4 .DATA END OF gt_list .第二: 建立一个超级链接内表,里面存放句柄所对应的超级链接.创建的时候注意,它参考的表类型,一定是"LVC_T_HYPE".FORM prepare_hyperlinks_table CHANGING pt_hype TYPE lvc_t_hype . DATA ls_hype TYPE lvc_s_hype .ls_hype-handle = '1' .ls_hype-href = '/carrids/car1' .APPEND ls_hype TO pt_hype .ls_hype-handle = '2' .ls_hype-href = '/carrids/car1' .APPEND ls_hype TO pt_hype .ls_hype-handle = '3' .ls_hype-href = '/carrids/car1' .APPEND ls_hype TO pt_hype .ls_hype-handle = '4' .ls_hype-href = '/connids/con11' .APPEND ls_hype TO pt_hype .ls_hype-handle = '5' .ls_hype-href = '/connids/con12'APPEND ls_hype TO pt_hype ... ..ENDFORM .第三.通过字段目录FIELDCATLOG来指定相应的句柄字段.对于CARRID的field catalogLs_fieldcat-web_field = ‘CARRID_HANDLE’.对于CONNID的field catalogLs_fieldcat-web_field = ‘CONNID_HANDLE’.在方法"SET_TABLE_FOR_FIRST_DISPLAY"中把句柄内表传给参数it_hyperlink。
(Illustrator)学习总结报告(精选五篇)第一篇:(Illustrator)学习总结报告《图形设计(Illustrator)》学习总结报告姓名:******学号:******班级:任课教师:递交日期:201*/**/**图形设计(Illustrator)总结报告学习Illustrator有两个月,在我看来它是一款强大的设计绘画软件,在平面广告设计这方面运用的非常多。
这段期间,可以说我学到了不少东西,但是我又不得不承认还有很多东西我还没有学到。
两个月真的学不到太多的东西,更多的要靠自己在课后努力琢磨,而认真研究一种东西才能真正体现一个人的能力。
都是Adobe公司的产品,有变化但是差距都不大,所以学起来不是很难。
我是从学习Photoshop后,因为课程需要才开始接触Illustrator 的。
Illustrator和Adobe公司其他产品在操作上有点小小的差别,主要是在快捷键上。
由于键位的小小改动,所以在使用Illustrator时还保留Photoshop的习惯,以至于使用起来老感觉不对劲。
接下来我就说一下我学习的一些内容和基本情况。
Illustrator的工作界面和photoshop差不多。
在学习内容方面,学习了文件的新建与保存;工具的选择与切换;部分快捷键的使用;直线、选框、钢笔工具绘制简单的图形;色彩的调和与填充;图层的排列、变换、编组、粘贴;滤镜的使用。
然后练习部分有信纸、标志、插画、图标以及特殊图形的绘制等。
基本上学习的东西都能使用上。
以制作信纸为例,我说一下我的制作过程和心得。
新建一个信纸命名的文档,然后用矩形工具绘制一个跟画板大小一样的矩形,最好是使用渐变填充一个喜欢的颜色来作为背景色,在使用ctrl+2将制作的背景锁定在画板上,接下来就是绘制一下喜欢的图案(如花草,星星等)。
绘制图案可以直接使用钢笔工具来完成,但如果你控制不好的话,可以使用几种选框工具来绘制合适的图形,组合成你需要的图案,如利用椭圆工具加循环旋转来绘制花朵,利用多边形工具绘制五角星等。
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来对客户数据进行分类汇总。
函数alvalv 函数是一个编程中常用的函数,它可以实现各种功能,包括数学计算、字符串操作以及数组处理等等。
本篇文章主要介绍alv函数的使用及其相关内容。
一、函数alv的基本介绍在编程中,alv函数是语言中的一个函数,可以理解为某个子程序或功能模块。
它通常包含有输入和输出两个部分,可以接受相关参数进行运算和处理,返回相应的结果。
在其他程序中调用alv函数可以充分利用已经实现好的代码模块,提高开发效率。
二、alv函数的常用操作常用的alv函数包括数学函数、字符串函数、日期与时间函数以及数组函数等。
1.数学函数:alv函数的数学计算功能包括各种常见数学运算,如加减乘除、取绝对值、幂函数、求余数、求最大最小值、取整数等等。
数学函数在数值计算、统计分析等领域应用广泛。
例如,alv函数可以通过以下方式实现求和运算:data: r(3) type i value 3.call function 'ALV_HIERARCHY_SUM'exportingi_mode = 1it_table = ri_fieldname = 'FIELD'importinge_value = sum.2.字符串函数:alv函数的字符串操作功能包括字符串连接、分隔、截取、查找替换等。
字符串函数在文本处理、数据清洗等领域应用广泛。
3.日期与时间函数:alv函数的日期与时间操作功能包括日期时间格式化、计算与比较、日期时间转换等。
日期时间函数在时间戳处理、时区转换、日历计算等领域应用广泛。
由于alv函数是经过封装的代码模块,其具有高通用性、可重复使用、易维护等优势。
1.高通用性。
alv函数可以适用于不同编程语言和不同平台,使得代码的移植和集成更加便捷。
2.可重复使用。
开发者只需按需调用alv函数,无需每次重复编写相同的功能代码,从而提高开发效率和可维护性。
3.易维护。
alv函数的封装使得代码更加清晰、简洁,易于维护,有助于减少代码出错概率,提高代码可读性。
1)颜色含义1:海蓝;2:浅清;3:黄色;4:浅蓝;5:青色;6:红色;7:橙色。
(1)首位为主颜色;(2)次位为辅助颜色;(3)末位为0时,表示首位数字表为表格的底色;末位为1时,则表示以1为底色,首位数字则表为表格字体的颜色;末位为其它颜色时,则表示底色为ALV的默认颜色;以上三条是本人大概总结出来的规律,本人发现的现象基本如上,但也不一定全部正确。
其中C200与系统标准ALV底色比较相似;C410与系统标准关键字颜色比较相似。
2)列颜色:设置ALV字段fieldcat属性:i_fieldcat-emphasize = &3. "颜色把fieldcat属性写入属性内表allfields:alv_append_field 'WERKS' '工厂' 'C110'.C110:为颜色代码; 3)行颜色:(1)在内表itab定义一个字段line_color来存储颜色;loop内表itab,在需要显示颜色的行其值赋为颜色'C110';(2)在定义alv显示格式定义:设置ALV显示layout属性:i_layout-info_fieldname = 'LINE_COLOR',line_color为内表定义的存储颜色的列名。
4)单元格颜色单元格颜色属性:LVC_S_SCOL,该属性为一结构,含三个字段:FNAME(30)、COLOR(颜色结构,含三个字段:col(10)、int(3)、inv(10))、NOKEYCOL(1)(覆盖码颜色)ALV列属性: coltab_fieldnameexa:定义内表itab含字段FLDNAME type LVC_S_SCOL;定义单元格颜色结构cellcolor type LVC_S_SCOL;循环内表,当要设置单元格颜色所在的列字段colname要设置颜色时fldname-FNA ME = ‘COLNAME’fldname-COLOR-col = ‘2’(颜色代码)fldname-COLOR-int = ‘1’fldname-COLOR-inv = ‘0’。
ALV Simple Introduction一、ALV相关概念ALV――ALV = SAP List Viewer,这里我们姑且称之为ABAP表单浏览器,用它可以标准化,简单化R/3系统中的表单,它可以提供给用户一个统一的表单格式以及用户接口。
二、结合一个具体的实例来看ALV的功能首先我们看下图中的这个ALV的布局(这是一般ALV程序表单的典型布局):根据上面对ALV的直观形象,下面将屏幕上的区域划分成几块,分别来解释它的作用:1.快捷工具栏(如下图)细节按钮,你首先必须选中列表中的一行,然后点击它的话,就会弹出一个窗口,显示选中行的细节内容。
(另外:你双击你要选择的行,也可以显示细节)按升序排列,首先选中一列,然后再点击它,就可以看到该列是按照升序重新排列。
按降序排列,首先选中一列,然后再点击它,就可以看到该列是按照降序重新排列。
设置过滤器,通过设置它可以达到筛选的目的,以列名称作为筛选的筛选标准,填入过滤器相应的标准值,然后就可以筛选出满足自己条件的记录。
打印预览,点击它之后,就可以预览一下将要打印内容的布局情况。
Microsoft Excel,调用MS的Excel到当前ALV的列表显示区域。
(前提:必须安装了MS的Excel)字处理,字处理的相关设置。
本地文件,将当前表单存储到本地机器上,有几种供选择的存储格式。
邮件收件人,给系统内用户发邮件图形,点击它可以根据表单情况绘制相关图表。
更改布局,点击它可以对表单中的列项目排列次序的互换,删减等。
选择布局,从已经保存的布局中选择自己满意的布局。
保存布局,对于自己满意的布局,可以通过点击它来将布局保存起来。
2.表单标题区这个区域主要是用来显示一些抬头信息(总揽信息),类似于WORD中的页眉。
我们在使用的时候根据需要来进行相关填写。
3.表单显示区这个区域主要是用来显示我们通过代码筛选出来的数据,相关的操作在下面的程序编写部分详细介绍。
三、程序的编写1.写一个ALV程序的基本流程:第一步:定义将要用到的表,即TALBES定义部分,然后定义TYPE-POOLS: SLIS.第二步:定义第一步中提到的这些数据类型或者内表的实体对象第三步:定义一些需要用到的变量第四步:定义自己的选择屏幕第五步:start-of-selection部分○1用一个子函数完成自己所需要数据的抓取○2用一个子函数完成要显示列表的列名行(第一行)的相关赋值(i_fieldcat_alv)以及设置○3用一个子函数完成输出格式的设置(i_layout),比如双击一条记录是否弹出对话框啊?是用哪个功能键触发等等○4用一个子函数FORM DISPLAY_DATA来显示上面我们已经分别封装好的数据,需要调用两个常用的FUNCTION MODULE:FUNCTION 'REUSE_ALV_GRID_DISPLAY' “用来显示表单数据FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' “用来显示表单标题2.在我们写ALV程序的时候,有一个类型组是肯定要用到的:TYPE-POOLS:SLIS。
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帮助的字段值后,自动填充相关字段信息、触发特定的逻辑处理等。
al工作总结
AL工作总结。
在过去的一段时间里,我有幸参与了公司的AL工作。
通过这段时间的工作,
我不仅学到了很多新知识,也收获了很多宝贵的经验。
在这篇文章中,我将对我的AL工作进行总结,并分享一些心得体会。
首先,AL工作对于我来说是一次挑战和机遇。
在这个岗位上,我需要不断地
学习和探索,以应对日益复杂的市场环境和客户需求。
在这个过程中,我学会了如何运用AL技术来提升产品的质量和效率,以及如何与团队合作,共同解决问题和
实现目标。
其次,AL工作也让我更加深入地了解了公司的业务和发展方向。
通过与不同
部门的同事合作,我了解了公司的整体运作和各个部门的职能,这不仅帮助我更好地理解自己的工作,也为我未来的职业发展提供了更广阔的空间。
最后,AL工作也让我更加自信和成熟。
在这个岗位上,我需要不断地面对挑
战和压力,不断地克服困难和提升自己。
通过这个过程,我变得更加坚定和自信,也更加成熟和理性。
总的来说,AL工作对我来说是一次宝贵的经历。
通过这段时间的工作,我不
仅学到了很多新知识,也收获了很多宝贵的经验。
我相信,这段经历将成为我未来职业发展的宝贵财富,也将成为我人生道路上的一份宝贵的财富。
感谢公司给予我这次机会,让我能够在AL工作中不断成长和进步。
我期待着未来,也会继续努力,为公司的发展贡献自己的力量。
本文转自:/154887844.htmlAlv 总结目录1.将得到并整理好的数据以ALV的形式显示出来 41.1.在子FORM(这里如:F_FIELDS)指定需要显示的字段 41.2.在子FORM(这里如:F_BUILD_LAYOUT)里设置ALV的全局属性 4 1.3.在子FORM(这里如:F_DISPLAY)里将内表中的数据进行显示 51.4.为ALV程序添加表头标题(这里以添加HTML表头标题为主) 51.4.1. 在显示ALV的函数(REUSE_ALV_GRID_DISPLAY_LVC)里添加一个参数 51.4.2. 在子FORM(F_TOP_OF_PAGE)里定义好需要的变量 51.4.3. 准备好所需数据,如登录用户的描述、制表日期等 61.4.4. 将表头数据输出 62.函数"REUSE_ALV_GRID_DISPLAY_LVC"中输入参数的应用 72.1.排序 72.1.1. 在显示ALV的子FORM里定义排序用到的变量 72.1.2. 设置好需要排序的字段 82.1.3. 在显示ALV的函数的输入参数里添加排序的属性 82.2.隐藏不必要的标准按钮 82.2.1. 先在显示ALV的子FORM里定义隐藏按钮用到的变量 82.2.2. 得到需要隐藏的标准按钮的"FCODE" 82.3.自定义"工具栏" 92.3.1. 在显示ALV的函数的输入参数里指定自定义按钮的子FORM 93.热点链接、用户动作的捕捉、调用其他程序或标准事务程序 113.1.在显示ALV的函数的输入参数里指定捕捉用户动作的子FORM 113.2.在"字段和列名"的子FORM(F_FIELDS)里,对需要链接的列添加"热点"属性 113.3.操作代码 113.4.显示具体细节 123.5.调用其他事务 143.6.打开并选择文件: 144.关于设置字段和列名的子FORM(F_FIELDS)的参数设置: 154.1.单列优化宽度 154.2.单列求和或者取消求和,添加属性 154.3.对其方式 154.4.作为图标输出 164.5.固定列和关键列 164.6.列的字符宽度 165.单元格的F1、F4帮助: 175.1. F1帮助: 175.2. F4帮助: 176.输入并保存、回调修改内表(输入时的小数位错位的问题、指定数据类型、小说位数) 177.界面颜色的更改 187.1.更改单元格(字体)的前景、背景颜色 197.2.更改行的颜色和列的颜色: 197.3.利用设置字段和列名子的FORM(F_FIELDS)里来设置列的颜色 208. ALV自带的最左端复选框按钮和自定义复选框按钮 208.1. ALV自带的复选框按钮: 208.2.自定义复选框按钮 209.按照上传的模板格式导出为本地文件 219.1.定义导出为EXCEL用到的数据变量 219.2.上传模板 219.3.代码 2210.为ALV标题添加图片 2610.1.上传图片 2610.2.在子FORM(F_TOP_OF_PAGE2)里的代码 27ALV:SAP LIST VIEW,一种比较美观的报表显示工具ALV用到的函数,目前我们有2个:REUSE_ALV_GRID_DISPLAY、REUSE_ALV_GRID_DISPLAY_LVC;两个函数都可以将数据用ALV的形式显示出来,只是方在一些小的地方有些不同。
其中第两个函数都用到的全局变量为:1个类型池SLIS和一个指定列数的变量DATA: v_pos TYPE i . " 指定第几列第1个函数用到的全局变量如下:DATA: wa_fieldcat TYPE slis_fieldcat_alv , " 相当于工作区i_fieldcat TYPE slis_t_fieldcat_alv , " 存放列名的捏表i_layout TYPE slis_layout_alv . " 负责整个ALV的全局属性第2个函数用到的全局变量:DATA: wa_fieldcat TYPE lvc_s_fcat , " 相当于工作区i_fieldcat TYPE lvc_t_fcat , " 存放列名的捏表i_layout TYPE lvc_s_layo . " 负责整个ALV的全局属性下面以第2个函数(REUSE_ALV_GRID_DISPLAY_LVC)来介绍ALV的用法;1. 将得到并整理好的数据以ALV的形式显示出来1.1. 在子FORM(这里如:F_FIELDS)指定需要显示的字段v_pos = v_pos + 1 .wa_fieldcat -col_pos = v_pos . " 指定列数wa_fieldcat -fieldname = 'PSPID' . " 需要输出的内表的字段名wa_fieldcat -scrtext_l = '项目定义 '. " 字段的描述-长字段标签wa_fieldcat scrtext_m = '项目定义 '. " 字段描述-中字段标签wa_fieldcat -scrtext_s = '项目定义 '. " 字段描述-短字段标签wa_fieldcat -fix_column = 'X' . " 是否是固定列APPEND wa_fieldcat TO i_fieldcat_lvc .CLEAR wa_fieldcat .这样逐步的将需要显示的字段都添加到内表i_fieldcat中;1.2. 在子FORM(这里如:F_BUILD_LAYOUT)里设置ALV的全局属性i_layout_lvc-zebra = 'X' . " 使ALV界面呈现颜色交替i_layout_lvc-sel_mode = 'A' . " 选择模式,"A"在最左端有选择按钮i_layout_lvc-cwidth_opt = 'X' . " 自动优化列宽i_layout_lvc-detailinit = 'X' . " 是否出现细节屏幕i_layout_lvc-detailtitl = '详细内容' . " 细节屏幕标题1.3. 在子FORM(这里如:F_DISPLAY)里将内表中的数据进行显示CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repid " 当前程序is_layout_lvc = i_layout_lvc " 属性内表it_fieldcat_lvc = i_fieldcat_lvc[] " 列明内表i_save = 'X' " 是否保存布局TABLESt_outtab = i_tab " 数据内表EXCEPTIONSprogram_error = 1OTHERS = 2.通过这一步后,一个基本的ALV程序就完成了;下面是对ALV程序的优化和扩展。
1.4. 为ALV程序添加表头标题(这里以添加HTML 表头标题为主)1.4.1. 在显示ALV的函数(REUSE_ALV_GRID_DISPLAY_LVC)里添加一个参数i_callback_html_top_of_page = 'F_TOP_OF_PAGE'其中"F_TOP_OF_PAGE"是书写ALV表头标题的子FORM,只是在这里使用,没有明显的"PERFORM"调用,如下:FORM f_top_of_page USING p_cl_dd TYPE REF TO cl_dd_document.1.4.2. 在子FORM(F_TOP_OF_PAGE)里定义好需要的变量 " 定义登录用户的描述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 .1.4.3. 准备好所需数据,如登录用户的描述、制表日期等" 得到登录用户的描述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 .1.4.4. 将表头数据输出" 开始输出表头标题m_buffer = '<HTML><CENTER><H1>ALV测试</H1></CENTER></HTML>' . CALL METHOD p_cl_dd->html_insertEXPORTINGcontents = m_bufferCHANGINGposition = m_p." 输出制表人和制表日期CONCATENATE '<P ALIGN = CENTER >出表人:' l_name'                  ''                  ''                  ''                  ''                  ''                  ''出表日期:' l_date INTO m_buffer .CALL METHOD p_cl_dd->html_insertEXPORTINGcontents = m_bufferCHANGINGposition = m_p.现将需要显示的表头数据放到变量"M_BUFFER"中,然后调用方法"P_CL_DD->HEML_INSERT"将数据插入到HTML页面中显示,至此显示表头数据完成;2. 函数"REUSE_ALV_GRID_DISPLAY_LVC"中输入参数的应用2.1. 排序排序之前,如果同一列有相同的数据,则排好序以后,在该列会自动将相同的数据合并为一行显示,不再出现多行重复的情况(但是若该ALV中有字段设置了"可编辑",合并这一现象会失效),步骤如下:2.1.1. 在显示ALV的子FORM里定义排序用到的变量" 定义排序变量DATA: wa_sort_lvc TYPE lvc_s_sort ,it_sort_lvc TYPE lvc_t_sort .2.1.2. 设置好需要排序的字段" 设置排序参数wa_sort_lvc-spos = 1 . " 排序顺序wa_sort_lvc-fieldname = 'CITYFROM' . " 排序字段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 = 'CITYTO' . " 排序字段wa_sort_lvc-up = 'X' . " 升序APPEND wa_sort_lvc TO it_sort_lvc .CLEAR wa_sort_lvc .2.1.3. 在显示ALV的函数的输入参数里添加排序的属性it_sort_lvc = it_sort_lvc2.2. 隐藏不必要的标准按钮2.2.1. 先在显示ALV的子FORM里定义隐藏按钮用到的变量" 定义隐藏标准按钮的变量DATA: wa_excluding TYPE slis_t_extab ,it_excluding TYPE slis_extab .2.2.2. 得到需要隐藏的标准按钮的"FCODE"首先用事务码"SE24"进入SAP的"类别制作器",在"Object type"后面输入ALV的类"CL_GUI_ALV_GRID",点击"Display"进入显示界面,点击"Attributes"选项卡,找到自己需要的"属性"和"初始值",这个初始值就是我们要找的标准按钮的"FCODE"(注意:每一个标准按钮代表的FCODE是靠经验积累而掌握的);1.、设将需要隐藏的标准按钮的"FCODE"添加到内表IT_EXCLUDING中,代码如下:" 设置要隐藏的按钮的"FCODE"wa_excluding-fcode = '&ABC' .APPEND wa_excluding TO it_excluding .2.、在显示ALV的函数的输入参数里添加隐藏按钮的属性参数:it_excluding = it_excluding1.ALV标题,定义标题变量并赋值,然后在显示ALV的函数的输入参数里添加"小标题"的参数,代码如下:" 小标题DATA: i_grid_title TYPE lvc_title .i_grid_title = '小标题' .**********************************i_grid_title = i_grid_title2.3. 自定义"工具栏"2.3.1. 在显示ALV的函数的输入参数里指定自定义按钮的子FORMi_callback_pf_status_set = 'F_SET_STATUS'当然该子FORM和产生表头的子FORM一样,也不显式的调用,代码如下:FORM f_set_status USING p_extab TYPE slis_t_extab .SET PF-STATUS 'Z_ALV_STATUS' .ENDFORM. " f_set_status双击其中的"Z_ALV_STATUS",进入创建工具栏的界面,输入名字后进入最终的界面在界面右侧,点击"应用工具条"后面的展开符号,在"项目"后面的白色方框内输入"自定义按钮"的代码后回车,选择静态文本回车,在"函数文本"后面输入想要显示的按钮的名称,在"图标名称"后面选择相应的图标(可选),回车在这一界面选择一个"快捷键"(必填)后回车,这样一个自定义按钮就做好了,也可以修改,记住刚刚创建的按钮的代码,在下面的捕捉用户的动作的自FORM(F_USER_COMMAND)会根据刚才的代码来进行相应的操作;1.点开"功能键"后面的展开符号,进入功能键的设置,下图是各个动作对应的代码:2.没有自定义按钮时候,函数里的"i_callback_pf_status_set = 'F_SET_STATUS'"这个参数可以不要,这时会显示ALV标准的按钮,当然这些按钮可以部分隐藏(见三、2);3.当我们使用自定义按钮后,ALV自带的标准按钮,就会失效,这时我们需要将一些用户要求我们必须显示的按钮一一地在"应用工具条"后面补上,如下图:3.1.在显示ALV的函数的输入参数里指定捕捉用户动作的子FORMFORM f_user_command USING p_ucomm TYPE sy-ucommp_rs_selfield TYPE slis_selfield .当然该子FORM和产生表头的子FORM一样,也不显式的调用;3.2.在"字段和列名"的子FORM(F_FIELDS)里,对需要链接的列添加"热点"属性v_pos = v_pos + 1 .wa_fieldcat-col_pos = v_pos .wa_fieldcat-fieldname = 'CITYFROM' .wa_fieldcat-scrtext_l = '起飞城市' .wa_fieldcat-fix_column = 'X' .wa_fieldcat-hotspot = 'X' . " 热点,链接用APPEND wa_fieldcat TO i_fieldcat .CLEAR wa_fieldcat .这样在显式界面上"起飞城市"所代表的字段"CITYFROM"的下面就会出现一条下划线,同时当鼠标移动到该列时,就会变成"等待"的手势,当用户单击每一条时,就会触动子FORM (F_USER_COMMAND)中的动作,进而引起某些操作;3.3. 操作代码对于热点链接,所对应的动作码为"&IC1",在子FORM(F_USER_COMMAND)中捕捉用户的动作,并进行相应的操作,代码如下:FORM f_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 f_show_detail USING p_rs_selfield . " 显示具体细节ENDIF.ELSEIF p_rs_selfield-fieldname EQ 'TCODE' .IF NOT wa_tab-tcode IS INITIAL .PERFORM f_call_tran USING p_rs_selfield . " 调用其他事务ENDIF .ELSEIF p_rs_selfield-fieldname EQ 'ICON_FOLDER' .PERFORM f_open_folder USING p_rs_selfield . " 打开文件ENDIF.CLEAR wa_tab .WHEN '&SAVE_DATA' .PERFORM f_save_data . " 保存数据WHEN 'PRINT' .PERFORM f_print_data. " 打印数据WHEN 'EXCEL' .PERFORM f_export . " 导出数据ENDCASE.p_rs_selfield-refresh = 'X' . " 当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新ENDFORM. " f_user_command3.4. 显示具体细节1.、先定义一个存放具体内容的内表并整理好相关数据;2.、调用一个指定大小的屏幕来显示具体的内容,代码如下:CALL SCREEN 0100 STARTING AT 12 12 ENDING AT 137 24 .3.、双击该屏幕号码"0100"创建该屏幕,在"属性"卡输入该屏幕的描述,在"逻辑流"卡里将系统默认注释掉的PBO、PAI事件的模块取消注释并产生这两个模块(双击并确定);4.、在"屏幕制作器"界面点击进入"屏幕制作器"的图形界面,开始绘制我们需要的屏幕元素,这里我们需要一个"表控制"(最左边从下数第四个元素),该表格的属性设置为:名称:起始行列和高宽上图表示"列标题"为"具体内容",可以水平或垂直的调节大小,有水平和垂直的分隔符,只能同时选中一行一列,带选择列(DE_BOX),最左端两列固定不滚动;5.、接下来给单元格和列标题名称并给单元格指定内表的字段,6.、屏幕的PBO、PAI事件的代码如下:PROCESS BEFORE OUTPUT.MODULE status_0100.LOOP AT i_detail INTO wa_detailWITH CONTROL vs_detail CURSOR i_detail-current_line .ENDLOOP.*PROCESS AFTER INPUT.LOOP AT i_detail .ENDLOOP.MODULE user_command_0100.7.、需要在定义变量的时候声明一下表控制和动作的接受者(OK_CODE)如下:* 表控制IS_MATNRCONTROLS vs_detail TYPE TABLEVIEW USING SCREEN 0100 ." 利用同名传递原理,来接受细节屏幕上的元素"ok_code"的值DATA: ok_code TYPE sy-ucomm .8."MODULE status_0100."的代码如下:MODULE status_0100 OUTPUT.SET PF-STATUS '0100' .DESCRIBE TABLE i_detail LINES vs_detail-current_line .ENDMODULE. " status_0100 OUTPUT在"0100"的工具栏里,只设置即可满足需求;"MODULE user_command_0100."的代码如下:MODULE user_command_0100 INPUT.CASE ok_code.WHEN 'BACK' .SET SCREEN 0 . " 返回主屏幕ENDCASE.ENDMODULE. " user_command_0100 INPUT完成调用细节屏幕;注意:在显示细节屏幕的字段的类型上,当内表中有数据为货币类型的时候,要在"格式"里指明该字段是货币类型的数据,如下图:3.5. 调用其他事务FORM f_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. " f_call_tran"LIB"是指参数ID,查找方法:用一个事务码进入事务界面,在输入框内按F1,在弹出来的界面中点击,新界面中的就是参数ID;"SE37"是指我们要调用的事务代码,"AND SKIP FIRST SCREEN"表示跳过第一屏屏幕;3.6. 打开并选择文件:1.、现则内表中定义好存放文件路径的字段(这里是FILE_PATH),当用户点击界面上设置好的打开文件图标时,就会触发子FORM(F_USER_COMMAND)里的打开文件的子FORM (F_OPEN_FOLDER);2.子FORM(F_OPEN_FOLDER)的代码如下:FORM f_open_folder USING p_rs_selfield TYPE slis_selfield .DATA: l_file_path LIKE rlgrap-filename .CALL FUNCTION 'WS_FILENAME_GET'EXPORTINGmode = 'O'title = '选择文件'IMPORTINGfilename = l_file_pathEXCEPTIONSinv_winsys = 1no_batch = 2selection_cancel = 3selection_error = 4OTHERS = 5.IF sy-subrc = 0.wa_tab-file_path = l_file_path . " 将得到的文件的路径赋给当前行的路径MODIFY i_tab INDEX wa_tab-numer FROM wa_tab TRANSPORTING file_path .CLEAR l_file_path .ELSE .MESSAGE s000 WITH '没有选择文件' .ENDIF.ENDFORM. " f_open_folder4. 关于设置字段和列名的子FORM(F_FIELDS)的参数设置:4.1. 单列优化宽度当在子FORM(F_BUILD_LAYOUT)里没有指明全局优化列宽的时候,在需要指定优化的字段的属性里指定下列属性就可以单列优化了,wa_fieldcat-col_opt = 'X' .4.2. 单列求和或者取消求和,添加属性wa_fieldcat-do_sum = 'X' . " 求和wa_fieldcat-no_sum = 'X' . " 取消求和如果此时在子FORM(F_BUILD_LAYOUT)里添加下列属性,则求和后的行就会在第一行出现:i_layout-totals_bef = 'X' .4.3. 对其方式wa_fieldcat-just = 'L' . " 左对齐wa_fieldcat-just = 'C' . " 居中对齐wa_fieldcat-just = 'R' . " 右对齐当然,在不指明对其方式的前提下,ABAP的各种数据类型优默认的对其方式,其中字符串是默认为左对齐,而货币、数量默认为右对齐;4.4. 作为图标输出1.、首先在开始包含进一个包括,如下:" 包含图标等在内的一些信息INCLUDE <list> .2.、然后在内表中定义一个代表图标的字段(这里如ICON_FOLDER),在整理数据的时候,需要将代表图标的代码赋给给字段,如下" 图标wa_banfn-icon_folder = icon_object_folder .3.、接着在子FORM(F_FIELDS)里给需要图标显示的列添加下列属性:v_pos = v_pos + 1 .wa_fieldcat-col_pos = v_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"进入后左边第二列就是图标代码,根据需要进行选择;4.5. 固定列和关键列两者都可以使具有该属性的列固定不滚动,但是前者不改变该列的颜色,而后者会将该列的颜色弄成一色,不容易确认,但它具有其他的功能,代码如下:wa_fieldcat-fix_column = 'X' . " 固定列wa_fieldcat-key = 'X' . " 关键列4.6. 列的字符宽度可以明显地指明该列的输出宽度,属性代码如下:wa_fieldcat-outputlen = 10 . " 输出宽度列抬头的工具提示,在列的属性添加下列参数,当用户将鼠标放到列名上时,可以显示"提示"2字,代码如下:wa_fieldcat-tooltip = '提示' .5. 单元格的F1、F4帮助:5.1. F1帮助:1.、在子FORM(F_FIELDS)里列的属性添加"数据元素"这一属性,代码如下:wa_fieldcat-rollname = 'PS_PSPID' . " 指定数据元素就可以在ALV的显示界面将鼠标放到该字段的位置后按F1会弹出该字段的说明;2.、指定数据元素之后,可以不指明字段的描述(如SCRTEXT_L、SCRTEXT_M、SCRTEXT_S),函数会自动将字段的描述显示,但是没有自己指定的灵活5.2. F4帮助:1.、在子FORM(F_FIELDS)里列的属性添加下列属性,代码如下:wa_fieldcat-ref_field = 'PSPID' .wa_fieldcat-ref_table = 'PROJ' .这样在ALV的显示界面,在该字段处就可以按F4来查看相关的内容了;6. 输入并保存、回调修改内表(输入时的小数位错位的问题、指定数据类型、小说位数)1.首先在显示ALV的子FORM(F_DISPLAY)里定义"回调"的变量,如下:" 回调变量DATA: i_grid_settings TYPE lvc_s_glay .i_grid_settings-edt_cll_cb = 'X' .2.在显示ALV的函数(REUSE_ALV_GRID_DISPLAY_LVC)里添加输入参数如,下:i_grid_settings = i_grid_settings这时只要在显示界面可编辑字段上修改了数据,回车后就会立即将内表的数据也修改了;3.对于货币字段,要在其设置字段和列名的属性中再添加一个"指定数据类型"的属性,如下:wa_fieldcat-datatype = 'CURR' . " 指定数据类型这样在修改数据并保存时,才能将数据保持原样,否则输入的数据会自动将小数点提前2位;4.对于数量字段,也要添加一个"指定数据类型"的属性,才能保持数据的正确性,如下:wa_fieldcat-datatype = 'QUAN' . " 指定数据类型wa_fieldcat-inttype = 'C' .5.将界面数据保存到数据库表中,触发事件见子FORM中的F_SAVE_DATA,代码如下:FORM f_save_date .DATA: i_spfli LIKE TABLE OF spfli WITH HEADER LINE .DATA: l_error TYPE REF TO cx_sy_open_sql_db ,l_error2 TYPE REF TO cx_sy_arithmetic_overflow ,l_error_text TYPE string ." 将界面上的数据转接到和被修改的数据库表的结构一样的内表中LOOP AT i_tab INTO wa_tab .i_spfli-carrid = 'ZZ' .i_spfli-connid = sy-tabix .i_spfli-cityfrom = wa_tab-cityfrom .i_spfli-airpfrom = wa_tab-airpfrom .i_spfli-cityto = wa_tab-cityto .i_spfli-airpto = wa_tab-airpto .i_spfli-distance = wa_tab-distance .APPEND i_spfli .CLEAR i_spfli .ENDLOOP." 保存到数据库TRY .DELETE spfli FROM TABLE i_spfli .INSERT spfli FROM TABLE i_spfli .CATCH cx_sy_open_sql_db INTO l_error .l_error_text = l_error->get_text( ) .sy-subrc = 1 .ENDTRY .IF sy-subrc NE 0 .ROLLBACK WORK .MESSAGE e000 WITH l_error_text .CLEAR l_error_text .ELSE .MESSAGE s000 WITH '数据保存成功!' .ENDIF.CLEAR i_spfli .REFRESH i_spfli .ENDFORM. " f_save_date7. 界面颜色的更改ALV中的颜色代码共有4位,其中C是固定的第一位(代表COLOR),第二位代表是颜色编码(1到7),第三位是加强颜色的设置(1表示打开,0表示关闭),第四位是减弱颜色(1表示打开,0表示关闭),个人理解,在强化关闭的情况下,相反的作用是背景和字体的变化:7.1. 更改单元格(字体)的前景、背景颜色1.、在定义内表的时候定义一个代表单元格颜色的字段,如下:cell_color TYPE slis_t_specialcol_alv2.、在子FORM(F_BUILD_LAYOUT)里,要指明代表单元格颜色的字段的名称,如下:i_layout-ctab_fname = 'CELL_COLOR'. " 单元格颜色设置3.、在子FORM(F_CELL_COLOR)里给代表单元格颜色的字段赋值,如下:FORM f_cell_color ." 单元格颜色DATA: l_cellcolor TYPE slis_specialcol_alv .LOOP AT i_tab INTO wa_tab .IF wa_tab-price > 500 .l_cellcolor-fieldname = 'PRICE' . " 要修改颜色的字段名l_cellcolor-color-col = 6 . " 颜色(1-7)l_cellcolor-color-inv = 1 . " 前景字体(int代表背景颜色)APPEND l_cellcolor TO wa_tab-cell_color .CLEAR l_cellcolor .ENDIF.MODIFY i_tab INDEX wa_tab-numer FROM wa_tab TRANSPORTING cell_col or .CLEAR wa_tab .ENDLOOP.ENDFORM. " f_cell_color7.2. 更改行的颜色和列的颜色:1.、在定义内表的时候定义一个代表行列颜色的字段,如下:line_color(4) TYPE c2.、在子FORM(F_BUILD_LAYOUT)里,要指明代表行列颜色的字段的名称,如下:i_layout-info_fname = 'LINE_COLOR' . " 行列颜色3.、在子FORM(F_LINE_COLOR)里给代表行列颜色的字段赋值,如下:FORM f_line_color .DATA: l_i TYPE i .LOOP AT i_tab INTO wa_tab .l_i = sy-tabix MOD 2 .IF l_i = 0 .wa_tab-line_color = 'C311' .MODIFY i_tab INDEX wa_tab-numer FROM wa_tab TRANSPORTING line_col or .CLEAR wa_tab .ENDIF.ENDLOOP.ENDFORM. " f_line_color7.3. 利用设置字段和列名子的FORM(F_FIELDS)里来设置列的颜色wa_fieldcat-emphasize = 'C711' .注意: 颜色设置中有优先级顺序,他们是单元格-->行-->列,即若同时使用了上述3中更改颜色的方法,则列的颜色会被行的颜色覆盖掉,而行的颜色又会背单元格的颜色覆盖掉,最终只会显示出单元格的颜色.8. ALV自带的最左端复选框按钮和自定义复选框按钮8.1. ALV自带的复选框按钮:在定义内表时,需要指明代表复选框的字段,这里如:BOX_NAME,然后在定义ALV全局属性的子FORM(F_BUILD_LAYOUT)里指明代表复选框的字段,如下:i_layout-box_fname = box_fname .8.2. 自定义复选框按钮需要在子FORM(F_FIELDS)里添加下列如下语句:wa_fieldcat-col_pos = v_pos .wa_fieldcat-fieldname = 'CHECKBOX' .wa_fieldcat-scrtext_m = '复选框' .wa_fieldcat-checkbox = 'X' .wa_fieldcat-edit = 'X' .wa_fieldcat-just = 'C' .wa_fieldcat-fix_column = 'X' .APPEND wa_fieldcat TO i_fieldcat .CLEAR wa_fieldcat .该功能必须在在显示ALV的函数的子FORM(F_DISPLAY)里添加"回调"的输入参数,这样当用户点击复选框后才能将改变写回到内表中,代码如下DATA: l_grid_settings TYPE lvc_s_glay .l_grid_settings-edt_cll_cb = 'X' .i_grid_settings = l_grid_settings9. 按照上传的模板格式导出为本地文件9.1. 定义导出为EXCEL用到的数据变量TYPE-POOLS ole2 .DATA: v_excel TYPE ole2_object,v_sheet TYPE ole2_object,v_book TYPE ole2_object,v_rows TYPE ole2_object,v_cell TYPE ole2_object,v_sheet_number TYPE i .9.2. 上传模板需要用事务码"SMW0"先上传一个EXCEL模板,步骤:1.、SMW0进入界面,选择"WebRFC应用程序的二进制数据",点击进入现已界面;2.、在"包"后面输入一个包名后点击或者按F8进入上传模板的主界面,如下图:3.、在上图中点击或者按F5新建一个模板,弹出下图:输入"对象名称"(一般用程序名+。