MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 02/06/08, 20:30:16
Leandro Scaiano Leandro Scaiano is offline
Senior Member
 
Fecha de Ingreso: nov 2006
Mensajes: 151
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...
Responder Con Cita
  #2  
Viejo 02/06/08, 23:15:27
isratol isratol is offline
Member
 
Fecha de Ingreso: jul 2007
Mensajes: 63
Revisa las funciones que usas para crear el archivo, hay algunas que no soportan el proceso de fondo.

Saludos.
__________________
Israel Toledo
Responder Con Cita
  #3  
Viejo 03/06/08, 07:50:17
bisonye bisonye is offline
Senior Member
 
Fecha de Ingreso: ago 2006
Mensajes: 635
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
Responder Con Cita
  #4  
Viejo 04/08/08, 17:23:20
nasly alexandra correa nasly alexandra correa is offline
Junior Member
 
Fecha de Ingreso: nov 2007
Mensajes: 7
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.
Responder Con Cita
  #5  
Viejo 04/08/08, 19:26:32
sconoredhot sconoredhot is offline
Senior Member
 
Fecha de Ingreso: feb 2008
Localización: Argentina, Rosario
Mensajes: 341
Te aconsejaria que no busques funciones y lo hagas directamente con open dataset...close dataset.
__________________
Sebas

Desarrollador ABAP.
Responder Con Cita
  #6  
Viejo 05/08/08, 06:42:04
bisonye bisonye is offline
Senior Member
 
Fecha de Ingreso: ago 2006
Mensajes: 635
Revisa las excepciones de las funciones. Si tienen una excepción NO_BATCH no puede ejecutarse en fondo.

Saludos
Responder Con Cita
  #7  
Viejo 11/08/08, 22:14:53
nasly alexandra correa nasly alexandra correa is offline
Junior Member
 
Fecha de Ingreso: nov 2007
Mensajes: 7
Resulta que ya mire las transacciones y ninguna de las dos maneja en las excepciones el NO_BATCH. Que hacer? ...
Responder Con Cita
  #8  
Viejo 12/08/08, 06:47:29
bisonye bisonye is offline
Senior Member
 
Fecha de Ingreso: ago 2006
Mensajes: 635
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
Responder Con Cita
  #9  
Viejo 21/08/08, 20:23:05
nasly alexandra correa nasly alexandra correa is offline
Junior Member
 
Fecha de Ingreso: nov 2007
Mensajes: 7
Wink

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'.
Responder Con Cita
  #10  
Viejo 22/08/08, 06:09:51
bisonye bisonye is offline
Senior Member
 
Fecha de Ingreso: ago 2006
Mensajes: 635
¿Y donde estan estas dos funciones?????
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 06:08:29.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web