A menudo se requiere cargar una gran cantidad de datos en SAP (datos maestros de empleados, cuentas contables, etc.), por lo que hacerlo manualmente a través de una transacción resultaría muy poco práctico, incluso inabordable. Como sabemos, una forma de cargar datos de forma masiva en SAP es ejecutando un Batch Input o juego de datos.

Para ello, resultaría de gran utilidad para el usuario disponer de una plantilla de Excel que le indique qué campos debe rellenar, en qué orden y qué formato. Si la plantilla se genera automáticamente, el usuario no tendrá que preocuparse de si esta se pierde o se ha sobrescrito algún campo.

Crear de forma dinámica una plantilla de Excel en ABAP

En este artículo vamos a explicar cómo crear de forma dinámica una plantilla de Excel en ABAP para que el usuario rellene los datos de interés y, a partir de este Excel, generar un batch input que cargue todos los datos en SAP.

Hemos desarrollado un report que permite generar diferentes plantillas de Excel, en función de la opción que seleccione el usuario. Una vez que el usuario rellene la plantilla con los datos a cargar, se generará un Batch Input que cargará los datos de forma masiva.


Para evitar hardcodear, hemos creado y rellenado una tabla en SAP que indica, para cada una de las opciones (infty), el nombre técnico (fieldname) y la posición (possi) de los campos que deben aparecer en el Excel.




Por lo que, para seleccionar los campos de interés, bastaría hacer un select a esa tabla con la opción elegida por del usuario. En este ejemplo, hemos seleccionado el infotipo 0105 que almacena datos de comunicación de un empleado, como su dirección de mail.


A continuación, necesitamos rellenar el catálogo con las propiedades de los campos (nombre, descripción, tipo de dato, etc). Utilizaremos la función LVC_FIELDCATALOG_MERGE, que nos devolverá el catálogo automáticamente, a partir de la estructura indicada (en este ejemplo, la estructura correspondiente es la ‘PA0105’).



Sin embargo, esta función nos devolverá todos los campos de la estructura elegida, pero para rellenar el Excel, no todos los campos son necesarios (en este ejemplo, solo se requieren 5 campos). Eliminaremos las entradas sobrantes del catálogo, y nos quedaremos solo con los campos que nos interesan.


Crear una plantilla Excel con tecnología OLE

A continuación, crearemos la plantilla de Excel usando la tecnología OLE. OLE (Object linking and embedding) es una herramienta que usa SAP para integrar MS Excel y MS Word.







Es muy importante establecer formato texto en las celdas, para evitar errores en la carga posterior del Excel. De este modo, cuando pulsamos el botón de la Plantilla, se nos generará el Excel correspondiente:


Comentarios:


El usuario rellenará la plantilla con los datos y lo guardará en la ruta de destino.


A continuación, veremos cómo hacer para cargar el Excel en una tabla interna de nuestro report. A partir del catálogo, crearemos una tabla de forma dinámica con el método estático create_dynamic_table de la clase cl_alv_table_create.


Con la función ‘TEXT_CONVERT_XLS_TO_SAP’, introduciremos la ruta del fichero y volcaremos los datos del Excel directamente en nuestra tabla interna


Comprobamos que los datos se han cargado correctamente.


Por último, solo nos quedaría generar nuestro juego de datos a partir de la tabla interna. Para ello:

  • Creamos una grabación en la transacción SM35.

  • Abrimos el Batch Input.

  • Rellenamos la tabla bdcdata con los datos de nuestra tabla interna.


  • Cerramos el Batch Input.

Finalmente, ejecutaríamos nuestro Batch Input desde la transacción SM35.


Como hemos visto, la grabación que hemos realizado para este ejemplo se corresponde al infotipo 0105. Habrá que realizar una grabación y un Batch Input para cada uno de los infotipos que se muestran en la pantalla de selección. Dentro del report, en función de la elección del usuario, ejecutaremos el Batch Input correspondiente.

Esperamos que este artículo te haya sido de utilidad. Recuerda que si tienes alguna pregunta puedes dejarla en los comentarios. Además, si estás interesad@ en nuestra área de finanzas, no dudes en ponerte en contacto con nosotros.