Field Groups – Como funcionan ? caso del famoso LOOP.

Los Fields Groups son muy comunes al momento de usar Base de datos lógicas. Por lo tanto seguramente lo veremos mucho en reportes standard de HR y de FI.

Seguramente alguna vez nos hemos cruzado con el famoso “LOOP. … ENDLOOP.” y nos habremos preguntado que es eso.

Como funcionan ?

Los fields groups trabajan de la siguiente manera:

INSERT field1 field2 INTO fg
EXTRACT fg.
SORT BY fg.
LOOP. … ENDLOOP.

INSERT field1 field2 INTO fg : La instrucción INSERT es usado para crear el field grupo de forma dinámica. Algo importante es que solamente variables globales pueden ser insertados en un field group. Así que si estamos dentro de una subrutina no podemos usar una variable declarada en forma local.

EXTRACT fg: Esta instrucción “combina” todos los campos en el field group y los va grabando en forma secuencial.

SORT BY fg: Simplemente ordena el field group.

LOOP AND ENDLOOP: Va recorriendo el field group creado. Se pueden usar cortes de control AT.

LOOP.
  AT ***
……
….
ENDAT.
  AT ***
…..
….
ENDAT.
ENDLOOP. 

Cuando usarlos ?

En simples palabras técnicamente los field groups no están en memoria sino que están en un espacio de paginado. así que deberían ser usado cuando estamos tratando con más de 50.000 registros. Sino no tiene sentido.

Como usarlos ?

Dejo un reporte simple de ejemplo que encontré por la web usando las tablas de de SPFLI típicas en los tutoriales de SAP.

*************************************************************************
*& Report  ZSPFLI                                                       *
*************************************************************************
REPORT  ZSPFLI  LINE-SIZE 132 LINE-COUNT 65(3)
                                             NO STANDARD PAGE HEADING.
TABLES:SPFLI,SCARR, SFLIGHT, SBOOK.
SELECTOPTIONS: MYCARRID FOR SPFLICARRID.

FIELD-GROUPS: HEADER, SPFLI_FG, SFLIGHT_FG, SBOOK_FG.

INSERT:
        SPFLICARRID
        SPFLICONNID
        SFLIGHTFLDATE
        SBOOKBOOKID
       INTO HEADER,

        SPFLICARRID
        SPFLICONNID
        SPFLICITYFROM
        SPFLIAIRPFROM
        SPFLICITYTO
        SPFLIAIRPTO
        SPFLIDEPTIME
        SCARRCARRNAME
      INTO SPFLI_FG,

        SFLIGHTFLDATE
        SFLIGHTSEATSMAX
        SFLIGHTSEATSOCC
        SFLIGHTPRICE
      INTO SFLIGHT_FG,

        SBOOKBOOKID
        SBOOKCUSTOMID
        SBOOKCUSTTYPE
        SBOOKSMOKER
       INTO SBOOK_FG.

SELECT * FROM SPFLI WHERE CARRID IN MYCARRID.
  SELECT SINGLE * FROM SCARR WHERE CARRID = SPFLICARRID.
  EXTRACT SPFLI_FG.

  SELECT * FROM SFLIGHT
   WHERE CARRID = SPFLICARRID AND  CONNID = SPFLICONNID.
    EXTRACT SFLIGHT_FG.

    SELECT * FROM SBOOK
           WHERE CARRID = SFLIGHTCARRID AND
           CONNID = SFLIGHTCONNID AND FLDATE = SFLIGHTFLDATE.
      EXTRACT SBOOK_FG.
      CLEAR SBOOK.
    ENDSELECT.
    CLEAR SFLIGHT.
  ENDSELECT.
  CLEAR SPFLI.
ENDSELECT.

SORT.
LOOP.
  AT SPFLI_FG.
    FORMAT COLOR COL_HEADING.
    WRITE: / SCARRCARRNAME,
             SPFLICONNID, SPFLICITYFROM,
             SPFLIAIRPFROM, SPFLICITYTO, SPFLIAIRPTO, SPFLIDEPTIME.
    FORMAT COLOR OFF.
  ENDAT.

  AT SFLIGHT_FG.
    WRITE: /15 SFLIGHTFLDATE, SFLIGHTPRICE, SFLIGHTSEATSMAX,
               SFLIGHTSEATSOCC.
  ENDAT.

  AT SBOOK_FG.
    WRITE: /30 SBOOKBOOKID, SBOOKCUSTOMID,
                 SBOOKCUSTTYPE, SBOOKSMOKER.
  ENDAT.
ENDLOOP.

************************************************************************
*&      END OF REPORT                                                  *
************************************************************************

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: