1. 程式人生 > >SMARTFORM 例項練習

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程式。

輸入tcodesmartforms


輸入要建立的smartform程式的名稱(這個名稱要和report程式呼叫的名稱一致)。然後點選“建立按鈕”。



雙擊“表格介面”,輸入一個內表的名稱(這個名稱要和report程式呼叫時的變數名必須一致,表的型別也必須一致)。然後點選“全域性定義”。



輸入一個工作區的名稱和型別,型別必須和內表的型別一致。然後點選“頁和視窗àpage->main window”然後輸入一個名稱(FIRST,如下圖。


然後在 “FIRST”上右鍵建立一個table,建立table後會自動生成“表頭”,“主要區域”和“腳標”。



我設定了4列,每列的寬度為4釐米。

然後點選“資料”。

    輸入剛才在“表格介面”中輸入的內表名稱和在“全域性定義”中輸入的工作區名稱。


然後在“主要區域”上右鍵建立一個table line(錶行)。輸入一個名稱,選擇剛才你設定的顯示格式(LINE1,選擇後會自動生成你剛才設定列數,然後修改每一列的名稱。(我剛才設定了4列)




輸入“&G_REC_TEST-CARRID&”,也就是剛才的內表指向一個欄位。



以同樣的方法設定其他的列。

表頭的設定和上面的操作基本相似。就是在給相應的列賦值時更簡單些。




然後儲存並激活你程式,執行結果: