谢谢分享这位博文的前辈,写的很详细,我照着抄了一遍,运行一下,原来对smartform一无所知,现在大概了解smartform是做什么的了。
结果如图:
1. 创建report程序。在report程序中取得数据和调用你创建的的smartform。(下面我取得的数据放在G_TAB_TEST的内表中,在调用smartform(ZTEST_22_SF0001)传入)。
创建report程序步骤:
输入tcode:se38.
然后点击“创建”按钮。
输入相应的描述,选择类型为可执行程序,状态为测试程序。然后点击“保存”按钮。
点击“本地保存按钮”。然后开始编写代码。
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。
![](https://img-my.csdn.net/uploads/201304/19/1366339504_1094.png)
输入要创建的smartform程序的名称(这个名称要和report程序调用的名称一致)。然后点击“创建按钮”。
双击“表格接口”,输入一个内表的名称(这个名称要和report程序调用时的变量名必须一致,表的类型也必须一致)。然后点击“全局定义”。
输入一个工作区的名称和类型,类型必须和内表的类型一致。然后点击“页和窗口àpage->main window”然后输入一个名称(FIRST),如下图。
![](https://img-my.csdn.net/uploads/201304/19/1366339666_9874.png)
然后在 “FIRST”上右键创建一个table,创建table后会自动生成“表头”,“主要区域”和“脚标”。
我设置了4列,每列的宽度为4厘米。
然后点击“数据”。
输入刚才在“表格接口”中输入的内表名称和在“全局定义”中输入的工作区名称。
然后在“主要区域”上右键创建一个table line(表行)。输入一个名称,选择刚才你设置的显示格式(LINE1),选择后会自动生成你刚才设置列数,然后修改每一列的名称。(我刚才设置了4列)
输入“&G_REC_TEST-CARRID&”,也就是刚才的内表指向一个字段。
以同样的方法设置其他的列。
表头的设置和上面的操作基本相似。就是在给相应的列赋值时更简单些。
然后保存并激活你程序,运行结果: