Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

pdf generation

Former Member
0 Likes
640

hi experts,

my requirement is to generate a spool request as soon as i press F8 or i execute my classical report. My classical report's output should get copied into a spool request.At the same time, i want to catch that spool request number at runtime as soon as that spool request is generated.

After that i want to convert generated spool request into PDF file onto my local disk.

Please step by step solution for the same.

Thanks,

Gaurav

3 REPLIES 3
Read only

Former Member
0 Likes
600

hi,

get spool number from table SP01

use this fm by passing ur spool number

CONVERT_ABAPSPOOLJOB_2_PDF

Read only

0 Likes
600

hi,

i want to convert my classical report output to spool request not smartforms's output.

Thanks,

Gaurav

Read only

Former Member
0 Likes
600

Hi,

Try this code

*&---------------------------------------------------------------------*
*& Report  ZETCOMPU                                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  zetcompu                                .

TABLES : zmprint_file,zmpay_master,zmpit_exemption.

DATA : it_prnt LIKE zmprint_file OCCURS 0 WITH HEADER LINE,
       it_etc LIKE zmprint_file OCCURS 0 WITH HEADER LINE,
       it_f16 LIKE zmpit_form16 OCCURS 0 WITH HEADER LINE.

DATA: fm_name TYPE rs38l_fnam,control TYPE ssfctrlop, op TYPE ssfcompop,
      p_form TYPE tdsfname VALUE 'ZTAX_COMPU',
      errtab  TYPE tsferror,spoolid TYPE ssfcrescl.

DATA:t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,
* Internal table to hold OTF data recd from the SMARTFORM
*T_OTF_FROM_FM TYPE SSFCRESCL,

* Internal table to hold the data from the FM CONVERT_OTF
t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.

DATA:

*w_form_name TYPE tdsfname VALUE 'ZSURESH_TEST',
w_fmodule TYPE rs38l_fnam,
w_cparam TYPE ssfctrlop,
w_outoptions TYPE ssfcompop,
w_bin_filesize TYPE i, " Binary File Size
w_file_name TYPE string,
w_file_path TYPE string,
w_full_path TYPE string,pnrno(8),ldate TYPE sy-datum.


DATA : BEGIN OF itab OCCURS 0,
         proc_yyyymm LIKE zmpay_master-proc_yyyymm,
         category LIKE zmpay_master-category,
         emp_no LIKE zmpay_master-emp_no,
         pnrno  LIKE zmpay_master-pnrno,
         grade  LIKE zmpay_master-grade,
       END OF itab.

DATA : BEGIN OF it_hrc OCCURS 0,
*         proc_yyyymm LIKE zmpay_master,
         year1(4) TYPE n,
         month1(2) TYPE n,
         salary LIKE zmpay_master-basic,
         rent  LIKE zmpay_master-basic,
         rpos  LIKE zmpay_master-basic,
         ahra  LIKE zmpay_master-basic,
         fosal LIKE zmpay_master-basic,
         least LIKE zmpay_master-basic,
       END OF it_hrc,
       it_hrc1 LIKE it_hrc OCCURS 0 WITH HEADER LINE,
       hrc LIKE it_hrc,
       itexem   LIKE  zmpit_exemption  OCCURS 0 WITH HEADER LINE,
       exem LIKE itexem.
DATA : fistdt LIKE sy-datum,idx TYPE sy-tabix.
*       fiendt LIKE sy-datum.
DATA : BEGIN OF sp1 OCCURS 0.
        INCLUDE STRUCTURE ztaxadvp1.
DATA : END OF sp1.
DATA : wa LIKE sp1.
DATA : BEGIN OF sp2 OCCURS 0.
        INCLUDE STRUCTURE ztaxadvp2.
DATA : END OF sp2.
DATA : wa1 LIKE sp2,value TYPE p DECIMALS 2,bgchk(1).

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS    : procyymm LIKE sy-datum OBLIGATORY,
                category LIKE zmpay_master-category OBLIGATORY.
