✒️ABAP La ejecución de fondo
ABAP La ejecución de fondo
Podremos ingresar a ejecutar un programa a través del menú Programa / Ejecuta o Ejecutar en proceso fondo. Existen 2 formas de ejecutar un programa:
*Ejecución online: (F8) Dónde el programa se ejecuta al momento de presionar F8 o el icono ejecutar, entonces los resultados de la ejecución se producen de manera inmediata. Se utiliza cuando se requiere interacción con el usuario y cuando el procesamiento del programa es poco. (Menos de 1 minuto)
*Ejecución batch o de fondo: (F9) Es la ejecución de un proceso o programa sin interacción con el usuario, dónde lanzamos un proceso y el front nos devuelve "el control" aunque el programa no ha acabado de ejecutarse. Se utiliza cuando el procesamiento del programa es muy alto, aquí los resultados de la ejecución no se ven en la misma pantalla, sino que deben buscarse en otra transacción SM37. (20 minutos)
Al ejecutar el programa de fondo nos saldrá una ventana emergente de parámetros de impresión de fondo, dónde podremos modificar el dispositivo de salida, la impresora de windows, etc. Al ejecutarlo nos saldrán las siguientes opciones:
°Inmediato: Permite iniciar e programa de fondo en el momento que acaba su definición.
°Fecha/Hora: Se indica la fecha y hora en la que queremos inicie la ejecución de fondo, adicionalmente podemos marcar ejecución periódica.
°Tras job: Se encadena la ejecución, indicando que el programa se ejecute de fondo tan pronto acabe el otro, hasta es posible indicarle que se ejecute solo si el programa anterior se proceso correctamente, de lo contrario no continuará.
°Tras evento: La ejecución se produce tan pronto comience el evento que indiquemos. Dicho evento puede ocurrir manual o automáticamente. Dicho evento debe haber sido definido en la tabla BD.
Transacción SM37
Desde allí se ven los JOBS que es el nombre de los programas o procesos ejecutados de fondo. Allí se presiona del menú desde la cual nos dirigimos a la transacción SP01, que nos permite administras las solicitudes de impresión que tenga el sistema. Seleccionamos la orden y visualizamos
NOTA: La manera en la que se programa un reporte difiere si se ejecuta online o de fondo. Como por ejemplo en la carga masivamente datos en el sitema.
Creación de un programa ABAP de fondo.
Creamos un programa ztest_fondo_b, el cual obtendrá registros de la tabla BD ztabla_usuarios y un programa ztest_fondo que llamará al ztest_fondo_b. Así:
REPORT ztest_fondo_b
DATA: ti_usuarios TYPE STANDARD TABLE OF ztabla_usuarios,
wa_usuarios LIKE LINE OF ti_usuarios.
START-OF-SELECTION
REFRESH ti_usuarios.
SELECT dni nombre_ape estado_usu
FROM ztabla_usuarios.
INTO CORRESPONDING FIELDS OF TABLE ti_usuarios.
IF sy-subrc EQ 0.
LOOP AT ti_usuarios INTO wa_usuarios.
WRITE:/ wa_usuarios-dni, wa_usuarios-nombre_ape, wa_usuarios-estado_usu.
ENDLOOP.
ENDIF.
-
REPORT ztest_fondo.
DATA: v_jobname TYPE btcjob,
v_jobcount TYPE btcjobcnt.
START-OF-SELECTION
PERFORM abrir_job.
PERFORM lanzar_job.
PERFORM cerrar_job.
-
FORM abrir_job.
CONCATENATE 'ztest_fondo' sy-datum INTO v_jobname.
CALL FUNCTION 'JOB_OPEN'
EXPORTING jobname = v_jobname
IMPORTING jobcount = v_jobcount
EXCEPTIONS cant_creat_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4
IF sy-subrc EQ 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno.
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENFORM.
-
FORM lanzar_job.
SUBMIT zprueba_fondo_b.
USER sy-uname
VIA JOB v_jobname
NUMBER v_jobcount
AND RETURN
ENFORM.
Con la cláusula AND RETURN se devuelve el control al programa llamador.
-
FORM cerrar_job.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING jobname = v_jobname
jobcount = v_jobcount
strtimmed = 'X' *Comienza de inmediato*
EXCEPTIONS cant_start_inmmediate = 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 EQ 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno.
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENFORM.
Al ejecutar el programa con F8 aparecerá un mensaje que dice "Se lanzo el Job, para visualizarlo ir a la trx SM37"
En la transacción SM37 se presiona el F8, se selecciona el proceso, se pulsa el botón Spool y visualizamos.
Se crea el JOB a través de la transacción SM36.
Preguntas:
¿Qué la variable tengo BTC es un tipo de variable para llamar programas de fondo? ¿Qué sería en btcjobCNT? LAs variables sy-msgv1,2,3,4,no, ty e id, ¿sin predeterminadas del sistema cómo de botones, ¿coerrecto?. ¿Dónde podremos ver mejor sus definiciones y demás, en el diccionario ABAP?
En la subrutina de lanzar_job se hace submit a un zprueba_fondo_b, pero ese programa no se ha creado, ¿se comedio un error y referia a ztest_fondo_b? Osea cambiaron por error la palabra test por prueba o esta llamando un programa adicional que tendríamos que hacer?.
 
 
 
Sobre el autor
Publicación académica de Linda Carolina Zambrano León, en su ámbito de estudios para la Carrera Consultor ABAP.
Linda Carolina Zambrano León
Profesión: Agente - Peru - Legajo: XR55P
✒️Autor de: 63 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Linda Zambrano