W Pub: ABAP Curso SM 35

El Bacth-Input es esa zona de trabajo que debera hacer el usuario, pero que al final se realiza mediante un programa. Los Batch-Input suelen utilizarse cuando se realizan algun tipo de carga o en las llamadas a transacciones haciendo que estas sean completamente transaprentes al usuario. De esta forma, mediante una fuente o juego de datos que podria ser suministrada por el usuario al inicio de una pantalla, por un fichero externo de otro mquina o mediante una lectura dinmica de tablas, nuestro programa va a ser capaz de ejecutar ciertas pantallas de SAP que normalmente requieren la intervencin del usuario pero esta vez, programado de tal forma que no ser necesaria la presencia de este. Esto es un Bacth-Input.

El ejemplo ms claro de un Bacth-Input lo encontramos en todos aquellos trabajos repetitivos y aburridos que hacemos a diario. Esos en lo cuales podra sustituirse por un pequeño programa. La llamada ms sencilla a un Bacth-Input es el pase de parmetros a una transaccin mediante un juego de datos. Si nos fijamos en la directiva vemos que a esta se le puede pasar una tabla interna de estructura definida, conocida como BDCDATA, donde contendr la informacin necesaria para ejecutar las pantallas en cadena. Esta tabla est formada por una estructura de cadenas, al estilo:

Campoth>Descripcin
PROGRAM(40)Nombre del programa que contendr los datos
DYNPRO(4) type cNmero de la pantalla en ejecucin
DYNBEGIN(1)Indica si comienza la nueva pantalla: 'X'
FNAM(132)Contiene el nombre del campo de pantalla
FVAL(132)Contiene el valor que pondr al campo de pantalla.

Como ya vereis en muchos programa exiten multitud de formas de llenar esta tabla, lo ms habitual en cada instalacin es disponer de un Include donde contenga la definicin de esta tabla, as como unos forms para llenarla de una forma rpida y sencilla. Un ejemplo claro de este form es el include bdcrecxx.

Los datos de las pantallas se pueden obtener de dos formas diferentes pero muy similares. La primera y ms aburrida es ir pantalla por pantalla, haciendo &ltF1&gt sobre el campo y &ltF9&gt (explicacin tcnica) para averiguar como se llama el campo de pantalla, de esta forma tambin sabemos a que nmero de pantalla hace referencia y que programa se est ejecutando.

Pero la forma ms divertida de cara al programador es mediante una grabacin de datos. Con esto se puede llegar a conseguir un programa entero de carga y muchas veces incluso el propio consultor puede llegar a diseñarse sus propios programas con unos minimos (muy mnimos) conocimientos de ABAP. La transaccin asociada es la SHDB.

Grabacin de Datos

Nada mas acceder se nos pide un nombre de datos, para tener relacionados nuestras grabacin. Tambin podemos acceder a las anteriores grabaciones con el botn de resumen. Pero si queremos crear una nueva grabacin, simplemente le daremos un nombre y apretaremos el boton de crear. Lo siguiente que veremos es un pop-up que nos pedir el nombre de la transaccin de inicio, una vez que le damos el nombre de la transaccin todo lo que nosotros tecleemos o pulsemos con el ratn quedar grabado para un tramamiento posterior. Por ejemplo, podemos hacer la grabacin de datos de la creacin de un programa:


*Indicamos que la transaccin a grabar va a ser la SE38

  • Le damos un nombre a nuestro programa y apretamos sobre crear
  • Le damos una descripcin, le ponemos unos atributos y apretamos sobre grabar
  • Nos aparecer la pantalla de atributos, le decimos que ser un objeto local, pero tecleando en la clase de desarrollo $tmp
  • Conseguido lo anterior, nos aparecer el codigo fuente, simplemente le datos sobre <F3> BACK para terminar.

