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 |
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?.. |
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 |
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.. |
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. |
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. |
Husos Horarios son GMT. La hora en este momento es 20:52:13. |
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web