SELECT-OPTIONS : emp_no FOR zmpay_master-emp_no.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
PARAMETERS : pdf TYPE c AS CHECKBOX.
PARAMETER path(40) DEFAULT 'D:\TAXADVICE'.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-001.
PARAMETERS : declrn RADIOBUTTON GROUP r1,
             actual RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b3.

AT SELECTION-SCREEN ON category.
  AUTHORITY-CHECK OBJECT 'F_RE_TRANS'
  ID 'TCD' FIELD category.
  IF sy-subrc <> 0.
    MESSAGE e001(zpay).
  ENDIF.

START-OF-SELECTION.
  bgchk = 'X'.
  EXPORT bgchk TO MEMORY ID 'CHK'.

  CALL FUNCTION 'ZLAST_DATE'
    EXPORTING
      v_date    = sy-datum
    IMPORTING
      v_last_dt = ldate.
  SELECT SINGLE * FROM zmprint_file WHERE proc_yyyymm = ldate AND category = category.
  IF sy-subrc NE 0.
    ldate = sy-datum - 30.
    CALL FUNCTION 'ZLAST_DATE'
      EXPORTING
        v_date    = ldate
      IMPORTING
        v_last_dt = ldate.

  ENDIF.
  CALL FUNCTION 'ZFIRSTLASTDATE_FISCAL_YEAR'
    EXPORTING
      v_date     = procyymm
    IMPORTING
      start_date = fistdt
      end_date   = procyymm.

  IF pdf = 'X'.
    SELECT * FROM zmpay_master INTO CORRESPONDING FIELDS OF TABLE itab
                            WHERE proc_yyyymm = ldate AND
                              category = category AND
                              emp_no IN emp_no AND
                              pnrno NE space.
  ELSE.
    SELECT * FROM zmpay_master INTO CORRESPONDING FIELDS OF TABLE itab
                               WHERE proc_yyyymm = ldate AND
                                 category = category AND
                                 emp_no IN emp_no.

  ENDIF.
  SORT itab BY proc_yyyymm DESCENDING category emp_no.
  DELETE ADJACENT DUPLICATES FROM itab COMPARING emp_no category.

  LOOP AT itab.
*    IF itab-grade = 'AP' OR itab-grade = '65' OR
*                                  itab-grade = '41' OR itab-grade = '52' .
*      DELETE itab.
*    ENDIF.
  ENDLOOP.


  SUBMIT zmpit_worksheet WITH ldtfinyr = procyymm
              WITH cat      = category
              WITH emp      IN emp_no
              WITH vact     = 'X'
              WITH declrn   = declrn
              WITH actual   = actual AND RETURN.

  IMPORT sp1[] sp2[] itexem[] FROM MEMORY ID 'MEM1'.


  IF pdf = 'X'.
    CLEAR control.
    control-preview   = 'X'.
    control-no_open   = 'X'.
    control-no_close  = 'X'.
    control-no_dialog = 'X'.
    control-getotf = 'X'.
*  control-DEVICE     = 'A000'.
    op-tddest = 'A000'.
    op-tdnewid = 'X'.
  ELSE.
    CLEAR control.
    control-preview   = 'X'.
    control-no_open   = 'X'.
    control-no_close  = 'X'.
    op-tddest = 'A000'.
  ENDIF.

  IF pdf = space.
    PERFORM ssf_open.
  ENDIF.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING  formname           = p_form
*                 variant            = ' '
*                 direct_call        = ' '
        IMPORTING  fm_name            = fm_name
        EXCEPTIONS no_form            = 1
                   no_function_module = 2
                   OTHERS             = 3.
