- REPORT ZDINAMIC_TAB_UP_DOWN.
- SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE text-001.
- PARAMETERS: p_table LIKE dd02l-tabname.
- PARAMETER: filez TYPE string LOWER CASE.
- SELECTION-SCREEN BEGIN OF BLOCK b03 WITH FRAME TITLE text-002.
- PARAMETERS: p_down RADIOBUTTON GROUP mod DEFAULT 'X', "<-- Download
- p_up RADIOBUTTON GROUP mod. "<-- Upload
- SELECTION-SCREEN END OF BLOCK b03.
- SELECTION-SCREEN BEGIN OF BLOCK b04 WITH FRAME TITLE text-003.
- PARAMETERS: p_pc RADIOBUTTON GROUP lcl DEFAULT 'X', "<-- A/Desde PC
- p_srv RADIOBUTTON GROUP lcl. "<-- A/Desde Servidor
- SELECTION-SCREEN END OF BLOCK b04.
- SELECTION-SCREEN END OF BLOCK b02.
- SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-004.
- *[@~@INI - Dynamic Generation - KEEP HANDS OFF]
- TABLES: T001 .
- CONSTANTS: c_name(30) VALUE 'T001'.
- SELECT-OPTIONS: s_BUKRS for T001-BUKRS.
- *[@~@FIN - Dynamic Generation - KEEP HANDS OFF]
- SELECTION-SCREEN END OF BLOCK b01.
- CLASS z_cl_filez DEFINITION.
- PUBLIC SECTION.
- DATA: to_from_pc TYPE xfeld,
- to_from_host TYPE xfeld,
- my_tab TYPE STANDARD TABLE OF string,
- filename TYPE string,
- filesize TYPE i,
- filetype TYPE char10.
- METHODS: load CHANGING p_table TYPE table,
- save CHANGING p_table TYPE table,
- constructor IMPORTING i_filez TYPE string.
- PRIVATE SECTION.
- METHODS: load_from_pc CHANGING p_table TYPE table,
- load_from_host CHANGING p_table TYPE table,
- save_to_pc CHANGING p_table TYPE table,
- save_to_host CHANGING p_table TYPE table,
- open_dialog.
- ENDCLASS.
- CLASS z_cl_filez IMPLEMENTATION.
- METHOD constructor.
- IF NOT i_filez IS INITIAL.
- me->filename = i_filez.
- ENDIF.
- me->filetype = 'ASC'. "<- Por defecto siempre en ASCII
- me->to_from_pc = 'X'. "<- Por Defecto en local
- ENDMETHOD.
- METHOD load.
- CASE 'X'.
- WHEN me->to_from_pc. me->load_from_pc( CHANGING p_table = p_table ).
- WHEN me->to_from_host. me->load_from_host( CHANGING p_table = p_table ).
- ENDCASE.
- ENDMETHOD.
- METHOD save.
- CASE 'X'.
- WHEN me->to_from_pc. me->save_to_pc( CHANGING p_table = p_table ).
- WHEN me->to_from_host. me->save_to_host( CHANGING p_table = p_table ).
- ENDCASE.
- ENDMETHOD.
- METHOD open_dialog.
- DATA: lv_file_table TYPE filetable,
- lv_rc TYPE i.
- IF me->filename IS INITIAL.
- CALL METHOD cl_gui_frontend_services=>file_open_dialog
- * EXPORTING
- * WINDOW_TITLE =
- * DEFAULT_EXTENSION =
- * DEFAULT_FILENAME =
- * FILE_FILTER =
- * WITH_ENCODING =
- * INITIAL_DIRECTORY =
- * MULTISELECTION =
- CHANGING
- file_table = lv_file_table
- rc = lv_rc
- EXCEPTIONS
- file_open_dialog_failed = 1
- cntl_error = 2
- error_no_gui = 3
- not_supported_by_gui = 4
- OTHERS = 5.
- READ TABLE lv_file_table INTO me->filename INDEX 1.
- ENDIF.
- ENDMETHOD.
- METHOD: load_from_pc.
- me->open_dialog( ).
- CHECK sy-subrc EQ 0.
- CALL METHOD cl_gui_frontend_services=>gui_upload
- EXPORTING
- filename = me->filename
- filetype = me->filetype
- IMPORTING
- filelength = me->filesize
- * HEADER =
- CHANGING
- data_tab = p_table
- EXCEPTIONS
- file_open_error = 1
- file_read_error = 2
- no_batch = 3
- gui_refuse_filetransfer = 4
- invalid_type = 5
- no_authority = 6
- unknown_error = 7
- bad_data_format = 8
- header_not_allowed = 9
- separator_not_allowed = 10
- header_too_long = 11
- unknown_dp_error = 12
- access_denied = 13
- dp_out_of_memory = 14
- disk_full = 15
- dp_timeout = 16
- not_supported_by_gui = 17
- error_no_gui = 18
- OTHERS = 19.
- ENDMETHOD.
- METHOD: save_to_pc.
- me->open_dialog( ).
- CHECK sy-subrc EQ 0.
- IF me->filetype NE 'BIN'.
- CLEAR me->filesize.
- ENDIF.
- CALL METHOD cl_gui_frontend_services=>gui_download
- EXPORTING
- bin_filesize = me->filesize
- filename = me->filename
- filetype = me->filetype
- IMPORTING
- filelength = me->filesize
- CHANGING
- data_tab = p_table
- EXCEPTIONS
- file_write_error = 1
- no_batch = 2
- gui_refuse_filetransfer = 3
- invalid_type = 4
- no_authority = 5
- unknown_error = 6
- header_not_allowed = 7
- separator_not_allowed = 8
- filesize_not_allowed = 9
- header_too_long = 10
- dp_error_create = 11
- dp_error_send = 12
- dp_error_write = 13
- unknown_dp_error = 14
- access_denied = 15
- dp_out_of_memory = 16
- disk_full = 17
- dp_timeout = 18
- file_not_found = 19
- dataprovider_exception = 20
- control_flush_error = 21
- not_supported_by_gui = 22
- error_no_gui = 23
- OTHERS = 24.
- ENDMETHOD.
- METHOD load_from_host.
- DATA: lv_s TYPE REF TO data.
- FIELD-SYMBOLS: <lv_s> TYPE any.
- CREATE DATA lv_s LIKE LINE OF p_table.
- ASSIGN lv_s->* TO <lv_s>.
- CHECK NOT me->filename IS INITIAL.
- IF me->filetype = 'BIN'.
- OPEN DATASET me->filename FOR INPUT IN BINARY MODE.
- ELSE.
- OPEN DATASET me->filename FOR INPUT IN TEXT MODE ENCODING DEFAULT.
- ENDIF.
- CHECK sy-subrc EQ 0.
- DO.
- READ DATASET me->filename INTO <lv_s>.
- IF sy-subrc NE 0. EXIT. ENDIF.
- APPEND <lv_s> TO p_table.
- ENDDO.
- CLOSE DATASET me->filename.
- ENDMETHOD.
- METHOD save_to_host.
- DATA: lv_s TYPE REF TO data.
- FIELD-SYMBOLS: <lv_s> TYPE any.
- CREATE DATA lv_s LIKE LINE OF p_table.
- ASSIGN lv_s->* TO <lv_s>.
- CHECK NOT me->filename IS INITIAL.
- IF me->filetype = 'BIN'.
- OPEN DATASET me->filename FOR OUTPUT IN BINARY MODE.
- ELSE.
- OPEN DATASET me->filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
- ENDIF.
- LOOP AT p_table INTO <lv_s>.
- TRANSFER <lv_s> TO me->filename.
- ENDLOOP.
- CLOSE DATASET me->filename.
- ENDMETHOD.
- ENDCLASS.
- DATA: l_filez TYPE REF TO z_cl_filez.
- DATA: t_tab TYPE REF TO data,
- l_tab TYPE REF TO data,
- s_where TYPE string.
- FIELD-SYMBOLS: <fs_t_tab> TYPE ANY TABLE,
- <fs_l_tab> TYPE any.
- AT SELECTION-SCREEN ON VALUE-REQUEST FOR filez.
- PERFORM help_me CHANGING filez.
- INITIALIZATION.
- p_table = c_name.
- END-OF-SELECTION.
- PERFORM regenerate.
- PERFORM load_data.
- CASE 'X'.
- WHEN p_down.
- l_filez->save( CHANGING p_table = <fs_t_tab> ).
- WHEN p_up.
- l_filez->load( CHANGING p_table = <fs_t_tab> ).
- ENDCASE.
- PERFORM save_data.
- FORM save_data.
- CHECK NOT p_up IS INITIAL.
- MODIFY (c_name) FROM TABLE <fs_t_tab>.
- ENDFORM.
- FORM load_data.
- CREATE OBJECT l_filez
- EXPORTING
- i_filez = filez.
- l_filez->to_from_pc = p_pc.
- l_filez->to_from_host = p_srv.
- l_filez->filetype = 'BIN'.
- CREATE DATA t_tab TYPE TABLE OF (c_name).
- CREATE DATA l_tab TYPE (c_name).
- ASSIGN t_tab->* TO <fs_t_tab>.
- ASSIGN l_tab->* TO <fs_l_tab>.
- CHECK p_down = 'X'.
- SELECT * FROM (c_name) INTO TABLE <fs_t_tab>.
- ENDFORM.
- FORM regenerate.
- DEFINE add_line.
- condense l_src.
- append l_src to t_src.
- END-OF-DEFINITION.
- DEFINE add_param.
- delete t_texttab where id = 'S' and key = &1.
- c_texttab-id = 'S'.
- c_texttab-key = &1.
- concatenate '!!!!!!!!' &2 into c_texttab-entry. "Blancos necesarios al principio
- translate c_texttab-entry using '! '.
- c_texttab-length = strlen( c_texttab-entry ).
- append c_texttab to t_texttab.
- END-OF-DEFINITION.
- DATA: t_src TYPE STANDARD TABLE OF string,
- x_src TYPE STANDARD TABLE OF string,
- l_src TYPE string,
- l_dd03l TYPE dd03l,
- s_where TYPE string,
- s_num(3) TYPE n.
- DATA: t_texttab TYPE STANDARD TABLE OF textpool,
- c_texttab TYPE textpool.
- CHECK NOT p_table IS INITIAL.
- CHECK p_table NE c_name.
- READ REPORT sy-repid INTO t_src.
- CLEAR sy-curow.
- LOOP AT t_src INTO l_src.
- IF l_src CP '+[@~@*'.
- IF sy-curow IS INITIAL.
- sy-cucol = sy-tabix + 1. "<- Posicionamiento
- APPEND l_src TO x_src.
- ADD 1 TO sy-curow.
- ELSE.
- CLEAR sy-curow.
- ENDIF.
- ENDIF.
- CHECK sy-curow IS INITIAL.
- APPEND l_src TO x_src.
- ENDLOOP.
- REFRESH t_src.
- *--[ Añadimos nueva tabla
- CLEAR l_src. add_line. "<- Blank line
- CONCATENATE 'TABLES: ' p_table '.' INTO l_src RESPECTING BLANKS.
- add_line.
- CONCATENATE 'CONSTANTS: c_name(30) VALUE ''' p_table '''.' INTO l_src.
- add_line.
- CLEAR s_where.
- READ TEXTPOOL sy-repid INTO t_texttab LANGUAGE sy-langu.
- SELECT * FROM dd03l INTO l_dd03l
- WHERE tabname = p_table
- AND fieldname NE 'MANDT'
- AND keyflag = 'X'
- ORDER BY position.
- CONCATENATE 'S_' l_dd03l-fieldname+0(6) INTO sy-msgv1.
- CONCATENATE 'SELECT-OPTIONS:~s_' l_dd03l-fieldname+0(6) '~for~' p_table '-' l_dd03l-fieldname '.' INTO l_src.
- CONDENSE l_src NO-GAPS.
- TRANSLATE l_src USING '~ '.
- add_line.
- SELECT SINGLE ddtext INTO sy-msgv2 FROM dd04t
- WHERE rollname = l_dd03l-rollname
- AND ddlanguage = sy-langu.
- add_param sy-msgv1 sy-msgv2.
- CONCATENATE s_where 'AND~' l_dd03l-fieldname 'IN~s_' l_dd03l-fieldname+0(6) INTO s_where.
- ENDSELECT.
- DELETE t_texttab WHERE entry = 'FILE' OR
- entry CP 'P_*' OR
- id = 'R' OR "<- Título
- id = 'I'. "<- Textos
- add_param 'P_TABLE' 'Tabla'.
- add_param 'FILEZ' 'Fichero'.
- add_param 'P_DOWN' 'Descargar a fichero'.
- add_param 'P_UP' 'Cargar a tabla'.
- add_param 'P_PC' 'A/Desde PC Local'.
- add_param 'P_SRV' 'A/Desde Servidor'.
- *--[ Título
- c_texttab-id = 'S'.
- c_texttab-entry = 'Cargar/Descargar tabla a/desde fichero'.
- c_texttab-length = strlen( c_texttab-entry ).
- APPEND c_texttab TO t_texttab.
- *--[ Elementos de texto
- c_texttab-id = 'I'.
- c_texttab-entry = 'Datos de proceso'.
- c_texttab-length = strlen( c_texttab-entry ).
- c_texttab-key = '001'.
- APPEND c_texttab TO t_texttab.
- c_texttab-entry = 'Tipo de ejecución'.
- c_texttab-key = '002'.
- c_texttab-length = strlen( c_texttab-entry ).
- APPEND c_texttab TO t_texttab.
- c_texttab-entry = 'Destino/Origen de datos'.
- c_texttab-key = '003'.
- c_texttab-length = strlen( c_texttab-entry ).
- APPEND c_texttab TO t_texttab.
- c_texttab-entry = 'Campos para selección'.
- c_texttab-key = '004'.
- c_texttab-length = strlen( c_texttab-entry ).
- APPEND c_texttab TO t_texttab.
- INSERT TEXTPOOL sy-repid FROM t_texttab LANGUAGE sy-langu STATE 'A'.
- CONDENSE s_where NO-GAPS.
- TRANSLATE s_where USING '~ '.
- SHIFT s_where LEFT BY 4 PLACES.
- s_num = strlen( s_where ).
- CONCATENATE 'CONSTANTS: c_where(' s_num ') VALUE ''' s_where+0(s_num) '''.' INTO l_src.
- CLEAR l_src. add_line. "<- Blank line
- INSERT LINES OF t_src INTO x_src INDEX sy-cucol.
- INSERT REPORT sy-repid FROM x_src.
- LEAVE PROGRAM.
- ENDFORM.
- FORM help_me CHANGING p_filez TYPE string.
- DATA: lv_file LIKE rlgrap-filename.
- lv_file = p_filez.
- CALL FUNCTION 'WS_FILENAME_GET'
- EXPORTING
- def_filename = lv_file
- mask = ',all files,*.*,data files,*.dat,text files,*.txt.'
- mode = 'o'
- title = 'Selecciona un fichero...'
- IMPORTING
- filename = lv_file
- EXCEPTIONS
- inv_winsys = 04
- no_batch = 04
- selection_cancel = 04
- selection_error = 04.
- p_filez = lv_file.
- ENDFORM.
Última modificación de la página el 04 November 2015 a las 15h04
Powered by
PmWiki