Ver Mensaje Individual
  #13  
Viejo 29/02/08, 21:05:38
Avatar de bacha
bacha bacha is offline
Member
 
Fecha de Ingreso: dic 2007
Mensajes: 53


Gracias, oie tambien soy de Mexico, de muy certa de tu estado de TAmaulipas !.


Oie larmadovr, fijate que ya lo intente y solo me mete un registro y dentro de el solo el mandante esta escrito... ningun campo mas se escribio, nose que estoy haciendo mal..... te dejo mi codigo para ver si le puedes hechar un vistaso:


*&---------------------------------------------------------------------*
*& Report ZVACIAR_A_TABLA_Z
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZVACIAR_A_TABLA_Z.
**---------------------------------------------------------------------*
** 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:\Documents and Settings\kayros FI\Escritorio\BDD NORTHWIND\customers.xlsx' 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 sy-mandt,
customerid LIKE ZNW_CUSTOMERS-ZNW_CUSTOMERID,
companyname LIKE znw_customers-znw_companyname,
contactname LIKE znw_customers-znw_contactname,
contacttitle LIKE znw_customers-znw_contacttitle,
address LIKE znw_customers-znw_address,
city LIKE znw_customers-znw_city,
region LIKE znw_customers-znw_region,
postalcode LIKE znw_customers-znw_postalcode,
country LIKE znw_customers-znw_country,
phone LIKE znw_customers-znw_phone,
fax LIKE znw_customers-znw_fax,
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 znw_customers.
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-CUSTOMERID.
WHEN '3'.
MOVE i_excel-valor TO ti_archivo-companyname.
WHEN '4'.
MOVE i_excel-valor TO ti_archivo-contactname.
WHEN '5'.
MOVE i_excel-valor TO ti_archivo-contacttitle.
WHEN '6'.
MOVE i_excel-valor TO ti_archivo-address.
WHEN '7'.
MOVE i_excel-valor TO ti_archivo-city.
WHEN '8'.
MOVE i_excel-valor TO ti_archivo-region.
WHEN '9'.
MOVE i_excel-valor TO ti_archivo-postalcode.
WHEN '10'.
MOVE i_excel-valor TO ti_archivo-country.
WHEN '11'.
MOVE i_excel-valor TO ti_archivo-phone.
WHEN '12'.
MOVE i_excel-valor TO ti_archivo-fax.
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 insert, para que haya problemas si se
* duplica algun registro por error, o por que lo ejecutes N veces
MODIFY znw_customers FROM s_zruta_arch.
* Graba en tabla transparente
COMMIT WORK.
CLEAR: ti_archivo, s_zruta_arch.
ENDIF.
ENDLOOP.

ENDFORM. " F_MODIFICA_TABLA_Z

Úlima edición por bacha fecha: 29/02/08 a las 21:12:44.
Responder Con Cita