*  DELETE ADJACENT DUPLICATES FROM it_prnt COMPARING  proc_yyyymm emp_no category.

  LOOP AT itab.
    CLEAR : wa,wa1,sp1,sp2,zmpit_exemption,exem,itexem.
    READ TABLE sp1 WITH KEY emp_no = itab-emp_no.
    IF sy-subrc EQ 0.
      READ TABLE sp2 WITH KEY emp_no = itab-emp_no.
      IF sy-subrc EQ 0.
        MOVE-CORRESPONDING sp1 TO wa.
        MOVE-CORRESPONDING sp2 TO wa1.
      ENDIF.
    ENDIF.
    READ TABLE itexem WITH KEY emp_no = itab-emp_no.
    IF sy-subrc EQ 0.
      MOVE-CORRESPONDING itexem TO exem.
    ENDIF.

    SELECT * FROM zmprint_file INTO CORRESPONDING FIELDS OF TABLE it_etc
                                  WHERE proc_yyyymm BETWEEN fistdt AND procyymm AND
*                                   category = category AND
                                     emp_no = itab-emp_no.
    PERFORM hra_rebate_computation.
    SORT it_hrc BY year1 month1.
    SELECT * FROM zmpit_form16 INTO TABLE it_f16 WHERE fiscal_yearend EQ procyymm AND
                                                 emp_no EQ itab-emp_no AND
                                                 category EQ category.
    IF pdf = 'X'.
      PERFORM ssf_open.
      PERFORM pdf_file.
    ELSE.
      PERFORM print_preview.
    ENDIF.
    REFRESH : it_etc.
  ENDLOOP.

  IF pdf = ' '.
    CALL FUNCTION 'SSF_CLOSE'
*    IMPORTING
*      job_output_info  = spoolid
      EXCEPTIONS
        formatting_error = 1
        internal_error   = 2
        send_error       = 3
        OTHERS           = 4.

    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.
    ENDIF.
  ENDIF.


* analyse internal error table of Smart Forms
  CALL FUNCTION 'SSF_READ_ERRORS'
    IMPORTING
      errortab = errtab.
  IF NOT errtab IS INITIAL.
*   add your handling
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  hra_rebate_computation
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM hra_rebate_computation .
  PERFORM basic_data.
  SORT it_etc BY proc_yyyymm emp_no.
  LOOP AT it_etc.
    SELECT SINGLE * FROM zmpit_exemption WHERE fiscal_yearend = procyymm AND emp_no = it_etc-emp_no.
    it_hrc1-year1 = it_etc-proc_yyyymm+0(4).
    it_hrc1-month1 = it_etc-proc_yyyymm+4(2).
    it_hrc1-salary = it_etc-basic + it_etc-fixed_da + it_etc-skill_pay.
    IF it_etc-proc_yyyymm BETWEEN zmpit_exemption-hrent_fdt AND zmpit_exemption-hrent_tdt.
      it_hrc1-rent = zmpit_exemption-rent.
    ELSEIF it_etc-proc_yyyymm BETWEEN zmpit_exemption-hrent_fdt1 AND zmpit_exemption-hrent_tdt1.
      it_hrc1-rent = zmpit_exemption-rent1.
    ELSEIF it_etc-proc_yyyymm BETWEEN zmpit_exemption-hrent_fdt2 AND zmpit_exemption-hrent_tdt2.
      it_hrc1-rent = zmpit_exemption-rent2.
    ENDIF.
    it_hrc1-rpos = it_hrc1-rent - ( ( it_hrc1-salary * 10 ) / 100 ).
    IF it_hrc1-rpos LT 0.
      it_hrc1-rpos = 0.
    ENDIF.
    it_hrc1-ahra = it_etc-hra.
    SELECT SINGLE * FROM zmpay_master WHERE proc_yyyymm = it_etc-proc_yyyymm AND emp_no = it_etc-emp_no.
    IF zmpay_master-metro = 'Y'.
      it_hrc1-fosal = ( it_hrc1-salary * 50 ) / 100.
    ELSEIF zmpay_master-metro = 'N'.
      it_hrc1-fosal = ( it_hrc1-salary * 40 ) / 100.
    ENDIF.
