结果如图:

SmartRefreshLayout 导包_工作区

1.      创建report程序。在report程序中取得数据和调用你创建的的smartform。(下面我取得的数据放在G_TAB_TEST的内表中,在调用smartform(ZTEST_22_SF0001)传入)。

 

创建report程序步骤:

输入tcode:se38.

SmartRefreshLayout 导包_数据_02

然后点击“创建”按钮。

输入相应的描述,选择类型为可执行程序,状态为测试程序。然后点击“保存”按钮。

点击“本地保存按钮”。然后开始编写代码。

Report代码如下:(代码内容不再讲解)

*&---------------------------------------------------------------------*
*& Report  ZTEST_22_RSF0001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_22_RSF0001 NO STANDARD PAGE HEADING LINE-SIZE 150
                         MESSAGE-ID ZBSUN.

DATA:
  G_TAB_TEST LIKE STANDARD TABLE OF SFLIGHT,
  G_REC_TEST TYPE SFLIGHT.
DATA:
  FM_NAME TYPE RS38L_FNAM.

SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME.
SELECT-OPTIONS S_LINE FOR G_REC_TEST-CARRID NO INTERVALS.
SELECT-OPTIONS S_DATE FOR G_REC_TEST-FLDATE.
SELECTION-SCREEN END OF BLOCK BLOCK1.

INITIALIZATION.
  REFRESH G_TAB_TEST.
  CLEAR: G_REC_TEST,
         FM_NAME.

START-OF-SELECTION.
  SELECT *
    INTO TABLE G_TAB_TEST
    FROM SFLIGHT
   WHERE CARRID IN S_LINE
     AND FLDATE IN S_DATE.

  IF SY-SUBRC <> 0.
    MESSAGE E001 WITH 'NO DATA'.
*   No data selected.
  ENDIF.
END-OF-SELECTION.
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME                 = 'ZTEST_22_SF0001'
*     VARIANT                  = ' '
*     DIRECT_CALL              = ' '
    IMPORTING
      FM_NAME                  = FM_NAME
*   EXCEPTIONS
*     NO_FORM                  = 1
*     NO_FUNCTION_MODULE       = 2
*     OTHERS                   = 3
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  CALL FUNCTION fm_name
*  EXPORTING
*   ARCHIVE_INDEX =
*   ARCHIVE_PARAMETERS =
*   CONTROL_PARAMETERS =
*   MAIL_APPL_OBJ =
*   MAIL_RECIPIENT =
*   MAIL_SENDER =
*   OUTPUT_OPTIONS =
*   USER_SETTINGS = 'X'
* IMPORTING
*   DOCUMENT_OUTPUT_INFO =
*   JOB_OUTPUT_INFO =
*   JOB_OUTPUT_OPTIONS =
  TABLES
    G_TAB_TEST = G_TAB_TEST
  EXCEPTIONS
    FORMATTING_ERROR = 1
    INTERNAL_ERROR = 2
    SEND_ERROR = 3
    USER_CANCELED = 4
    OTHERS = 5 .
IF SY-SUBRC <> 0.
*   <error handling>
ENDIF.



1. 创建smartform程序。

输入tcode:smartforms。


SmartRefreshLayout 导包_自动生成_03


输入要创建的smartform程序的名称(这个名称要和report程序调用的名称一致)。然后点击“创建按钮”。



SmartRefreshLayout 导包_工作区_04

双击“表格接口”,输入一个内表的名称(这个名称要和report程序调用时的变量名必须一致,表的类型也必须一致)。然后点击“全局定义”。



SmartRefreshLayout 导包_自动生成_05

输入一个工作区的名称和类型,类型必须和内表的类型一致。然后点击“页和窗口àpage->main window”然后输入一个名称(FIRST),如下图。


SmartRefreshLayout 导包_工作区_06



然后在 “FIRST”上右键创建一个table,创建table后会自动生成“表头”,“主要区域”和“脚标”。

SmartRefreshLayout 导包_数据_07

SmartRefreshLayout 导包_数据_08


我设置了4列,每列的宽度为4厘米。

然后点击“数据”。

    输入刚才在“表格接口”中输入的内表名称和在“全局定义”中输入的工作区名称。

SmartRefreshLayout 导包_工作区_09

然后在“主要区域”上右键创建一个table line(表行)。输入一个名称,选择刚才你设置的显示格式(LINE1),选择后会自动生成你刚才设置列数,然后修改每一列的名称。(我刚才设置了4列)

SmartRefreshLayout 导包_数据_10


SmartRefreshLayout 导包_自动生成_11

SmartRefreshLayout 导包_数据_12

SmartRefreshLayout 导包_数据_13


输入“&G_REC_TEST-CARRID&”,也就是刚才的内表指向一个字段。

SmartRefreshLayout 导包_自动生成_14


SmartRefreshLayout 导包_数据_15

以同样的方法设置其他的列。

表头的设置和上面的操作基本相似。就是在给相应的列赋值时更简单些。

SmartRefreshLayout 导包_自动生成_16

SmartRefreshLayout 导包_工作区_17

SmartRefreshLayout 导包_自动生成_18

然后保存并激活你程序,运行结果:



SmartRefreshLayout 导包_工作区_19

SmartRefreshLayout 导包_数据_20

SmartRefreshLayout 导包_工作区_21