Inicio > Reports > Upload/Download de tablas

Upload/Download de tablas

Report utilizado para descargar y cargar tablas desde y hacia cualquier entorno.

El objetivo de este programa es cargar y descargar el contenido de tablas de SAP al PC y viceversa. Nos es util cuando necesitamos hacer pruebas con datos que están en tablas en producción. Este programa es ALTAMENTE PELIGROSO, ya que sin querer podemos machacar los datos de la tabla que estemos utilizando.

Partiremos de la siguiente pantalla de selección

  • Nombre de la tabla:   nombre SAP de la tabla que queramos cargar/descargar
  • Ruta de descarga:  ruta donde cargaremos/descargaremos el contenido de la tabla
  • Borrar antes de cargar:  por si queremos borrar el contenido de la tabla, antes de cargarlo
  • Line 1…. Line 5: podremos escribir instrucciones SELECT adicionales para la carga/descarga de la tabla. Por ej podriamos poner algo del tipo   bukrs = ‘7813’  and gjahr =’2011′, etc…
  • Bajar datos a PC :  al ejecutar el programa y seleccionar esta opción descargaremos en el PC el contenido de la tabla seleccionada en  un fichero con nombre la tabla descargada y como extensión .DAT. Ej:  ZTABLASAP.DAT
  • Subir datos a SAP:  al ejecutar el programa y seleccionar esta opción subiremos a SAP el contenido de la tabla que pongamos en el parámetro de entrada. Adicionalmente tendrá que existir un archivo en la ruta especificada con el nombre de la tabla y la extensión .DAT
  • Insert/Modifi:  si estamos subiendo el contenido a SAP podremos solo insertar nuevos registros o modificar los ya existentes

El código fuente del programa es el siguiente:

report z_tratartabla.

tables: dd02t,
dd03l.

* Linea
data: begin of t_dd03l occurs 0.
include structure dd03l.
data: end of t_dd03l.

data: i_source like line occurs 100 with header line.
data l_resp.
data: program_name     like sy-cprog.
data: l_mandt,
l_mandante,
campo like dd03l-fieldname.

data: l_linea(72).
data: l_tabla(2000).
define ap.
append &1 to i_source.
end-of-definition.

*——PARAMETER/SELECT-OPTIONS ENPANTALLA—————————-*
selection-screen begin of block blk_par with frame.
parameters: p_tabla like dd03l-tabname obligatory.”Nombre de tabla
parameters: p_path like rlgrap-filename
default ‘C:\TEMP\’ obligatory.
parameters:  p_borrar as checkbox.
selection-screen end of block blk_par.
selection-screen begin of block blk_par3 with frame title text-003.
parameters: p_w1(80) lower case,
p_w2(80) lower case,
p_w3(80) lower case,
p_w4(80) lower case,
p_w5(80) lower case.
selection-screen end of block blk_par3.

selection-screen begin of block blk_par2 with frame.
selection-screen begin of line.
selection-screen comment 1(17) text-001.
selection-screen position 20.
parameters: p_grab radiobutton group rad1 default ‘X’.    “Grabar
selection-screen end of line.

selection-screen begin of line.
selection-screen comment 1(17) text-002.
selection-screen position 20.
parameters: p_carg radiobutton group rad1.                “Cargar
selection-screen end of line.
selection-screen end of block blk_par2.

selection-screen begin of block blk_par4 with frame.
selection-screen begin of line.
selection-screen comment 1(6) text-005.
selection-screen position 20.
parameters: p_ins radiobutton group rad2 default ‘X’.    “Insert
selection-screen end of line.

selection-screen begin of line.
selection-screen comment 1(6) text-006.
selection-screen position 20.
parameters: p_mod radiobutton group rad2.                “Modify
selection-screen end of line.
selection-screen end of block blk_par4.

at selection-screen.

i

start-of-selection.

perform generar_report.