*    IF it_hrc1-rpos LT it_hrc1-ahra.
*      value = it_hrc1-rpos.
*    ELSE.
*      value = it_hrc1-ahra.
*    ENDIF.
*    IF value LT it_hrc1-fosal.
*      value = value.
*    ELSE.
*      value = it_hrc1-fosal.
*    ENDIF.
*    it_hrc1-least = value.
    it_hrc1-least = it_hrc1-rpos + it_hrc1-ahra + it_hrc1-fosal.
    APPEND it_hrc1.CLEAR : it_hrc1,zmpit_exemption,value.
  ENDLOOP.
  LOOP AT it_hrc.
    idx = sy-tabix.
    READ TABLE it_hrc1 WITH KEY year1 = it_hrc-year1 month1 = it_hrc-month1.
    IF sy-subrc EQ 0.
      MOVE it_hrc1 TO hrc.
      it_hrc-salary = it_hrc1-salary.
      it_hrc-rent   = it_hrc1-rent.
      it_hrc-rpos   = it_hrc1-rpos .
      it_hrc-ahra  = it_hrc1-ahra.
      it_hrc-fosal = it_hrc1-fosal.
      it_hrc-least = it_hrc1-least .
      MODIFY it_hrc INDEX idx.
    ELSE.
      it_hrc-salary = hrc-salary.
      it_hrc-rent   = hrc-rent.
      it_hrc-rpos   = hrc-rpos .
      it_hrc-ahra   = hrc-ahra.
      it_hrc-fosal  = hrc-fosal.
      it_hrc-least  = hrc-least .
      MODIFY it_hrc INDEX idx.
    ENDIF.
    CLEAR : it_hrc,it_hrc1.
  ENDLOOP.
ENDFORM.                    " hra_rebate_computation
*&---------------------------------------------------------------------*
*&      Form  pdf_file
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM pdf_file .


  CALL FUNCTION fm_name
  EXPORTING
*     ARCHIVE_INDEX              =
*     ARCHIVE_INDEX_TAB          =
*     ARCHIVE_PARAMETERS         =
      control_parameters         = control
*     MAIL_APPL_OBJ              =
*     MAIL_RECIPIENT             =
*     MAIL_SENDER                =
      output_options             = op
      user_settings              = ' '
      emp_no                     = itab-emp_no
      proc_yyyymm                = procyymm
      category                   = itab-category
      sp1                        = wa
      sp2                        = wa1
      itexem                     = exem
    TABLES
      it_etc                     = it_etc
      it_f16                     = it_f16
      it_hrc                     = it_hrc
   EXCEPTIONS
     formatting_error           = 1
     internal_error             = 2
     send_error                 = 3
     user_canceled              = 4
     OTHERS                     = 5
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  CALL FUNCTION 'SSF_CLOSE'
    IMPORTING
      job_output_info  = spoolid
    EXCEPTIONS
      formatting_error = 1
      internal_error   = 2
      send_error       = 3
      OTHERS           = 4.

  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.
  ENDIF.
  REFRESH : it_etc,it_f16,it_hrc.CLEAR : it_etc,it_f16,it_hrc.

  t_otf[] = spoolid-otfdata[].

  CALL FUNCTION 'CONVERT_OTF'
   EXPORTING
     format                      = 'PDF'
     max_linewidth               = 10
   IMPORTING
     bin_filesize                = w_bin_filesize
*   BIN_FILE                    =
    TABLES
      otf                         = t_otf
      lines                       = t_pdf_tab
   EXCEPTIONS
     err_max_linewidth           = 1
     err_format                  = 2
     err_conv_not_possible       = 3
     err_bad_otf                 = 4
     OTHERS                      = 5
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
  CLEAR:w_full_path.
  IF itab-pnrno NA sy-abcde.
    UNPACK itab-pnrno TO itab-pnrno.
  ENDIF.
  pnrno = itab-pnrno+2(8).
