SMARTFORM 例項練習
謝謝分享這位博文的前輩,寫的很詳細,我照著抄了一遍,執行一下,原來對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。
輸入要建立的smartform程式的名稱(這個名稱要和report程式呼叫的名稱一致)。然後點選“建立按鈕”。
雙擊“表格介面”,輸入一個內表的名稱(這個名稱要和report程式呼叫時的變數名必須一致,表的型別也必須一致)。然後點選“全域性定義”。
輸入一個工作區的名稱和型別,型別必須和內表的型別一致。然後點選“頁和視窗àpage->main window”然後輸入一個名稱(FIRST),如下圖。
然後在 “FIRST”上右鍵建立一個table,建立table後會自動生成“表頭”,“主要區域”和“腳標”。
我設定了4列,每列的寬度為4釐米。
然後點選“資料”。
輸入剛才在“表格介面”中輸入的內表名稱和在“全域性定義”中輸入的工作區名稱。
然後在“主要區域”上右鍵建立一個table line(錶行)。輸入一個名稱,選擇剛才你設定的顯示格式(LINE1),選擇後會自動生成你剛才設定列數,然後修改每一列的名稱。(我剛才設定了4列)
輸入“&G_REC_TEST-CARRID&”,也就是剛才的內表指向一個欄位。
以同樣的方法設定其他的列。
表頭的設定和上面的操作基本相似。就是在給相應的列賦值時更簡單些。
然後儲存並激活你程式,執行結果: