✒️ABAP La ejecución de fondo
ABAP La ejecución de fondo
BATCH
1. Ejecución de fondo. Existen dos forma de ejecutar un programa en ABAP. Online y BATCH. En la ejecución online se ejecuta al momento de presionar F8 y los resultados se producen de manera inmediata. Pero en cierto otro casos, especialmente hablando en un ambiente real de trabajo, el tiempo de procesamiento de un programa podría ser muy alto. Esto se debe a que el programa tiene mucho acceso a tablas que tienen millones de registros.
Para estos casos va a ser conveniente la ejecución de Batch o de fondo. Por ejemplo
Supongamos que tenemos el programa ABAP ZPRUEBA_FONDO_B que obtenemos los registros de la tabla ZTABLA_USUSARIOS y lo imprime por pantalla
REPORT zprueba_fondo_b.
* Declaración de datos
DATA: ti_usuarios TYPE STANDARD TABLE OF ztabla_usuarios,
st_usuarios LIKE LINE OF ti_usuarios.
*---------------------------------------------------------------------*
START-OF-SELECTION.
*---------------------------------------------------------------------*
CLEAR ti_usuarios.
REFRESH ti_usuarios.
SELECT dni nombre_ape estado_usu
FROM ztabla_usuarios
INTO CORRESPONDING FIELDS OF TABLE ti_usuarios.
LOOP AT ti_usuarios INTO st_usuarios.
WRITE:/ st_usuarios-dni,
st_usuarios-nombre_ape,
st_usuarios-estado_usu.
ENDLOOP.
Ahora vamos a crear el nuevo programa ABAP_ZPRUEBA_FONDO al cual cumplirá el rol de programa padre del programa ZPRUEBA_FONDO_B
Lo primero que debemos hacer es crear un job. Para esto le asignamos un nombre a la variable V_JOBNAME y luego ejecutamos la FUNCION JOB_OPEN. Para modularizar vamos a crear la subrutina ZBRIR_JOB que tendrá el siguiente código.
************************************************************************
********************* SUBRUTINAS ***************************************
************************************************************************
*&---------------------------------------------------------------------*
*& Form abrir_job
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM abrir_job .
* Asigamos un nombre al job
CONCATENATE 'ZPRUEBA_FONDO_' sy-datum
INTO v_jobname.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = v_jobname
IMPORTING
jobcount = v_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " abrir_job
Lo que sigue es lanzar el Job. Para esto vamos a crear la subrutina LANZAR_JOB, que ejecutara la sentencia SUBMIT, la cual se utiliza para ejecutar un programa dentro de otro programa y con el agrado de la clausura VIA JOB NUMBER la ejecución del programa se realiza de fondo.
Nota: "mediante la sentencia SUBMIT se puede pasar parámetros al programa llamado, los cuales deben existir en la pantalla de selección de este. Para más inf presionar F1".
*&---------------------------------------------------------------------*
*& Form lanzar_job
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form lanzar_job.
* Lanzo el Job
SUBMIT zprueba_fondo_b
USER sy-uname "usuario que ejecuta
VIA JOB v_jobname
NUMBER v_jobcount
AND RETURN.
endform. " lanzar_job
Con el agregado de la clausura AND RETURN el programa llamador permanece en espera mientras se ejecuta el programa llamado. Cuando el programa llamado termina, se devuelve el control al programa llamador.
Luego debemos cerrar el Job mediante la función JOB_CLOSE. Para esto vamos a crear la subrutina CERRAR_JOB como vemos a continuación.
*&---------------------------------------------------------------------*
*& Form cerrar_job
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cerrar_job.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname
strtimmed = 'X' "Comienza de inmediato
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
WRITE 'Se lanzó el Job, para visualizarlo ir a la Trx SM37'.
ENDIF.
ENDFORM. " cerrar_job
Por último, después de cerrar el job, imprimimos por pantalla el mensaje "Se lanzó el Job, para visualizarlo ir a la Trx SM37".
Transacción SM37 Es utilizada para visualizar Jobs procesados en el sistema SAP. De cada job podemos visualizar distintos datos tales como el ID, el usuario SAP que lo ejecuto, el estatus (planeado, liberado, listo, activo, terminado o cancelado), la fecha y hora de inicio, la duración y el retraso.
Ya identificado nuestro proceso, lo tildamos y presionamos el botón Spool. Ahora vemos el pedido del job correspondiente a nuestro programa. Finalmente presionamos el botón de visualizar y venos el resultado del procesamiento.
Tambien en la transaccion SP01, conocida momo "El Spool" administraremos todas las solicitudes de impresion que se genere en SAP. Cada impresion o Orden de Spool tiene su numero de ID unico asignado por el sistema. Los Administradores se encargan de mantener el Spool por ejemplos ordenes olvidadas por los usuarios para que no llenen la base de datos, para,ellos disponen de programa estandar para eliminar las odenes mas viejas.
 
 
 
Sobre el autor
Publicación académica de Edward Henry Rosario Piezal, en su ámbito de estudios para la Carrera Consultor ABAP.
Edward Henry Rosario Piezal
Profesión: Ingeniero en Sistema - Republica Dominicana - Legajo: FM99R
✒️Autor de: 68 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: FullTime
Certificación Académica de Edward Rosario