Sie sind auf Seite 1von 14

Convert Classical/ALV/Interactive Reports to direct PDF File

created by stallone christian on Jun 4, 2012 10:12 AM, last modified by Thomas Zloch on Jun 4, 2012 10:46 AM Version 2 inShare Hello , While Developing SAP reports in ABAP we faces number of similar requirements like Save as Excel, Mail , Save as PDF Output Etc. For saving as PDF we can do few manually steps as 1. Generate spool request of report, 2. Execute spool in Report RSTXPDFT5, which may not suitable for users.

We can build Logic also in Report to avoid Manual steps for users, but that will be limited to that report only.

I have written small code, Generic Executable Report as ZRPT2PDF. Using it one can generate PDF for any Report , Custom or Standard .

It works with single T-code parameter in selection screen , and support ALV/Classical/Interactive Formats.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++

ZRPT2PDF is single Report , No need to Change any of your existing Source codes.

I found it very handy for PDF Generation. ++++++++++++++++++++++++++

I have upload Source code for ZRPT2PDF Version 1,You can use it.

Source Code:-

**"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*" *"*"*"*"*"*"* * Report * Request No * Developed by * Requested on * Description : ZST_REPORT_TO_PDF : Local : Stallone Christian : 04.05.2012 : Generate PDF from Report

**"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*"*" *"*"*"*"*"*"* *Extra Info: *********************************************************** ************* * Generate PDF File for any Report using Tcode * After Executing Report, Go back and Save PDF File *********************************************************** ************* REPORT DATA : ZST_REPORT_TO_PDF.

WA_TSTC WA_TSTCP SM30_PARA IT_PARAM WA_PARAM GV_REPORT GV_PARAMS GV_VALID GV_RQIDENT GT_RSPARAMS WA_TSP01 GV_SPOOL GV_RQ2NAME

TYPE TSTC, TYPE TSTCP, TYPE TSTCP-PARAM, TYPE STANDARD TABLE OF STRING, TYPE STRING, TYPE SY-REPID, TYPE PRI_PARAMS, TYPE STRING, TYPE TSP01-RQIDENT, TYPE STANDARD TABLE OF RSPARAMS, TYPE TSP01, TYPE TSP01-RQIDENT, TYPE TSP01-RQ2NAME,

PDF_BYTECOUNT PDF_SPOOLID LIST_PAGECOUNT BTC_JOBNAME BTC_JOBCOUNT BIN_FILE GT_PDF

TYPE LIKE TYPE I, TYPE TYPE

I, TSP01-RQIDENT,

TBTCJOB-JOBNAME, TBTCJOB-JOBCOUNT,

TYPE XSTRING, TYPE STANDARD TABLE OF TLINE,

GV_BIN_FILESIZE

TYPE I, " Binary File Size

GV_FILE_NAME GV_FILE_PATH GV_FULL_PATH

TYPE STRING, TYPE STRING, TYPE STRING.

" Selection Screen SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT000. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (23) TEXT001 FOR FIELD P_TCODE. PARAMETERS P_TCODE TYPE TSTC-TCODE OBLIGATORY. SELECTION-SCREEN END OF LINE.

"Text SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (70) TEXT002. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN: END OF BLOCK B1.

LOAD-OF-PROGRAM. TEXT000 = TEXT001 = 'Selection Criteria'. '@8T@ Transaction Code'.

TEXT002 = '*Enter Tcode->Select Print Option->Execute report->Save PDF File'.

START-OF-SELECTION. "Fetch Tcode and Report info PERFORM FETCH_TCODE_REPORT.

"Call Transaction PERFORM CALL_TRANSACTION.

"Get Spool and Generate PDF PERFORM GET_SPOOL_TO_PDF. *&--------------------------------------------------------------------* *& Form FETCH_TCODE_REPORT

*&--------------------------------------------------------------------* * text

*---------------------------------------------------------------------* * * --> <-p1 p2 text text

*---------------------------------------------------------------------* FORM FETCH_TCODE_REPORT .

DATA : FLG_TCODE TYPE CHAR1, CHR1 CHR2 TYPE CHAR40, TYPE CHAR40.

SELECT SINGLE * FROM TSTC INTO WA_TSTC WHERE TCODE = P_TCODE AND PGMNA NE SPACE AND DYPNO IF SY-SUBRC = 0. = 1000. "only Standard Report

FLG_TCODE = 'X'. GV_REPORT = WA_TSTC-PGMNA. ELSE. SELECT SINGLE * FROM TSTCP INTO WA_TSTCP WHERE TCODE = P_TCODE AND PARAM NE SPACE. SPLIT WA_TSTCP-PARAM AT ';' INTO TABLE IT_PARAM. LOOP AT IT_PARAM INTO WA_PARAM. IF WA_PARAM CS '-REPORT='. FLG_TCODE = 'X'. SPLIT WA_PARAM AT '-REPORT=' INTO CHR1 CHR2. GV_REPORT = CHR2.

EXIT. ENDIF. ENDLOOP. ENDIF.

IF FLG_TCODE IS INITIAL. MESSAGE 'In Valid Tcode' TYPE 'I' DISPLAY LIKE 'E'. LEAVE TO TRANSACTION SY-TCODE. ENDIF.

CALL FUNCTION 'AUTH_CHECK_TCODE' EXPORTING TCODE EXCEPTIONS PARAMETER_ERROR TRANSACTION_NOT_FOUND TRANSACTION_LOCKED TRANSACTION_IS_MENU = 1 = 2 = 3 = 4 = P_TCODE

MENU_VIA_PARAMETER_TRANSACTION = 5 NOT_AUTHORIZED OTHERS IF SY-SUBRC <> 0. MESSAGE 'No Authorization for Tcode' TYPE 'I' DISPLAY LIKE 'E'. = 6 = 7.