Esto sera lo que obtendramos:

 SE38
   |
   |
   -----SAPMS38E 0100
   |  |
   |  |----BDC_OKCODE                     =NEW
   |  |----BDC_CURSOR                     RS38M-PROGRAMM
   |  |----RS38M-PROGRAMM                 ZNADAR70
   |  |----RS38M-FUNC_EDIT                X
   |
   -----SAPLSEDTA0100
   |  |
   |  |----BDC_OKCODE                     =EDIT
   |  |----BDC_CURSOR                     RSAHD-APPL
   |  |----RS38M-REPTI                    Esta es mi descripcin
   |  |----TRDIR-SUBC                     1
   |  |----RSAHD-APPL                     *
   |
   -----SAPLSPO1 0100
   |  |
   |  |----BDC_OKCODE                     =YES
   |
   -----SAPLSTRD 0100
   |  |
   |  |----BDC_OKCODE                     =ADD
   |  |----BDC_CURSOR                     KO007-L_DEVCLASS
   |  |----KO007-L_DEVCLASS               $TMP
   |
   -----SAPMSEDT 2420
   |  |
   |  |----BDC_OKCODE                     =PGBA
   |  |----BDC_CURSOR                     RSTXP-TDLINE(01)
   |
   -----SAPMS38E 0100
      |
      |----BDC_OKCODE                     =BACK
      |----BDC_CURSOR                     RS38M-PROGRAMM

Vemos claramente dos partes diferenciadas, la izquierda, con el nombre de los campos y de las pantallas y la derecha, con el valor que toma cada campo. Vemos que hay ciertos campos que se repiten y con la experiencia veremos que son comunes para todas las pantallas: BDC_OKCODE y BDC_CURSOR, el primero nos dar el comando de ejecucin, mientras que el segundo nos posiciona el cursor sobre una campo determinado. Una vez que que hemos grabado la transaccin tenemos la opcin de seguir con otra transaccin, añadiendo as transacciones en cadena.

Una vez que hemos grabado nuestros datos y volviendo a la SHDB, podemos llamar a nuestros datos grabados. De esta forma podremos disfrutar de varias opciones ms, como puede ser:

  • Modificacin de la estructura grabada, podremos alterar los datos que hemos grabado
  • Generar un juego de datos con los datos realizados
  • Generar cdigo fuentes asociado a la grabacin

Una de las funciones ms interesante de la grabacin es que puedes incluso crear la estructura del fichero externo necesario para que SAP de forma automtica cree el programa y el interface necesario para que el proceso sea lo ms transparente para el usuario. Por eso deca con anterioridad que los BI incluso pueden ser creados y mantenidos por cualquier consultor. Adems, si a todo esto le añadimos la potencia de la transaccin LSMW el consultor podr hacer por si slo la mayora de las cargas.

No obstante, para algunas cargas, por ejemplo clientes, SAP proporciona ciertos programas que ya hacen los BI, simplemente hemos de llenar unas "plantillas" (llenar ficheros con los datos que necesita SAP) para que su programa sea capaz de reconocerlos y hacer las cargas de una forma mucho ms fcil.

Juegos de Datos

Cuando se planea hacer un Batch-Input es posible que la entrada de datos a veces sea superior a las quinientos mil registros o ms, eso supone que nuestro programa deberia de estar funcionando durante un buen rato y ms todava si debe pasar por diez pantallas antes de hacer un registro completo. Para ello normalmente se suelen crear los juegos de datos, que podemos entender que son los ficheros una vez cargados dentro de SAP. La ventaja es que el juego de datos puede ejecutarse y pararse, incluso corregir los errores que pueda tener de una forma mucho ms comoda que no ir leyendo registro por registro desde el fichero externo.

En la imaegen superior, podemos ver el centro de control de los juegos de datos, observamos que en este ejemplo, tenemos aun juegos de datos por procesar y otros que estan en situacin erronea, si quisieramos podriamos ver otros status de otros juegos de datos, los previstos, los terminados, los que estan en ejecucin, etc... De esta forma, podemos observar cuales son los datos que hay dentro de un juego de datos, ver porque estn erroneos, etc... Ya que disponemos de todas las herramientas para tratarlos.