原帖:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值