显示多张报表

本文介绍了一个使用 ABAP 编程语言实现的多视图 ALV Grid 控件的应用案例。该案例通过定义不同的数据结构、字段目录,并创建多个 ALV 控制器来展示从数据库表 sflight、spfli、scarr 和 sbook 中检索的数据。通过使用容器和分割容器技术实现了数据的分区显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

type-POOLs:slis,icon.

TABLES:sflight,spfli,scarr,sbook.

DATA:ok_code TYPE sy-ucomm.

*定义屏幕中使用的对象
DATA:go_split_container TYPE REF TO cl_gui_splitter_container.
DATA:go_container TYPE REF TO cl_gui_custom_container.
DATA:go_container1 TYPE REF TO cl_gui_container,
      go_container2 TYPE REF TO cl_gui_container,
      go_container3 TYPE REF TO cl_gui_container,
      go_container4 TYPE REF TO cl_gui_container.

DATA:go_alv_control1 TYPE REF TO cl_gui_alv_grid,
      go_alv_control2 TYPE REF TO cl_gui_alv_grid,
      go_alv_control3 TYPE REF TO cl_gui_alv_grid,
      go_alv_control4 TYPE REF TO cl_gui_alv_grid.

*定义内表和结构
DATA:BEGIN OF gs_sflight,
  carrid TYPE sflight-carrid,
  connid TYPE sflight-connid,
  fldate TYPE sflight-fldate,
  price TYPE sflight-price,
  END OF gs_sflight.

DATA:BEGIN OF gs_spfli,
  carrid TYPE spfli-carrid,
  connid TYPE spfli-connid,
  cityfrom TYPE spfli-cityfrom,
  cityto TYPE spfli-cityto,
  END OF gs_spfli.

DATA:BEGIN OF gs_scarr,
  carrid TYPE scarr-carrid,
  carrname TYPE scarr-carrname,
  END OF gs_scarr.

DATA:BEGIN OF gs_sbook,
  carrid TYPE sbook-carrid,
  connid TYPE sbook-connid,
  bookid TYPE sbook-bookid,
  customid TYPE sbook-customid,
  END OF gs_sbook.

*定义ALV控件
DATA:gs_field_cat1 TYPE lvc_s_fcat,
     gs_field_cat2 TYPE lvc_s_fcat,
      gs_field_cat3 TYPE lvc_s_fcat,
      gs_field_cat4 TYPE lvc_s_fcat.
DATA:gt_field_cat1 TYPE lvc_t_fcat,
      gt_field_cat2 TYPE lvc_t_fcat,
      gt_field_cat3 TYPE lvc_t_fcat,
      gt_field_cat4 TYPE lvc_t_fcat.

*定义显示数据
DATA:gt_sflight LIKE STANDARD TABLE OF gs_sflight,
      gt_spfli LIKE STANDARD TABLE OF gs_spfli,
      gt_scarr LIKE STANDARD TABLE OF gs_scarr,
      gt_sbook LIKE STANDARD TABLE OF gs_sbook.

START-OF-SELECTION.

  PERFORM sub_retrive_data.
  PERFORM sub_alv_data.

  CALL SCREEN 9100.
*&---------------------------------------------------------------------*
*&      Form  SUB_RETRIVE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SUB_RETRIVE_DATA .
  SELECT
   carrid
   connid
   fldate
   price
   INTO CORRESPONDING FIELDS OF TABLE gt_sflight
   FROM sflight.

  SELECT
carrid
connid
cityfrom
cityto
INTO CORRESPONDING FIELDS OF TABLE gt_spfli
FROM spfli.

  SELECT
    carrid
    carrname
    INTO CORRESPONDING FIELDS OF TABLE gt_scarr
    FROM scarr.

  SELECT
     carrid
     connid
     bookid
     customid
     INTO CORRESPONDING FIELDS OF TABLE gt_sbook
     FROM sbook.

ENDFORM.                    " SUB_RETRIVE_DATA
*&---------------------------------------------------------------------*
*&      Form  SUB_ALV_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SUB_ALV_DATA .
  CLEAR:gs_field_cat1.
