‎2008 Mar 26 11:07 AM
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
‎2008 Mar 26 11:14 AM
hi,
get spool number from table SP01
use this fm by passing ur spool number
CONVERT_ABAPSPOOLJOB_2_PDF
‎2008 Mar 26 11:24 AM
hi,
i want to convert my classical report output to spool request not smartforms's output.
Thanks,
Gaurav
‎2008 Mar 26 11:15 AM
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_dataRegards,
V.Balaji
Reward if Usefull...