Programa que sube un fichero delimitado por tabuladores a una tabla interna.
Muy buenas, muchas veces nos encontramos con querer llevarse una tabla z del equipo de producción al de desarrollo o al de test. Bien pues yo lo hago de la siguiente forma. Mediante sql exporto el contenido de la tabla a un fichero delimitado por tabuladores.
Ejemplo: select * from zprueba
Digo * porque te tienes que llevar también el mandante. Y después la cargo mediante este programa
[abap]
REPORT ZSUBIRTAB NO STANDARD PAGE HEADING.
TYPE-POOLS: rsds.
DATA: is_x030l TYPE x030l,
it_dfies TYPE TABLE OF dfies,
is_dfies TYPE dfies,
it_fdiff TYPE TABLE OF field_dif,
is_fdiff TYPE field_dif.
DATA: w_selid TYPE rsdynsel-selid,
it_tables TYPE TABLE OF rsdstabs,
is_tables TYPE rsdstabs,
it_fields TYPE TABLE OF rsdsfields,
it_expr TYPE rsds_texpr,
it_ranges TYPE rsds_trange,
it_where TYPE rsds_twhere,
is_where TYPE rsds_where,
w_active TYPE i.
DATA: it_content TYPE REF TO DATA,
it_modif TYPE REF TO DATA,
it_fcat TYPE lvc_t_fcat.
DATA: w_okcode TYPE SY-UCOMM.
FIELD-SYMBOLS: TYPE STANDARD TABLE,
TYPE STANDARD TABLE.
* Macros
DEFINE table_error.
message e398(00) WITH ‘Table’ p_table &1.
END-OF-DEFINITION.
DEFINE fixed_val.
is_fdiff-fieldname = is_dfies-fieldname.
is_fdiff-fixed_val = &1.
is_fdiff-no_input = ‘X’.
APPEND is_fdiff TO it_fdiff.
END-OF-DEFINITION.
* Selection screen
SELECTION-SCREEN: BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_table TYPE tabname OBLIGATORY “table
MEMORY ID dtb
MATCHCODE OBJECT dd_dbtb_16.
parameters: dataset like rlgrap-filename.
SELECTION-SCREEN: END OF BLOCK b01.
************************************************************************
* PAI Pantalla de selección *
************************************************************************
at selection-screen.
* al seleccionar el fichero, se sube
at selection-screen on value-request for dataset.
perform seleccionar_fichero_entrada changing dataset.
* =================================================================== *
* ——————— START-OF-SELECTION ————————– *
* =================================================================== *
start-of-selection.
if dataset is initial.
MESSAGE e019(zpp) WITH text-002.
endif.
* Creamos dinamicamente una tabla interna con la misma estructura
* que la tabla dada por parametro.
PERFORM f_create_table USING p_table.
* Subimos el fichero dado por la pantalla a la tabla interna.
PERFORM subir_fichero.
* Metemos los registros de la tabla interna en la base de datos,
* antes borrando los registros que vayamos a cargar.
PERFORM subir_bbdd.
*=====================================================================*
* FORM seleccionar_fichero_entrada *
*=====================================================================*
* busca el fichero a partir del path especificado *
*———————————————————————*
* Entrada/Salida: *
* - f_pc_filename -> contiene el nombre elegido para el fichero y *
* devuelve el nombre correspondiente al fichero *
* para tratarlo *
*———————————————————————*
form seleccionar_fichero_entrada
changing f_pc_filename like rlgrap-filename.
data: l_path(50) type c,
l_filename(50) type c.
field-symbols: like f_pc_filename.
assign f_pc_filename to .
do.
if not cp ‘*\*’.
exit.
else.
add 1 to sy-fdpos.
concatenate l_path (sy-fdpos) into l_path.
assign +sy-fdpos to .
endif.
enddo.
l_filename = .
call function ‘WS_FILENAME_GET’
exporting
def_filename = l_filename
def_path = l_path
mask = ‘,*.txt.’
title = text-000
importing
filename = f_pc_filename
exceptions
SELECTION_CANCEL = 1
SELECTION_ERROR = 1
others = 2.
if sy-subrc 0 and sy-subrc 1.
* No se ha podido abrir el fichero (se finaliza el programa)
MESSAGE i001(ZFI) WITH f_pc_filename.
stop.
endif.
endform.
*=====================================================================*
* FORM f_create_table *
*=====================================================================*
* Crea una tabla interna dinamicamente con la misma estructura que *
* la tabla de diccionario de datos pasada por parametro *
*———————————————————————*
FORM f_create_table USING in_tabname.
FIELD-SYMBOLS: TYPE lvc_s_fcat.
CALL FUNCTION ‘LVC_FIELDCATALOG_MERGE’
EXPORTING
i_structure_name = in_tabname
CHANGING
ct_fieldcat = it_fcat
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC = 0.
* Complete field catalog
LOOP AT it_fcat ASSIGNING .
-tabname = in_tabname.
ENDLOOP.
CALL FUNCTION ‘LVC_FIELDCAT_COMPLETE’
CHANGING
ct_fieldcat = it_fcat
EXCEPTIONS
OTHERS = 1.
ELSE.
WRITE:: ‘Error building field catalog’.
STOP.
ENDIF.
* Create dynamic table for data
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat
IMPORTING
ep_table = it_content.
IF SY-SUBRC = 0.
ASSIGN it_content->* TO .
ELSE.
WRITE:: ‘Error creating internal table’.
STOP.
ENDIF.
* Create dynamic table for modif
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat
IMPORTING
ep_table = it_modif.
IF SY-SUBRC = 0.
ASSIGN it_modif->* TO .
ELSE.
WRITE:: ‘Error creating internal table’.
STOP.
ENDIF.
ENDFORM.
*=====================================================================*
* FORM subir_fichero *
*=====================================================================*
form subir_fichero.
call function ‘WS_UPLOAD’
exporting
filename = dataset
filetype = ‘DAT’
tables
data_tab =
exceptions
others = 1.
if sy-subrc 0.
* No se ha podido abrir el fichero (se finaliza el programa)
message i001(zfi) with dataset.
stop.
endif.
endform.
*=====================================================================*
* FORM subir_bbdd *
*=====================================================================*
FORM subir_bbdd.
MODIFY (p_table) FROM TABLE .
commit work and wait.
ENDFORM. ” subir_bbddENDFORM.
[/abap]
Roberto Said,
Julio 12, 2007 @ 10:20 am
me podrias pasar el programa para:
Programa que sube un fichero delimitado por tabuladores a una tabla interna.
gracias