*建立字段目录1
  gs_field_cat1-col_pos 1.
  gs_field_cat1-fieldname 'CARRID'.
  gs_field_cat1-scrtext_m 'airline code'.
  APPEND gs_field_cat1 to gt_field_cat1.

  gs_field_cat1-col_pos 2.
  gs_field_cat1-fieldname 'CONNID'.
  gs_field_cat1-scrtext_m 'connection number'.
  APPEND gs_field_cat1 to gt_field_cat1.

  gs_field_cat1-col_pos 3.
  gs_field_cat1-fieldname 'FLDATE'.
  gs_field_cat1-scrtext_m 'flight date'.
  APPEND gs_field_cat1 to gt_field_cat1.

  gs_field_cat1-col_pos 4.
  gs_field_cat1-fieldname 'PRICE'.
  gs_field_cat1-scrtext_m 'flight price'.
  APPEND gs_field_cat1 to gt_field_cat1.

*建立字段目录2
  CLEAR gs_field_cat2.
  gs_field_cat2-col_pos 1.
  gs_field_cat2-fieldname 'CARRID'.
  gs_field_cat2-scrtext_m 'airline code'.
  APPEND gs_field_cat2 to gt_field_cat2.

  gs_field_cat2-col_pos 2.
  gs_field_cat2-fieldname 'CONNID'.
  gs_field_cat2-scrtext_m 'connection number'.
  APPEND gs_field_cat2 to gt_field_cat2.

  gs_field_cat2-col_pos 3.
  gs_field_cat2-fieldname ' CITYFROM'.
  gs_field_cat2-scrtext_m 'city from'.
  APPEND gs_field_cat2 to gt_field_cat2.

  gs_field_cat2-col_pos 4.
  gs_field_cat2-fieldname 'CITYTO'.
  gs_field_cat2-scrtext_m 'city to'.
  APPEND gs_field_cat2 to gt_field_cat2.

*建立字段目录3
  CLEAR gs_field_cat3.
  gs_field_cat3-col_pos 1.
  gs_field_cat3-fieldname 'CARRID'.
  gs_field_cat3-scrtext_m 'airline code'.
  APPEND gs_field_cat3 to gt_field_cat3.

  gs_field_cat3-col_pos 2.
  gs_field_cat3-fieldname 'CONNID'.
  gs_field_cat3-scrtext_m 'connection number'.
  APPEND gs_field_cat3 to gt_field_cat3.

*建立字段目录4
  CLEAR:gs_field_cat4.
  gs_field_cat4-col_pos 1.
  gs_field_cat4-fieldname 'CARRID'.
  gs_field_cat4-scrtext_m 'airline code'.
  APPEND gs_field_cat4 to gt_field_cat4.

  gs_field_cat4-col_pos 2.
  gs_field_cat4-fieldname 'CONNID'.
  gs_field_cat4-scrtext_m 'connection number'.
  APPEND gs_field_cat4 to gt_field_cat4.

  gs_field_cat4-col_pos 3.
  gs_field_cat4-fieldname 'BOOKID'.
  gs_field_cat4-scrtext_m 'book id'.
  APPEND gs_field_cat4 to gt_field_cat4.

  gs_field_cat4-col_pos 4.
  gs_field_cat4-fieldname 'CUSTOMID'.
  gs_field_cat4-scrtext_m 'cumstom id'.
  APPEND gs_field_cat4 to gt_field_cat4.

ENDFORM.                    " SUB_ALV_DATA
*&---------------------------------------------------------------------*
*&      Module  ALV_DIAPLAY  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE ALV_DIAPLAY OUTPUT.
  IF go_split_container IS INITIAL.
    CREATE OBJECT go_container
      EXPORTING
        container_name 'GO_CONTAINER'.

    CREATE OBJECT go_split_container
      EXPORTING
        link_dynnr sy-dynnr
        link_repid sy-repid
        parent     go_container
        rows       2
        columns    2
        name       'GO_SPLIT_CONTAINER'.

    CALL METHOD go_split_container->get_container
      EXPORTING
        row       1
        column    1
      RECEIVING
        container go_container1.

    CALL METHOD go_split_container->get_container
      EXPORTING
        row       1
        column    2
      RECEIVING
        container go_container2.

    CALL METHOD go_split_container->get_container
      EXPORTING
        row       2
        column    1
      RECEIVING
        container go_container3.

    CALL METHOD go_split_container->get_container
      EXPORTING
        row       2
        column    2
      RECEIVING
        container go_container4.


    CREATE OBJECT go_alv_control1
      EXPORTING
        i_parent go_container1.

    CREATE OBJECT go_alv_control2
      EXPORTING
        i_parent go_container2.

    CREATE OBJECT go_alv_control3
      EXPORTING
        i_parent go_container3.

    CREATE OBJECT go_alv_control4
      EXPORTING
        i_parent go_container4.

    CALL METHOD go_alv_control1->set_table_for_first_display
      CHANGING
        it_outtab       gt_sflight
        it_fieldcatalog gt_field_cat1.

    CALL METHOD go_alv_control2->set_table_for_first_display
      CHANGING
        it_outtab       gt_sflight
        it_fieldcatalog gt_field_cat2.

    CALL METHOD go_alv_control3->set_table_for_first_display
      CHANGING
        it_outtab       gt_sflight
        it_fieldcatalog gt_field_cat3.

    CALL METHOD go_alv_control4->set_table_for_first_display
      CHANGING
        it_outtab       gt_sbook
        it_fieldcatalog gt_field_cat4.

  ELSE.

    CALL METHOD go_alv_control1->refresh_table_display.
    CALL METHOD go_alv_control2->refresh_table_display.
    CALL METHOD go_alv_control3->refresh_table_display.
    CALL METHOD go_alv_control4->refresh_table_display.

  ENDIF.



