#1
|
|||
|
|||
Grabar en fichero ejecutando de fondo un programa Z
Estimados, buenas tardes, tengo un inconveniente con lo siguiente, creé un programa que en su ejecución debería generar y grabar un archivo .txt en un fichero, al ejecutarlo online el programa lo genera perfectamente, pero al ejcutarlo de fondo no realiza dicha función, mi problema está en que la cantidad de datos que tengo que ejecutar, tira error de time out si lo ejecuto online, por lo que si o si tengo que ejecutarlo de fondo, pero de este modo no me genera el archivo y no lo graba en el fichero. Puede ser que el problema esté en el task bar? que debo agregar a mi programa para arreglar esto?
desde ya muchas gracias... Scaiano Leandro... |
#2
|
|||
|
|||
Revisa las funciones que usas para crear el archivo, hay algunas que no soportan el proceso de fondo.
Saludos.
__________________
Israel Toledo |
#3
|
|||
|
|||
En concreto las que tienen en las excepciones el NO_BATCH no pueden ejecutarse en fondo (GUI_DOWNLOAD etc) Para hacerlo en fondo utiliza los datasets
Saludos |
#4
|
|||
|
|||
me pueden hacer el favor de decirme como se que una funcion no corre en proceso de fondo ejem:
tengo este un programa con dos funciones que son estas: PRGN_ACTIVITY_GROUP_USERPRO - PRGN_CHECK_USERPROF_STATU el programa corre en en batch, pero al ejecutarlo en en proceso de fondo no funcciona. |
#5
|
|||
|
|||
Te aconsejaria que no busques funciones y lo hagas directamente con open dataset...close dataset.
__________________
Sebas Desarrollador ABAP. |
#6
|
|||
|
|||
Revisa las excepciones de las funciones. Si tienen una excepción NO_BATCH no puede ejecutarse en fondo.
Saludos |
#7
|
|||
|
|||
Resulta que ya mire las transacciones y ninguna de las dos maneja en las excepciones el NO_BATCH. Que hacer? ...
|
#8
|
|||
|
|||
Hola nasly,
Mi sistema no tiene estas funciones. ¿Puede que sean Forms de un report? Pasa el programa al que estas llamando a ver que tiene. Saludos |
#9
|
|||
|
|||
Este es el codigo principal del reporte
report zbsb_depurar_gas line-size 126. * Declaración de tablas tables: agr_users. * Declaración de estructuras types: begin of str_users. include structure agr_users. types: borrar type c, " Indicador de borrado causa type zbs_gas, " Causa de borrado msg1(2) type c, " Resultado de la eliminación msg2(2) type c, " Resultado del ajuste integridad type c, " Indicador de Integridad end of str_users. * Declaración de tablas internas y áreas de trabajo data: ti_users type standard table of str_users, ti_reply type standard table of str_users, wa_users like line of ti_users, wa_reply like line of ti_reply. data: jobname like tbtcjob-jobname, jobcount like tbtcjob-jobcount. data: begin of t occurs 0. " Tabla interna para batch input include structure bdcdata. data: end of t. * Declaración de variables globales data: vn_tabix type sy-tabix, " Indice actual de un registro en el recorrido a una tabla interna vn_dbcnt type sy-dbcnt, " Cantidad de registros encontrados en una consulta vc_row(3) type n, " Número de posicion en pantalla del registro para el Batch vc_filas(3) type n, " Cantidad de filas en pantalla para el Batch vc_mark type string, " Variable para marcar y seleccionar el registro en el Batch errtext(200) type c, " Variable que contiene el mensaje de error en caso de existir alguno vc_msg1(2) type c, " Resultado obtenido luego de eliminar los registros vc_msg2(2) type c, " Resultado obtenido luego de comparar los usuarios del rol loc_led_color(20) type c, " Indicador de Rol Ajustado vn_deptotal type i, " Total de registros depurados vn_depcausa1 type i, " Total de registros depurados por causa 1 vn_depcausa2 type i, " Total de registros depurados por causa 2 vn_depcausa3 type i, " Total de registros depurados por causa 3 vn_depcausa4 type i, " Total de registros depurados por causa 4 vn_depcausa9 type i, " Total de registros depurados por causa 9 vc_errcausa1 type c, " Variable que indica si ocurrió algun error por causa 1 vc_errcausa2 type c, " Variable que indica si ocurrió algun error por causa 2 vc_errcausa3 type c, " Variable que indica si ocurrió algun error por causa 3 vc_errcausa4 type c, " Variable que indica si ocurrió algun error por causa 4 vc_errcausa9 type c, " Variable que indica si ocurrió algun error por causa 9 vc_fromdat(10) type c, " Fecha From para el ingreso de registros vc_todat(10) type c. " Fecha To para el ingreso de registros * Declaracion de Rangos ranges: r_agrnam for agr_users-agr_name. * Declaración de parámetros de entrada selection-screen begin of block b1 with frame title text-001. select-options: s_agrnam for agr_users-agr_name no intervals, " Rol s_causa for wa_users-causa no intervals. " Causa selection-screen end of block b1. * Declaración de parámetros de ejecución selection-screen begin of block b2 with frame title text-002. parameters: p_mode type c default 'A', " Modo de ejecución p_test type c as checkbox default 'X'. " Modo de prueba selection-screen end of block b2. * Inicio de la selección. start-of-selection. perform get_data. * Fin de la selección end-of-selection. perform set_data. *&---------------------------------------------------------------------* *& Form get_data *&---------------------------------------------------------------------* * Toma todos los registros de la tabla AGR_USERS y los compara * entre ellos para asi definir que registros se deben borrar. *----------------------------------------------------------------------* form get_data . clear: ti_users, ti_reply. refresh: ti_users, ti_reply. * Obtiene todos los registros de la tabla AGR_USERS select * from agr_users into corresponding fields of table ti_users where agr_name in s_agrnam. if sy-subrc = 0. vn_dbcnt = sy-dbcnt. sort ti_users by agr_name uname from_dat to_dat change_dat change_tim. ti_reply[] = ti_users[]. clear wa_users. loop at ti_users into wa_users. vn_tabix = sy-tabix + 1. if vn_tabix > 2. wa_users = wa_reply. endif. if vn_tabix <= vn_dbcnt. clear wa_reply. * Lee el registro que se encuentra inmediatamente despues del actual. read table ti_reply index vn_tabix into wa_reply. * Si ambos registros poseen el mismo Rol if wa_users-agr_name = wa_reply-agr_name. * Si ambos registros poseen el mismo Usuario. if wa_users-uname = wa_reply-uname. * Si la vigencia es menor a la vigencia del siguiente registro if wa_users-to_dat < wa_reply-to_dat. * Si el registro es simple if wa_users-col_flag <> 'X'. wa_users-borrar = 'X'. wa_users-causa = '3'. * Si el registro es compuesto pero el siguiente registro es simple elseif wa_reply-col_flag <> 'X'. wa_reply-borrar = 'X'. wa_reply-causa = '2'. endif. * Si la vigencia es igual a la vigencia del siguiente registro elseif wa_users-to_dat = wa_reply-to_dat. * Si la asignación es mayor a la asignación del siguiente registro if wa_users-from_dat > wa_reply-from_dat. * Si el registro es simple if wa_users-col_flag <> 'X'. wa_users-borrar = 'X'. wa_users-causa = '1'. * Si el registro es compuesto pero el siguiente registro es simple elseif wa_reply-col_flag <> 'X'. wa_reply-borrar = 'X'. wa_reply-causa = '2'. endif. * Si la asignación es igual a la asignación del siguiente registro elseif wa_users-from_dat = wa_reply-from_dat. * Si el registro es simple if wa_users-col_flag <> 'X'. wa_users-borrar = 'X'. wa_users-causa = '1'. * Si el registro es compuesto pero el siguiente registro es simple elseif wa_reply-col_flag <> 'X'. wa_reply-borrar = 'X'. wa_reply-causa = '2'. endif. * Si la asignación es menor a la asignación del siguiente registro elseif wa_users-from_dat < wa_reply-from_dat. * Si el siguiente registro es simple if wa_reply-col_flag <> 'X'. wa_reply-borrar = 'X'. wa_reply-causa = '1'. * Si el siguiente registro es compuesto y el actual es simple elseif wa_users-col_flag <> 'X'. wa_users-borrar = 'X'. wa_users-causa = '2'. endif. endif. * Si la vigencia es mayor a la vigencia del siguiente registro elseif wa_users-to_dat > wa_reply-to_dat. * Si el siguiente registro es simple if wa_reply-col_flag <> 'X'. wa_reply-borrar = 'X'. wa_reply-causa = '3'. * Si el siguiente registro es compuesto y el actual es simple elseif wa_users-col_flag <> 'X'. wa_users-borrar = 'X'. wa_users-causa = '2'. endif. endif. endif. endif. vn_tabix = vn_tabix - 1. modify ti_users index vn_tabix from wa_users transporting borrar causa. endif. endloop. * Si la vigencia ya esta vencida loop at ti_users into wa_users where borrar <> 'X' and to_dat < sy-datum and col_flag <> 'X'. vn_tabix = sy-tabix. wa_users-borrar = 'X'. wa_users-causa = '4'. modify ti_users index vn_tabix from wa_users transporting borrar causa. endloop. else. message e002(zbs). endif. endform. " get_data *&---------------------------------------------------------------------* *& Form set_data *&---------------------------------------------------------------------* * Ejecuta el proceso ya sea en Modo Prueba o Modificación *----------------------------------------------------------------------* form set_data . clear: vn_deptotal, vn_depcausa1, vn_depcausa2, vn_depcausa3, vn_depcausa4. * Para cuando ejecutan el programa en Modo Prueba if p_test = 'X'. loop at ti_users into wa_users where borrar = 'X' and causa in s_causa. * Realiza el conteo de GA´s depurados por causa y tambien el total general. vn_deptotal = vn_deptotal + 1. case wa_users-causa. when '1'. vn_depcausa1 = vn_depcausa1 + 1. when '2'. vn_depcausa2 = vn_depcausa2 + 1. when '3'. vn_depcausa3 = vn_depcausa3 + 1. when '4'. vn_depcausa4 = vn_depcausa4 + 1. endcase. endloop. write 'EJECUCIÓN EN MODO PRUEBA - RESULTADO DE LA DEPURACIÓN DE GAs'. skip 1. write: 'CONDICIONES DE BORRADO PARA LOS GAs DEPURADOS. Total Depurados = ', vn_deptotal. new-line. write: ' 1 - GAs con diferente fecha de asignación (from), borrado el más reciente. Total Causa 1 = ', vn_depcausa1. new-line. write: ' 2 - GA asignado a compuesto comparado con otro GA, borrado el GA no asignado al compuesto. Total Causa 2 = ', vn_depcausa2. new-line. write: ' 3 - GAs con diferentes fecha de vigencia (to), borrado el de menor vigencia. Total Causa 3 = ', vn_depcausa3. new-line. write: ' 4 - GAs con fecha de vigencia vencida. Total Causa 4 = ', vn_depcausa4. skip 1. write 'Rol Usuario De A Causa'. loop at ti_users into wa_users where borrar = 'X' and causa in s_causa. new-line. write: wa_users-agr_name, wa_users-uname, wa_users-from_dat, wa_users-to_dat, wa_users-causa. endloop. * Para cuando ejecutan el programa normalmente. else. clear: ti_reply, wa_reply, r_agrnam. refresh: ti_reply, r_agrnam. ti_reply[] = ti_users[]. * Entro a la transaccion para consultar la cantidad de filas que esta genera. if not ti_users is initial. read table ti_users index 1 into wa_users. clear t. refresh t. perform batch_insdata(zmiscl) tables t using : 'X' 'SAPLPRGN_TREE' '0121', ' ' 'AGR_NAME_NEU' wa_users-agr_name, ' ' 'BDC_OKCODE' '=AEND', 'X' 'SAPLPRGN_TREE' '0300', ' ' 'BDC_OKCODE' '=TAB3', 'X' 'SAPLPRGN_TREE' '0300', ' ' 'BDC_OKCODE' '=BACK', 'X' 'SAPLPRGN_TREE' '0121', ' ' 'BDC_OKCODE' '=BACK'. * Ejecutar transacción 'PFCG' y depura el Rol seleccionado segun los criterios indicados call transaction 'PFCG' using t mode p_mode update 'S'. * Establece la cantidad de filas que salen en pantalla en la lista de usuarios por Rol vc_filas = sy-srows - 10. endif. * Verifica que la cantidad de filas que salen en pantalla sea mayor o igual a 2. if sy-srows >= 13. loop at ti_users into wa_users where borrar = 'X' and causa in s_causa. vn_tabix = sy-tabix. * Lleno un rango con los roles en los cuales se realizo algun proceso de borrado para luego verificar * la integridad de los registros que no se deben borrar. r_agrnam-sign = 'I'. r_agrnam-option = 'EQ'. r_agrnam-low = wa_users-agr_name. collect r_agrnam. clear t. refresh t. if wa_users-agr_name <> wa_reply-agr_name. perform batch_insdata(zmiscl) tables t using : 'X' 'SAPLPRGN_TREE' '0121', ' ' 'AGR_NAME_NEU' wa_users-agr_name, ' ' 'BDC_OKCODE' '=AEND', 'X' 'SAPLPRGN_TREE' '0300', ' ' 'BDC_OKCODE' '=TAB3'. clear: vc_row, wa_reply. loop at ti_reply into wa_reply where agr_name = wa_users-agr_name. vc_row = vc_row + 1. if vc_row >= vc_filas. vc_row = '002'. perform batch_insdata(zmiscl) tables t using : 'X' 'SAPLPRGN_TREE' '0300', ' ' 'BDC_OKCODE' '=P+'. endif. if wa_reply-borrar = 'X'. concatenate 'MARK_COL(' vc_row ')' into vc_mark. perform batch_insdata(zmiscl) tables t using : 'X' 'SAPLPRGN_TREE' '0300', ' ' vc_mark 'X', ' ' 'BDC_OKCODE' '=DBLK'. endif. endloop. perform batch_insdata(zmiscl) tables t using : 'X' 'SAPLPRGN_TREE' '0300', ' ' 'BDC_OKCODE' '=DELL', 'X' 'SAPLPRGN_TREE' '0300', ' ' 'BDC_OKCODE' '=SAVE'. * call transaction 'PFCG' using t mode p_mode update 'S'. |
#10
|
|||
|
|||
¿Y donde estan estas dos funciones?????
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|