#10
|
|||
|
|||
Que tal bacha, aqui va un ejemplo especial para ti y que puedas comprender facilmente
El siguiente ejemplo llena una tabla Z llamada ZRUTA_ARCH que tomé solo como un ejemplo, y te explico brevemente que hace.
1.- Tienes que tener un excel con los datos que deseas llenar en la tabla Z 2.- Tienes que tener tu tabla Z ya previamente creada con los tipos de datos homologados a tu access(como sabemos no son iguales, pero no pasa nada, por que el excel lo toma como cadena, solo ten cuidado que en la tabla Z haya numericos, char, string, package o N, de acuerdo a la necesidad) 3.- Modifica la tabla interna que hay en el programa de acuerdo a tus necesidades de campos 4.- La estructura tienes que hacer referencia a tu tabla Z 5.- Ya que esta llena la tabla interna hace un loop para empezar a pasar datos de la tabla interna a la estructura, esto para no tener problemas por compatibilidad de datos 6.- Hace un modify para que no haya duplicados, en el insert podria marcar error. 7.- Hace el commit work 8.- Listo, ve a ver tu tabla Z para que confirmes los registros que acabas de meter. Empezamos. REPORT zpruebas_lavr MESSAGE-ID zttl LINE-SIZE 130. *---------------------------------------------------------------------* * INCLUDE PARA DEFINICIÓN DE DATOS * *---------------------------------------------------------------------* INCLUDE zpruebas_lavr_t001. *---------------------------------------------------------------------* * INCLUDE PARA DEFINICIÓN SUBRUTINAS * *---------------------------------------------------------------------* INCLUDE zpruebas_lavr_f001. *---------------------------------------------------------------------* * EVENTO START-OF-SELECTION * *---------------------------------------------------------------------* START-OF-SELECTION. * Lee un archivo xls y lo carga en una tabla interna PERFORM f_lee_archivo. * Recorre tabla interna y va cargando datos en tabla Z PERFORM f_modifica_tabla_z. *----------------------------------------------------------------------* * ZPRUEBAS_LAVR_T001 * *----------------------------------------------------------------------* *----------------------------------------------------------------------* * Definición de parámetros de entrada * *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK param WITH FRAME TITLE text-001. PARAMETERS: ruta LIKE rlgrap-filename OBLIGATORY DEFAULT 'C:\CARPETA\ARCHIVO.XLS' LOWER CASE. SELECTION-SCREEN END OF BLOCK param. *----------------------------------------------------------------------* * Definición de tablas internas * *----------------------------------------------------------------------* * Tabla que almacena los registros de las filas y columnas de xls DATA: BEGIN OF i_excel OCCURS 0, fila LIKE alsmex_tabline-row, columna LIKE alsmex_tabline-col, valor LIKE alsmex_tabline-value, END OF i_excel. * Tabla que almacena los campos que vienen del archivo * Estos pueden variar de acuerdo a la tabal que deseamos llenar DATA: BEGIN OF ti_archivo OCCURS 0, mandt LIKE zruta_arch-mandt, id LIKE zruta_arch-id, progname LIKE zruta_arch-progname, ruta LIKE zruta_arch-ruta, END OF ti_archivo. *----------------------------------------------------------------------* * Definición de estructuras * *----------------------------------------------------------------------* * Se crea una estructura para poder hacer el modify directo a la tabla Z * y evitar errores por tipos de datos DATA: BEGIN OF s_zruta_arch. INCLUDE STRUCTURE zruta_arch. DATA: END OF s_zruta_arch. *----------------------------------------------------------------------* * ZPRUEBAS_LAVR_F001 * *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form F_LEE_ARCHIVO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM f_lee_archivo. * Función que descarga datos desde archivo excel CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = ruta i_begin_col = '1' i_begin_row = '1' i_end_col = '4' " NUMERO DE CAMPOS DE ARCHIVO i_end_row = '65000' TABLES intern = i_excel EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF sy-subrc EQ 0. * Función para llenar datos descargados en tabla interna PERFORM f_llena_tabla. ELSE. MESSAGE i001 WITH text-002. ENDIF. ENDFORM. " F_LEE_ARCHIVO *&---------------------------------------------------------------------* *& Form f_llena_tabla *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM f_llena_tabla. LOOP AT i_excel. CASE i_excel-columna. WHEN '1'. MOVE i_excel-valor TO ti_archivo-mandt. WHEN '2'. MOVE i_excel-valor TO ti_archivo-id. WHEN '3'. MOVE i_excel-valor TO ti_archivo-progname. WHEN '4'. MOVE i_excel-valor TO ti_archivo-ruta. ENDCASE. AT END OF fila. APPEND ti_archivo. CLEAR ti_archivo. ENDAT. ENDLOOP. ENDFORM. " f_llena_tabla *&---------------------------------------------------------------------* *& Form F_MODIFICA_TABLA_Z *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM f_modifica_tabla_z. LOOP AT ti_archivo. IF sy-subrc EQ 0. * Se mueven el registro de la tabal interna a la estructura MOVE-CORRESPONDING ti_archivo TO s_zruta_arch. * Se utiliza el modify en lugar de inser, para que haya problemas si se * duplica algun registro por error, o por que lo ejecutes N veces MODIFY zruta_arch FROM s_zruta_arch. * Graba en tabla transparente COMMIT WORK. CLEAR: ti_archivo, s_zruta_arch. ENDIF. ENDLOOP. ENDFORM. " F_MODIFICA_TABLA_Z Listo, si tienes alguna duda, estoy para servirte. Saludos. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|