Consulta sobre loop a una tabla

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • cosagaucha
    Member
    • ago
    • 64

    #1

    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
  • mysmb2
    Senior Member
    • ene
    • 406

    #2
    hola
    podes usar un contador dentro del loop o bien verificar la variable sy-index

    saludos
    Sebastián Chiavia
    http://www.programacionabap.com.ar

    Comentario

    • cosagaucha
      Member
      • ago
      • 64

      #3
      Originalmente publicado por mysmb2
      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?..

      Comentario

      • mysmb2
        Senior Member
        • ene
        • 406

        #4
        para determinar cuantos registros tiene una tabla interna usa
        DESCRIBE TABLE i_tab LINES lineas.

        Saludos!
        Sebastián Chiavia
        http://www.programacionabap.com.ar

        Comentario

        • cosagaucha
          Member
          • ago
          • 64

          #5
          Originalmente publicado por mysmb2
          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

          Comentario

          • mysmb2
            Senior Member
            • ene
            • 406

            #6
            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
            http://www.programacionabap.com.ar

            Comentario

            • cosagaucha
              Member
              • ago
              • 64

              #7
              Originalmente publicado por mysmb2
              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..

              Comentario

              • Fabian leonardo velasquez
                Member
                • sep
                • 62

                #8
                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

                Comentario

                • Chan
                  Member
                  • jul
                  • 70

                  #9
                  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.

                  Comentario

                  Trabajando...