Hi,
The only reasonable way I can think of boils down to following:
1) calling the print options dialog (using FM SSFCOMP_SHOW_DIALOG) in application rather than letting Smartform Composer handle it internally;
2) after options dialog setting CONTROL_PARAMETERS-NO_DIALOG = 'X' and, if the user has choosen preview, OUTPUT_OPTIONS-TDNOPRINT = 'X'
I have thrown together quick example based on SF_EXAMPLE_01 (do use SAPBC_DATA_GENERATOR to generate the test data or logic will not work!!!):
REPORT SF_EXAMPLE_01.
DATA: GS_SSFCOMPIN TYPE SSFCOMPIN .DATA: GS_OUTPUT_OPTIONS TYPE SSFCOMPOP.
DATA: GS_CONTROL_PARAMETERS TYPE SSFCTRLOP .
DATA: CARR_ID TYPE SBOOK-CARRID,FM_NAME TYPE RS38L_FNAM.
PARAMETER: P_CUSTID TYPE SCUSTOM-ID DEFAULT1.
SELECT-OPTIONS: S_CARRID FOR CARR_ID DEFAULT'LH'TO'LH'.
PARAMETER: P_FORM TYPE TDSFNAME DEFAULT'SF_EXAMPLE_01'.
DATA: CUSTOMER TYPE SCUSTOM,
BOOKINGS TYPE TY_BOOKINGS,
CONNECTIONS TYPE TY_CONNECTIONS.
START-OF-SELECTION.
CALLFUNCTION'SSFCOMP_SHOW_DIALOG'EXPORTING
INPUT = GS_SSFCOMPIN
OK_BUTTON = SPACE
IMPORTING
* ARCHIVE_PARAMETERS =
OUTPUT_OPTIONS = GS_OUTPUT_OPTIONS
CONTROL_PARAMETERS = GS_CONTROL_PARAMETERS
EXCEPTIONS
ERROR = 1
OTHERS = 2.
IF SY-SUBRC <>0.
MESSAGEID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
GS_CONTROL_PARAMETERS-NO_DIALOG = 'X' .
IF GS_CONTROL_PARAMETERS-PREVIEW = 'X' .
GS_OUTPUT_OPTIONS-TDNOPRINT = 'X' .
ENDIF .
ENDIF.
* get data
SELECTSINGLE * FROM SCUSTOM INTO CUSTOMER WHEREID = P_CUSTID.
CHECK SY-SUBRC = 0.
SELECT * FROM SBOOK INTOTABLE BOOKINGS
WHERE CUSTOMID = P_CUSTID
AND CARRID IN S_CARRID
ORDERBY PRIMARY KEY.
SELECT * FROM SPFLI INTOTABLE CONNECTIONS
FORALLENTRIESIN BOOKINGS
WHERE CARRID = BOOKINGS-CARRID
AND CONNID = BOOKINGS-CONNID
ORDERBY PRIMARY KEY.
* print dataCALLFUNCTION'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = P_FORM
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <>0.* error handling
MESSAGEID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* now call the generated function moduleCALLFUNCTION FM_NAME
EXPORTING
CONTROL_PARAMETERS = GS_CONTROL_PARAMETERS
OUTPUT_OPTIONS = GS_OUTPUT_OPTIONS
USER_SETTINGS = SPACE
CUSTOMER = CUSTOMER
BOOKINGS = BOOKINGS
CONNECTIONS = CONNECTIONS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <>0.* error handling
MESSAGEID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Do not forget to take ARCHIVE_PARAMETERS along; I have left it out because it's quick example for print button
cheers
Janis