*  SHIFT pnrno LEFT DELETING LEADING '0'.
  CONCATENATE path '\' pnrno '.pdf' INTO w_full_path.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize = w_bin_filesize
      filename     = w_full_path
      filetype     = 'BIN'
    TABLES
      data_tab     = t_pdf_tab.
  CLEAR w_full_path.
  CONCATENATE 'Download completed for Employee - ' itab-emp_no  INTO w_full_path SEPARATED BY space.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
   EXPORTING
*         PERCENTAGE       = 0
     text             = w_full_path.
  CLEAR : t_otf,spoolid, t_pdf_tab,pnrno.
  REFRESH : t_otf, t_pdf_tab.
ENDFORM.                    " pdf_file
*&---------------------------------------------------------------------*
*&      Form  print_preview
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM print_preview .
  CALL FUNCTION fm_name
   EXPORTING
*     ARCHIVE_INDEX              =
*     ARCHIVE_INDEX_TAB          =
*     ARCHIVE_PARAMETERS         =
       control_parameters         = control
*     MAIL_APPL_OBJ              =
*     MAIL_RECIPIENT             =
*     MAIL_SENDER                =
       output_options             = op
       user_settings              = ' '
       emp_no                     = itab-emp_no
       proc_yyyymm                = procyymm
       category                   = itab-category
       sp1                        = wa
       sp2                        = wa1
       itexem                     = exem
     TABLES
       it_etc                     = it_etc
       it_f16                     = it_f16
       it_hrc                     = it_hrc
    EXCEPTIONS
      formatting_error           = 1
      internal_error             = 2
      send_error                 = 3
      user_canceled              = 4
      OTHERS                     = 5
             .

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  REFRESH : it_etc,it_f16,it_hrc.CLEAR : it_etc,it_f16,it_hrc,itab.

ENDFORM.                    " print_preview
*&---------------------------------------------------------------------*
*&      Form  ssf_open
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ssf_open .
  CALL FUNCTION 'SSF_OPEN'
       EXPORTING
*     ARCHIVE_PARAMETERS       =
        user_settings            = ' '
*     MAIL_SENDER              =
*     MAIL_RECIPIENT           =
*     MAIL_APPL_OBJ            =
        output_options           = op
        control_parameters       = control
      EXCEPTIONS
         formatting_error         = 1
         internal_error           = 2
         send_error               = 3
         user_canceled            = 4
         OTHERS                   = 5
                .
ENDFORM.                    " ssf_open
*&---------------------------------------------------------------------*
*&      Form  basic_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM basic_data .
  REFRESH : it_hrc,it_hrc1.CLEAR : it_hrc,hrc,it_hrc1.
  it_hrc-month1 = '01'.
  APPEND it_hrc.
  it_hrc-month1 = '02'.
  APPEND it_hrc.
  it_hrc-month1 = '03'.
  APPEND it_hrc.
  it_hrc-month1 = '04'.
  APPEND it_hrc.
  it_hrc-month1 = '05'.
  APPEND it_hrc.
  it_hrc-month1 = '06'.
  APPEND it_hrc.
  it_hrc-month1 = '07'.
  APPEND it_hrc.
  it_hrc-month1 = '08'.
  APPEND it_hrc.
  it_hrc-month1 = '09'.
  APPEND it_hrc.
  it_hrc-month1 = '10'.
  APPEND it_hrc.
  it_hrc-month1 = '11'.
  APPEND it_hrc.
  it_hrc-month1 = '12'.
  APPEND it_hrc.
  LOOP AT it_hrc.
    CASE it_hrc-month1.
      WHEN '01' OR '02' OR '03'.
        it_hrc-year1 = procyymm+0(4).
      WHEN '04' OR '05' OR '06' OR '07' OR '08' OR '09' OR '10' OR '11' OR '12'.
        it_hrc-year1 = fistdt+0(4).
    ENDCASE.
    MODIFY it_hrc INDEX sy-tabix.
  ENDLOOP.
  CLEAR it_hrc.
  SORT it_hrc BY year1 ASCENDING month1 ASCENDING.
ENDFORM.                    " basic_data

Regards,

V.Balaji

Reward if Usefull...