if not p_carg is initial.
*** Subir tabla a SAP
if not p_borrar is initial.
call function ‘POPUP_TO_CONFIRM’
exporting
titlebar       = ‘Subir tabla’
text_question  = text-007
importing
answer         = l_resp
exceptions
text_not_found = 1
others         = 2.
if sy-subrc <> 0.
endif.
check l_resp eq ‘1’.
perform borrar_tabla.
perform cargar_tabla.
else.
call function ‘POPUP_TO_CONFIRM’
exporting
titlebar       = ‘Subir tabla’
text_question  = text-008
importing
answer         = l_resp
exceptions
text_not_found = 1
others         = 2.
if sy-subrc <> 0.
endif.
check l_resp eq ‘1’.
perform cargar_tabla.
endif.
else.
*** Bajar tabla a PC
perform grabar_tabla.
message s208(00) with ‘Tabla descargada’.
endif.

*———————————————————————*
*       FORM GENERAR_REPORT *

*———————————————————————*
*       …….. *

*———————————————————————*
form generar_report.
data l_tabla(10).

clear l_mandt.
select * from dd03l
where tabname = p_tabla
and fieldname = ‘MANDT’.
l_mandt = ‘X’.
endselect.

clear l_mandante.
select * from dd03l
where tabname = p_tabla
and fieldname = ‘MANDANTE’.
l_mandante = ‘X’.
endselect.

select * from dd03l
where tabname = p_tabla.
move-corresponding dd03l to t_dd03l.
append t_dd03l.
clear: t_dd03l.
endselect.

concatenate ‘I_’ p_tabla into l_tabla.
ap ‘REPORT Z.’.
concatenate ‘TABLES’ p_tabla ‘.’ into l_linea separated by space.
ap l_linea.
concatenate ‘DATA’ l_tabla
‘LIKE’ p_tabla ‘OCCURS 100 WITH HEADER LINE.’
into l_linea separated by space.
ap l_linea.
ap ‘FORM BORRAR_TABLA.’.

if l_mandt = ‘X’.
concatenate ‘DELETE FROM’ p_tabla
‘CLIENT SPECIFIED  WHERE MANDT = SY-MANDT.’
into l_linea separated by space.
ap l_linea.
move ‘COMMIT WORK.’ to l_linea.
else.
if l_mandante = ‘X’.
concatenate ‘DELETE FROM’ p_tabla
‘CLIENT SPECIFIED WHERE MANDANTE = SY-MANDT.’
into l_linea separated by space.
ap l_linea.
move ‘COMMIT WORK.’ to l_linea.
endif.
endif.

ap l_linea.
ap ‘ENDFORM.        “BORRAR TABLA’.

ap ‘FORM GRABAR_TABLA.’.
concatenate ‘SELECT * FROM’ p_tabla
‘INTO TABLE ‘ l_tabla
into l_linea separated by space.
ap l_linea.
if not p_w1 is initial.
concatenate ‘WHERE’ p_w1 into l_linea separated by space.
ap l_linea.
ap p_w2.
ap p_w3.
ap p_w4.
ap p_w5.
endif.
ap ‘.’.

ap ‘CALL FUNCTION ”GUI_DOWNLOAD”’.
ap ‘EXPORTING’.
concatenate  ‘FILENAME = ”’ p_path p_tabla ‘.DAT”’ into l_linea.
ap l_linea.
ap ‘FILETYPE = ”ASC”’.
ap ‘WRITE_FIELD_SEPARATOR = ”X”’.
ap ‘DAT_MODE            = ”X”’.
ap ‘TABLES’.
concatenate ‘DATA_TAB = ‘ l_tabla ‘.’ into l_linea
separated by space.
ap l_linea.
ap ‘ENDFORM.        “GRABAR_TABLA’.

