首先确保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基础的同学。