来源:互联网 发布:mysql 5.5安装图解 编辑:程序博客网 时间:2024/06/10 00:11

原帖:

http://www.hopewei.com/alv-with-two-header.html(如侵犯版权,会自行删除)


真正和图中完全一样的,没想到办法解决,不过,实现和图中类似的,倒是有办法。
原理其实也很简单:ABAP OO实现ALV是基于CONTAINER,所以,上面的多出来的表头,可以相当于一个无内容的ALV报表

注意:
1.需要分别实例化两个ALV Container,分别定义两个ALV的Layout/Fieldcat;
2.画屏幕的时候,注意两个CONTAINER的布局,最终效果需要自己慢慢调;
3.上面ALV 需要隐藏标准按钮,所以需要自定义ALV STATUS;
4.对其效果在于 Fieldcat的outputlen属性;
5.其他效果,自行Coding,此例仅供参照.

附图:
1.屏幕CONTAINER设置
CONTAINER

2.最终效果:
alv2header

关键代码:

container TYPE scrfname VALUE 'SCR1',     "在屏幕中创建的容器名称container1 TYPE scrfname VALUE 'SCR2',     "在屏幕中创建的容器名称
*&---------------------------------------------------------------------**& Report  ZALV_2HEADER*&*&---------------------------------------------------------------------**&*&版权归:Hopesap工作室所有|Http://hopewei.com*&---------------------------------------------------------------------*REPORT  zalv_2header.TABLES: sflight.DATA:      ok_code LIKE sy-ucomm,      save_ok LIKE sy-ucomm,      gt_fcat TYPE lvc_t_fcat,                  "字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等      gt_fcat1 TYPE lvc_t_fcat,                  "字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等      gs_layout   TYPE lvc_s_layo,              "ALV的一个布局,比如ALV的标题,是否可编辑,行颜色,列颜色.      gt_exclude TYPE ui_functions,             "排除不需要的标准按钮 此处到后面文章会讲到。      gt_exclude1 TYPE ui_functions,             "排除不需要的标准按钮 此处到后面文章会讲到。      container TYPE scrfname VALUE 'SCR1',     "在屏幕中创建的容器名称      container1 TYPE scrfname VALUE 'SCR2',     "在屏幕中创建的容器名称      alv_grid1  TYPE REF TO cl_gui_alv_grid,      alv_grid  TYPE REF TO cl_gui_alv_grid,      custom_container TYPE REF TO cl_gui_custom_container, "实例化一个容器      custom_container1 TYPE REF TO cl_gui_custom_container. "实例化一个容器*DATA: gt_list TYPE TABLE OF sflight WITH HEADER LINE.DATA:BEGIN OF gt_list OCCURS 0.DATA selk TYPE c.        INCLUDE TYPE sflight.DATA:END OF gt_list.DATA: gt_list1 TYPE TABLE OF sflight WITH HEADER LINE.data: outls type i,      outl1 type i,      outl2 type i.INITIALIZATION.outlS = 25.outl1 = 12.outl2 = 12.AT SELECTION-SCREEN.START-OF-SELECTION.  PERFORM  frm_get_data.  PERFORM div_tools TABLES gt_exclude.  PERFORM div_tools TABLES gt_exclude1.  CALL SCREEN 100.*---------------------------------------------------------------------**  MODULE status_0100 OUTPUT*---------------------------------------------------------------------**    PBO 流程处理*---------------------------------------------------------------------*MODULE status_0100 OUTPUT.  PERFORM set_status.  IF custom_container1  IS INITIAL.    CREATE OBJECT custom_container1      EXPORTING        container_name = container1.    IF alv_grid1 IS INITIAL.      CREATE OBJECT alv_grid1        EXPORTING          i_parent = custom_container1.      PERFORM frm_build_fcat1.*      PERFORM frm_set_layout1.      CALL METHOD alv_grid1->set_table_for_first_display        EXPORTING*         i_structure_name     = 'SFLIGHT' “此处说明一下一般程序中要处理的显示数据,都不是在同一个结构表中,所以显示的字段需要手工建立。这就用到了PERFORM frm_build_fcat.*         is_layout            = gs_layout          it_toolbar_excluding = gt_exclude1        CHANGING          it_outtab            = gt_list1[]          it_fieldcatalog      = gt_fcat1[].      "要显示的字段列表    ENDIF.  ENDIF.  IF custom_container  IS INITIAL.    CREATE OBJECT custom_container      EXPORTING        container_name = container.    IF alv_grid IS INITIAL.      CREATE OBJECT alv_grid        EXPORTING          i_parent = custom_container.      PERFORM frm_build_fcat.      PERFORM frm_set_layout.*      PERFORM frm_set_layout.      CALL METHOD alv_grid->set_table_for_first_display        EXPORTING*         i_structure_name         = 'SFLIGHT' “此处说明一下一般程序中要处理的显示数据,都不是在同一个结构表中,所以显示的字段需要手工建立。这就用到了PERFORM frm_build_fcat.          is_layout                = gs_layout          it_toolbar_excluding     = gt_exclude*         i_callback_pf_status_set = 'SET_STATUS'        CHANGING          it_outtab                = gt_list[]          it_fieldcatalog          = gt_fcat[].      "要显示的字段列表    ENDIF.  ENDIF.ENDMODULE.                    "status_0100 OUTPUT*&---------------------------------------------------------------------**&      Form  SET_STATUS*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------*FORM set_status .  SET PF-STATUS 'GS100'.ENDFORM.                    "SET_STATUS*&---------------------------------------------------------------------**&      Form  frm_set_layout*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------*FORM frm_set_layout.*  gs_layout  gs_layout-sel_mode = 'D'.  gs_layout-box_fname = 'SELK'.*  APPEND gs_layout .ENDFORM.                    "frm_set_layout*&---------------------------------------------------------------------**&      Form  frm_build_fcat*&---------------------------------------------------------------------**       建立显示字段*----------------------------------------------------------------------*FORM frm_build_fcat .  DATA:  lt_fcat TYPE lvc_t_fcat WITH HEADER LINE,  ls_fcat TYPE lvc_s_fcat,  l_col_pos LIKE lvc_s_fcat-col_pos,  l_tabix LIKE sy-tabix.  CLEAR: gt_fcat[].  CLEAR ls_fcat.  ls_fcat-fieldname = 'CARRID'.  ls_fcat-coltext = '测试1'.  ls_fcat-outputlen = OUTLs.  APPEND ls_fcat TO gt_fcat.  CLEAR ls_fcat.  ls_fcat-fieldname = 'FLDATE'.  ls_fcat-coltext = '测试3'.  ls_fcat-outputlen = 10.  APPEND ls_fcat TO gt_fcat.  CLEAR ls_fcat.  ls_fcat-fieldname = 'PRICE'.  ls_fcat-coltext = '航空运费'.  ls_fcat-outputlen = 8.  APPEND ls_fcat TO gt_fcat.  CLEAR ls_fcat.  ls_fcat-fieldname = 'CURRENCY'.  ls_fcat-coltext = '测试5'.  ls_fcat-outputlen = 12.  APPEND ls_fcat TO gt_fcat.  CLEAR ls_fcat.  ls_fcat-fieldname = 'PLANETYPE'.  ls_fcat-coltext = '飞机类型'.  ls_fcat-outputlen = 8.  APPEND ls_fcat TO gt_fcat.  CLEAR ls_fcat.  ls_fcat-fieldname = 'SEATSMAX'.  ls_fcat-coltext = '最大容量'.  ls_fcat-outputlen = 8.  APPEND ls_fcat TO gt_fcat.  CLEAR ls_fcat.  ls_fcat-fieldname = 'SEATSOCC'.  ls_fcat-coltext = '占据的座位'.  ls_fcat-outputlen = 10.  APPEND ls_fcat TO gt_fcat.  CLEAR ls_fcat.  ls_fcat-fieldname = 'PAYMENTSUM'.  ls_fcat-coltext = '当前预定总数'.  ls_fcat-outputlen = 12.  APPEND ls_fcat TO gt_fcat.ENDFORM.                    " frm_build_fcat*&---------------------------------------------------------------------**&      Form  frm_get_data*&---------------------------------------------------------------------**       取出显示数据*----------------------------------------------------------------------*FORM frm_get_data .  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_list FROM sflight.ENDFORM.                    " frm_get_data*&---------------------------------------------------------------------**&      Module  USER_COMMAND_0100  INPUT*&---------------------------------------------------------------------**       PAI 流程处理*----------------------------------------------------------------------*MODULE user_command_0100 INPUT.  save_ok = ok_code.  CLEAR ok_code.  CASE save_ok.    WHEN '&BACK' OR '&UP' OR '&CANCEL'.      LEAVE PROGRAM.  ENDCASE.ENDMODULE.                 " USER_COMMAND_0100  INPUT*&---------------------------------------------------------------------**&      Form  FRM_BUILD_FCAT1*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM frm_build_fcat1 .  DATA:  lt_fcat1 TYPE lvc_t_fcat WITH HEADER LINE,  ls_fcat1 TYPE lvc_s_fcat,  l_col_pos LIKE lvc_s_fcat-col_pos,  l_tabix LIKE sy-tabix.  CLEAR: gt_fcat1[].  CLEAR ls_fcat1.  ls_fcat1-fieldname = 'SELK'.*  ls_fcat-coltext = '测试1'.  ls_fcat1-outputlen = 2.  APPEND ls_fcat1 TO gt_fcat1.  ls_fcat1-fieldname = 'CARRID'.  ls_fcat1-coltext = '航线承运人ID'.  ls_fcat1-outputlen = OUTL1.  APPEND ls_fcat1 TO gt_fcat1.  CLEAR ls_fcat1.  ls_fcat1-fieldname = 'CONNID'.  ls_fcat1-coltext = '航班连接Id'.  ls_fcat1-outputlen = OUTL2.  APPEND ls_fcat1 TO gt_fcat1.  CLEAR ls_fcat1.  ls_fcat1-fieldname = 'FLDATE'.  ls_fcat1-coltext = '航班日期'.  ls_fcat1-outputlen = 10.  APPEND ls_fcat1 TO gt_fcat1.  CLEAR ls_fcat1.  ls_fcat1-fieldname = 'PRICE'.  ls_fcat1-coltext = '航空运费'.  ls_fcat1-outputlen = 8.  APPEND ls_fcat1 TO gt_fcat1.  CLEAR ls_fcat1.  ls_fcat1-fieldname = 'CURRENCY'.  ls_fcat1-coltext = '航班的本地货币'.  ls_fcat1-outputlen = 12.  APPEND ls_fcat1 TO gt_fcat1.  CLEAR ls_fcat1.  ls_fcat1-fieldname = 'PLANETYPE'.  ls_fcat1-coltext = '飞机类型'.  ls_fcat1-outputlen = 8.  APPEND ls_fcat1 TO gt_fcat1.  CLEAR ls_fcat1.  ls_fcat1-fieldname = 'SEATSMAX'.  ls_fcat1-coltext = '最大容量'.  ls_fcat1-outputlen = 8.  APPEND ls_fcat1 TO gt_fcat1.  CLEAR ls_fcat1.  ls_fcat1-fieldname = 'SEATSOCC'.  ls_fcat1-coltext = '占据的座位'.  ls_fcat1-outputlen = 10.  APPEND ls_fcat1 TO gt_fcat1.  CLEAR ls_fcat1.  ls_fcat1-fieldname = 'PAYMENTSUM'.  ls_fcat1-coltext = '当前预定总数'.  ls_fcat1-outputlen = 12.  APPEND ls_fcat1 TO gt_fcat1.ENDFORM.                    " FRM_BUILD_FCAT1*&---------------------------------------------------------------------**&      Form  DIV_TOOLS*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM div_tools  TABLES  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 .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_sort_asc.  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_sort_dsc .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_find .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_filter .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_print .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_print_prev .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_mb_export .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_graph .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_mb_view .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_detail .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_help .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_fc_info .  APPEND ls_exclude TO pt_exclude.  ls_exclude = cl_gui_alv_grid=>mc_mb_variant.  APPEND ls_exclude TO pt_exclude.ENDFORM.                    "DIV_TOOLS

0 0