LEAVE TO TRANSACTION SY-TCODE. ENDIF.

ENDFORM.

" FETCH_TCODE_REPORT

*&--------------------------------------------------------------------* *& Form CALL_TRANSACTION

*&--------------------------------------------------------------------* * text

*---------------------------------------------------------------------* * * --> <-p1 p2 text text

*---------------------------------------------------------------------* FORM CALL_TRANSACTION .

CALL FUNCTION 'GET_PRINT_PARAMETERS' IMPORTING OUT_PARAMETERS = GV_PARAMS VALID IF SY-SUBRC <> 0. ENDIF. = GV_VALID.

"Spool Mode, Default will be Spool Only CLEAR GV_PARAMS-PRIMM.

"Spool Request Name, Pass Report name , Only 1st 12 Chars GV_RQ2NAME = GV_REPORT.

GV_PARAMS-PLIST = GV_RQ2NAME.

SUBMIT (GV_REPORT) VIA SELECTION-SCREEN TO SAP-SPOOL SPOOL PARAMETERS GV_PARAMS WITHOUT SPOOL DYNPRO AND RETURN. IF SY-SUBRC NE 0. MESSAGE 'Unable to Execute Report' TYPE 'I' DISPLAY LIKE 'E'. LEAVE TO TRANSACTION SY-TCODE. ENDIF. WAIT UP TO 2 SECONDS. ENDFORM. " CALL_TRANSACTION

*&--------------------------------------------------------------------* *& Form GET_SPOOL_TO_PDF

*&--------------------------------------------------------------------* * text

*---------------------------------------------------------------------* * * --> <-p1 p2 text text

*---------------------------------------------------------------------* FORM GET_SPOOL_TO_PDF . DATA : LV_RQCRETIME TYPE TSP01-RQCRETIME,

LV_RETURNCODE TYPE I.

CONCATENATE SY-DATUM '%' INTO LV_RQCRETIME. SELECT MAX( RQIDENT ) INTO GV_SPOOL FROM TSP01 RQCLIENT = SY-MANDT RQ2NAME RQOWNER = GV_RQ2NAME AND = SY-UNAME AND RQCRETIME LIKE LV_RQCRETIME. CHECK SY-SUBRC = 0. SELECT SINGLE * FROM TSP01 INTO WA_TSP01 WHERE RQIDENT = GV_SPOOL. IF WA_TSP01 IS INITIAL. MESSAGE 'No Valid Spool Request Found' TYPE 'I' DISPLAY LIKE 'E'. LEAVE TO TRANSACTION SY-TCODE. WHERE AND

ENDIF.

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF' EXPORTING SRC_SPOOLID NO_DIALOG IMPORTING PDF_BYTECOUNT PDF_SPOOLID BTC_JOBNAME BTC_JOBCOUNT TABLES PDF EXCEPTIONS ERR_NO_ABAP_SPOOLJOB ERR_NO_SPOOLJOB ERR_NO_PERMISSION ERR_CONV_NOT_POSSIBLE ERR_BAD_DESTDEVICE USER_CANCELLED ERR_SPOOLERROR ERR_TEMSEERROR ERR_BTCJOB_OPEN_FAILED = 1 = 2 = 3 = 4 = 5 = 6 = 7 = 8 = 9 = GT_PDF = PDF_BYTECOUNT = PDF_SPOOLID = BTC_JOBNAME = BTC_JOBCOUNT = GV_SPOOL = ABAP_FALSE

ERR_BTCJOB_SUBMIT_FAILED = 10 ERR_BTCJOB_CLOSE_FAILED = 11.

CHECK GT_PDF IS NOT INITIAL. GV_FILE_NAME = P_TCODE. * To display File SAVE dialog window CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG EXPORTING WINDOW_TITLE DEFAULT_EXTENSION FILE_FILTER DEFAULT_FILE_NAME CHANGING FILENAME PATH FULLPATH EXCEPTIONS CNTL_ERROR ERROR_NO_GUI = 1 = 2 = GV_FILE_NAME = GV_FILE_PATH = GV_FULL_PATH = 'Save Output as PDF' "LV_TITLE = 'PDF' = '(*.pdf)|*.pdf|' = GV_FILE_NAME

NOT_SUPPORTED_BY_GUI = 3 OTHERS IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO = 4.

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.

* Use the FM GUI_DOWNLOAD to download the generated PDF file onto the * presentation server CHECK GV_FULL_PATH IS NOT INITIAL. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING BIN_FILESIZE FILENAME FILETYPE TABLES DATA_TAB EXCEPTIONS FILE_WRITE_ERROR NO_BATCH = 1 = 2 = GT_PDF = GV_BIN_FILESIZE = GV_FULL_PATH = 'BIN'

GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE NO_AUTHORITY UNKNOWN_ERROR HEADER_NOT_ALLOWED SEPARATOR_NOT_ALLOWED FILESIZE_NOT_ALLOWED = 4 = 5 = 6 = 7 = 8 = 9

HEADER_TOO_LONG DP_ERROR_CREATE DP_ERROR_SEND DP_ERROR_WRITE UNKNOWN_DP_ERROR ACCESS_DENIED DP_OUT_OF_MEMORY DISK_FULL DP_TIMEOUT FILE_NOT_FOUND DATAPROVIDER_EXCEPTION CONTROL_FLUSH_ERROR OTHERS IF SY-SUBRC = 0.

= 10 = 11 = 12 = 13 = 14 = 15 = 16 = 17 = 18 = 19 = 20 = 21 = 22.

MESSAGE 'File Generated Successfully' TYPE 'S'. ELSE. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " GET_SPOOL_TO_PDF

Das könnte Ihnen auch gefallen