首先確保ALV報表正常輸出,輸出ALV完整流程,再在狀態欄添加一個按鈕,實現跳轉至打印的功能。
- 按鈕的實現
添加一個GUI狀態,可以引用標準模板,也可以單獨加一個按鈕(為整潔美觀一般使用標準模板)
定義在ALV輸出展示中的'SET_PF_STATUS'
方法,具體代碼如下:
SET PF-STATUS '1100'."1100為GUI的名字
ENDFORM. "F_SET_STATUS```
* 按鈕功能的實現
實現 ```USER_COMMAND``` 的方法,具體代碼如下:
```FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN 'SKIP'. "我的按鈕鍵名字為 SKIP
DATA: L_FM_NAME TYPE RS38L_FNAM,
OUTPUT TYPE SSFCOMPOP,
CONTROL_PARAMETERS TYPE SSFCTRLOP,
LW_SSFCRESCL TYPE SSFCRESCL,
OPTION TYPE SSFCRESCL.
DATA :LS_ZZS_11 LIKE ZZS_011_09."ZZS_011_09為自建的表結構,定義一個工作區和表
DATA :G_L LIKE TABLE OF ZZS_011_09.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' "實現Smartforms
EXPORTING
FORMNAME = 'ZSF_11_09' "自建的Smartforms名字
IMPORTING
FM_NAME = L_FM_NAME "DATA出來參照RS38L_FNAM的工作區,前面有定義
IF SY-SUBRC <> 0.
ENDIF.
"打印設置
CONTROL_PARAMETERS-NO_OPEN = 'X'.
CONTROL_PARAMETERS-NO_CLOSE = 'X'.
OUTPUT-TDDEST = 'LP01'. "默認的打印設備
OUTPUT-RQPOSNAME = ''.
OUTPUT-TDDATASET = ''.
OUTPUT-TDSUFFIX1 = ''.
OUTPUT-TDSUFFIX2 = ''.
OUTPUT-TDIMMED = 'X'.
OUTPUT-TDDELETE = 'X'.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
CONTROL_PARAMETERS = CONTROL_PARAMETERS
OUTPUT_OPTIONS = OUTPUT
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
LOOP AT GT_LINE INTO WA_LINE WHERE BOX = 'X'."把選中的哪一行數據傳給LS_ZZS_11工作區
LS_ZZS_11-EBELN = WA_LINE-EBELN.
LS_ZZS_11-BUKRS = WA_LINE-BUKRS.
LS_ZZS_11-EBELP = WA_LINE-EBELP.
LS_ZZS_11-MATNR = WA_LINE-MATNR.
APPEND ls_zzs_11 to g_l."更新到表
ENDLOOP.```
"# 調用Smartforms的Function Module打印
CALL FUNCTION L_FM_NAME
EXPORTING
CONTROL_PARAMETERS = CONTROL_PARAMETERS
OUTPUT_OPTIONS = OUTPUT
WA_ZZS_011_09 = LS_ZZS_11 "傳向Smartforms的工作區
TABLES
GT_LINE_11 = G_L "傳向Smartforms的表
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4.
"# 關閉打印機設置
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
JOB_OUTPUT_INFO = LW_SSFCRESCL
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
ENDIF
ENDCASE.
ENDFORM. "USER_COMMAND
引用Smartforms就是幾個方法,改的地方也不多,接下來就是畫Smartforms中要注意的地方。
* 表格接口中定義一個表參照自己建的結構。
* 全局定義中定義一個表一個工作區一些參數以及結構中參考貨幣/數量的字段。
* 一般都為表循環至工作區
* 在限定行數的循環內:先判斷循環條件,同時定義一個變量賦值。程序行給變量每循環一次+1
######因為沒有全粘代碼,所以本文適合有一點Smartforms基礎的同學。