1、主要控制逻辑放到程序中。
2、主要控制逻辑放到smartforms中。
一、主要控制逻辑放到程序中。这样在smartforms中就的简单些,对于多单连打也方便设置。
FORM print.
DATA: lw_control TYPE ssfctrlop.
DATA: lw_options TYPE ssfcompop.
DATA: cn_locn(4) TYPE c VALUE 'LOCN',
cn_lojp(4) TYPE c VALUE 'LOJP',
cn_lohk(4) TYPE c VALUE 'LOHK',
cn_flagx TYPE c VALUE 'X'.
"CONSTANTS: cn_flagx TYPE c VALUE 'X'.
DATA: lv_fmnam TYPE rs38l_fnam,
lv_sfnam TYPE tdsfname.
lw_control-no_dialog = cn_flagx.
lw_control-preview = cn_flagx.
lw_control-langu = sy-langu .
lw_control-no_open = cn_flagx.
lw_control-no_close = cn_flagx.
lw_options-tdimmed = cn_flagx.
lw_options-tdnewid = cn_flagx.
IF sy-langu = '1'.
lw_options-tddest = cn_locn.
ELSEIF sy-langu = 'J'.
lw_options-tddest = cn_lojp.
ELSEIF sy-langu = 'E'.
lw_options-tddest = cn_lohk.
ENDIF.
lv_sfnam = 'ZMM_PURCHASE'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = lv_sfnam
IMPORTING
fm_name = lv_fmnam
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 'SSF_OPEN' "打开打印窗口
EXPORTING
control_parameters = lw_control
output_options = lw_options
* user_settings = cn_flagx
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
"开始循环打印--------------每次以一页为单位,所以每次传参的时候也把页码之类的传入
CALL FUNCTION lv_fmnam
EXPORTING
control_parameters = lw_control
output_options = lw_options
"gw_head = gw_head “结构存放表头信息
"TABLES
"gt_item = gt_item "内表存放行项目信息
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
"循环打印结束-----------------------------
*ssf_close "关闭打印窗口,如点打印预览会关闭此窗口
CALL FUNCTION 'SSF_CLOSE'
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
OTHERS = 4.
ENDFORM.
二、简单调用。这样调用简单,但复杂的逻辑都要到smartforms中实现。
FORM print2.
DATA: fm_name TYPE rs38l_fnam.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'SMARTFORMS_NAME'
* 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
"TABLES
"t_head = t_head
"t_item = t_item
EXCEPTIONS
formamtting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.