Wednesday, August 6, 2025

Print Multiple Smartform from Driver Program

 REPORT ZPRIMT_MUL_SMARTFORMS.


DATA :  FM_NAME  TYPE RS38L_FNAM,
        CONTROL_PARAMETERS  TYPE  SSFCTRLOP,
        OUTPUT_OPTIONS  TYPE SSFCOMPOP,
        JOB_OUTPUT_INFO TYPE  SSFCRESCL.

types begin of tp_itab,
        name(50),
        date(8),
        amt(15),
        end of tp_itab.

data gt_itab type STANDARD TABLE OF tp_itab,
       gs_itab type tp_itab,
       gv_cnt type i,
       gv_cnt2 type i.


DATA GV_FILE  TYPE STRING,
       GV_FLAG  TYPE FLAG,
       GV_FLAG1 TYPE FLAG.



SELECTION-SCREEN begin of BLOCK b1 WITH FRAME TITLE text-001.
 PARAMETERS IP_NAME  TYPE CHAR100,
              IP_CDATE  TYPE  SYDATUM,
              IP_AMT  TYPE  PC207-BETRG.
SELECTION-SCREEN skip.
PARAMETERS P_FILE    TYPE IBIPPARMS-PATH OBLIGATORY.
SELECTION-SCREEN end of BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

*  PERFORM get_file_path CHANGING filename.
  CALL FUNCTION 'F4_FILENAME'
*    EXPORTING
*      PROGRAM_NAME  = SYST-CPROG
*      DYNPRO_NUMBER = SYST-DYNNR
*      FIELD_NAME    = ''
    IMPORTING
      FILE_NAME P_FILE.


START-OF-SELECTION.

 if P_FILE is NOT INITIAL.

   GV_FILE P_FILE.
  CLEAR GT_ITAB[].

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME                GV_FILE
      FILETYPE                'ASC'
      HAS_FIELD_SEPARATOR     'X'
*     HEADER_LENGTH           = 0
*     READ_BY_LINE            = 'X'
*     DAT_MODE                = ' '
*     CODEPAGE                = ' '
*     IGNORE_CERR             = ABAP_TRUE
*     REPLACEMENT             = '#'
*     CHECK_BOM               = ' '
*     VIRUS_SCAN_PROFILE      =
*     NO_AUTH_CHECK           = ' '
*  IMPORTING
*     FILELENGTH              =
*     HEADER                  =
    TABLES
      DATA_TAB                GT_ITAB[]
*  CHANGING
*     ISSCANPERFORMED         = ' '
    EXCEPTIONS
      FILE_OPEN_ERROR         1
      FILE_READ_ERROR         2
      NO_BATCH                3
      GUI_REFUSE_FILETRANSFER 4
      INVALID_TYPE            5
      NO_AUTHORITY            6
      UNKNOWN_ERROR           7
      BAD_DATA_FORMAT         8
      HEADER_NOT_ALLOWED      9
      SEPARATOR_NOT_ALLOWED   10
      HEADER_TOO_LONG         11
      UNKNOWN_DP_ERROR        12
      ACCESS_DENIED           13
      DP_OUT_OF_MEMORY        14
      DISK_FULL               15
      DP_TIMEOUT              16
      OTHERS                  17.
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.


 ENDIF.

    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        FORMNAME                 'ZCHEQUE_PRINT1'
*       VARIANT                  = ' '
*       DIRECT_CALL              = ' '
     IMPORTING
       FM_NAME                  FM_NAME
     EXCEPTIONS
       NO_FORM                  1
       NO_FUNCTION_MODULE       2
       OTHERS                   3
              .
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.

    describe table gt_itab lines gv_cnt.


  IF FM_NAME IS NOT INITIAL.

    loop at gt_itab into gs_itab.

    if gv_cnt ne 1.

    gv_cnt2 sy-tabix .
    case gv_cnt2.
    when '1'.
    control_parameters-no_open   space.
    control_parameters-no_close  'X'.
    when gv_cnt .
    control_parameters-no_open   'X'.
    control_parameters-no_close  space.
    when others.
    control_parameters-no_open   'X'.
    control_parameters-no_close  'X'.
    endcase.

    endif.

    CONTROL_PARAMETERS-PREVIEW    'X'.
*    CONTROL_PARAMETERS-GETOTF    = 'X'.   "to get otf data

    CONTROL_PARAMETERS-NO_DIALOG  'X'.
    OUTPUT_OPTIONS-TDDEST         'LP01'.

    ip_name   gs_itab-NAME.
    IP_CDATE  gs_itab-DATE.
    CONDENSE gs_itab-AMT.
    IP_AMT gs_itab-AMT.

  CALL FUNCTION FM_NAME             "'/1BCDWB/SF00000259'
   EXPORTING
*     ARCHIVE_INDEX              =
*     ARCHIVE_INDEX_TAB          =
*     ARCHIVE_PARAMETERS         =
     CONTROL_PARAMETERS         CONTROL_PARAMETERS
*     MAIL_APPL_OBJ              =
*     MAIL_RECIPIENT             =
*     MAIL_SENDER                =
     OUTPUT_OPTIONS             OUTPUT_OPTIONS
     USER_SETTINGS              'X'
     IP_NAME                    IP_NAME
     IP_CDATE                   IP_CDATE
     IP_AMOUNT                  IP_AMT
*   IMPORTING
*     DOCUMENT_OUTPUT_INFO       =
*     JOB_OUTPUT_INFO            = JOB_OUTPUT_INFO
*     JOB_OUTPUT_OPTIONS         =
   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.

*   CALL FUNCTION 'HR_IT_DISPLAY_WITH_PDF'
**    EXPORTING
**      IV_PDF          =
*    TABLES
*      OTF_TABLE       = JOB_OUTPUT_INFO-OTFDATA.

    endloop.

  ENDIF.
END-OF-SELECTION.