当点击ALV的打印按钮后,选择打印预览时不调用单号生成FORM,只有当点击的是打印的时候才会调用。
代码加在调用SF之后,关闭SF之前。
"如果为X 就是预览 否则就直接打印
IF LS_OUTOPT-TDPREVIEW = 'X'.
ELSE.
"生成单号
PERFORM FRM_CREATE_QY USING IT_ROWS .
ENDIF.
具体代码:
FORM FRM_PRINT_FORM USING IT_ROWS TYPE LVC_T_ROID.
DATA: LV_FNAME TYPE TDSFNAME,
LS_CONTROL_PARAM TYPE SSFCTRLOP,
LS_COMPOSER_PARAM TYPE SSFCOMPOP,
LS_OUTOPT TYPE SSFCRESOP,
LS_JOB_OUTPUT_INFO TYPE SSFCRESCL.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
CONTROL_PARAMETERS = LS_CONTROL_PARAM
OUTPUT_OPTIONS = LS_COMPOSER_PARAM
IMPORTING
JOB_OUTPUT_OPTIONS = LS_OUTOPT
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
"GET FORM NAME
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = GC_FORMNAME
IMPORTING
FM_NAME = LV_FNAME.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LS_CONTROL_PARAM-LANGU = SY-LANGU.
LS_CONTROL_PARAM-NO_OPEN = GC_FLAG_X.
LS_CONTROL_PARAM-NO_CLOSE = GC_FLAG_X.
LT_DATA = VALUE #( FOR LS_ROW IN IT_ROWS
( CORRESPONDING #( VALUE #( GT_DATA[ LS_ROW-ROW_ID ] OPTIONAL ) ) ) ).
CALL FUNCTION LV_FNAME
EXPORTING
CONTROL_PARAMETERS = LS_CONTROL_PARAM
OUTPUT_OPTIONS = LS_COMPOSER_PARAM
* USER_SETTINGS = ''
GS_HEADER = LS_DATA
TABLES
GT_DATA = LT_DATA
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* IMPLEMENT SUITABLE ERROR HANDLING HERE
ENDIF.
ENDLOOP.
"如果为X 就是预览 否则就直接打印
IF LS_OUTOPT-TDPREVIEW = 'X'.
ELSE.
"生成单号
PERFORM FRM_CREATE_QY USING IT_ROWS .
ENDIF.
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
JOB_OUTPUT_INFO = LS_JOB_OUTPUT_INFO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
ENDFORM.