ap ‘FORM CARGAR_TABLA.’.
ap ‘CALL FUNCTION ”GUI_UPLOAD”’.
ap ‘EXPORTING’.
concatenate  ‘FILENAME = ”’ p_path p_tabla ‘.DAT”’  into l_linea.
ap l_linea.
ap ‘FILETYPE = ”ASC”’.
ap ‘HAS_FIELD_SEPARATOR = ”X”’.
ap ‘DAT_MODE            = ”X”’.
ap ‘TABLES’.
concatenate ‘DATA_TAB = ‘ l_tabla ‘.’ into l_linea
separated by space.
ap l_linea.
concatenate ‘DATA:’ ‘variable like DD03L-fieldname.’ into
l_linea separated by space.
ap l_linea.
concatenate ‘LOOP AT ‘ l_tabla ‘.’ into l_linea separated by
space.
ap l_linea.
if l_mandt = ‘X’.
concatenate l_tabla ‘-MANDT = SY-MANDT.’ into l_linea.
ap l_linea.
endif.
*** Si hay algun tipo de datos de semana hay que convertirlo
loop at t_dd03l where domname = ‘/BI0/OCALWEEK’.
concatenate l_tabla ‘-‘ t_dd03l-fieldname into campo.
concatenate ‘move’ ‘#’ campo ‘+2(4)’ ‘#’ ‘to variable(4).’
into l_linea.
translate l_linea using ‘# ‘.
ap l_linea.
concatenate ‘move’ ‘#’ campo ‘(2)’ ‘#’ ‘to variable+4(2).’
into l_linea.
translate l_linea using ‘# ‘.
ap l_linea.

concatenate ‘move variable to’ campo ‘.’ into l_linea separated by
space.
ap l_linea.
move ‘clear variable.’ to l_linea.
ap l_linea.
endloop.

concatenate ‘MODIFY ‘ l_tabla ‘.’ into l_linea separated by space
.
ap l_linea.
ap ‘ENDLOOP.’.

if p_ins = ‘X’.
concatenate ‘INSERT ‘ p_tabla
‘FROM TABLE ‘ l_tabla ‘.’
into l_linea separated by space.
else.
concatenate ‘MODIFY ‘ p_tabla
‘FROM TABLE ‘ l_tabla ‘.’
into l_linea separated by space.
endif.
ap l_linea.
ap ‘ENDFORM.        “CARGAR_TABLA’.

perform generate_subroutine_pool tables i_source.

endform.

*———————————————————————*
*       FORM GRABAR_TABLA *

*———————————————————————*
*       …….. *

*———————————————————————*
form grabar_tabla.
perform grabar_tabla in program (program_name).
endform.

*———————————————————————*
*       FORM CARGAR_TABLA *

*———————————————————————*
*       …….. *

*———————————————————————*
form cargar_tabla.

* message i208(00) with ‘¨Esta seguro de querer cargar los datos?’.
perform cargar_tabla in program (program_name).
endform.

*———————————————————————*
*       FORM BORRAR_TABLA *

*———————————————————————*
*       …….. *

*———————————————————————*
form borrar_tabla.
perform borrar_tabla in program (program_name).
endform.

*———————————————————————*
*       FORM GENERATE_SUBROUTINE_POOL *

*———————————————————————*
*       …….. *

*———————————————————————*
*  –>  SOURCE_TAB *

*———————————————————————*
form generate_subroutine_pool tables source_tab.

data:   line_no          type i,
syntax_check_message(128).
describe table source_tab.
check sy-tfill gt 0.
generate subroutine pool source_tab
name program_name
message syntax_check_message
line line_no.
if sy-subrc ne 0.
write: / ‘Error de sintaxis, mensaje’, syntax_check_message,
/ ‘en linea’, line_no.
stop.
endif.
endform.

  1. 24 noviembre, 2012 a las 9:14 pm

    I have been surfing online greater than three hours nowadays,
    but I by no means discovered any attention-grabbing
    article like yours. It’s pretty price enough for me. Personally, if all webmasters and bloggers made good content material as you did, the net might be a lot more helpful than ever before.

  2. 21 junio, 2013 a las 2:47 am

    I think the admin of this website is really working hard for his site, because here every data is quality based data.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: