Post #35:Merge N Forms into 1 PDF

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.

 

 

post35_img01
Form Output 1
post35_img02
Form Output 2
post35_img03
Form Output 3

 


 

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

 

 

Leave a comment