Insertar registros a Tabla Z importando un Excel

Disculpa, yo también requiero crear un programa Z, que me lea un doc de excel, para que lo procese y me actualice un campo, Actualmente el usuario lo hace directamente desde la LSMW, pero la intensión es quitarle ese permiso y lo haga desde un Z. Disculpa las molestias y saludos.

Saludos,

Considero que con una LSMW resuelves eso sin ningún inconveniente.

En este curso https://www.udemy.com/paso-a-paso-con-sap-1ra-edicion/ se incluye una explicación detallada de como funciona tanto la LSMW como un sin número de utilidades más dentro de SAP.

2 Me gusta

Hola que tal…si entiendo que es mucho mas facil usar la LSMW, pero en mi caso al usuario se le quitaran los permisos a su rol, por eso requiero de un programa abap que me lea un excel y darle tratamiento a los datos.

Saludos y gracias

No necesariamente se le deben de quitar los permisos, pueden dar autorización solo al proyecto del LSMW que requiere. //Solo como sugerencia.

Lo consideraré, muchisimas gracias…¡¡¡
saludos

Saludos Wleuyacc,Si deseas realizar un proceso masivo en BACKGROUND (El usuario solo ejecutara un botón del proceso y veras el Log respectivo, mas no tendrá la posibilidad de ver,modificar y de darle guardar como indicas, eso se realiza en modo DIALOGO) de insertar registros en la tabla Z, las propuestas de LSMW o BATCH a la SM30 que brindan los compañeros es adecuado.( Ahora en DIALOGO estas opciones tendrías que estar en ejecución de modo visualización lo cual implicaría dar ENTER, ENTER para la opción de BATCH y ver pasar la inserción y guardado cuando usas el LSMW por cada registro del Excel, ademas que se guardara en la tabla Z, a no ser que tenga opciones el LSMW o BATCH para realizar en modo invisible y mostrar en modo visualización la SM30 hasta el ultimo registro a insertar SIN HABER REALIZADO LA OPCIÓN DE GUARDAR que es lo que entiendo que deseas) , pero si es en DIALOGO dado que quieres estar en la SM30 ( por que tiene acceso a visualizar y poder modificar si consideras necesario antes de dar a guardar ) puedes ir por un un ALV con las opciones de CRUD y un botón de Importar data del Excel ( Importas y realizas un Refresh al ALV ) para que el usuario pueda visualizar y modificar si lo considera y guardar finalmente algo equivalente a la SE16N.

Considero que el modo BACKGROUND es acertado, me inclino a que puedas creas un programa de captura de datos del excel y realizas un INSERT masivo a la tabla Z o MODIFY. ahora si tomamos las opciones de los compañeros me voy por el BATCH para temas masivos para usuarios finales, creando un programa Z con permisos pertinentes con las ventajas y desventajas propuestas.El LSMW, lo usa mas el área de tecnologías para cargas iniciales masivas, de cara al usuario estos tienen que ser especializados debido al grado de complejidad, por otro lado es gestionar las autorizaciones al usuario a una transacción critica como lo es el mismo. La opción DIALOGO, un ALV como indique anteriormente.

3 Me gusta

Amigos tengo un codigo Abap, donde se carga un EXCEL y llena una tabla interna, como lo que busca @Wleuyacc …por si les interesa diganme y lo subo como tema


Aquí el aporte: Importar excel - Tratamiento de Datos

4 Me gusta

Saludos Estimado,

Considero que sí le sería de ayuda. Si está dentro de sus posibilidades puedes crear un gist que es pegarlo en esta dirección Gist y luego compartir el enlace en una publicación :slightly_smiling:

1 me gusta

@Wleuyacc, ¿como resulto este tema? ¿ya tienes una solución?

2 Me gusta

Hola amigo, yo realice algo como esto en un desarrollo abap, el detalle que yo en un loop use una BAPI para actualizar un campo de materiales SAP.

Gracias amigos por sus comentarios, llegue armar un Programa ABAP, importe el excel y una serie de validaciones a los registros importados, es bueno ver la unión que hay en el grupo , sigamos creciendo ! :slight_smile: .

Saludos.

3 Me gusta

@Wleuyacc, genial, te invito a marcar la opción que mas te ayudo como solución.

O incluso a ofrecer la solución que encontraste del tema.

Saludos.

2 Me gusta

Hola a todos, la forma en que yo cargo datos desde excel a tablas internas es la siguiente, lo dejo por aca por si alguien le interesa utilizar:

START-OF-SELECTION.
    PERFORM procesa_planilla.
    PERFORM graba_datos_tabla_interna.

