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 10/08/10, 13:28:33
cosagaucha cosagaucha is offline
Member
 
Fecha de Ingreso: ago 2006
Mensajes: 64
Unhappy Consulta sobre loop a una tabla

gente, es una pavada mi consulta, pero no me doy cuenta.. -es martes y estoy quemado...-

tengo una tabla interna con datos de cabecera y detalles -tabla para BI para la FB01, y me han pedido ahora, que sobre el programa ya creado, lo modifique y contabilice los detalles, y cuando sean mayores a 6, no procese esa cabecera y esos registros de detalle..

El en loop ya esta la logica, y cuando el wa_tabla-pos = 1, hago un perform cabecera, y si es igual a 2, hago el perform detalle..

El tema es, como hago para contarlos y no procesarlos si son mas de 6 ?? Ya que en cada llamado al perform detalle, llama al bdc_dympro y bdc_field.. y entonces, por mas que sean mas de 6, ya la tabla que haria la BI, ya tendria los datos cargados..

Si alguien me puede tirar una idea.. bienvenido sea!
GRACIAS!
CG
Responder Con Cita
  #2  
Viejo 10/08/10, 13:45:12
Avatar de mysmb2
mysmb2 mysmb2 is offline
Senior Member
 
Fecha de Ingreso: ene 2007
Localización: Cordoba
Mensajes: 406
hola
podes usar un contador dentro del loop o bien verificar la variable sy-index

saludos
__________________
Sebastián Chiavia
Responder Con Cita
  #3  
Viejo 10/08/10, 13:56:11
cosagaucha cosagaucha is offline
Member
 
Fecha de Ingreso: ago 2006
Mensajes: 64

claro, esa es la idea -la del contador- pero mi pregunta va al hecho de que por cada pasada del bucle, ya estoy llamando a llenar la BI, y el tema es que ANTES de hacer el llamado a la BI, deberia saber -como?- si son 6 o mas los registros..

No se si me explico bien..

o diciendo mejor.. como puedo hacer para saber cada vez que estoy en el registro cabecera, cuantos detalles tiene dicha cabecera? Hago una vez mas la salvedad de que en la misma tabla que estoy haciendo el loop, estan los registros de cabecera Y DE detalle..

un loop anidado, a la misma tabla que el loop superior.. no pinchara el proceso?..
Responder Con Cita
  #4  
Viejo 10/08/10, 14:20:25
Avatar de mysmb2
mysmb2 mysmb2 is offline
Senior Member
 
Fecha de Ingreso: ene 2007
Localización: Cordoba
Mensajes: 406
para determinar cuantos registros tiene una tabla interna usa
DESCRIBE TABLE i_tab LINES lineas.

Saludos!
__________________
Sebastián Chiavia
Responder Con Cita
  #5  
Viejo 10/08/10, 14:34:18
cosagaucha cosagaucha is offline
Member
 
Fecha de Ingreso: ago 2006
Mensajes: 64

lo sé, pero no me sirve, ya que necesito sumar todos los '2' de cada cabecera, no los registros totales de la tabla.. ¿¿??

mi tabla comienza con el campo posicion, que me determina si el registro es cabecera o detalle, algo asi:

1
2
1
2
2
2
1
2
2
2
2
1
2
1
2
2
Responder Con Cita
  #6  
Viejo 10/08/10, 14:44:51
Avatar de mysmb2
mysmb2 mysmb2 is offline
Senior Member
 
Fecha de Ingreso: ene 2007
Localización: Cordoba
Mensajes: 406
en ese caso tenes que hacer lo siguiente
i_tab_aux[] = i_tab[]


delete i_tab_aux[] where campo_posicion not eq '2'.
DESCRIBE TABLE i_tab_aux LINES lineas.

espero te sirva
saludos
__________________
Sebastián Chiavia
Responder Con Cita
  #7  
Viejo 10/08/10, 14:50:56
cosagaucha cosagaucha is offline
Member
 
Fecha de Ingreso: ago 2006
Mensajes: 64

probe algo similar, pero no funciona, ya que borraria todas las cabeceras, y me "describiria" todos los detalles, sean O NO de esa cabecera..
Responder Con Cita
  #8  
Viejo 10/08/10, 17:01:52
Avatar de Fabian leonardo velasquez
Fabian leonardo velasquez Fabian leonardo velasquez is offline
Member
 
Fecha de Ingreso: sep 2007
Localización: Facatativa
Mensajes: 62
Consultas sobre loop

Buen dia para trabajara con los loop puedes hacerlo haciendo uso de algunas herramientas complementarias para esta sentencia

puedes hacer algo asi
sem = 0.
Loop at ti_tabla
at new pos. "( este pos es un campo que esta en la tabla a la que le haces el loop)
if pos = 2.
sum = sum + 1.
else.
clear sum.
endat.
endloop.
__________________
Cordialmente
Fabián Leonardo Velásquez P.
Consultor SAP ABAP
Bogota - Colombia
Responder Con Cita
  #9  
Viejo 10/08/10, 21:58:40
Chan Chan is offline
Member
 
Fecha de Ingreso: jul 2010
Mensajes: 70
A ver si te he entendido, pero una opción seria la siguiente:

Supongamos ti_tabla tiene el campo tipo (1=Cabecera;2=detalle)

clear registros_detalle.
Loop at ti_tabla.
at new tipo.
clear registros_detalle.
clear ti_tabla_aux.
refresh ti_tabla_aux.
endat.

registros_detalle = registros_detalle + 1.
move ti_tabla to ti_tabla_aux.
append ti_tabla_aux.

at end tipo.
if registros_detalle not > 6.
loop at ti_tabla_aux.
<y aqui haces tu batch_input>
endloop.
endif.

endloop.

suerte.
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 16:54:55.


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