Converting forms into PDF to send them via e-mail or save them into a local folder is useful. Sometimes we have the need to send one PDF file with all customer orders or employee statements.
In this blog post i will show you how to merge N forms into one Form and convert it into PDF File.
Merging N Forms into one works only in non preview mode because we are populating the OTF format of every Form and then convert it to one PDF Table.
In this example I created a Smartform with an import field NUMBER as shown above. I’m calling the form 3 times in order to get 3 Forms, then I’m populating the OTF format into one Internal table GT_TOT_OTF. This table will be converted into PDF format using Function Module CONVERT_OTF_2_PDF.
Source Code:
REPORT Z_RIM_ABASSI. *--- Data Declaration DATA : FM_NAME TYPE RS38L_FNAM, GS_CONTROL TYPE SSFCTRLOP, GS_OPTIONS TYPE SSFCOMPOP, GS_OUTPUT TYPE SSFCRESCL. DATA: V_NUMBER TYPE I. *-- convert smartform DATA: GT_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE, GT_PDF LIKE TLINE OCCURS 100 WITH HEADER LINE, GT_DOC LIKE DOCS OCCURS 0 WITH HEADER LINE, GT_TOT_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE. DATA: V_LEN_IN LIKE SOOD-OBJLEN. DATA: V_BUFFER TYPE STRING. *--- Selection-screen SELECTION-SCREEN: BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-001. PARAMETERS: P_FILE TYPE STRING. SELECTION-SCREEN: END OF BLOCK A1. *-- At selection-screen AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE. DATA: GT_FILETABLE TYPE FILETABLE. DATA: G_STRING TYPE STRING. DATA: G_SUBRC TYPE I. CLEAR GT_FILETABLE[]. REFRESH: GT_FILETABLE. CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG EXPORTING WINDOW_TITLE = 'Select File' DEFAULT_EXTENSION = 'PDF' INITIAL_DIRECTORY = 'C:\' CHANGING FILE_TABLE = GT_FILETABLE RC = G_SUBRC. READ TABLE GT_FILETABLE INDEX 1 INTO G_STRING. P_FILE = G_STRING. CALL METHOD CL_GUI_CFW=>FLUSH. *--- Start-of-selection START-OF-SELECTION. V_NUMBER = 0. *-- Call Smartform DO 3 TIMES. V_NUMBER = V_NUMBER + 1. PERFORM CALL_SMARTFORM. ENDDO. *-- Convert PDF PERFORM CONVERT_SMARTFORM. *-- Download PDF PERFORM DOWNLOAD_PDF. END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form CALL_SMARTFORM *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM CALL_SMARTFORM . *-- Get the Smartform Function Module Name CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING FORMNAME = 'Z_SMARTFORM' IMPORTING FM_NAME = FM_NAME EXCEPTIONS NO_FORM = 1 NO_FUNCTION_MODULE = 2 OTHERS = 3. IF SY-SUBRC <> 0. * error handling MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. EXIT. ENDIF. *-- Populate the Controle Parameters CLEAR GS_CONTROL. GS_CONTROL-NO_DIALOG = 'X'. GS_CONTROL-GETOTF = 'X'. *-- Call the Smartform CALL FUNCTION FM_NAME EXPORTING CONTROL_PARAMETERS = GS_CONTROL OUTPUT_OPTIONS = GS_OPTIONS USER_SETTINGS = 'X' NUMBER = V_NUMBER IMPORTING JOB_OUTPUT_INFO = GS_OUTPUT EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 USER_CANCELED = 4 OTHERS = 5. IF SY-SUBRC <> 0. ENDIF. CLEAR GT_OTF[]. GT_OTF[] = GS_OUTPUT-OTFDATA[]. APPEND LINES OF GT_OTF TO GT_TOT_OTF. ENDFORM. " CALL_SMARTFORM *&---------------------------------------------------------------------* *& Form CONVERT_SMARTFORM *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM CONVERT_SMARTFORM . CLEAR V_LEN_IN. CLEAR GT_PDF[]. *Covert the OTF data returned to PDF format CALL FUNCTION 'CONVERT_OTF_2_PDF' EXPORTING USE_OTF_MC_CMD = 'X' IMPORTING BIN_FILESIZE = V_LEN_IN TABLES OTF = GT_TOT_OTF DOCTAB_ARCHIVE = GT_DOC LINES = GT_PDF EXCEPTIONS ERR_CONV_NOT_POSSIBLE = 1 ERR_OTF_MC_NOENDMARKER = 2 OTHERS = 3. IF SY-SUBRC <> 0. ENDIF. ENDFORM. " CONVERT_SMARTFORM *&---------------------------------------------------------------------* *& Form DOWNLOAD_PDF *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM DOWNLOAD_PDF . *-- Download file CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD EXPORTING FILENAME = P_FILE FILETYPE = 'BIN' CHANGING DATA_TAB = GT_PDF[] EXCEPTIONS FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKNOWN_ERROR = 6 HEADER_NOT_ALLOWED = 7 SEPARATOR_NOT_ALLOWED = 8 FILESIZE_NOT_ALLOWED = 9 HEADER_TOO_LONG = 10 DP_ERROR_CREATE = 11 DP_ERROR_SEND = 12 DP_ERROR_WRITE = 13 UNKNOWN_DP_ERROR = 14 ACCESS_DENIED = 15 DP_OUT_OF_MEMORY = 16 DISK_FULL = 17 DP_TIMEOUT = 18 FILE_NOT_FOUND = 19 DATAPROVIDER_EXCEPTION = 20 CONTROL_FLUSH_ERROR = 21 NOT_SUPPORTED_BY_GUI = 22 ERROR_NO_GUI = 23 OTHERS = 24. IF SY-SUBRC <> 0. ENDIF. ENDFORM. " DOWNLOAD_PDF