FORM procesa_planilla.
IF H_APPL-HEADER = SPACE OR H_APPL-HANDLE = -1.
    CREATE OBJECT H_APPL 'EXCEL.APPLICATION'.
    IF SY-SUBRC NE 0. MESSAGE I002(SY) WITH SY-MSGLI. ENDIF.
    SET PROPERTY OF H_APPL  'VISIBLE' = 0.
  ENDIF.

  CALL METHOD OF H_APPL 'WORKBOOKS' = H_WORK.
  CALL METHOD OF H_WORK 'OPEN' EXPORTING #1 = P_ARCHI.

  PERFORM CAPTURAR_DATOS.

  CALL METHOD OF H_APPL 'QUIT'.
  FREE OBJECT H_APPL.
  H_APPL-HANDLE = -1.

  DELETE tbxls WHERE ( line = 1 ).

  SORT TBXLS BY LINE COLN.
  REFRESH TABXLS.
  CLEAR TABXLS.
  LOOP AT TBXLS.
    AT NEW LINE.
      CLEAR TABXLS.
      MOVE '@0A@' TO TABXLS-icon.
    ENDAT.
    IF ( TBXLS-COLN = 1 ).
      MOVE TBXLS-STRING TO TABPOSOC-ORDEN.
    ELSEIF ( TBXLS-COLN = 2 ).
      MOVE TBXLS-STRING TO TABPOSOC-POS.
    ELSEIF ( TBXLS-COLN = 3 ).
      MOVE TBXLS-STRING TO TABPOSOC-FECHAPROY.
    ENDIF.
    AT END OF LINE.
      APPEND TABPOSOC.
    ENDAT.
  ENDLOOP.
ENDFORM. 


FORM CAPTURAR_DATOS.
  DATA: EXCEL_LINE LIKE SY-INDEX,
        EXCEL_COLN LIKE SY-INDEX,
        CELL_VALUE(132) TYPE C.
  DO P_NLINE TIMES.
    EXCEL_LINE = SY-INDEX.

    DO P_NCOLN TIMES.
      EXCEL_COLN = SY-INDEX.

      CALL METHOD OF H_APPL 'CELLS' = H_CELL
        EXPORTING #1 = EXCEL_LINE
        #2 = EXCEL_COLN.
      GET PROPERTY OF  H_CELL 'VALUE'      = CELL_VALUE.
      CLEAR: TBXLS.
      TBXLS-LINE   = EXCEL_LINE.
      TBXLS-COLN   = EXCEL_COLN.
      TBXLS-STRING = CELL_VALUE.
      APPEND TBXLS.
    ENDDO.
  ENDDO.
ENDFORM.

FORM graba_datos_tabla_interna.
  LOOP AT TABPOSOC.

    CONDENSE TABPOSOC-ORDEN     NO-GAPS.
    CONDENSE TABPOSOC-POS       NO-GAPS.
    CONDENSE TABPOSOC-FECHAPROY NO-GAPS.

CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
      EXPORTING
        DATE_EXTERNAL = TABPOSOC-FECHAPROY
      IMPORTING
        DATE_INTERNAL = TABPOSOC-FECHAPROY.

    UPDATE EKPO SET ZZFECHAP = TABPOSOC-FECHAPROY
    WHERE EBELN = TABPOSOC-ORDEN AND EBELP = TABPOSOC-POS.

    COMMIT WORK AND WAIT.

  ENDLOOP.
ENDFORM.
7 Me gusta

Yo he utilizado una funcion llamada ‘ALSM_EXCEL_TO_INTERNAL_TABLE’

*PASAMOS EL ARCHIVO DE EXCEL A LA TABLA INTERNA
CALL FUNCTION ‘ALSM_EXCEL_TO_INTERNAL_TABLE’
EXPORTING
filename                = P_FILE
*COLUMNA DONDE SE EMPIEZA A BUSCAR DATOS
i_begin_col             = 1
*RENGLÓN DONDE SE EMPIEZA A BUSCAR DATOS
i_begin_row             = 1
*COLUMNA DONDE TERMINA DE BUSCAR DATOS
i_end_col               = 3
*RENGLÓN DONDE TERMINA DE BUSCAR DATOS
i_end_row               = 10
TABLES
*TABLA INTERNA DONDE ME REGRESA LOS DATOS
intern                  = it_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole              = 2
OTHERS                  = 3.

Ya solo basta usar alguna función para buscar el archivo en el ordenador, o si esta dentro de algún servidor remoto, habrá que ingresar las funciones que requieras

2 Me gusta

Gracias por tu aporte @Ricardo_Lira tendré que hacer un ejercicio usando tu ejemplo…¡¡¡
saludos

Hola,
Yo utilizo la clase cl_gui_frontend_servicesy el metodo file_open_dialog para seleccionar el archivo excel de la PC.

ejemplo:

 call method cl_gui_frontend_services=>file_open_dialog
    exporting
      window_title            = l_title
      default_filename        = l_def_file
      file_filter             = ' '
      initial_directory       = 'C:\'
    changing
      file_table              = lt_files
      rc                      = l_subrc
    exceptions
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      others                  = 4.
6 Me gusta

Gracias por compartir :slight_smile:

Yo cree un programa Z que te carga hasta 20,000- 25,000 regstros a cualquier tabla que selecciones. Aún faltan unas validaciones sencillas pero porque lo necesitaba de urgencia ya no las hice.
Una de ellas y la mas fea es que sale un Dump cuando son mas de 25,000 registros

Saludos.

1 me gusta

Anímate a crear un tema nuevo para que los abapers te propongan código de manejo de errores, así delimitas el programa antes de que lance el DUMP :slight_smile: