Anuncio

Colapsar
No hay anuncio todavía.

Procesando nivles de control AT

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Procesando nivles de control AT

    Estoy revisando algunos ejemplos dde AT End, AT New etc y no me queda muy clar como operan en el siguiente programa ¿me pueden apoyar a entender como funcionan dentro del loop.

    REPORT DEMO.

    DATA: T1(4), T2 TYPE I.

    FIELD-GROUPS: HEADER.

    INSERT T2 T1 INTO HEADER.

    T1 ='AABB'. T2 = 1. EXTRACT HEADER.
    T1 ='BBCC'. T2 = 2. EXTRACT HEADER.
    T1 ='AAAA'. T2 = 2. EXTRACT HEADER.
    T1 ='AABB'. T2 = 1. EXTRACT HEADER.
    T1 ='BBBB'. T2 = 2. EXTRACT HEADER.
    T1 ='BBCC'. T2 = 2. EXTRACT HEADER.
    T1 ='AAAA'. T2 = 1. EXTRACT HEADER.
    T1 ='BBBB'. T2 = 1. EXTRACT HEADER.
    T1 ='AAAA'. T2 = 3. EXTRACT HEADER.
    T1 ='AABB'. T2 = 1. EXTRACT HEADER.

    SORT BY T1 T2.

    LOOP.

    AT FIRST.
    WRITE 'Start of LOOP'.
    ULINE.
    ENDAT.

    AT NEW T1.
    WRITE / ' New T1:'.
    ENDAT.

    AT NEW T2.
    WRITE / ' New T2:'.
    ENDAT.

    WRITE: /14 T1, T2.

    AT END OF T2.
    WRITE / 'End of T2'.
    ENDAT.

    AT END OF T1.
    WRITE / 'End of T1'.
    ENDAT.

    AT LAST.
    ULINE.
    ENDAT.

    ENDLOOP.


    Les anexo la imagen que me indica la salida esperada, pero no le encuentro lógica
    Archivos Adjuntos

  • #2
    Yo te puedo intentar contestar:

    Tal y como tienes el codigo, los valores de la tabla se rellenan de la siguiente forma:
    T1, T2
    'AAAA', 1
    'AAAA', 2
    'AAAA', 3
    'AABB', 1
    'AABB', 1
    'AABB', 1
    'BBBB', 1
    'BBBB', 2
    'BBCC', 2
    'BBCC', 2

    El evento AT NEW se ejecuta cada vez que en el Loop aparece un nuevo registro para los primeros campos hasta el seleccionado, por tanto se va a ejecutar 4 veces para el campo T1 y 7 veces para el campo T2.
    El evento AT END se ejecuta cada vez que en el Loop se llega al último registro de los primeros campos hasta el seleccionado, por tanto se ejecuta las mismas veces que el evento AT NEW solo que en el último registro del bloque.
    SAP solo es el medio a través del cual se expresa nuestra imaginación.

    Comentario


    • #3
      hola, una pregunta con respecto al orden en los at new 'x' y at end of 'x'.

      siempre que se tenga MAS DE 1 at new 'x' -con su "correspondiente" at end of 'x', siempre se deben anidar

      at new x
      at new x1

      at end of x1
      at end of x

      de esta forma? o DEPENDE de la logica que se pida hacer??

      Puede ser que asi tambien sea valido?

      at new x
      at end of x

      at new x1
      at end of x1

      gracias por la ayuda!

      Comentario


      • #4
        Eso depende de la lógica del programa que tengas que realizar.
        Hay veces que es fiable anidar los AT NEW y AT END y hay otras veces que es mejor no anidarlos.
        SAP solo es el medio a través del cual se expresa nuestra imaginación.

        Comentario

        Trabajando...
        X