ENDMODULE.                 " ALV_DIAPLAY  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_9100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_9100 OUTPUT.
  SET PF-STATUS 'STATUS9100'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_9100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9100 INPUT.
  CASE ok_code.
    WHEN 'BACK'.
      CALL METHOD go_alv_control1->free.
      CALL METHOD go_alv_control2->free.
      CALL METHOD go_alv_control3->free.
      CALL METHOD go_alv_control4->free.

      CALL METHOD go_container1->free.
      CALL METHOD go_container2->free.
      CALL METHOD go_container3->free.
      CALL METHOD go_container4->free.

      CALL METHOD go_split_container->free.
      CALL METHOD go_container->free.

      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_9100  INPUT



屏幕

PROCESS BEFORE OUTPUT.
  MODULE STATUS_9100.
  MODULE alv_diaplay.
PROCESS AFTER INPUT.
 MODULE USER_COMMAND_9100.


元素清单

GO_CONTAINER

OK_CODE


画个容器名为GO_CONTAINER

### 如何在润乾报表中实现多张报表的换页功能 润乾报表是一种强大的报表工具,支持复杂的数据展示需求。为了实现在多张报表之间的换页功能,可以通过设置分页参数、定义页面布局以及利用特定的功能模块完成。 #### 设置分页参数 在润乾报表的设计界面中,可以配置分页选项以控制每一页的内容显示范围。通过调整数据集中的记录数或者手动划分区域,能够确保不同部分的内容分布在不同的页面上[^1]。 ```xml <report> <pageSettings> <!-- 定义每页的高度 --> <height>800</height> <!-- 定义每页的宽度 --> <width>600</width> <!-- 启用自动分页 --> <autoPageBreak>true</autoPageBreak> </pageSettings> </report> ``` 上述代码片段展示了如何通过XML方式设定页面高度和宽度,并启用自动分页机制。这一步骤对于处理跨多个物理页面的大规模数据至关重要[^3]。 #### 使用图文对象增强视觉效果 当涉及到多张报表时,可能还需要考虑美观性和一致性问题。此时可引入图文对象,在各页之间保持统一风格的同时增添必要的装饰元素,比如公司Logo或背景图案等。 #### Java代码示例:基于PDFBox库生成带表头的新页 尽管润乾本身提供了丰富的内置特性用于管理多页文档,但在某些特殊场景下也可能借助外部技术手段达成目标——例如下面这段采用Apache PDFBox编写的程序演示了怎样向已存在的PDF文件追加含有固定头部信息的新页: ```java import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; public class PdfHeaderExample { public static void main(String[] args) throws Exception{ PDDocument document = new PDDocument(); PDPage page = new PDPage(PDRectangle.A4); document.addPage(page); try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) { String headerText = "这是我的表头"; // 添加表头文字到页面顶端中央位置 float stringWidth = contentStream.getStringWidth(headerText)/2f * 12; float positionX = (page.getMediaBox().getWidth() - stringWidth ) / 2 ; float positionY = page.getMediaBox().getHeight()-50 ; contentStream.beginText(); contentStream.setFont(subFont, 12); contentStream.newLineAtOffset(positionX ,positionY ); contentStream.showText(headerText); contentStream.endText(); } document.save("example_with_header.pdf"); document.close(); } } ``` 此脚本创建了一个简单的A4尺寸空白页并为其设置了居中式样化的标题栏;实际应用过程中可以根据业务逻辑动态填充更多细节内容至各个子报告单元之中[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值