PDA

Ver la Versión Completa : Consulta sobre loop a una tabla


cosagaucha
10/08/10, 13:28:33
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

mysmb2
10/08/10, 13:45:12
hola
podes usar un contador dentro del loop o bien verificar la variable sy-index

saludos

cosagaucha
10/08/10, 13:56:11
hola
podes usar un contador dentro del loop o bien verificar la variable sy-index

saludos

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?..

mysmb2
10/08/10, 14:20:25
para determinar cuantos registros tiene una tabla interna usa
DESCRIBE TABLE i_tab LINES lineas.

Saludos!

cosagaucha
10/08/10, 14:34:18
para determinar cuantos registros tiene una tabla interna usa
DESCRIBE TABLE i_tab LINES lineas.

Saludos!

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

mysmb2
10/08/10, 14:44:51
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

cosagaucha
10/08/10, 14:50:56
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

probe algo similar, pero no funciona, ya que borraria todas las cabeceras, y me "describiria" todos los detalles, sean O NO de esa cabecera..

Fabian leonardo velasquez
10/08/10, 17:01:52
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.

Chan
10/08/10, 21:58:40
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.