Posted: Sat Oct 06, 2007 11:43 pm Post subject: Download table contents to PC local file or app.server
*
These programs are very useful for testing or programming and
sometimes very helpful than transaction ‘SE11’ or ‘SE16 (N)’.
*
Code:
*&---------------------------------------------------------------------*
* Created on 2007.02.15 by Y.SAITA TOKYO,JAPAN
*&---------------------------------------------------------------------*
* You can do anything to this report without my permission.
* (modify,fix bugs,sell,republish,etc)
* This program is a use-at-your-own-risk-basis-program,
* So use at your own risk.
*
* In no event will the author be liable for indirect, special,
* Incidental, or consequental damages (if any) arising out of
* the use of this program.
* The person, who implements this program,
* have to be sure that such damage does not happen.
*
*&---------------------------------------------------------------------*
*& Download table contents to PC local file or app.server
*&---------------------------------------------------------------------*
*1:[Description]
* This program downloads table contents to PC file(Excel sheet or text)
* or App.server.
* Choose a table you want to download.
* You can use 'Dynamic selection' by pressing 'Dynamic selection'.
* You can save the downloaded data as Excel or Text (Tab).
* See the attached PDF.file.
*
*2:[NOTE]
* You may need to change the Japanese yen mark to backslash.
*
*3:[Security Notes]
* If you want that only you can run this program,
* You can use macro M_AUTH_CHK,M_AUTH_CHK2.
* If you don't need them,delete them.
*
* Tested on 'Enterprise'(other version may not work) and UNIX and
* Excel 2003.
* Some codes are not needed with Excel 2007.
* Any feedback will be welcome. E-mail is [email protected]
*&---------------------------------------------------------------------*
*[Selection Texts]
"I002 Table
"I005 Choose table for download
"I006 Save as Excel or Text(Tab)
"I007 Microsoft Excel book
"I008 Text (Tab)
"I009 Table ID
"I015 Local PC file
"I016 Server file
"I017 Download to
"I018 Local file path & file
"I019 Directory path & file
*[Text Symbols]
"SP_APSV Server
"SP_DIR Directory
"SP_EXCEL Excel
"SP_FILE file
"SP_LCPC lcpc
"SP_TAB Table Id
"SP_TEXT text
REPORT Y_ZSAITA_400 MESSAGE-ID 00.
*----------------------------------------------------------------------*
* TABLESs
*----------------------------------------------------------------------*
TABLES: SSCRFIELDS, "Fields on selection screens
DD02T. "table text
*----------------------------------------------------------------------*
* TYPE
*----------------------------------------------------------------------*
*
TYPE-POOLS: KCDE, "EC-EIS
OLE2, "OLE
RSDS. "type group for dynamic selection
TYPES: TY_VALUE(256) TYPE C. "value
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS:
COS_FALSE(5) TYPE C VALUE 'False',"False
COS_WRITE_ROWS TYPE I VALUE 500, "EXCEL row
COS_DWNLOAD_SIZE TYPE I VALUE 1024, "internal table lines
COS_DOT_XLS(4) TYPE C VALUE '.xls', "file extention forEXCEL
COS_DOT_TXT(4) TYPE C VALUE '.txt', "file extention forTXT
COS_PERIOD(1) TYPE C VALUE '.', "period
COS_PATH TYPE C VALUE '\', "filepath for pc "<--backslash??
COS_MAXLINE TYPE I VALUE 65536, "EXCEL max line
COS_LOCAL TYPE AS4LOCAL VALUE 'A', "Activation status
COS_VERS TYPE AS4VERS VALUE '0000', "version
COS_YES(4) TYPE C VALUE 'YES', "for pop-up
COS_NO(6) TYPE C VALUE 'NO', "for pop-up
*Tab
COS_TAB(1) TYPE C VALUE
CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
*
*CONSTANTS FOR VisualBasic
CONSTANTS:
* Class / Function / Property
COS_XLAPPLI(17) TYPE C VALUE 'Excel.Application',
COS_DEFLTPATH TYPE SYCHAR32 VALUE 'DefaultFilePath',
COS_WORKBOOK TYPE SYCHAR32 VALUE 'Workbooks',
COS_ADD TYPE SYCHAR32 VALUE 'Add',
COS_ACTSHEET TYPE SYCHAR32 VALUE 'ActiveSheet',
COS_CELLS TYPE SYCHAR32 VALUE 'Cells',
COS_RANGE TYPE SYCHAR32 VALUE 'RANGE',
COS_COLUMNS TYPE SYCHAR32 VALUE 'Columns',
COS_VISIBLE TYPE SYCHAR32 VALUE 'Visible',
COS_ALERTS TYPE SYCHAR32 VALUE 'DisplayAlerts',
COS_REFSTYLE TYPE SYCHAR32 VALUE 'ReferenceStyle',
COS_PASTE TYPE SYCHAR32 VALUE 'Paste',
COS_VALUE TYPE SYCHAR32 VALUE 'Value',
COS_FONT TYPE SYCHAR32 VALUE 'Font',
COS_BOLD TYPE SYCHAR32 VALUE 'Bold',
COS_ALIGNMENT TYPE SYCHAR32 VALUE 'HorizontalAlignment',
COS_IGNOREBLANK TYPE SYCHAR32 VALUE 'IgnoreBlank',
COS_VALIDATION TYPE SYCHAR32 VALUE 'Validation',
COS_DROPDOWN TYPE SYCHAR32 VALUE 'InCellDropdown',
COS_ERRMESSAGE TYPE SYCHAR32 VALUE 'ErrorMessage',
COS_NUMFORMAT TYPE SYCHAR32 VALUE 'NumberFormat',
COS_BORDERS TYPE SYCHAR32 VALUE 'Borders',
COS_LINESTYLE TYPE SYCHAR32 VALUE 'LineStyle',
COS_BORDERARND TYPE SYCHAR32 VALUE 'BorderAround',
COS_INTERIOR TYPE SYCHAR32 VALUE 'Interior',
COS_COLORINDEX TYPE SYCHAR32 VALUE 'ColorIndex',
COS_AUTOFIT TYPE SYCHAR32 VALUE 'AutoFit',
COS_SELECT TYPE SYCHAR32 VALUE 'Select',
COS_COLUMNWIDTH TYPE SYCHAR32 VALUE 'ColumnWidth',
COS_WINDOWS TYPE SYCHAR32 VALUE 'Windows',
COS_FREEZEPANES TYPE SYCHAR32 VALUE 'FreezePanes',
COS_NEWWORKBOOK TYPE SYCHAR32 VALUE 'SheetsInNewWorkbook',
COS_NAME TYPE SYCHAR32 VALUE 'Name',
COS_SAVEAS TYPE SYCHAR32 VALUE 'SaveAs',
COS_CLOSE TYPE SYCHAR32 VALUE 'Close'.
*
CONSTANTS:
* Const
COS_XLSTYLE_A1 TYPE I VALUE 1, "xlA1
COS_XLSTYLE_R1C1 TYPE I VALUE -4150, "xlR1C
COS_XLCOLOR_HEAD TYPE I VALUE 6, "header color(yello)
COS_XLCOLOR_KEY TYPE I VALUE 20, "key color(light-blue)
COS_XLSTYLE TYPE I VALUE 1, "ruled line style
COS_XLMEDIUM TYPE I VALUE -4138, "ruled line-thick-middle
COS_XLBOTTOM TYPE I VALUE 9, "under line
COS_XLDOUBLE TYPE I VALUE -4119, "double line
COS_XLVALIDCSTM TYPE I VALUE 7, "input(user)
COS_XLVALIDNUM TYPE I VALUE 1, "input(integer)
COS_XLVALIDDEC TYPE I VALUE 2, "input(decimal)
COS_XLVALIDLIST TYPE I VALUE 3, "input(list)
COS_XLVALIDSTOP TYPE I VALUE 1, "error style(stop)
COS_XLEQUAL TYPE I VALUE 3, "operator(=)
COS_XLBETWEEN TYPE I VALUE 1, "operator(range)
COS_XLWORKBOOK TYPE I VALUE -4143, "*.xls
COS_XLHALIGNLEFT TYPE I VALUE -4131. "left
*----------------------------------------------------------------------*
* DATA
*----------------------------------------------------------------------*
* object
DATA: H_EXCEL TYPE OLE2_OBJECT, "EXCELD
H_WORKBOOKS TYPE OLE2_OBJECT, "WORKBOOKS
H_WORKBOOK TYPE OLE2_OBJECT, "WORKBOOK
H_WORKSHEET TYPE OLE2_OBJECT, "WORKSHEET
H_RANGE TYPE OLE2_OBJECT, "RANGE
H_WINDOW TYPE OLE2_OBJECT, "WINDOW
H_CELL TYPE OLE2_OBJECT, "CELL
H_CELL1 TYPE OLE2_OBJECT, "CELL(RANGE)
H_FONT TYPE OLE2_OBJECT, "FONT
H_INTERIOR TYPE OLE2_OBJECT, "INTERIOR
H_BORDER TYPE OLE2_OBJECT, "BORDER
H_VALIDATION TYPE OLE2_OBJECT. "VALIDATION
* Reference
DATA: REF_TAB TYPE REF TO DATA, "table
REF_LINE TYPE REF TO DATA. "record
* internal tables
DATA: IT_DFIES LIKE TABLE OF DFIES, "Table Fields
IT_EXCEL TYPE KCDE_SENDER, "EXCEL data(all)
IT_EXCEL_PART TYPE KCDE_SENDER, "EXCEL data(part)
IT_TABLES TYPE TABLE OF RSDSTABS, "for dynamic selections
IT_WHERE TYPE RSDS_TWHERE, "or dynamic (WHERE)
IT_EXPRESS TYPE RSDS_TEXPR, "initial selections
IT_FIELDS_TAB TYPE TABLE OF RSDSFIELDS. "Selected fields for
"dynamic selections
* work area
DATA: W_DFIES LIKE LINE OF IT_DFIES, "table info
W_DD02T TYPE DD02T, "table text
W_TABNAME TYPE DDOBJNAME, "table name
W_DDOBJTYPE TYPE TABCLASS, "table category
W_FILEPATH TYPE STRING, "filepath
W_DEFLTPATH TYPE STRING, "default path
W_PATHLEN TYPE I, "length of filepath
W_RESULT TYPE ABAP_BOOL, "flag for file exist
W_CLIPBOARD TYPE I, "return code for clipboard
W_QUESTION TYPE STRING, "pop-up message
W_ANSWER, "pop-up answer
W_VALUE TYPE TY_VALUE, "EXCEL value
W_EXCEL LIKE LINE OF IT_EXCEL, "EXCEL data(value)
W_XLHEAD LIKE LINE OF IT_EXCEL, "EXCEL data(header)
W_XLHEAD2 LIKE LINE OF IT_EXCEL, "EXCEL data(header2)
W_XLHEAD3 LIKE LINE OF IT_EXCEL, "EXCEL data(header3)
W_EXTENSION(4), "FILE EXTENSION
W_BOLD TYPE I, "Excel line(bold)ON/OFF
W_ROW_TOP TYPE I, "EXCEL start lien
W_COL TYPE I, "EXCEL colum
W_ROW TYPE I, "EXCEL row
W_COL_END TYPE I, "EXCEL colum end
W_ROW_END TYPE I, "EXCEL rol end
W_COL_KEY TYPE I, "EXCEL key
W_HEAD1(100), "EXCEL first row first text
W_HEAD2(100), "EXCEL second row first text
W_NUMFORMAT(50), "cell format
W_TYPE TYPE I, "input type
W_DCML_OFFSET TYPE I, "decimal offset
*for dynamic selection
W_SELECT_ID TYPE RSDYNSEL-SELID, "dynamic selection ID
W_TABLES_TAB TYPE RSDSTABS, "field names for dynamic selections
W_WHERE_CLS LIKE LINE OF IT_WHERE, "field selection(all)
W_WHERE TYPE RSDSWHERE, "WHERE clause
W_TOTAL_WHERE TYPE STRING, "WHERE clause(all)
W_DLG_TITLE TYPE SY-TITLE, "dialog titel
W_TABLE_LINES TYPE I, "internal table lines
W_TBL_LN(10) TYPE C, "internal table lines(output)
W_LOOP_START TYPE I, "loop start
W_LOOP_END TYPE I, "loop end
W_DBCNT TYPE I, "output count
F_APPEND(1) TYPE C, "flag for append
F_INIT_FLG(1) TYPE C. "flag for selection ID
*
DATA :
W_ABENDFLAG LIKE DXFIELDS-ABENDFLAG,
W_FIELD LIKE DYNPREAD-FIELDNAME,
W_PATHI LIKE DXFIELDS-LONGPATH,
W_PATH LIKE DXFIELDS-LONGPATH,
W_SERVER_NAME LIKE MSXXLIST-NAME,
W_DELIMIT TYPE C. "Delimiter
*
*----------------------------------------------------------------------*
* macro for fm FLUSH
*----------------------------------------------------------------------*
DEFINE M_MESSAGE_U.
CASE SY-SUBRC.
WHEN 0.
WHEN 1.
MESSAGE S121(14) WITH 'FLUSH' SY-SUBRC.
"function module & error SY-SUBRC=&
STOP.
WHEN OTHERS.
IF SY-SUBRC <> 0.
MESSAGE S121(14) WITH 'FLUSH' SY-SUBRC.
"function module & error : SY-SUBRC=&
FREE OBJECT H_CELL.
FREE OBJECT H_WORKBOOK.
FREE OBJECT H_WORKBOOKS.
FREE OBJECT H_EXCEL.
STOP.
ENDIF.
ENDCASE.
END-OF-DEFINITION.
*Security check1 SY-UNAME
DEFINE M_AUTH_CHK.
*
IF SY-UNAME <> 'xxxxx'.
MESSAGE E398(00) WITH
'You do not have authorization!'.
EXIT.
ENDIF.
END-OF-DEFINITION.
*Security check2 SY-DATUM
DEFINE M_AUTH_CHK2.
*
IF SY-DATUM > '20070401'.
MESSAGE E398(00) WITH
'You do not have authorization!'.
ENDIF.
*
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* PARAMETERS, SELECTION-OPTIONS
*----------------------------------------------------------------------*
* Download to local(PC) or App.server
SELECTION-SCREEN BEGIN OF BLOCK BL6 WITH FRAME TITLE TEXT-017.
* local(PC)
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(11) TEXT-015 FOR FIELD P_LCPC.
SELECTION-SCREEN POSITION 23.
PARAMETERS P_LCPC RADIOBUTTON GROUP R4 USER-COMMAND P DEFAULT 'X'.
SELECTION-SCREEN COMMENT 35(22) TEXT-018 FOR FIELD P_FILE.
SELECTION-SCREEN POSITION 58.
PARAMETERS P_FILE LIKE RLGRAP-FILENAME MODIF ID APS MEMORY ID GR8.
SELECTION-SCREEN END OF LINE.
* Server file
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) TEXT-016 FOR FIELD P_APSV.
SELECTION-SCREEN POSITION 23.
PARAMETERS P_APSV RADIOBUTTON GROUP R4.
SELECTION-SCREEN COMMENT 35(22) TEXT-019 FOR FIELD P_DIR.
SELECTION-SCREEN POSITION 58.
PARAMETERS P_DIR TYPE SDBA_DIR MODIF ID LPC MEMORY ID GR9.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BL6.
* Save as Excel or Text(Tab)
SELECTION-SCREEN BEGIN OF BLOCK BL5 WITH FRAME TITLE TEXT-006.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(22) TEXT-007 FOR FIELD P_EXCEL.
SELECTION-SCREEN POSITION 23.
PARAMETERS P_EXCEL RADIOBUTTON GROUP R2 MODIF ID APS DEFAULT 'X'.
SELECTION-SCREEN COMMENT 35(22) TEXT-008 FOR FIELD P_TEXT.
SELECTION-SCREEN POSITION 58.
PARAMETERS P_TEXT RADIOBUTTON GROUP R2 MODIF ID APS .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN COMMENT 1(70) P_COM1 MODIF ID COM.
SELECTION-SCREEN END OF BLOCK BL5.
* Choose table
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-005.
* TABLE
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) TEXT-009.
SELECTION-SCREEN POSITION 12.
PARAMETERS P_TAB TYPE TABNAME16 MEMORY ID DTB MODIF ID DNL.
SELECTION-SCREEN PUSHBUTTON 37(20) P_SEL USER-COMMAND ZSEL
MODIF ID DNL.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BL2.
SELECTION-SCREEN SKIP.
*LANGUAGE
PARAMETERS:
P_LANGU LIKE DOKIL-LANGU DEFAULT SY-LANGU.
SELECTION-SCREEN END OF BLOCK BL1.
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
*
M_AUTH_CHK. "Delete if you don't need
M_AUTH_CHK2. "Delete if you don't need
*
P_SEL = 'Dynamic selection'.
P_COM1 = '(Excel cannot handle more than 65,534 records)'.
P_LANGU = 'EN'.
*
IMPORT IT_EXPRESS IT_FIELDS_TAB FROM MEMORY ID 'ZSEL'.
REFRESH IT_EXCEL.
*
IF SY-OPSYS = 'WINDOWS NT'.
W_DELIMIT = '\'. "<--backslash???
ELSE.
W_DELIMIT = '/'.
ENDIF.
*
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
* INTENSIFIED -remark for save as excel
IF SCREEN-GROUP1 = 'COM'.
SCREEN-INTENSIFIED = '1'.
MODIFY SCREEN.
ENDIF.
*
IF P_APSV = 'X'.
P_EXCEL = ' '.
P_TEXT = 'X'.
ENDIF.
*
CHECK ( SCREEN-GROUP1 = 'APS' AND P_APSV = 'X' )
OR ( SCREEN-GROUP1 = 'LPC' AND P_LCPC = 'X' ).
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDLOOP.
*
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
*
CASE SSCRFIELDS-UCOMM.
WHEN 'ONLI'.
PERFORM SELSCR_ONLI.
PERFORM DOWNLOAD_COMMON_PROCESS.
WHEN 'ZSEL'.
PERFORM SELSCR_ONLI.
PERFORM SELSCR_ZSEL.
ENDCASE.
*----------------------------------------------------------------------*
* Explore PC file
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*
CHECK P_LCPC = 'X'.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
* PROGRAM_NAME = SYST-CPROG
* DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = 'P_FILE'
IMPORTING
FILE_NAME = P_FILE.
*----------------------------------------------------------------------*
* Explore server file
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DIR.
*
PERFORM HELP_SERVER_FILE.
*
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
*
IF SY-BATCH = 'X'.
MESSAGE S001 WITH 'This program doesnot run in background'.
STOP.
ENDIF.
* Does Pc file exist?
IF P_LCPC = 'X' AND P_FILE <> SPACE.
PERFORM CHECK_WRITE_PCFILE_EXIST.
ENDIF.
* Does server file exist?
IF P_APSV = 'X' AND P_DIR <> SPACE.
PERFORM CHECK_WRITE_SVRFILE_EXIST.
ENDIF.
*
PERFORM SELECT_DD02T. "table texts
*
CASE 'X'.
WHEN P_LCPC. " Local PC
PERFORM DOWNLOAD_TO_LOCAL.
WHEN P_APSV. " SERVER FILE
PERFORM DOWNLOAD_TO_SERVER.
ENDCASE.
*
**********
* FORMS *
**********
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_TO_LOCAL
*&---------------------------------------------------------------------*
* Download table contents to Pc file or Excel
*----------------------------------------------------------------------*
FORM DOWNLOAD_TO_LOCAL.
*
PERFORM SELECT_DD02T. "table texts
*
PERFORM DOWNLOAD_COMMON_PROCESS_2.
* Pc file or Excel
CASE 'X'.
WHEN P_TEXT.
PERFORM DOWNLOAD_BY_TEXT.
WHEN P_EXCEL.
PERFORM DOWNLOAD_BY_EXCEL.
ENDCASE.
*
MESSAGE S398(00) WITH 'Data downloaded successfully to '
W_FILEPATH
'Number of records is'
W_DBCNT.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SELECT_DD02T
*&---------------------------------------------------------------------*
* Read table texts
*----------------------------------------------------------------------*
FORM SELECT_DD02T .
*
CLEAR W_DD02T-DDTEXT.
*
SELECT SINGLE DDTEXT
INTO W_DD02T-DDTEXT
FROM DD02T
*
WHERE TABNAME = W_TABNAME
AND DDLANGUAGE = P_LANGU
AND AS4LOCAL = COS_LOCAL
AND AS4VERS = COS_VERS.
*
ENDFORM.
*&---------------------------------------------------------------------*
* Save as text(Tab)
*----------------------------------------------------------------------*
FORM DOWNLOAD_BY_TEXT .
* Edit header
PERFORM SET_TEXT_HEADER.
* Edit data
PERFORM CONVERT_DATA_TO_FILE.
* Download table contents to Pc local file
PERFORM DOWNLOAD_TABLE_DATA.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_TO_SERVER
*&---------------------------------------------------------------------*
* Download table contents to server file
*----------------------------------------------------------------------*
FORM DOWNLOAD_TO_SERVER .
*
PERFORM DOWNLOAD_COMMON_PROCESS_2.
* Open file
OPEN DATASET P_DIR FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF SY-SUBRC <> 0.
MESSAGE S398 WITH 'FILE COULD NOT BE OPENED' P_DIR '' ''.
STOP.
ENDIF.
* Write table contents to file
LOOP AT IT_EXCEL INTO W_EXCEL.
TRANSFER W_EXCEL TO P_DIR.
ENDLOOP.
* Close file
CLOSE DATASET P_DIR.
*
MESSAGE S398(00) WITH 'Data downloaded successfully to '
P_DIR
'Number of records is'
W_DBCNT.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ASSIGN_TABF
*&---------------------------------------------------------------------*
* Interface to read text on tables
*----------------------------------------------------------------------*
FORM ASSIGN_TAB.
* Create internal table
CREATE DATA REF_LINE TYPE (W_TABNAME).
ASSIGN REF_LINE->* TO <FS_LINE>.
*
CREATE DATA REF_TAB LIKE STANDARD TABLE OF <FS_LINE>.
ASSIGN REF_TAB->* TO <FS_TAB>.
*
ENDFORM.
*
*&---------------------------------------------------------------------*
*& Form FM_DDIF_FIELDINFO_GET
*&---------------------------------------------------------------------*
* DOWNLOAD_COMMON_PROCESS
*----------------------------------------------------------------------*
FORM DOWNLOAD_COMMON_PROCESS .
* Create internal table
PERFORM ASSIGN_TAB.
* Read table contents
PERFORM TABLE_SELECT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_COMMON_PROCESS
*&---------------------------------------------------------------------*
* Confirm for download
*----------------------------------------------------------------------*
FORM DOWNLOAD_COMMON_PROCESS_2 .
* Confirm for download
DESCRIBE TABLE <FS_TAB> LINES W_TABLE_LINES.
*
WRITE W_TABLE_LINES TO W_TBL_LN NO-GAP.
CONCATENATE 'Download?'
P_TAB
'-'
W_DD02T-DDTEXT
'(records is '
W_TBL_LN
INTO W_QUESTION.
*
CONDENSE W_QUESTION NO-GAPS.
*
M_POPUP_TO_CONFIRM W_QUESTION.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form TABLE_SELECT
*&---------------------------------------------------------------------*
* Read data from table
*----------------------------------------------------------------------*
FORM TABLE_SELECT .
*
DELETE IT_WHERE WHERE TABLENAME <> P_TAB.
* Generate WHERE clause
LOOP AT IT_WHERE INTO W_WHERE_CLS.
LOOP AT W_WHERE_CLS-WHERE_TAB INTO W_WHERE.
CONCATENATE W_TOTAL_WHERE W_WHERE INTO W_TOTAL_WHERE
SEPARATED BY SPACE.
ENDLOOP.
ENDLOOP.
IF SY-SUBRC = 0.
EXPORT IT_EXPRESS IT_FIELDS_TAB TO MEMORY ID 'ZSEL'.
ELSE.
FREE MEMORY ID 'ZSEL'.
ENDIF.
* Read data from table
TRY.
SELECT * FROM (P_TAB) INTO TABLE <FS_TAB>
WHERE (W_TOTAL_WHERE)
ORDER BY PRIMARY KEY.
CATCH CX_ROOT.
MESSAGE S398 WITH 'Table' P_TAB
'Error occured during selection of data'.
STOP.
ENDTRY.
* No hits
IF SY-DBCNT = 0.
MESSAGE S398 WITH
'No data selected for this search criteria' .
EXIT.
ENDIF.
*
W_DBCNT = SY-DBCNT.
* EXCEL 2003 rows limit check
* EXCEL 2003 can handle only 65536 rows,
* output data has 3 header lines,
* so data must be within 65534.
*(In the futrue,this code will not be needed)
DATA W_DBCNT2 LIKE SY-DBCNT.
CHECK P_EXCEL = 'X'.
W_DBCNT2 = W_DBCNT + 3.
*
CHECK W_DBCNT2 >= COS_MAXLINE.
*
MESSAGE S001 WITH
'You cannnot save data as Excel'
'since output data has more than 65,534 records'.
STOP.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_BY_EXCEL
*&---------------------------------------------------------------------*
* Download as Excel
*----------------------------------------------------------------------*
FORM DOWNLOAD_BY_EXCEL .
CALL METHOD OF H_RANGE COS_SELECT NO FLUSH.
FREE OBJECT H_RANGE NO FLUSH.
CALL METHOD OF H_WORKBOOK COS_WINDOWS = H_WINDOW NO FLUSH
EXPORTING
#1 = 1.
*
SET PROPERTY OF H_WINDOW COS_FREEZEPANES = 1 NO FLUSH.
FREE OBJECT H_WINDOW NO FLUSH.
* xlR1C1 -->xlA1
SET PROPERTY OF H_EXCEL COS_REFSTYLE = COS_XLSTYLE_A1 NO FLUSH.
* Save
PERFORM SAVE_FILE.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form WRITE_DATA_TO_EXCEL
*&---------------------------------------------------------------------*
* Write internal table to Excel
*----------------------------------------------------------------------*
FORM WRITE_DATA_TO_EXCEL .
*
CHECK IT_EXCEL[] IS NOT INITIAL.
* Export to clipboard
LOOP AT IT_EXCEL INTO W_EXCEL FROM W_LOOP_START TO W_LOOP_END.
APPEND W_EXCEL TO IT_EXCEL_PART.
ENDLOOP.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
IMPORTING
DATA = IT_EXCEL_PART[]
CHANGING
RC = W_CLIPBOARD
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
CALL METHOD OF H_WORKBOOK COS_CLOSE
EXPORTING
#1 = COS_FALSE.
FREE OBJECT H_RANGE.
FREE OBJECT H_WORKSHEET.
FREE OBJECT H_WORKBOOKS.
FREE OBJECT H_WORKBOOK.
FREE OBJECT H_EXCEL.
MESSAGE S398 WITH 'failed to export to clipboard'
'SY-SUBRC=' SY-SUBRC.
STOP.
ENDIF.
* PasteE
CALL METHOD OF H_WORKSHEET COS_PASTE NO FLUSH
EXPORTING
#1 = H_RANGE.
FREE OBJECT H_RANGE NO FLUSH.
ENDDO.
ENDFORM.
*---------------------------------------------------------------------*
*& Form CONVERT_DATA_TO_FILE
*&---------------------------------------------------------------------*
* Edit table data for output text
*----------------------------------------------------------------------*
FORM CONVERT_DATA_TO_FILE .
* Edit data
LOOP AT <FS_TAB> ASSIGNING <FS_LINE>.
W_ROW = SY-TABIX + 3.
W_COL = 1.
CLEAR W_EXCEL.
LOOP AT IT_DFIES INTO W_DFIES WHERE DATATYPE <> 'CLNT'.
ASSIGN COMPONENT W_DFIES-FIELDNAME
OF STRUCTURE <FS_LINE> TO <FS_FIELD>.
CASE W_DFIES-DATATYPE.
WHEN 'CURR' OR 'QUAN' OR 'DEC'
OR 'INT1' OR 'INT2' OR 'INT4'. " numeric
WRITE <FS_FIELD> TO W_VALUE.
SHIFT W_VALUE RIGHT CIRCULAR.
CONDENSE W_VALUE NO-GAPS.
WHEN 'DATS'. " date
CONCATENATE <FS_FIELD>(4) <FS_FIELD>+4(2) <FS_FIELD>+6(2)
INTO W_VALUE SEPARATED BY '/'.
WHEN OTHERS. " OTHERS
WRITE <FS_FIELD> TO W_VALUE.
ENDCASE.
IF W_COL = 1.
W_EXCEL = W_VALUE.
ELSE.
CONCATENATE W_EXCEL W_VALUE INTO W_EXCEL SEPARATED BY COS_TAB.
ENDIF.
ADD 1 TO W_COL.
ENDLOOP.
*
IF P_TEXT = 'X'.
CONCATENATE COS_TAB W_EXCEL INTO W_EXCEL.
ENDIF.
APPEND W_EXCEL TO IT_EXCEL.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
*& Form SET_TEXT_HEADER
*&---------------------------------------------------------------------*
* Set header for texst
*----------------------------------------------------------------------*
FORM SET_TEXT_HEADER .
* first line
CONCATENATE '* TABLE-' W_TABNAME INTO W_HEAD1 SEPARATED BY SPACE.
*
CONCATENATE W_TABNAME '-' W_DD02T-DDTEXT INTO W_HEAD2.
CONCATENATE W_HEAD1 W_HEAD2 INTO W_XLHEAD SEPARATED BY COS_TAB.
APPEND W_XLHEAD TO IT_EXCEL.
* second,third
CONCATENATE COS_TAB W_XLHEAD2 INTO W_EXCEL.
CONCATENATE COS_TAB W_XLHEAD3 INTO W_EXCEL.
LOOP AT IT_DFIES INTO W_DFIES.
CHECK W_DFIES-DATATYPE <> 'CLNT'.
CONCATENATE W_XLHEAD2 COS_TAB W_DFIES-FIELDNAME INTO W_XLHEAD2.
IF W_DFIES-SCRTEXT_M <> SPACE.
CONCATENATE W_XLHEAD3 COS_TAB W_DFIES-SCRTEXT_M INTO W_XLHEAD3.
ELSE.
CONCATENATE W_XLHEAD3 COS_TAB W_DFIES-FIELDTEXT INTO W_XLHEAD3.
ENDIF.
ENDLOOP.
*
APPEND W_XLHEAD2 TO IT_EXCEL.
APPEND W_XLHEAD3 TO IT_EXCEL.
*
ENDFORM.
*---------------------------------------------------------------------*
*& Form DOWNLOAD_TABLE_DATA
*&---------------------------------------------------------------------*
* Download table contents to Pc local file
*----------------------------------------------------------------------*
FORM DOWNLOAD_TABLE_DATA .
*
CLEAR: F_APPEND.
*---------------------------------------------------------------------*
*& Form INIT_EXCEL_FILE
*&---------------------------------------------------------------------*
* Open excel file
*----------------------------------------------------------------------*
FORM INIT_EXCEL_FILE .
* File open
CREATE OBJECT H_EXCEL COS_XLAPPLI NO FLUSH.
SET PROPERTY OF H_EXCEL COS_VISIBLE = 0 NO FLUSH.
SET PROPERTY OF H_EXCEL COS_ALERTS = 0 NO FLUSH.
SET PROPERTY OF H_EXCEL COS_REFSTYLE = COS_XLSTYLE_R1C1 NO FLUSH.
SET PROPERTY OF H_EXCEL COS_NEWWORKBOOK = 1 NO FLUSH.
*
CALL METHOD OF H_EXCEL COS_WORKBOOK = H_WORKBOOKS NO FLUSH.
CALL METHOD OF H_WORKBOOKS COS_ADD = H_WORKBOOK NO FLUSH.
GET PROPERTY OF H_WORKBOOK COS_ACTSHEET = H_WORKSHEET NO FLUSH.
SET PROPERTY OF H_WORKSHEET COS_NAME = W_TABNAME NO FLUSH.
ENDFORM.
*---------------------------------------------------------------------*
*& Form FILL_CELL
*&---------------------------------------------------------------------*
* Set data to cell
*----------------------------------------------------------------------*
FORM FILL_CELL USING FP_ROW TYPE I
FP_COL TYPE I
FP_VALUE TYPE ANY.
* Set value
CALL METHOD OF H_WORKSHEET COS_CELLS = H_CELL NO FLUSH
EXPORTING
#1 = FP_ROW
#2 = FP_COL.
*
SET PROPERTY OF H_CELL COS_VALUE = FP_VALUE NO FLUSH.
GET PROPERTY OF H_CELL COS_FONT = H_FONT NO FLUSH.
SET PROPERTY OF H_FONT COS_BOLD = W_BOLD NO FLUSH.
FREE OBJECT H_FONT NO FLUSH.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_FIELDNAME_HEADER
*&---------------------------------------------------------------------*
* Second,third ros (header for field name)
*----------------------------------------------------------------------*
FORM SET_FIELDNAME_HEADER .
*
W_COL = 1.
LOOP AT IT_DFIES INTO W_DFIES.
CHECK W_DFIES-DATATYPE <> 'CLNT'.
ADD 1 TO W_COL.
W_BOLD = 0.
PERFORM FILL_CELL USING 2 W_COL W_DFIES-FIELDNAME.
FREE OBJECT H_CELL NO FLUSH.
W_BOLD = 1.
IF W_DFIES-SCRTEXT_M <> SPACE.
PERFORM FILL_CELL USING 3 W_COL W_DFIES-SCRTEXT_M.
ELSE.
PERFORM FILL_CELL USING 3 W_COL W_DFIES-FIELDTEXT.
ENDIF.
FREE OBJECT H_CELL NO FLUSH.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_TABLENAME_HEADERF
*&---------------------------------------------------------------------*
* First row (header for table name)
*----------------------------------------------------------------------*
FORM SET_TABLENAME_HEADER .
* first row
CONCATENATE '* TABLE:' W_TABNAME INTO W_HEAD1 SEPARATED BY SPACE.
PERFORM FILL_CELL USING 1 1 W_HEAD1.
PERFORM SET_VALIDATION_HEADER USING W_HEAD1.
SET PROPERTY OF H_CELL COS_COLUMNWIDTH = 1.
FREE OBJECT H_CELL NO FLUSH.
*
CONCATENATE W_TABNAME '-' W_DD02T-DDTEXT
INTO W_HEAD2.
*
W_BOLD = 1.
PERFORM FILL_CELL USING 1 2 W_HEAD2.
FREE OBJECT H_CELL NO FLUSH.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_FORMAT
*&---------------------------------------------------------------------*
* Set format for colums,rows
*----------------------------------------------------------------------*
FORM SET_FORMAT.
*
W_COL = 1.
*
LOOP AT IT_DFIES INTO W_DFIES.
CHECK W_DFIES-DATATYPE <> 'CLNT'.
ADD 1 TO W_COL.
CALL METHOD OF H_WORKSHEET COS_CELLS = H_CELL NO FLUSH
EXPORTING
#1 = 4
#2 = W_COL.
CALL METHOD OF H_WORKSHEET COS_CELLS = H_CELL1 NO FLUSH
EXPORTING
#1 = W_ROW_END
#2 = W_COL.
CALL METHOD OF H_WORKSHEET COS_RANGE = H_RANGE NO FLUSH
EXPORTING
#1 = H_CELL
#2 = H_CELL1.
FREE OBJECT:H_CELL NO FLUSH,
H_CELL1 NO FLUSH.
*
PERFORM SET_NUMBERFORMAT.
*
PERFORM SET_VALIDATION_ITEM.
*
IF W_DFIES-KEYFLAG = 'X'.
W_COL_KEY = W_COL.
ENDIF.
FREE OBJECT H_RANGE NO FLUSH.
ENDLOOP.
*
PERFORM SET_LINE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_NUMBERFORMAT
*&---------------------------------------------------------------------*
* Set format for cell
*----------------------------------------------------------------------*
FORM SET_NUMBERFORMAT.
*
CASE W_DFIES-DATATYPE.
WHEN 'CHAR' OR 'UNIT' OR 'LANG'.
W_NUMFORMAT = '@'.
SET PROPERTY OF H_RANGE COS_ALIGNMENT = COS_XLHALIGNLEFT
NO FLUSH.
WHEN 'DATS'.
W_NUMFORMAT = 'yyyy/mm/dd'.
SET PROPERTY OF H_RANGE COS_ALIGNMENT = COS_XLHALIGNLEFT
NO FLUSH.
WHEN 'TIMS'.
W_NUMFORMAT = 'hh:mm:ss'.
SET PROPERTY OF H_RANGE COS_ALIGNMENT = COS_XLHALIGNLEFT
NO FLUSH.
WHEN 'CURR' OR 'QUAN' OR 'DEC' OR 'NUMC'
OR 'INT1' OR 'INT2' OR 'INT4'.
IF W_DFIES-DECIMALS = 0.
W_NUMFORMAT = '#,##0'.
ELSE.
W_NUMFORMAT = '#,##0.'.
DO W_DFIES-DECIMALS TIMES.
CONCATENATE W_NUMFORMAT '0' INTO W_NUMFORMAT.
ENDDO.
ENDIF.
WHEN OTHERS.
EXIT.
ENDCASE.
*
SET PROPERTY OF H_RANGE COS_NUMFORMAT = W_NUMFORMAT NO FLUSH.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_VALIDATION_ITEM
*&---------------------------------------------------------------------*
* Set input format to cell
*----------------------------------------------------------------------*
FORM SET_VALIDATION_ITEM.
* Set input format for data type
CASE W_DFIES-DATATYPE.
WHEN 'CHAR' OR 'UNIT' OR 'LANG'.
W_TYPE = COS_XLVALIDCSTM.
CONCATENATE '=AND(LENB(RC)<=' W_DFIES-INTLEN ',TYPE(RC)=2)'
INTO W_FORMULA1.
CLEAR W_FORMULA2.
WRITE W_DFIES-INTLEN TO W_TEXT NO-ZERO.
CONDENSE W_TEXT NO-GAPS.
CONCATENATE 'length is' W_TEXT 'bytes over'
INTO W_ERRORMSG.
WHEN 'CURR' OR 'QUAN' OR 'DEC'.
W_TYPE = COS_XLVALIDDEC.
CLEAR W_FORMULA2.
CLEAR W_FORMULA2(W_DFIES-LENG) WITH '9'.
IF W_DFIES-DECIMALS <> 0.
W_DCML_OFFSET = W_DFIES-LENG - W_DFIES-DECIMALS.
CONCATENATE '.' W_FORMULA2+W_DCML_OFFSET
INTO W_FORMULA2+W_DCML_OFFSET.
ENDIF.
CONCATENATE '-' W_FORMULA2 INTO W_FORMULA1.
CONCATENATE 'input between' W_FORMULA1 '~' W_FORMULA2
INTO W_ERRORMSG.
WHEN 'NUMC'.
W_TYPE = COS_XLVALIDNUM.
W_FORMULA1 = '0'.
CLEAR W_FORMULA2.
CLEAR W_FORMULA2(W_DFIES-INTLEN) WITH '9'.
WRITE W_DFIES-INTLEN TO W_TEXT NO-ZERO.
CONDENSE W_TEXT NO-GAPS.
CONCATENATE 'Input ' W_TEXT 'bytes numeric'
INTO W_ERRORMSG.
WHEN 'INT1'.
W_TYPE = COS_XLVALIDNUM.
W_FORMULA1 = '0'.
W_FORMULA2 = '255'.
W_ERRORMSG = 'Input between 0~255 numeric'.
WHEN 'INT2'.
W_TYPE = COS_XLVALIDNUM.
W_FORMULA1 = '-32768'.
W_FORMULA2 = '32767'.
W_ERRORMSG = 'Input between -32768~32767 numeric'.
WHEN 'INT4'.
W_TYPE = COS_XLVALIDNUM.
W_FORMULA1 = '-2147483648'.
W_FORMULA2 = '2147483647'.
W_ERRORMSG =
'Input between -2147483648~2147483647 numeric'.
WHEN OTHERS.
EXIT.
ENDCASE.
* set input format
GET PROPERTY OF H_RANGE COS_VALIDATION = H_VALIDATION NO FLUSH.
CALL METHOD OF H_VALIDATION COS_ADD NO FLUSH
EXPORTING
#1 = W_TYPE
#2 = COS_XLVALIDSTOP
#3 = COS_XLBETWEEN
#4 = W_FORMULA1
#5 = W_FORMULA2.
SET PROPERTY OF H_VALIDATION COS_IGNOREBLANK = 1 NO FLUSH.
SET PROPERTY OF H_VALIDATION COS_ERRMESSAGE = W_ERRORMSG
NO FLUSH.
FREE OBJECT H_VALIDATION NO FLUSH.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_LINE
*&---------------------------------------------------------------------*
* Set lines for display
*----------------------------------------------------------------------*
FORM SET_LINE.
* outer line/inner line
CALL METHOD OF H_WORKSHEET COS_CELLS = H_CELL NO FLUSH
EXPORTING
#1 = 3
#2 = 2.
CALL METHOD OF H_WORKSHEET COS_CELLS = H_CELL1 NO FLUSH
EXPORTING
#1 = W_ROW_END
#2 = W_COL_END.
CALL METHOD OF H_WORKSHEET COS_RANGE = H_RANGE NO FLUSH
EXPORTING
#1 = H_CELL
#2 = H_CELL1.
FREE OBJECT:H_CELL NO FLUSH,
H_CELL1 NO FLUSH.
GET PROPERTY OF H_RANGE COS_BORDERS = H_BORDER NO FLUSH.
SET PROPERTY OF H_BORDER COS_LINESTYLE = COS_XLSTYLE NO FLUSH.
FREE OBJECT H_BORDER NO FLUSH.
CALL METHOD OF H_RANGE COS_BORDERARND NO FLUSH
EXPORTING
#1 = COS_XLSTYLE
#2 = COS_XLMEDIUM.
FREE OBJECT H_RANGE NO FLUSH.
* header
CALL METHOD OF H_WORKSHEET COS_CELLS = H_CELL NO FLUSH
EXPORTING
#1 = 3
#2 = 2.
CALL METHOD OF H_WORKSHEET COS_CELLS = H_CELL1 NO FLUSH
EXPORTING
#1 = 3
#2 = W_COL_END.
CALL METHOD OF H_WORKSHEET COS_RANGE = H_RANGE NO FLUSH
EXPORTING
#1 = H_CELL
#2 = H_CELL1.
FREE OBJECT:H_CELL NO FLUSH,
H_CELL1 NO FLUSH.
CALL METHOD OF H_RANGE COS_BORDERS = H_BORDER NO FLUSH
EXPORTING
#1 = COS_XLBOTTOM.
*
SET PROPERTY OF H_BORDER COS_LINESTYLE = COS_XLDOUBLE NO FLUSH.
FREE OBJECT H_BORDER NO FLUSH.
GET PROPERTY OF H_RANGE COS_INTERIOR = H_INTERIOR NO FLUSH.
FREE OBJECT H_RANGE NO FLUSH.
SET PROPERTY OF H_INTERIOR COS_COLORINDEX = COS_XLCOLOR_HEAD
NO FLUSH.
FREE OBJECT H_INTERIOR NO FLUSH.
* key
IF W_ROW_END >= 4.
CALL METHOD OF H_WORKSHEET COS_CELLS = H_CELL NO FLUSH
EXPORTING
#1 = 4
#2 = 2.
CALL METHOD OF H_WORKSHEET COS_CELLS = H_CELL1 NO FLUSH
EXPORTING
#1 = W_ROW_END
#2 = W_COL_KEY.
CALL METHOD OF H_WORKSHEET COS_RANGE = H_RANGE NO FLUSH
EXPORTING
#1 = H_CELL
#2 = H_CELL1.
*
FREE OBJECT:H_CELL NO FLUSH,
H_CELL1 NO FLUSH.
GET PROPERTY OF H_RANGE COS_INTERIOR = H_INTERIOR NO FLUSH.
FREE OBJECT H_RANGE NO FLUSH.
SET PROPERTY OF H_INTERIOR COS_COLORINDEX = COS_XLCOLOR_KEY
NO FLUSH.
FREE OBJECT H_INTERIOR NO FLUSH.
ENDIF.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_VALIDATION_HEADER
*&---------------------------------------------------------------------*
* excel header input
*----------------------------------------------------------------------*
FORM SET_VALIDATION_HEADER USING FP_VALUE TYPE ANY.
*
GET PROPERTY OF H_CELL COS_VALIDATION = H_VALIDATION NO FLUSH.
CALL METHOD OF H_VALIDATION 'Add' NO FLUSH
EXPORTING
#1 = COS_XLVALIDLIST
#2 = COS_XLVALIDSTOP
#3 = COS_XLEQUAL
#4 = FP_VALUE.
*
SET PROPERTY OF H_VALIDATION COS_IGNOREBLANK = 0 NO FLUSH.
SET PROPERTY OF H_VALIDATION COS_DROPDOWN = 0 NO FLUSH.
SET PROPERTY OF H_VALIDATION COS_ERRMESSAGE =
'cannot header filed' NO FLUSH.
FREE OBJECT H_VALIDATION NO FLUSH.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SAVE_FILE
*&---------------------------------------------------------------------*
* Save as EXCEL file
*----------------------------------------------------------------------*
FORM SAVE_FILE .
*
CALL FUNCTION 'FLUSH'
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2
OTHERS = 3.
IF SY-SUBRC = 0.
* save
CALL METHOD OF H_WORKBOOK COS_SAVEAS
EXPORTING
#1 = P_FILE
#2 = COS_XLWORKBOOK.
ENDIF.
IF SY-SUBRC <> 0.
MESSAGE S001 WITH
'Error occurred during download'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form SELSCR_ONLI
*&---------------------------------------------------------------------*
* Check input
*----------------------------------------------------------------------*
FORM SELSCR_ONLI .
* Check input file
IF P_FILE = SPACE AND P_LCPC = 'X'.
SET CURSOR FIELD 'P_FILE'.
MESSAGE E001 WITH 'Enter a pc local file'.
ELSEIF P_DIR = SPACE AND P_APSV = 'X'.
SET CURSOR FIELD 'P_DIR'.
MESSAGE E001 WITH 'Enter an app.svr file'.
ENDIF.
*
IF P_TAB = SPACE.
SET CURSOR FIELD 'P_TAB'.
MESSAGE E001 WITH 'Enter a Table name'.
ENDIF.
*
CONDENSE P_TAB NO-GAPS.
W_TABNAME = P_TAB.
* Call fm 'DDIF_FIELDINFO_GET'
PERFORM FM_DDIF_FIELDINFO_GET.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FM_DDIF_FIELDINFO_GET
*&---------------------------------------------------------------------*
* Read table info
*----------------------------------------------------------------------*
FORM FM_DDIF_FIELDINFO_GET .
*
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
TABNAME = W_TABNAME
* FIELDNAME = ' '
LANGU = P_LANGU
* LFIELDNAME = ' '
* ALL_TYPES = ' '
IMPORTING
* X030L_WA =
DDOBJTYPE = W_DDOBJTYPE
* DFIES_WA =
* LINES_DESCR =
TABLES
DFIES_TAB = IT_DFIES
* FIXED_VALUES =
EXCEPTIONS
NOT_FOUND = 1
INTERNAL_ERROR = 2
OTHERS = 3.
*
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'P_TAB'.
MESSAGE E398 WITH 'Table' W_TABNAME ' does not exist'.
ELSEIF W_DDOBJTYPE <> 'TRANSP'.
SET CURSOR FIELD 'P_TAB'.
MESSAGE E398 WITH 'Table' W_TABNAME
'is not a Transparent table'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
* For dynamic selection
* Call fm 'FREE_SELECTIONS_INIT'
* Call fm 'FREE_SELECTIONS_DIALOG'
*----------------------------------------------------------------------*
FORM SELSCR_ZSEL .
*
* initial check
CLEAR F_INIT_FLG.
READ TABLE IT_TABLES INTO W_TABLES_TAB INDEX 1.
IF SY-SUBRC = 0.
IF W_TABLES_TAB-PRIM_TAB <> P_TAB.
F_INIT_FLG = 'X'.
W_TABLES_TAB-PRIM_TAB = P_TAB.
MODIFY IT_TABLES INDEX 1 FROM W_TABLES_TAB.
ENDIF.
ELSE.
F_INIT_FLG = 'X'.
W_TABLES_TAB-PRIM_TAB = P_TAB.
APPEND W_TABLES_TAB TO IT_TABLES.
ENDIF.
* Initialize dynamic selection
IF F_INIT_FLG = 'X'.
DELETE IT_EXPRESS WHERE TABLENAME <> P_TAB.
DELETE IT_FIELDS_TAB WHERE TABLENAME <> P_TAB.
*&---------------------------------------------------------------------*
*& Form CREATE_FILEPATH
*&---------------------------------------------------------------------*
* Create filepath
*----------------------------------------------------------------------*
FORM CREATE_FILEPATH .
* File extention
CASE 'X'.
WHEN P_EXCEL.
W_EXTENSION = COS_DOT_XLS.
WHEN P_TEXT.
W_EXTENSION = COS_DOT_TXT.
ENDCASE.
* Create filepath
W_FILEPATH = P_FILE.
W_PATHLEN = STRLEN( W_FILEPATH ) - 5.
IF W_PATHLEN > 0.
IF W_FILEPATH+W_PATHLEN NA COS_PERIOD.
CONCATENATE W_FILEPATH W_EXTENSION INTO W_FILEPATH.
ENDIF.
ELSE.
IF W_FILEPATH NA COS_PATH.
CREATE OBJECT H_EXCEL COS_XLAPPLI.
GET PROPERTY OF H_EXCEL COS_DEFLTPATH = W_DEFLTPATH.
FREE OBJECT H_EXCEL.
IF W_FILEPATH CA COS_PERIOD.
CONCATENATE W_DEFLTPATH COS_PATH W_FILEPATH INTO W_FILEPATH.
ELSE.
CONCATENATE W_DEFLTPATH COS_PATH W_FILEPATH W_EXTENSION
INTO W_FILEPATH.
ENDIF.
ELSEIF W_FILEPATH NA COS_PERIOD.
CONCATENATE W_FILEPATH W_EXTENSION INTO W_FILEPATH.
ENDIF.
ENDIF.
*
P_FILE = W_FILEPATH.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHECK_WRITE_SVRFILE_EXIST
*&---------------------------------------------------------------------*
* Check server file exists?
*----------------------------------------------------------------------*
FORM CHECK_WRITE_SVRFILE_EXIST .
*
OPEN DATASET P_DIR FOR INPUT IN TEXT MODE ENCODING DEFAULT.
*
CHECK SY-SUBRC = 0.
*
CLOSE DATASET P_DIR.
CONCATENATE P_DIR 'already exists. - overwrite the file?'
INTO W_QUESTION SEPARATED BY SPACE.
*
M_POPUP_TO_CONFIRM W_QUESTION.
*
ENDFORM.
*----------------------------------------------------------------------*
*& Form HELP_SERVER_FILE
*&---------------------------------------------------------------------*
* Explore server file using pop-up list
*----------------------------------------------------------------------*
FORM HELP_SERVER_FILE.
*
W_FIELD = 'P_DIR'.
*
PERFORM DYNP_READ_FIELD USING W_FIELD CHANGING W_PATHI.
* May not work on 'NT' ?( Somebody test this code on NT!)
IF SY-SUBRC <> 0.
MESSAGE 'Select a valid server' TYPE 'E'.
ELSE.
IF W_PATH(1) = W_DELIMIT AND
W_PATH+1(1) = W_DELIMIT.
SHIFT W_PATH LEFT.
ENDIF.
*
IF W_ABENDFLAG <> 'X'.
P_DIR = W_PATH.
ENDIF.
ENDIF.
ENDFORM.
*
*&---------------------------------------------------------------------*
*& Form DYNP_READ_FIELD
*&---------------------------------------------------------------------*
* Read parameter on server file
*----------------------------------------------------------------------*
FORM DYNP_READ_FIELD USING I_FIELD CHANGING O_VALUE.
*
DATA: W_VALUE TYPE DYNPREAD-FIELDVALUE.
*
CALL FUNCTION 'C14Z_DYNP_READ_FIELD'
EXPORTING
I_PROGRAM = SY-CPROG
I_DYNPRO = SY-DYNNR
I_FIELDNAME = I_FIELD
I_FLG_STEPLOOP = SPACE
CHANGING
E_VALUE = W_VALUE.
*
CHECK SY-SUBRC = 0.
O_VALUE = W_VALUE.
*
ENDFORM.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.