Download Simple ABAP report as PDF
Hi freinds,
There is a requirement that a simple classical abap report has to download as PDF on user PC. how it can be acheived without using smartforms and sapscript.
regards
Rajesh
hi,
This might resolve your problem.
[https://forums.sdn.sap.com/click.jspa?searchID=18642809&messageID=4655514]
Similar Messages
-
Barcode printing in simple abap report
Hai,
I want to print Barcode for 'RESERVATION' in my simple abap report.Can you please give step by step procedure to achieve this?
Thank you.
Note :I saw many threads in sdn,it is NOT clear for me.
With Regards,
Jaheer.Hi Hussain ,
Go through the program RSPO0031
This will help you out.
Regards,
Yogendra Bhaskar -
How to download a ABAP report to text file
Hi Experts,
I want to save a ABAP report to a local file in my PC (*txt format). Since it uses a lot of includes, I have to download those ones too.. Is there is quickway to save the main program and all it's subprograms to a text file ?
Regards
ShibuHi,
Try this report, it will solve u r problem,
TABLES:TRDIR.
SELECT-OPTIONS: PGMNAME FOR TRDIR-NAME.
CONSTANTS: LINESIZE value 2048.
PARAMETERS:
HEADING AS CHECKBOX DEFAULT 'X',
FGROUP AS CHECKBOX,
USER LIKE TRDIR-CNAM DEFAULT '*',
DOWNLOAD AS CHECKBOX default 'X',
pa_TEXTP AS CHECKBOX,
DOWNDIR(80) DEFAULT 'C:\temp\',
chg_date(8) default '19000101',
chg_time(6) default '000000'.
PGMNAME like TRDIR-NAME.
DATA:
W_TEXT(128),
W_FILENAME(128),
W_PROGRAM_LOW(8),
W_PROGRAM_HIGH(8).
DATA:
_texttab type textpool,
texttab type standard table of textpool initial size 0
with header line,
BEGIN OF TEXTTAB OCCURS 0,
ID(1),
KEY(8),
ENTRY(70),
END OF TEXTTAB,
BEGIN OF ABAPTAB OCCURS 500,
LINE(72),
line(LINESIZE),
END OF ABAPTAB,
BEGIN OF TRTAB OCCURS 0,
NAME LIKE TRDIR-NAME,
ENTRY LIKE TEXTTAB-ENTRY,
CDAT LIKE TRDIR-CDAT,
UDAT LIKE TRDIR-UDAT,
END OF TRTAB,
BEGIN OF TRFTAB OCCURS 0,
NAME LIKE TRDIR-NAME,
ENTRY LIKE TEXTTAB-ENTRY,
CDAT LIKE TRDIR-CDAT,
UDAT LIKE TRDIR-UDAT,
END OF TRFTAB.
START-OF-SELECTION.
IF FGROUP = ' '.
PERFORM LOAD_TRDIR_PROGRAM.
PERFORM PROCESS_PROGRAM.
ELSE.
PERFORM LOAD_TRDIR_FGROUP.
PERFORM PROCESS_FGROUP.
ENDIF.
*& form load_trdir_program.
FORM LOAD_TRDIR_PROGRAM.
SELECT * FROM TRDIR
WHERE NAME IN PGMNAME
and sdate >= chg_date
and stime >= chg_time.
IF USER <> '*'.
CHECK TRDIR-UNAM = USER OR
TRDIR-CNAM = USER.
ENDIF.
CLEAR: TEXTTAB.
REFRESH: TEXTTAB.
CLEAR: TRTAB.
READ TEXTPOOL TRDIR-NAME INTO TEXTTAB LANGUAGE 'E'.
IF SY-SUBRC = 0.
READ TABLE TEXTTAB WITH KEY 'R'.
MOVE TEXTTAB-ENTRY TO TRTAB-ENTRY.
ENDIF.
MOVE TRDIR-NAME TO TRTAB-NAME.
MOVE TRDIR-CDAT TO TRTAB-CDAT.
MOVE TRDIR-UDAT TO TRTAB-UDAT.
APPEND TRTAB.
CLEAR: TEXTTAB.
ENDSELECT.
ENDFORM. " load_trdir_program
*& Form load_trdir_fgroup
FORM LOAD_TRDIR_FGROUP.
SELECT * FROM TRDIR
WHERE NAME BETWEEN 'SAPLYYYY' AND 'SAPLZZZZ'.
CHECK TRDIR-UNAM = USER OR TRDIR-CNAM = USER.
CLEAR: TEXTTAB.
CLEAR: TRTAB.
REFRESH: TEXTTAB.
READ TEXTPOOL TRDIR-NAME INTO TEXTTAB LANGUAGE 'E'.
IF SY-SUBRC = 0.
READ TABLE TEXTTAB WITH KEY 'R'.
MOVE TEXTTAB-ENTRY TO TRTAB-ENTRY.
ENDIF.
MOVE TRDIR-NAME TO TRTAB-NAME.
MOVE TRDIR-CDAT TO TRTAB-CDAT.
MOVE TRDIR-UDAT TO TRTAB-UDAT.
APPEND TRTAB.
CLEAR: TEXTTAB.
ENDSELECT.
LOOP AT TRTAB.
MOVE-CORRESPONDING TRTAB TO TRFTAB.
APPEND TRFTAB.
MOVE TRTAB-NAME+3(5) TO W_PROGRAM_LOW.
MOVE '%' TO W_PROGRAM_LOW+5(1).
MOVE TRTAB-NAME+3(5) TO W_PROGRAM_HIGH.
MOVE 'MMMMMMMM' TO W_PROGRAM_HIGH.
SELECT * FROM TRDIR
WHERE NAME LIKE W_PROGRAM_LOW.
*where name between w_program_low and w_program_high.
CHECK TRDIR-NAME+5(1) <> '$'.
CHECK TRDIR-NAME(5) =
TRTAB-NAME+3(5).
READ TEXTPOOL TRDIR-NAME INTO
TEXTTAB LANGUAGE 'E'.
READ TABLE TEXTTAB WITH KEY 'R'.
MOVE TEXTTAB-ENTRY TO TRFTAB-ENTRY.
MOVE TRDIR-NAME TO TRFTAB-NAME.
MOVE TRDIR-CDAT TO TRFTAB-CDAT.
MOVE TRDIR-UDAT TO TRFTAB-UDAT.
APPEND TRFTAB.
ENDSELECT.
ENDLOOP.
ENDFORM. " load_trdir_fgroup.
FORM PROCESS_PROGRAM
FORM PROCESS_PROGRAM.
LOOP AT TRTAB.
READ REPORT TRTAB-NAME INTO ABAPTAB.
IF DOWNLOAD = 'X'.
PERFORM DOWNLOAD_PROGRAMS USING TRTAB-NAME.
ELSE.
PERFORM LIST_PROGRAMS USING TRTAB-NAME.
ENDIF.
IF pa_TEXTP = 'X'.
READ TEXTPOOL TRTAB-NAME INTO TEXTTAB LANGUAGE
'E'.
IF SY-SUBRC = 0 AND DOWNLOAD = 'X'.
PERFORM DOWNLOAD_TEXTPOOL USING
TRTAB-NAME.
ENDIF.
LOOP AT TEXTTAB.
WRITE:/
TEXTTAB-ID,
TEXTTAB-KEY,
TEXTTAB-ENTRY.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM.
FORM PROCESS_fgroup
FORM PROCESS_FGROUP.
LOOP AT TRFTAB.
READ REPORT TRFTAB-NAME INTO ABAPTAB.
IF DOWNLOAD = 'X'.
PERFORM DOWNLOAD_PROGRAMS USING TRFTAB-NAME.
ELSE.
PERFORM LIST_PROGRAMS USING TRFTAB-NAME
ENDIF.
IF pa_TEXTP = 'X'.
READ TEXTPOOL TRFTAB-NAME INTO TEXTTAB LANGUAGE
'E'.
IF SY-SUBRC = 0 AND DOWNLOAD = 'X'.
PERFORM DOWNLOAD_TEXTPOOL USING
TRFTAB-NAME.
LOOP AT TEXTTAB.
WRITE:/
TEXTTAB-ID,
TEXTTAB-KEY,
TEXTTAB-ENTRY.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
*& Form DOWNLOAD_PROGRAMS
FORM DOWNLOAD_PROGRAMS USING NAME.
W_TEXT = 'Downloading'.
W_TEXT+15(8) = NAME.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = W_TEXT
EXCEPTIONS
OTHERS = 1.
clear w_filename.
MOVE DOWNDIR TO W_FILENAME(80).
MOVE NAME TO W_FILENAME+20(8).
MOVE '.txt' TO W_FILENAME+28(4).
CONDENSE W_FILENAME NO-GAPS.
concatenate w_filename name '.doc' into w_filename.
condense w_filename no-gaps.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = W_FILENAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = ABAPTAB
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
ENDFORM. " DOWNLOAD_PROGRAMS
*& Form LIST_PROGRAMS
FORM LIST_PROGRAMS USING NAME.
LOOP AT ABAPTAB.
WRITE:/ NAME, ABAPTAB-LINE.
ENDLOOP.
ENDFORM. " LIST_PROGRAMS
*& Form DOWNLOAD_TEXTPOOL
FORM DOWNLOAD_TEXTPOOL USING NAME.
W_TEXT = 'Textpool...'.
W_TEXT+15(8) = NAME.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = W_TEXT
EXCEPTIONS
OTHERS = 1.
MOVE DOWNDIR TO W_FILENAME(80).
MOVE TRTAB-NAME TO W_FILENAME+20(8).
MOVE '.tpl' TO W_FILENAME+28(4).
CONDENSE W_FILENAME NO-GAPS.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = W_FILENAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = TEXTTAB
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
ENDFORM. " DOWNLOAD_TEXTPOOL
TOP-OF-PAGE.
IF HEADING = 'X'.
Place your heading here:
call function 'Z_WRITE_HEADER_FOOTER'
exporting
type = 'H'
exceptions
others = 1.
skip 1.
ENDIF.
Regards
Nilesh -
hi guys,
please advise how can i download/export ABAP(report,module pool...etc) source code to client PC?
thanks.hi
this report is to export to another server...
PROGRAM ZDOWNLOAD_SAP
LINE-SIZE 132
LINE-COUNT 62
NO STANDARD PAGE HEADING.
This program up / downloads from / to a local dataset
all the components of an ABAP - i.e TEXTS, the entire CUA
including statuses and menus, DYNPROS and source code.
Program documentation and variants are not handled.
INCLUDED programs are automatically handled both on upload
or download. INCLUDE selection can be excluded or generic
e.g only handle INCLUDES starting with ZIN*
INCLUDES within INCLUDES alos handled.
The only restriction is on UPLOAD the INCLUDED programs must come
from the same directory as the main program.
On Download of course the ABAP must exist in the library.
Note for LINUX and BATCH users
This program was originally designed as a one off tool for
getting ABAPS etc from a SAP R2 (IBM MVS mainframe system) into
an R3 test system minimising the need for a large amount of
mainframe sysprogs (anybody remember what they were !!) time
and support to say nothing of access problems from TSO /JES2 /
SAP R2. At that time network connections were patchy and the
transport systems largely incompatable and not very reliable.
This program was originally designed as a one off tool for
Must run on Windows front end ---- If you are running SAP with
LINUX on your work station you will have to change the WS_UPLOAD
and WS_DOWNLOAD functions to reflect the Linux file system. The
contents of the data sets themseleves do not need to be changed
Program can easily be modified to run in batch and store
the data on a UNIX host. Change the WS_UPLOAD and WS_DOWNLOAD
to read from and write to UNIX data sets (OPEN FILE etc).
You will also need to modify the parts of the program that get
the DOS directory and display the Windows file paths.
The actual abap data sets do not need to be changed.
Rel 4.0 names can now be up to 40 bytes long
Dynpros and CUA have changed from rel 3.1
Tabstrips now loaded and unloaded in dynpros
Please note restriction on 4.6 systems for users who
have ABAP names which include '/'s in their names.
Rel 4.6b, 4.6c Abap names can include the '/' in their names
e.g /CUST1/CUST2/ORDER
This causes problems when storing to a local file.
a solution is to change the name to %CUST1%CUST2%ORDER i.e / will
be changed to %. On upload the % should be changed back to /
again. This change still needs to be implemented.
If you don't use the / in the abap name then this is not a problem.
If file to be uploaded is in rel 3 format then names are only 8
bytes long.
program uses 3 datasets per abap
1) abapname.eee source, dynpr logic, texts, CUA stuff
2) abapname.hhh dynpr header
3) abapname.fff dynpro fields.
because of varying lengths and contents 3 data sets are used. The
complexity of combining all these to 1 data set would make the
program far too complex.
NOTE: This version of the program can only be used on
release 4.0 or higher. Once an ABAP has been converted
to rel 4.0 it cannot be converted back to rel 3.0
on a release 3/3.1 system. Release 4 CUA tables
are different. Use release 3 version of this program
for releases 3.0 and 3.1. Available on SAPFANS website.
Note that data to be uploaded must have been previously downloaded
by this program (any version since rel 2.0) - except for Initial
Load -- see end of these comments.
Dynpros and CUA statuses have changed since rel 3.1
This program will handle rel 3.1 format on upload but will
download in rel 4.0 format. To upload 3.1 format specify an 'X'
in the rel3 parameter.
If you have downloaded components in rel 4.0 format and you
want to re-load to a 3.1 system you will have to load
the source via standard upload and re-create dynpros and the CUA
manually.
As names can now be longer than 8 characters you can only
use this program if the SAP front end (SAPGUI) supports
long file names (WIN 95/98 or WIN NT). Windows 3.x will not
work as the underlying DOS system cannot handle long file names.
UPLOAD function and DOS directory.
When an ABAP is selected for UPLOAD then the DOS
directory is read into a table. A file called ABAP.BAT is created,
and down loaded to the 'C' drive and executed.
This file executes a DOS DIR command and pipes the output
into a dataset which is then uploaded into an internal
table on SAP.
Note on running DOS commands from ABAP
The first time this procedure is executed you will see a DOS window
which you will have to close manually. To get round this
use windows explorer to select the file ABAP.BAT and then
right mouse click on the file name. Select the
properties window. From this click the CLOSE on EXIT box. This
will then automatically close the DOS function after it has
executed. (Windows restriction).
The DOS function has not been tested using Windows 2000 so
it might not work. OK on W95,W98,WME and Windows NT (No Thanks)
If INCLUDE programs are wanted on UPLOAD only the specified
directory is searched.
Instead of entering path name manually you can click on
the path parameter. Because of Windows restriction you will
have to select ANY file in the relevant directory.
The path will then be copied on to the selection screen.
To do still : Merge 3 files to one and compress output to .ZIP file
fix 4.5 4.6 problem of abaps containing '/' in the name
possibility to automatically up / download referenced
function modules with selection criteria like INCLUDES
To load the ist time into a system.
Create program with ABAP editor and Upload the .EEE file.
Delete ist line (????SRCE) in the ABAP EDITOR --NOT THE DISK FILE
Delete all the source from the line that starts ????TEXT (towards
the end file) till the end so the last line in your source is ENDFORM.
DO NOT ALTER THE DISK FILE. DO THESE CHANGES IN THE ABAP EDITOR.
Save file and execute
Use following parameters (Note the ist time you won't get proper
text on the selection screen).
Function U
Path full dos path containing source e.g c:\abaps\
NOTE YOU MUST ENTER THE FINAL \ as above.
REPID the program name. e.g ZZJIMHXX
note that on the DISK you will see 3 files
ZZJIMHXX.EEE, ZZJIMHXX.FFF, ZZJIMHXX.HHH
just use the name before the dos qualifier - the
program will do the rest
ignore other parameters
The program will then load itself with all the texts etc.
It should now be ready for use.
Macros
DEFINE DEFINE_TABLE.
DATA: &1 LIKE &2 OCCURS &3 WITH HEADER LINE.
END-OF-DEFINITION.
DEFINE CLS.
REFRESH &1.
CLEAR &1.
END-OF-DEFINITION.
DEFINE INIT.
IF &1 NE SPACE.
SEARCH &1 FOR '. .'.
IF SY-SUBRC = 0.
WRITE '*' TO &1+SY-FDPOS(1).
ENDIF.
TRANSLATE &1 USING '*%'.
ELSE.
MOVE '%' TO &1.
ENDIF.
END-OF-DEFINITION.
end of macros
/ SAP standard tables */
TABLES: D020S, "Dynpro header
D020T, "Dynpro title
D021T, "Screen field keyword texts
TRDIR, "Attribute table
TADIR, "Dev. class etc.
EUDB, "CUA data
TSTC, "transaction data
TITLE, "CUA titles
RSMPTEXTS. "Function texts (rel 4.0)
/ Work tables to hold ABAP source etc, and dynpro */
/ contents. */
DATA: BEGIN OF H. "Header
INCLUDE STRUCTURE D020S.
DATA: END OF H.
DATA: BEGIN OF H1 OCCURS 10, "Header
NAME(40) TYPE C, "rel 4
NUMBER(4) TYPE N.
INCLUDE STRUCTURE D020S.
DATA: END OF H1.
DATA: BEGIN OF H2 OCCURS 0, "Rel 3 dynp. header
CNAME(8) TYPE C,
CNUM(4) TYPE C,
NNAME(8) TYPE C,
NNUM(4) TYPE C,
FILL(51) TYPE C,
CDAT(6) TYPE C,
CTIM(6) TYPE C,
END OF H2.
DATA: BEGIN OF F OCCURS 250. "Dynpro Fields
INCLUDE STRUCTURE D021S.
DATA: END OF F.
DATA: BEGIN OF F1 OCCURS 500, "Dynpro Fields
NAME(40) TYPE C, "rel 4
NUMBER(4) TYPE N.
INCLUDE STRUCTURE D021S.
DATA: END OF F1.
DATA: BEGIN OF OLD_F1 OCCURS 0, "Dynpro Fields (rel 3)
NAME(8) TYPE C,
NUMBER(4) TYPE C.
INCLUDE STRUCTURE D021SE_OLD.
DATA: END OF OLD_F1.
DATA: BEGIN OF F2 OCCURS 0, "Dynpro Fields (rel 3)
TFIL(284) TYPE C,
END OF F2.
DATA: BEGIN OF M OCCURS 3. "Match codes (if any)
INCLUDE STRUCTURE D023S.
DATA: END OF M.
DATA: BEGIN OF E OCCURS 0. "Dynpro Logic
INCLUDE STRUCTURE D022S.
DATA: END OF E.
DATA: BEGIN OF E1 OCCURS 0, "Dynpro Logic
NAME(40) TYPE C, "rel 4
NUMBER(4) TYPE N.
INCLUDE STRUCTURE D022S.
DATA: END OF E1.
DATA: BEGIN OF T OCCURS 0, "prog name and dynpro nrs
NAME(40) TYPE C, "rel 4
NUMBER(4) TYPE N,
END OF T.
DATA: BEGIN OF R OCCURS 56, "prog name and language
NAME(40) TYPE C, "rel 4
LANGUAGE(1) TYPE C,
END OF R.
DATA: BEGIN OF S OCCURS 3000,
TXT(180) TYPE C, "rel 4 was 132
END OF S.
DATA: BEGIN OF R1 OCCURS 50, "for include programs
NAME(40) TYPE C, "rel 4
INSTANCE(3) TYPE P,
END OF R1.
DATA: BEGIN OF S1 OCCURS 3000,
TXT(180) TYPE C, " rel 4 was 132
END OF S1.
DATA: BEGIN OF U OCCURS 100, "Text elements
TXT(180) TYPE C, " rel 4 was 132
END OF U.
DATA: BEGIN OF DIR. "ABAP Attributes
INCLUDE STRUCTURE TRDIR.
DATA: END OF DIR.
DATA: BEGIN OF DTXT. "Dynpro field keyword texts
INCLUDE STRUCTURE D021T.
DATA: END OF DTXT.
/ This data contains all the components of the */
/ CUA such as menus, statuses, Pfkeys */
/ As from rel 4.5 Tabstrips are automatically copied as well */
/ The rel3 parameter must be set however to load the */
/ correct version of the CUA tables if uploading rel 3 */
/ data to a rel 4 system. */
/ Rel 4.0B can convert 3.1 and earlier CUA's */
/ This could change later however. */
CUA Tables.
Key of CUA tables in EUDB data set. Name is len 40 in rel 4.0
DATA BEGIN OF EU_KEY.
INCLUDE STRUCTURE RSEU1_KEY.
DATA END OF EU_KEY.
Status
DATA BEGIN OF STA OCCURS 0.
INCLUDE STRUCTURE RSMPE_STAT. " rel 4
DATA END OF STA.
Functions
DATA BEGIN OF FUN OCCURS 0.
INCLUDE STRUCTURE RSMPE_FUNT. "rel 4
DATA END OF FUN.
Menus
DATA BEGIN OF MEN OCCURS 0.
INCLUDE STRUCTURE RSMPE_MEN. "rel 4.0
DATA END OF MEN.
Menus (texts)
DATA BEGIN OF MTX OCCURS 0.
INCLUDE STRUCTURE RSMPE_MNLT. "rel 4.0
DATA END OF MTX.
Action Bar
DATA BEGIN OF ACT OCCURS 0.
INCLUDE STRUCTURE RSMPE_ACT. "rel 4.0
DATA END OF ACT.
Push Buttons
DATA BEGIN OF BUT OCCURS 0.
INCLUDE STRUCTURE RSMPE_BUT. "rel 4.0
DATA END OF BUT.
PF-Keys
DATA BEGIN OF PFK OCCURS 0.
INCLUDE STRUCTURE RSMPE_PFK. "rel 4.0
DATA END OF PFK.
Function sets
DATA BEGIN OF SET OCCURS 0.
INCLUDE STRUCTURE RSMPE_STAF. "rel 4.0
DATA END OF SET.
Documentation
DATA BEGIN OF DOC OCCURS 0.
INCLUDE STRUCTURE RSMPE_ATRT. "rel 4.0
DATA END OF DOC.
Title codes with text
DATA: BEGIN OF TIT OCCURS 0.
INCLUDE STRUCTURE RSMPE_TITT. "rel 4.0
DATA: END OF TIT.
DATA BEGIN OF FTX OCCURS 0. "rel 4.0
INCLUDE STRUCTURE RSMPTEXTS.
DATA END OF FTX.
rel 3.1 CUA components.
Status
DATA BEGIN OF OLD_STA OCCURS 0.
INCLUDE STRUCTURE RSEU1_GEN. " rel 3.1
DATA END OF OLD_STA.
Functions
DATA BEGIN OF OLD_FUN OCCURS 0.
INCLUDE STRUCTURE RSEU1_FUN. "rel 3.1
DATA END OF OLD_FUN.
Menus
DATA BEGIN OF OLD_MEN OCCURS 0.
INCLUDE STRUCTURE RSEU1_MEN. "rel 3.1
DATA END OF OLD_MEN.
Menus (texts)
DATA BEGIN OF OLD_MTX OCCURS 0.
INCLUDE STRUCTURE RSEU1_TXM. "rel 3.1
DATA END OF OLD_MTX.
Action Bar
DATA BEGIN OF OLD_ACT OCCURS 0.
INCLUDE STRUCTURE RSEU1_ACT. "rel 3.1
DATA END OF OLD_ACT.
Push Buttons
DATA BEGIN OF OLD_BUT OCCURS 0.
INCLUDE STRUCTURE RSEU1_BUT. "rel 3.1
DATA END OF OLD_BUT.
PF-Keys
DATA BEGIN OF OLD_PFK OCCURS 0.
INCLUDE STRUCTURE RSEU1_PFK. "rel 3.1
DATA END OF OLD_PFK.
Function sets
DATA BEGIN OF OLD_SET OCCURS 0.
INCLUDE STRUCTURE RSEU1_SET. "rel 3.1
DATA END OF OLD_SET.
Documentation
DATA BEGIN OF OLD_DOC OCCURS 0.
INCLUDE STRUCTURE RSEU1_ETM. "rel 3.1
DATA END OF OLD_DOC.
Title codes with text
DATA: BEGIN OF OLD_TIT OCCURS 0.
INCLUDE STRUCTURE TITLE. "rel 3.1
DATA: END OF OLD_TIT.
dynamic function text
DATA BEGIN OF FDN OCCURS 1.
INCLUDE STRUCTURE RSEU1_FDYN. "not req for rel 4.
DATA END OF FDN.
Icons
DATA BEGIN OF FIN OCCURS 1.
INCLUDE STRUCTURE RSEU1_ICON. "not req for rel 4
DATA END OF FIN.
dynamic menu texts
DATA BEGIN OF MDN OCCURS 1.
INCLUDE STRUCTURE RSEU1_MDYN. "not req for rel 4.
DATA END OF MDN.
Symbol list
DATA BEGIN OF SYM OCCURS 0.
INCLUDE STRUCTURE RSEU1_SYMB.
DATA END OF SYM.
Status Short text
DATA BEGIN OF STX OCCURS 0.
INCLUDE STRUCTURE RSEU1_CTX.
DATA END OF STX.
Attributes for function key settings (menu bars) Rel 3.0
DATA BEGIN OF ATT OCCURS 0.
INCLUDE STRUCTURE RSEU1_HAT.
DATA END OF ATT.
Include-Menus
DATA BEGIN OF INC OCCURS 3.
INCLUDE STRUCTURE RSEU1_INC.
DATA END OF INC.
Last used numbers
DATA BEGIN OF LAST.
INCLUDE STRUCTURE RSEU1_LST.
DATA END OF LAST.
data for call transaction (SE41 to re-generate the CUA)
DATA: BEGIN OF T_BDC_TAB OCCURS 0.
INCLUDE STRUCTURE BDCDATA. "BDC data
DATA: END OF T_BDC_TAB.
DATA: BEGIN OF T_MESSTAB OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF T_MESSTAB.
/ Program data */
DATA: NUMBER(4) TYPE N,
OLDNUM(4) TYPE N,
FILESIZE TYPE I,
NR_OF_BYTES TYPE I,
I(3) TYPE P,
IX(3) TYPE P,
J(3) TYPE P,
L(3) TYPE P,
CUA-FLAG(1) TYPE C,
CUA_RETURN(10) TYPE C,
DYNPRO_MESSAGE(160) TYPE C,
DYNPRO_LINE TYPE P,
DYNPRO_WORD(30) TYPE C,
NUM(3) TYPE N,
DYNNAME(44) TYPE C,
FN1(128) TYPE C,
FN2(128) TYPE C,
FN3(128) TYPE C,
W_ITERATE(1) TYPE C,
MAIN(1) TYPE C,
FUNC(1) TYPE C,
OLDNAME(40) TYPE C,
OLD-FUNC(8) TYPE C,
NEW-FUNC(8) TYPE C,
FOUND(1) TYPE C,
LANGUAGE LIKE SY-LANGU,
FIRST-TIME(1) TYPE C VALUE 'Y',
OK-CODE(5) TYPE C,
NAME(40) TYPE C, "rel 4
TXLINE(70) TYPE C,
LINE(132) TYPE C.
DATA:
UL_FILE(128) TYPE C,
DL_FILE(128) TYPE C,
DOSLINE(72) TYPE C.
DATA: BEGIN OF DOSDIR OCCURS 0,
TEXT(72),
END OF DOSDIR.
DATA: BEGIN OF I_PROG OCCURS 0,
NAME(40),
END OF I_PROG.
DATA: BEGIN OF I_PROGT OCCURS 0,
NAME(40),
END OF I_PROGT.
DATA: BEGIN OF I_INCLUDE OCCURS 0,
NAME(40),
HANDLED(1) TYPE C,
END OF I_INCLUDE.
DATA: BEGIN OF I_INCL OCCURS 0,
NAME(40),
END OF I_INCL.
DATA: BUFFER(1024).
DATA: WINSYS(3).
DATA: GLOBAL_FILEMASK_MASK(20), GLOBAL_FILEMASK_TEXT(20).
DATA: GLOBAL_FILEMASK_ALL(80).
DATA: T_FILENAME(128),
TMP_FILENAME(128),
T_MODE(1),
FIELDLN TYPE I.
DEFINE_TABLE I_DYNPFIELDS DYNPREAD 0. "dynpro fields to be updated
DATA: I_FLDS LIKE HELP_VALUE OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS: <F>.
/ Parameters */
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS REPID FOR TRDIR-NAME OBLIGATORY .
PARAMETERS:
FUNCTION(1) TYPE C OBLIGATORY, "Function
DSNAME(40) TYPE C, "Data set name
INCLUDES(1) TYPE C DEFAULT 'N', "Resolve Includes
IMASK(40) TYPE C, "Include Mask
CLASS LIKE TRDIR-CLAS,
AUTHOR LIKE TRDIR-CNAM, "Author
APPL LIKE TRDIR-APPL,
PATH(88) TYPE C DEFAULT 'A:\',
REL3(1) TYPE C.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70) TEXT-004.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70) TEXT-005.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70) TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(70) TEXT-003.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK A1.
/ Check users workstation is running WINDOWS, */
/ WINDOWS 95, or WINDOWS NT. OS/2 no good for */
/ this application. */
CALL FUNCTION 'WS_QUERY'
EXPORTING
QUERY = 'WS'
IMPORTING
RETURN = WINSYS.
IF WINSYS(2) NE 'WN'. "Win 3.X no good either
WRITE: / 'Windows NT or Windows 95/98 is required'.
EXIT.
ENDIF.
/ Get names of programs to be handled. */
/ Name can be a single value, many values or ranges */
/ as per standard SELECT-OPTIONS on selection screen */
/ On Download read TRDIR and store program names in a table */
/ as per selection options. */
/ On upload read the specified directory for all files of */
/ type .EEE from specified directory */
/ compare file names with selection criteria */
MOVE FUNCTION TO FUNC.
MOVE 'Y' TO MAIN.
CASE FUNC.
WHEN 'U'. "Upload required
PERFORM READ_DOS_DIRECTORY.
PERFORM GET_RANGE_UL. "Get list of progs to process
WHEN 'D'. "Download required
PERFORM GET_RANGE_DL. "Get list of progs to process
WHEN OTHERS.
WRITE: / 'Function not performed due to user request'.
EXIT.
ENDCASE.
SORT I_PROG.
DELETE ADJACENT DUPLICATES FROM I_PROG.
For download INCLUDE handling can be resolved via function
module call.
All Includes within Includes are also resolved by the function
module call.
Note that this method does not work if program itself is of type
I (it's an include)
In this case we can still search the source.
IF FUNC = 'D'.
IF INCLUDES = 'Y'.
PERFORM GET_INCLUDES_DL.
PERFORM PROCESS_INCLUDES_DL.
ENDIF.
ENDIF.
Program list from selection criteria i.e excluding INCLUDES found
LOOP AT I_PROG.
MOVE I_PROG-NAME TO R1-NAME.
APPEND R1.
DESCRIBE TABLE R1 LINES I.
WHILE I NE 0.
PERFORM EXECUTE-FUNCTION.
ENDWHILE.
REFRESH R1.
ENDLOOP.
We need to check now for INCLUDES on DOWNLOAD when the INCLUDE
program itself is of type I. In this case the function call
will not return the INCLUDES. For example we could be
downloading ZTESTTOP (an Include itself) which as an include
ZTEST01.
The process fortunately is the same as the UPLOAD function
except of course we need to read the library instead of the
DOS directory
process INCLUDE modules for Upload
On upload the procedure is more complex as Includes within
Includes can only be resolved by scanning the code and
searching if the program exists in the directory.
To get all INCLUDES within INCLUDES entries in table I_INCL
that do not exist in I_INCLUDE are copied to table I_INCLUDE
after each entire pass of table i_INCLUDE and table is then
re-looped through. Programs in table I_INCLUDE that have already
been processed have a "Y" indicator set in I_INCLUDE-AVAIL.
if func = 'U'.
IF INCLUDES = 'Y'.
DESCRIBE TABLE I_INCL LINES I.
IF I > 0.
W_ITERATE = 'Y'.
ELSE.
W_ITERATE = ' '.
ENDIF.
WHILE W_ITERATE = 'Y'.
PERFORM PROCESS_INCLUDES_UL.
PERFORM LOOP_THROUGH.
DESCRIBE TABLE I_INCL LINES I.
IF I > 0.
W_ITERATE = 'Y'.
ELSE.
W_ITERATE = ' '.
ENDIF.
ENDWHILE.
endif.
ENDIF.
DESCRIBE TABLE I_INCLUDE LINES I.
IF I > 0.
SKIP 1.
WRITE: / ' Included Programs found'.
SKIP 1.
LOOP AT I_INCLUDE.
WRITE I_INCLUDE-NAME TO LINE(40).
CONDENSE LINE.
WRITE: / LINE(80).
ENDLOOP.
ENDIF.
/ Table R contains ABAP names to up / download. */
/ Loop through table R and perform up / download */
/ for each program. */
/ Table R1 contains INCLUDE names found (if any) */
/ As each */
FORM EXECUTE-FUNCTION.
LOOP AT R1.
MOVE-CORRESPONDING R1 TO R.
APPEND R.
ENDLOOP.
REFRESH R1.
LOOP AT R.
REFRESH : T, E1, H1, F1, S, U.
PERFORM PROCESS.
MOVE 'N' TO MAIN.
ENDLOOP.
REFRESH R.
DESCRIBE TABLE R1 LINES I.
ENDFORM.
/ Build file names for UP/DOWNLOAD */
/ 3 files are generated per ABAP. */
/ 1) ABAP Path\PROGNAME.EEE (ABAP, Attr,Texts) */
/ Logic Path\PROGNAME.EEE (Dynpro Source Logic) */
/ CUA Path\PROGNAME.EEE (CUA components - keys etc) */
/ 2) Header Path\PROGNAME.HHH (Dynpro Header) */
/ 3) Fields Path\PROGNAME.FFF (Dynpro Field definitions )*/
/ ( If alternate file name specified -DSNAME- this will */
/ be used instead. This is only valid for the main program. */
/ INCLUDED programs will have file names as specified */
/ above). */
/ By using this scheme it saves the user from having to */
/ be prompted for 3 file names. */
/ If you want multiple copies / versions on disk either */
/ rename the old versions or specify a different directory in */
/ the path parameter. */
FORM PROCESS.
MOVE PATH TO FN1.
CASE MAIN.
WHEN 'Y'.
IF DSNAME NE SPACE.
WRITE DSNAME TO FN1+66. "rel 4
ELSE.
WRITE R-NAME TO FN1+66. "rel 4
ENDIF.
WHEN OTHERS.
WRITE R-NAME TO FN1+66. "rel 4
ENDCASE.
MOVE FN1 TO FN2.
MOVE FN1 TO FN3.
WRITE '.HHH' TO FN1+124(4). "rel 4
WRITE '.FFF' TO FN2+124(4). "rel 4
WRITE '.EEE' TO FN3+124(4). "rel 4
CONDENSE FN1 NO-GAPS.
CONDENSE FN2 NO-GAPS.
CONDENSE FN3 NO-GAPS.
NAME = R-NAME.
CASE FUNC.
WHEN 'D'.
PERFORM DOWNLOAD_OBJECTS.
CLEAR LINE.
WRITE : 'ABAP : ' TO LINE.
WRITE R-NAME TO LINE+8.
WRITE 'has been unloaded' TO LINE+55.
CONDENSE LINE.
WRITE: / LINE.
DESCRIBE TABLE T LINES I.
IF I = 0.
WRITE: / 'No Dynpros were found for unload function'.
ELSE.
WRITE: / 'The following Dynpros have been unloaded : '.
PERFORM LOOP_THROUGH_T.
ENDIF.
WHEN 'U'.
PERFORM UPLOAD_OBJECTS.
DESCRIBE TABLE T LINES I.
CASE I.
WHEN 0.
WRITE: / 'No Dynpros were found for restore function'.
WHEN OTHERS.
WRITE: / 'The following Dynpros have been restored : '.
PERFORM LOOP_THROUGH_T.
ENDCASE.
IF MAIN EQ 'Y'.
CASE OLDNAME.
WHEN SPACE.
CLEAR LINE.
WRITE : 'ABAP : ' TO LINE.
WRITE R-NAME TO LINE+8.
WRITE 'has been restored' TO LINE+55.
CONDENSE LINE.
WRITE: / LINE.
WHEN OTHERS.
CLEAR LINE.
WRITE : 'ABAP : ' TO LINE.
WRITE R-NAME TO LINE+8.
WRITE 'has been restored - original name :'
TO LINE+55.
WRITE OLDNAME TO LINE+92.
CONDENSE LINE.
WRITE: / LINE.
ENDCASE.
ELSE.
CLEAR LINE.
WRITE : 'ABAP : ' TO LINE.
WRITE R-NAME TO LINE+8.
WRITE 'has been restored' TO LINE+55.
CONDENSE LINE.
WRITE: / LINE.
ENDIF.
ENDCASE.
ENDFORM.
/ print progname + dynpro nrs that have been processed. */
FORM LOOP_THROUGH_T.
LOOP AT T.
CLEAR LINE.
WRITE R-NAME TO LINE.
WRITE T-NUMBER TO LINE+50.
CONDENSE LINE.
WRITE: / LINE.
ENDLOOP.
ENDFORM.
/ Download Objects */
FORM DOWNLOAD_OBJECTS.
PERFORM UNLOAD_ABAP. "ABAP source, texts, attr
SELECT SINGLE * FROM TRDIR
WHERE NAME EQ R-NAME.
IF TRDIR-SUBC = 'I'.
CASE INCLUDES. "Included file wanted
WHEN 'Y'.
PERFORM SCAN4-INCLUDES.
ENDCASE.
ENDIF.
PERFORM UNLOAD_CUA. "CUA stuff
PERFORM DOWNLOAD_DATA. "Download EEE file to PC
PERFORM BUILD_T. "Build table of all dynpros in ABAP
DESCRIBE TABLE T LINES I.
CASE I.
WHEN 0. "if no dynpros exist then cannot download any
PERFORM DOWNLOAD_DATA. "Download EEE file to PC
WHEN OTHERS.
PERFORM UNLOAD_DYNPROS. "Get Raw dynpros from SAP
PERFORM UNLOAD_DYNPRO_COMPONENTS."Convert to table
PERFORM DOWNLOAD_DATA. "Download ABAP etc. to PC
PERFORM DOWNLOAD_BIN_H1. "Download dynpro header
PERFORM DOWNLOAD_BIN_F1. "Download dynpro fields
ENDCASE.
ENDFORM.
/ Split ABAP up into its component parts */
/ A) Program source (72) */
/ B) Texts (132) */
/ C) Attributes (117) */
/ D) CUA stuff (Various) */
FORM UNLOAD_ABAP.
/ Get ABAP language. Only required on download. */
SELECT SINGLE * FROM TRDIR
WHERE NAME EQ R-NAME.
MOVE TRDIR-RLOAD TO R-LANGUAGE.
READ REPORT R-NAME INTO S. "Get source into table S
MOVE '????SRCE' TO S-TXT.
INSERT S INDEX 1.
/ Text elements, Numbered texts, headings, selection texts */
/ Read text elements with logon language. If they don't */
/ exist read with the value taken from TRDIR. */
READ TEXTPOOL R-NAME INTO U LANGUAGE SY-LANGU.
IF SY-SUBRC NE 0.
READ TEXTPOOL R-NAME INTO U LANGUAGE R-LANGUAGE.
ENDIF.
DESCRIBE TABLE U LINES I.
CASE I.
WHEN 0.
WHEN OTHERS.
MOVE '????TEXT' TO S-TXT.
APPEND S.
LOOP AT U.
MOVE U-TXT TO S-TXT.
APPEND S.
DELETE U.
ENDLOOP.
ENDCASE.
/ Retrieve Attributes from TRDIR and add to table S */
/ Change language to logged on language */
MOVE '????ATTR' TO S-TXT.
APPEND S.
SELECT SINGLE * FROM TRDIR
WHERE NAME EQ R-NAME.
MOVE SY-LANGU TO TRDIR-RLOAD.
MOVE-CORRESPONDING TRDIR TO DIR.
MOVE DIR TO S-TXT.
APPEND S.
ENDFORM.
/ retrieve CUA stuff and append to table S. */
FORM UNLOAD_CUA.
MOVE R-NAME TO EU_KEY-NAME. "Program name for CUA
MOVE 'D' TO EU_KEY-SPRSL. "CUA seems to want D as lang
MOVE R-LANGUAGE TO EU_KEY-SPRSL. "Language "rel 2.2
IMPORT STA FUN MEN MTX ACT BUT PFK SET LAST INC STX DOC "rel 2.2
IMPORT STA STX FUN MEN MTX ACT BUT PFK SET LAST INC DOC "rel 3.0
ATT FDN MDN SYM FIN "rel 3.0
FROM DATABASE EUDB(CU) ID EU_KEY.
IF SY-SUBRC NE 0. "No statuses
EXIT.
ENDIF.
read titles in logged on language. If not present use
language from TRDIR.
CASE REL3.
WHEN SPACE. "(rel 4)
SELECT * FROM RSMPTEXTS WHERE PROGNAME EQ R-NAME
AND SPRSL = SY-LANGU.
MOVE-CORRESPONDING RSMPTEXTS TO FTX.
APPEND FTX.
ENDSELECT.
IF SY-SUBRC NE 0.
SELECT * FROM RSMPTEXTS WHERE PROGNAME EQ R-NAME
AND SPRSL = R-LANGUAGE.
MOVE-CORRESPONDING RSMPTEXTS TO FTX.
APPEND FTX.
ENDSELECT.
ENDIF.
DESCRIBE TABLE FTX LINES I.
IF I > 0.
MOVE '????FTXT' TO S-TXT.
APPEND S.
LOOP AT FTX.
MOVE FTX TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
WHEN OTHERS.
SELECT * FROM TITLE WHERE PROGNAME EQ R-NAME
AND DDLANGUAGE EQ SY-LANGU.
MOVE-CORRESPONDING TITLE TO TIT.
APPEND TIT.
ENDSELECT.
IF SY-SUBRC NE 0.
SELECT * FROM TITLE WHERE PROGNAME EQ R-NAME
AND DDLANGUAGE EQ R-LANGUAGE.
MOVE-CORRESPONDING TITLE TO TIT.
APPEND TIT.
ENDSELECT.
ENDIF.
ENDCASE.
DESCRIBE TABLE STA LINES I.
IF I > 0.
MOVE '????STAT' TO S-TXT.
APPEND S.
LOOP AT STA.
MOVE STA TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE FUN LINES I.
IF I > 0.
MOVE '????FUNC' TO S-TXT.
APPEND S.
LOOP AT FUN.
MOVE FUN TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE MEN LINES I.
IF I > 0.
MOVE '????MEN1' TO S-TXT.
APPEND S.
LOOP AT MEN.
MOVE MEN TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE MTX LINES I.
IF I > 0.
MOVE '????MTX1' TO S-TXT.
APPEND S.
LOOP AT MTX.
MOVE MTX TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE ACT LINES I.
IF I > 0.
MOVE '????ACTN' TO S-TXT.
APPEND S.
LOOP AT ACT.
MOVE ACT TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE BUT LINES I.
IF I > 0.
MOVE '????BUTN' TO S-TXT.
APPEND S.
LOOP AT BUT.
MOVE BUT TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE PFK LINES I.
IF I > 0.
MOVE '????PFKY' TO S-TXT.
APPEND S.
LOOP AT PFK.
MOVE PFK TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE SET LINES I.
IF I > 0.
MOVE '????SETS' TO S-TXT.
APPEND S.
LOOP AT SET.
MOVE SET TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
IF LAST NE SPACE.
MOVE '????LIST' TO S-TXT.
APPEND S.
MOVE LAST TO S-TXT.
APPEND S.
ENDIF.
DESCRIBE TABLE INC LINES I.
IF I > 0.
MOVE '????INCL' TO S-TXT.
APPEND S.
LOOP AT INC.
MOVE INC TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE STX LINES I.
IF I > 0.
MOVE '????STXT' TO S-TXT.
APPEND S.
LOOP AT STX.
MOVE STX TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE DOC LINES I.
IF I > 0.
MOVE '????DOCN' TO S-TXT.
APPEND S.
LOOP AT DOC.
MOVE DOC TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE TIT LINES I.
IF I > 0.
MOVE '????TITL' TO S-TXT.
APPEND S.
LOOP AT TIT.
MOVE TIT TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
Next 5 tables are rel 3.0 specific (ATT, FDN, MDN, SYM, FIN)
DESCRIBE TABLE ATT LINES I.
IF I > 0.
MOVE '????VATT' TO S-TXT.
APPEND S.
LOOP AT ATT.
MOVE ATT TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE FDN LINES I.
IF I > 0.
MOVE '????VFDN' TO S-TXT.
APPEND S.
LOOP AT FDN.
MOVE FDN TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE MDN LINES I.
IF I > 0.
MOVE '????VMDN' TO S-TXT.
APPEND S.
LOOP AT MDN.
MOVE MDN TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE SYM LINES I.
IF I > 0.
MOVE '????VSYM' TO S-TXT.
APPEND S.
LOOP AT SYM.
MOVE SYM TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
DESCRIBE TABLE FIN LINES I.
IF I > 0.
MOVE '????VFIN' TO S-TXT.
APPEND S.
LOOP AT FIN.
MOVE FIN TO S-TXT.
APPEND S.
ENDLOOP.
ENDIF.
ENDFORM.
/ Upload Objects. */
FORM UPLOAD_OBJECTS.
PERFORM UPLOAD_EEE. "ABAP,texts,attr dynpro logic
DESCRIBE TABLE E1 LINES I.
IF I > 0. "Do dynpro components exist
PERFORM UPLOAD_HHH. "dynpro header
PERFORM UPLOAD_FFF. "dynpro fields.
PERFORM RECONSTRUCT_DYNPROS. "load + gen dynpros
ENDIF.
ENDFORM.
/ Build table containing dynpro names and numbers */
FORM BUILD_T.
SELECT * FROM D020S WHERE PROG EQ R-NAME.
T-NUMBER = D020S-DNUM.
T-NAME = D020S-PROG.
APPEND T.
ENDSELECT.
ENDFORM.
/ Split dynpros into constituent parts. */
FORM UNLOAD_DYNPROS.
MOVE 'Y' TO FIRST-TIME.
LOOP AT T.
REFRESH: F, E.
CLEAR: H, F, E.
PERFORM BUILD_HHH. "Dynpro Header
PERFORM BUILD_FFF. "Dynpro Fields
PERFORM BUILD_EEE_DYNP. "Dynpro Logic
ENDLOOP.
ENDFORM.
/ Header H length 284. */
FORM BUILD_HHH.
MOVE T-NAME TO DYNNAME(40). "rel 4.
MOVE T-NUMBER TO DYNNAME+40(4). "rel 4.
IMPORT DYNPRO H F E M ID DYNNAME.
MOVE T-NAME TO H1-NAME.
MOVE T-NUMBER TO H1-NUMBER.
MOVE-CORRESPONDING H TO H1.
APPEND H1.
ENDFORM.
/ Fields D021S Len 87. */
FORM BUILD_FFF.
MOVE T-NAME TO F1-NAME.
MOVE T-NUMBER TO F1-NUMBER.
LOOP AT F.
MOVE-CORRESPONDING F TO F1.
APPEND F1.
DELETE F.
ENDLOOP.
ENDFORM.
/ Dynpro Logic D022S E */
FORM BUILD_EEE_DYNP.
MOVE T-NAME TO E1-NAME.
MOVE T-NUMBER TO E1-NUMBER.
LOOP AT E.
MOVE-CORRESPONDING E TO E1.
APPEND E1.
DELETE E.
ENDLOOP.
ENDFORM.
/ Unload Constituent parts of dynpro. */
FORM UNLOAD_DYNPRO_COMPONENTS.
MOVE '????LOGC' TO S-TXT.
APPEND S.
LOOP AT E1.
MOVE E1 TO S-TXT.
APPEND S.
DELETE E1.
ENDLOOP.
FREE E1.
LOOP AT T.
MOVE 'N' TO FOUND.
SELECT SINGLE * FROM D020T "use logged on language
WHERE PROG EQ T-NAME
AND DYNR EQ T-NUMBER
AND LANG EQ SY-LANGU.
IF SY-SUBRC NE 0. "try original language.
SELECT SINGLE * FROM D020T
WHERE PROG EQ T-NAME
AND DYNR EQ T-NUMBER
AND LANG EQ R-LANGUAGE.
ENDIF.
IF SY-SUBRC EQ 0.
IF FOUND = 'N'.
MOVE '????DTIT' TO S-TXT.
APPEND S.
MOVE 'Y' TO FOUND.
ENDIF.
MOVE T-NAME TO S-TXT.
WRITE T-NUMBER TO S-TXT+8(4).
WRITE D020T-DTXT TO S-TXT+12(60).
APPEND S.
ENDIF.
MOVE 'N' TO FOUND.
SELECT * FROM D021T
WHERE PROG EQ T-NAME
AND DYNR EQ T-NUMBER
AND LANG EQ SY-LANGU. "logged on language
IF FOUND = 'N'.
MOVE '????DTXT' TO S-TXT.
APPEND S.
MOVE 'Y' TO FOUND.
ENDIF.
MOVE-CORRESPONDING D021T TO DTXT.
MOVE DTXT TO S-TXT.
APPEND S.
ENDSELECT.
CASE SY-SUBRC.
WHEN 0.
WHEN OTHERS. "try original language
SELECT * FROM D021T
WHERE PROG EQ T-NAME
AND DYNR EQ T-NUMBER
AND LANG EQ R-LANGUAGE.
IF FOUND = 'N'.
MOVE '????DTXT' TO S-TXT.
APPEND S.
MOVE 'Y' TO FOUND.
ENDIF.
MOVE-CORRESPONDING D021T TO DTXT.
MOVE DTXT TO S-TXT.
APPEND S.
ENDSELECT.
ENDCASE.
ENDLOOP.
ENDFORM.
/ Build the original dynpro component tables. */
/ Table H1 contains 1 entry for each dynpro. H1 contains */
/ the header for the dynpro prefixed by the program name */
/ and dynpro number. */
/ By looping round this table we can re-build the F */
/ (Fields) and E (Logic) components. By stripping off the */
/ program name and dynpro number the original tables are */
/ re-created. (Tables F1 and E1 also have a prefix of */
/ Program name and dynpro nr). */
/ After the original set of tables has been re-created we */
/ use R3 - SYSTEM-CALL (rel 2.2) to generate the screen */
/ and then get the next entry in table H1 to build the */
/ next screen. For releases 3.0 and higher use generate */
/ dynpro. */
FORM RECONSTRUCT_DYNPROS.
LOOP AT H1.
CASE MAIN.
WHEN 'Y'.
if h1-name ne repid.
IF H1-NAME NE R1-NAME.
MOVE H1-NAME TO OLDNAME.
ENDIF.
ENDCASE.
PERFORM RECONSTRUCT_F.
PERFORM RECONSTRUCT_E.
MOVE-CORRESPONDING H1 TO H.
IF MAIN = 'Y'.
move repid to h-prog.
MOVE R1-NAME TO H-PROG.
move repid to dynname.
MOVE R1-NAME TO DYNNAME.
ELSE.
MOVE H1-NAME TO H-PROG.
MOVE H1-NAME TO DYNNAME.
ENDIF.
MOVE H1-NUMBER TO H-DNUM.
WRITE H1-NUMBER TO DYNNAME+40(4).
EXPORT DYNPRO H F E M ID DYNNAME.
SYSTEM-CALL GENERATE-SCREEN DYNNAME. "Up to rel 2.2
GENERATE DYNPRO H F E M ID DYNNAME "R 3.0, 4.0, 4.5
MESSAGE DYNPRO_MESSAGE
LINE DYNPRO_LINE
WORD DYNPRO_WORD.
REFRESH: M, F, E.
CLEAR: M, H, F, E.
ENDLOOP.
ENDFORM.
/ Re-build Fields table */
FORM RECONSTRUCT_F.
LOOP AT F1 WHERE NAME EQ H1-NAME AND
NUMBER EQ H1-NUMBER.
MOVE-CORRESPONDING F1 TO F.
APPEND F.
ENDLOOP.
ENDFORM.
/ Re-build Logic table */
FORM RECONSTRUCT_E.
LOOP AT E1 WHERE NAME EQ H1-NAME AND
NUMBER EQ H1-NUMBER.
MOVE-CORRESPONDING E1 TO E.
APPEND E.
ENDLOOP.
ENDFORM.
/ scan for included files (Upload) */
FORM SCAN4-INCLUDES.
IF FUNC = 'D'. "Downloads - whole table needs to be scanned
LOOP AT S.
PERFORM SEARCH-FUNC.
ENDLOOP.
ENDIF.
IF FUNC = 'U'. "On upload scan line by line as we are re-building abap
PERFORM SEARCH-FUNC.
ENDIF.
ENDFORM.
/ scan for text INCLUDE xxxxxxxx */
/ reject INCLUDE STRUCTURE as structure not a valid */
/ program name */
FORM SEARCH-FUNC.
CONDENSE S-TXT.
SEARCH S-TXT FOR '.INCLUDE .'.
CASE SY-SUBRC.
WHEN 0.
IF S-TXT+8(9) EQ 'STRUCTURE'
OR S-TXT+8(9) EQ 'structure'
OR S-TXT+8(6) EQ '<ICON>' "rel 3.0c 3.0d
OR S-TXT+8(6) EQ '<icon>'
OR S-TXT+8(6) EQ '<type>'
OR S-TXT+8(6) EQ '<TYPE>'
OR S-TXT+8(9) EQ '<methods>'
OR S-TXT+8(9) EQ '<METHODS>'.
EXIT.
ENDIF.
IF SY-FDPOS EQ 0. "INCLUDE must be in pos 1 (by reason of condense)
PERFORM VALIDATE_INCLUDE.
ELSE.
EXIT.
ENDIF.
ENDCASE.
ENDFORM.
/ Validate INCLUDES . */
FORM VALIDATE_INCLUDE.
SEARCH S-TXT FOR '...' STARTING AT 9 ENDING AT 39.
CASE SY-SUBRC.
WHEN 0.
WHEN OTHERS.
SEARCH S-TXT FOR '. .' STARTING AT 9 ENDING AT 38.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
ENDCASE.
IX = SY-FDPOS.
ASSIGN S-TXT+8(IX) TO <F>.
Now check for Include Mask for example if include mask was set to
Z* then only include programs whose first letter starts with a Z.
1) get length of the INCLUDE program name. Must be less than or
equal 40.
2) Compare it with the Include mask.
3) If Ok add include program name to include table
clear i_include.
move <f> to i_include-name.
CLEAR I_INCL.
SEARCH IMASK FOR '.*.'.
IF SY-SUBRC = 0.
CONDENSE IMASK.
ENDIF.
IF ( <F> CP IMASK OR IMASK = ' ' ).
READ TABLE I_INCL WITH KEY = <F>.
IF SY-SUBRC NE 0.
MOVE <F> TO I_INCL-NAME.
move 1 to i_include-count.
collect i_include.
APPEND I_INCL.
ENDIF.
ENDIF.
ENDFORM.
/ Download table S. */
FORM DOWNLOAD_DATA.
CLEAR TXLINE.
WRITE 'Downloading ' TO TXLINE.
WRITE R1-NAME TO TXLINE+12.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 0
TEXT = TXLINE
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = FN3
FILETYPE = 'ASC'
TABLES
DATA_TAB = S.
ENDFORM.
/ Download Binary files H1 */
FORM DOWNLOAD_BIN_H1.
DESCRIBE FIELD H1 LENGTH J.
DESCRIBE TABLE H1 LINES I.
NR_OF_BYTES = I * J.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = FN1
FILETYPE = 'BIN'
BIN_FILESIZE = NR_OF_BYTES
IMPORTING
FILELENGTH = FILESIZE
TABLES
DATA_TAB = H1.
ENDFORM.
/ Download Binary files F1 */
FORM DOWNLOAD_BIN_F1.
DESCRIBE FIELD F1 LENGTH J.
DESCRIBE TABLE F1 LINES I.
NR_OF_BYTES = I * J.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = FN2
FILETYPE = 'BIN'
BIN_FILESIZE = NR_OF_BYTES
IMPORTING
FILELENGTH = FILESIZE
TABLES
DATA_TAB = F1.
ENDFORM.
/ Upload data from file .EEE */
FORM UPLOAD_EEE.
CLEAR TXLINE.
WRITE 'Uploading ' TO TXLINE.
WRITE R1-NAME TO TXLINE+10.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 0
TEXT = TXLINE
EXCEPTIONS
OTHERS = 1.
MOVE 'Y' TO FIRST-TIME.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FN3
FILETYPE = 'ASC'
IMPORTING
FILELENGTH = NR_OF_BYTES
TABLES
DATA_TAB = S1.
LOOP AT S1.
IF S1-TXT(4) = '????'.
MOVE S1-TXT(8) TO NEW-FUNC.
IF FIRST-TIME = 'Y'.
MOVE S1-TXT(8) TO OLD-FUNC.
MOVE 'N' TO FIRST-TIME.
ELSE.
PERFORM STORE_COMPONENT.
MOVE NEW-FUNC TO OLD-FUNC.
ENDIF.
ENDIF.
IF S1-TXT(4) NE '????'.
PERFORM REBUILD-COMPONENT.
ENDIF.
ENDLOOP.
PERFORM STORE_COMPONENT. "last component still to be processed
PERFORM REBUILD-CUA. "re-build CUA, statuses, pfk etc
ENDFORM.
/ Upload Dynpro headers (HHH) and fields (FFF) */
/ titles and dynpro logic is contained in file .EEE */
/ and has already been processed. */
FORM UPLOAD_HHH.
CASE REL3.
WHEN 'X'.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FN1
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = NR_OF_BYTES
TABLES
DATA_TAB = H2.
LOOP AT H2.
MOVE H2-CNAME TO H1-NAME.
MOVE H2-CNUM TO H1-NUMBER.
MOVE H2-NNAME TO H1-PROG.
MOVE H2-NNUM TO H1-DNUM.
MOVE H2-CTIM TO H1-TGEN.
WRITE '19' TO H1-DGEN(2).
WRITE H2-CDAT TO H1-DGEN+2(6).
WRITE H2-FILL TO H1+88(39).
APPEND H1.
ENDLOOP.
WHEN OTHERS.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FN1
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = NR_OF_BYTES
TABLES
DATA_TAB = H1.
ENDCASE.
LOOP AT H1.
MOVE H1-NAME TO T-NAME.
MOVE H1-NUMBER TO T-NUMBER.
APPEND T.
ENDLOOP.
ENDFORM.
/ Upload Binary file F1 - Dynpro fields */
FORM UPLOAD_FFF.
CASE REL3.
WHEN 'X'.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FN2
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = NR_OF_BYTES
TABLES
DATA_TAB = F2.
LOOP AT F2.
OLD_F1 = F2.
APPEND OLD_F1.
ENDLOOP.
LOOP AT OLD_F1.
MOVE-CORRESPONDING OLD_F1 TO F1.
APPEND F1.
ENDLOOP.
WHEN OTHERS.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FN2
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = NR_OF_BYTES
TABLES
DATA_TAB = F1.
ENDCASE.
ENDFORM.
/ Re-construct data from file .EEE */
FORM REBUILD-COMPONENT.
CASE OLD-FUNC.
WHEN '????LOGC'. "Dynpro LOGIC.
CASE REL3.
WHEN 'X'.
SHIFT S1-TXT+8 RIGHT BY 32 PLACES.
ENDCASE.
MOVE S1-TXT TO E1.
APPEND E1.
/ Load ABAP Source code, CUA, pfkeys etc to int tables */
WHEN '????SRCE'.
MOVE S1-TXT TO S-TXT.
APPEND S.
CASE INCLUDES. "Included file wanted
WHEN 'Y'.
PERFORM SCAN4-INCLUDES.
ENDCASE.
if restoring / uploading rel 3.1 or lower different cua tables
are used. At generate CUA time these will be converted by the
system to rel 4.0
WHEN '????STAT'.
CASE REL3.
WHEN 'X'.
MOVE S1-TXT TO OLD_STA.
APPEND OLD_STA.
WHEN SPACE.
MOVE S1-TXT TO STA.
APPEND STA.
ENDCASE.
MOVE 'Y' TO CUA-FLAG.
WHEN '????FUNC'.
CASE REL3.
WHEN 'X'.
MOVE S1-TXT TO OLD_FUN.
APPEND OLD_FUN.
WHEN SPACE.
MOVE S1-TXT TO FUN.
APPEND FUN.
ENDCASE.
MOVE 'Y' TO CUA-FLAG.
WHEN '????MEN1'.
CASE REL3.
WHEN 'X'.
MOVE S1-TXT TO OLD_MEN.
APPEND OLD_MEN.
WHEN SPACE.
MOVE S1-TXT TO MEN.
APPEND -
Displaying image in abap report
Hi Everyone.
I need to display an image in a simple ABAP report giving the filepath of the image.
Can anyone suggest me how to do it???
Is there any FM for that, i need some solution.
Kindly help.
Thanks
Regards
NaveenI need to give the path of the image in the report itself and then while executing i must get the image in the output screen...
Giving path is a must.... -
How to send an abap report to an HTML file?
hello this a two part question and This is the first question and I will post the next question after I am done with this.
So here goes.
My question is how do I send/download an abap report and convert it to an HTML file?
Thanks guys take care!Hi Chand,
This code will help.
Generate an HTML file from a Report in ABAP
data: begin of itab occurs 0,
matnr type mara-matnr,
mtart type mara-mtart,
matkl type mara-matkl,
groes type mara-groes,
end of itab.
data: ifields type table of w3fields with header line.
data: ihtml type table of w3html with header line.
select * into corresponding fields of table itab
from mara up to 100 rows.
call function 'WWW_ITAB_TO_HTML'
EXPORTING
* TABLE_ATTRIBUTES = 'BORDER=1'
* TABLE_HEADER =
ALL_FIELDS = 'X'
tables
html = ihtml
fields = ifields
* ROW_HEADER =
itable = itab
check sy-subrc = 0.
call function 'GUI_DOWNLOAD'
exporting filename = 'c:test.html'
tables data_tab = ihtml -
Call WD Interactive Form with Values from ABAP Report
Hallo together,
i have a simple ABAP report with some values.
How to call a webdynpro passing these values and using them in Select-Statements to prefill the called Interactive Form
Thanks
PhilipHi Runal,
i tried this and i get the parameters in the defaulthandler event.
but now i need these values in the supply function of my node to get the values which should be display.
How to access from supply function to the defaulthandler event? I read some threads but none answered my question i think.
METHOD handledefault .
DATA: it_parameter TYPE tihttpnvp,
wa_parameter LIKE LINE OF it_parameter.
wdevent->get_data(
EXPORTING
name = if_wd_application=>all_url_parameters
IMPORTING
value = it_parameter ).
ENDMETHOD.
Thanks
Philip -
How to directly print PDF file(which is stored in SAP) in ABAP report?
Hi experts,
I searched SDN for printing PDF file but everything is about OTF to PDF and to use fm: CONVERT_OTF which is not the solution for my problem.
I have to build ABAP report which will take the PDF file attached to SAP document (CV02N) and print it.So, which function module or program can I use to print the PDF file?
Thank you very much.
Kind regards,
DanijelaDear
this is the code for down load smartform for PDF format. its working properly
2nd way is
set your Acrobat Printer as your default printer
when you print select printer as LOCAL
then you will file dialog box for Naming PDF
DATA : T_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE.
DATA : WA_CTRLOP TYPE SSFCTRLOP.
DATA : WA_OUTOPT TYPE SSFCOMPOP.
DATA : T_OTFDATA TYPE SSFCRESCL.
DATA : T_PDF_TAB LIKE TLINE OCCURS 0 WITH HEADER LINE.
DATA : V_FILESIZE TYPE I.
DATA : W_BIN_SIZE TYPE I.
WA_CTRLOP-GETOTF = 'X'.
WA_CTRLOP-NO_DIALOG = 'X'.
WA_OUTOPT-TDNOPREV = 'X'.
CALL FUNCTION P_LV_FNAME
EXPORTING
OUTPUT_OPTIONS = WA_OUTOPT
USER_SETTINGS = 'X'
CONTROL_PARAMETERS = WA_CTRLOP
IMPORTING
JOB_OUTPUT_INFO = T_OTFDATA
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
T_OTF[] = T_OTFDATA-OTFDATA[].
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = W_BIN_SIZE
TABLES
OTF = T_OTF
LINES = T_PDF_TAB
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
OTHERS = 4.
DATA : LV_DOWN_FILE TYPE RLGRAP-FILENAME.
DATA : LV_TEXT TYPE STRING.
CASE SSCRFIELDS-UCOMM.
WHEN 'REPRUNMOLD'.
CONCATENATE '(' SO_SCHDT-LOW '-' SO_PLANT-LOW ')' INTO LV_TEXT.
CONCATENATE '\\lkdb01\FTP-Loadstar\0.PP_Planning\ZPP014\Run_Moulds\' SY-DATUM '-' SY-TIMLO '-' 'Running Mould' '-' LV_TEXT '.pdf' INTO LV_DOWN_FILE SEPARATED BY SPACE.
WHEN 'REPLINESIT'.
CONCATENATE '(' SO_SCHDT-LOW '-' SO_PLANT-LOW '-' SO_LINE2-LOW ')' INTO LV_TEXT.
CONCATENATE '\\lkdb01\FTP-Loadstar\0.PP_Planning\ZPP014\Line_Situation\' SY-DATUM '-' SY-TIMLO '-' 'Line Situation' '-' LV_TEXT '.pdf' INTO LV_DOWN_FILE SEPARATED BY SPACE.
ENDCASE.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
BIN_FILESIZE = W_BIN_SIZE
FILENAME = LV_DOWN_FILE
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = V_FILESIZE
TABLES
DATA_TAB = T_PDF_TAB
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.
IF SY-SUBRC <> 0.
MESSAGE 'File not downloaded succesfully' TYPE 'I'.
EXIT.
ELSE.
MESSAGE 'PDF File downloaded succesfully' TYPE 'I'.
ENDIF.
ENDFORM. " Print_PDF
Rewards if useful. -
Convert ABAP Report's Output into PDF Format..
Hello Experts,
I want to convert the outout of an ABAP report to an PDF file. I have succedded in doing the following :
Data statistics -
Number of
Records passed ---4
After executing the program RSTXPDFT4, i can get PDF file saying number of records in the above format...
But i want to have the output of the report in PDF. suppose a list is being displayed in the output olf the ABAP report, i want to save that report in PDF format....
Please help........
Anupam...Hi Anupam,
Try this way
<font color=blue><pre>
REPORT ztest_notepad.
"Variables
DATA:
l_lay TYPE pri_params-paart,
l_lines TYPE pri_params-linct,
l_cols TYPE pri_params-linsz,
l_val TYPE c,
l_no_of_bytes TYPE i,
l_pdf_spoolid LIKE tsp01-rqident,
l_jobname LIKE tbtcjob-jobname,
l_jobcount LIKE tbtcjob-jobcount,
spoolno TYPE tsp01-rqident.
*Types
TYPES:
t_pripar TYPE pri_params,
t_arcpar TYPE arc_params.
"Work areas
DATA:
lw_pripar TYPE t_pripar,
lw_arcpar TYPE t_arcpar.
DATA:
it_t100 TYPE t100 OCCURS 0 WITH HEADER LINE,
it_pdf TYPE tline OCCURS 0 WITH HEADER LINE.
"Start-of-selection.
START-OF-SELECTION.
l_lay = 'X_65_132'.
l_lines = 65.
l_cols = 132.
"Read, determine, change spool print parameters and archive parameters
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
in_archive_parameters = lw_arcpar
in_parameters = lw_pripar
layout = l_lay
line_count = l_lines
line_size = l_cols
no_dialog = 'X'
IMPORTING
out_archive_parameters = lw_arcpar
out_parameters = lw_pripar
valid = l_val
EXCEPTIONS
archive_info_not_found = 1
invalid_print_params = 2
invalid_archive_params = 3
OTHERS = 4.
IF l_val <> space AND sy-subrc = 0.
lw_pripar-prrel = space.
lw_pripar-primm = space.
NEW-PAGE PRINT ON
NEW-SECTION
PARAMETERS lw_pripar
ARCHIVE PARAMETERS lw_arcpar
NO DIALOG.
ENDIF.
"Get data
SELECT *
FROM t100
INTO TABLE it_t100
UP TO 100 ROWS
WHERE sprsl = sy-langu.
" Writing to Spool
LOOP AT it_t100.
WRITE:/ it_t100.
ENDLOOP.
NEW-PAGE PRINT OFF.
CALL FUNCTION 'ABAP4_COMMIT_WORK'.
spoolno = sy-spono.
"Convert spool to PDF
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spoolno
no_dialog = ' '
IMPORTING
pdf_bytecount = l_no_of_bytes
pdf_spoolid = l_pdf_spoolid
btc_jobname = l_jobname
btc_jobcount = l_jobcount
TABLES
pdf = it_pdf.
"Download PDF file C Drive
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'C:\itab_to_pdf.pdf'
filetype = 'BIN'
TABLES
data_tab = it_pdf. </pre></font>
Thanks
Venkat.O -
Download of a report into the PDF is not giving me all the Columns
Hi all,
I have a report in BI publisher with 10 columns .But when i try to download that report into PDF FORMAT, then i am able to see only 3 columns in a single page but i can see the remaining columsn in next page .
ACTUAL REPORT :
a b c d e f g h i j k l
NAME 1 2 3 4 5 6 7 8 9 0 1 2
So when i download this Report into PDF i am getting like this
page 1 :
a b c
NAME 1 2 3
Page 2 :
d e f
NAME: 4 5 6
page 3:
g h i
NAME: 7 8 9
page 4:
j k l
NAME: 0 1 2
I am getting PDF output like this .
I am supposed to get all these values in a single page right ..
Can any one help me with this.
Edited by: Xavier on Aug 15, 2011 11:35 AM
Edited by: Xavier on Aug 15, 2011 11:40 AMYes, BI Pub,
I am using a pivot table in the RTF Template .So i need to change the table properties in the RTF template RI8
Thanks
Xavier
Edited by: Xavier on Aug 15, 2011 12:58 PM -
How to copy/download all ABAP programs in a text with a single report ?
How to copy/download all ABAP programs in a text format with a single report/TC ?
How to copy/download ABAP source code with all include programs ?....
we need to search & copy all include programs everytime....Hi,
check this link
downloading programs
Regards -
How can I print PDF attachments from ABAP report in transaction ME23N?
Hi,
Users attach PDF files using "services for objects" in transaction ME23N.
How can I print the PDF attachments from ABAP report ?
Thanks in advance,,Hi,
check this link,this might help you to solve your problem
/people/thomas.jung3/blog/2005/04/28/setting-up-an-adobe-writer-for-abap-output
Regards
Kiran Sure -
Download ALV report to PDF with Lights
Hi,
I have a requirement wherein, when i download ALV report to PDF which has Lights in the first column. My problem is these lights are not displayed instead i get the following in the PDF
PDF o/p:
XOO RED SIGNAL
OXO YELLOW SIGNAL
OOX GREEN SIGNAL
Please let me know how to get the lights in the PDF o/p
Thanks & Regards,
SandhyaHi Sandhya,
U can convert any type of display(SF,ALV) to PDF.....
User Program rstxpdft4 to convert it first the O/P need to be converted into spool.
cheers,
Naveen. -
Hi all,
Is Adobe Document Services (ADS) necessary for reading PDF files directly in ABAP report? Maybe there is other way?
Best regards
Marcin CholewczukI guess there is no such solution. I think it's time for new project on Code Exchange platform
Best regards
Marcin Cholewczuk -
Reading and printing the pdf file in abap reports.
Hello friends .
how to read pdf file and print the contents of the pdf file in abap reports.?
Edited by: Shivanand Kalagi on Jan 11, 2008 12:47 PMHI Brad Bohn,
Issue is not only with the file damaged.
My requirement is to place the PDF file in FTP folder using FTP_COMMAND, FTP_R3_TO_SERVER Function Modules.
I'm placing the PDF sucessfully in FTP Folder. When i try to open it's showing the "File cannot be opened because it's damaged....".
I'm not sure whether i'm placing the PDF file in correct way.
Regards,
Saran
Maybe you are looking for
-
I have just downloaded Photoshop CC and found it installed two versions.
I am using Adobe Creative Cloud. I have just downloaded Photoshop CC and found it installed two versions. I beleive the 32 bit version and the 64 bit version. Is there a reason it has installed two versions? Can I remove one version as I am runnin
-
Trying to import XML score from Logic, cannot put XML into timeline. Help!
So, I composed a score for my shortfilm in logic, and have exported it in XML format. I can import it into FCP just fine, but when I try to put it in the timeline, I get an error message saying "Operation not allowed. You cannot nest sequences with d
-
Does anyone know if the apple web page china exists in an english version. Apple store here in shanghai will not help me to upgrade the imac i wish to purchase and refers to the apple store which is in chinese language. Any thoughts?
-
Can you do webreporting with WAS6.40(only ABAP stack)
Hi gurus, I have one question: Is it possible to do webreporting with a WAS6.40(only abap)without a java stack. Only the ABAP stack is installed. So design/publish reports with the BEx Web Application designer Thanks for your reactions in advance.
-
My 2 year old 13" MacbookPro suddenly turned off, presumably when the screen automatically dimmed (or went to sleep?) and now it won't turn back on. It was at 96% charge and now when I use the battery checker on the side, nothing shows up. No lights