在日常开发中,经常会遇到需要一次性打印多张内容不同的报表,直接调用SmartForms时,可能每次调用后都会执行一次打印操作,会在循环中反复出现打印对话框,影响程序执行效率。比如,一次性打印多张生产订单的领料单,一次性打印多张产品标签等等
SAP打印控制了假脱机功能,允许将多张表先缓存,最后一次性提交打印请求。
实现假脱机控制控制主要通过SmartForms函数的CONTROL_PARAMETERS接口的NO_OPEN、NO_CLOSE两个参数来控制。
要实现一次打印多次调用SmartForms功能,需在正式调用SmartForms前,先CALL FUNCTION 'SSF_OPEN' ,在循环调用后,最后再CALL FUNCTION 'SSF_CLOSE'即可。
示例代码:
DATA: W_SFNAME TYPE RS38L_FNAM.
DATA: LS_CONTROL_PARAM TYPE SSFCTRLOP .
DATA: LS_COMPOSER_PARAM TYPE SSFCOMPOP .
DATA: OUTOPT TYPE SSFCRESOP.
DATA: I_JOB_OUTPUT_INFO TYPE SSFCRESCL.
LS_CONTROL_PARAM-LANGU = '1'. "1:CHINESE
LS_CONTROL_PARAM-NO_OPEN = 'X'.
LS_CONTROL_PARAM-NO_CLOSE = 'X'.
CALL FUNCTION 'SSF_OPEN' “调用SSF_OPEN函数设置打印机,打开输出请求
EXPORTING
CONTROL_PARAMETERS = LS_CONTROL_PARAM
OUTPUT_OPTIONS = LS_COMPOSER_PARAM
IMPORTING
JOB_OUTPUT_OPTIONS = OUTOPT
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.
EXIT.
ENDIF.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZMMF0009'
IMPORTING
FM_NAME = W_SFNAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
LOOP AT GT_DATA INTO GS_DATA.
CALL FUNCTION W_SFNAME " '/1BCDWB/SF00000322'
EXPORTING
CONTROL_PARAMETERS = LS_CONTROL_PARAM
OUTPUT_OPTIONS = LS_COMPOSER_PARAM
WA_HEADER = GS_DATA-HEADER
TABLES
IT_ITEM = GS_DATA-ITEMS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
LEAVE TO LIST-PROCESSING.
ENDIF.
ENDLOOP.
CALL FUNCTION 'SSF_CLOSE' “关闭打印机
IMPORTING
JOB_OUTPUT_INFO = I_JOB_OUTPUT_INFO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.