Normalmente un REPORT si compone di varie fasi di elaborazione detti eventi, una di esse di solito è la fase in cui il programma provvede ad estrarre dagli archivi SAP tutte le informazioni necessarie all’ottenimento del listato richiesto. Tali informazioni possono essere strutturate come un archivio sequenziale di servizio del quale occorre stabilire il tracciato record. L’archivio sequenziale di servizio è chiamato “estratto” perché l’istruzione EXTRACT produce la scrittura di un singolo record sull’archivio stesso.
Nella prima fase (compresa tra la START-OF-SELECTION e END-OF-SELECTION) sarà creato l’estratto; nelle fasi successive si provvederà a rileggere l’estratto al fine di ottenere la stampa richiesta. L’estratto può essere letto più volte tramite un ciclo del tipo LOOP – ENDLOOP e può essere ordinato tramite l’istruzione SORT. Conviene inserire direttamente nell’estratto tutte le informazioni richieste in stampa.
Definizione dell’estratto
Per definire la presenza di un estratto ed il relativo tracciato record si utilizzano le seguenti istruzioni:
FIELD-GROUPS: HEADER, DATI
INSERT: LFA1-NAME1 LFA1-LIFNR INTO HEADER.
INSERT: LFA1-ORT01 LFA1-STRAS INTO DATI.
Con le istruzioni precedenti è definito un archivio “estratto” il cui tracciato record è composto da due parti fondamentali:
HEADER che rappresenta il primo “pezzo” di ciascun record
DATI che contiene la parte successiva di ciascun record
Normalmente conviene inserire nell’HEADER tutti i campi per i quali si intende effettuare il successivo ordinamento di stampa.
Con l’istruzione:
EXTRACT DATI.
Si ottiene la scrittura di un record di estratto che andrà ad accodarsi a quelli inseriti fino a quel momento.
Se ad esempio il programma prevedesse le seguenti istruzioni:

Otterremmo un archivio estratto contenente un record per ogni fornitore (cioè per ogni record) memorizzato nella tabella LFA1.
Una volta completato il riempimento dell’estratto, è possibile ordinarlo secondo i criteri richiesti, e rileggerlo sequenzialmente una o più volte secondo le esigenze del programma utilizzando le istruzioni:
SORT per effettuare l’ordinamento dell’estratto
LOOP – ENDLOOP per leggere sequenzialmente l’estratto.
Nell’esempio indicato, volendo effettuare una stampa in ordine alfabetico dei fornitori, dopo la fase di selezione dati, sarà necessario inserire le seguenti istruzioni:
SORT. Ordinamento estratto secondo campi dell’HEADER
LOOP.
WRITE:\ LFA1-NAME1, LAF1-LIFNR, LFA1-ORT01, LFA1-STRAS
ENDLOOP.
Le istruzioni comprese tra LOOP. e ENDLOOP. sono eseguite per ogni record dell’archivio estratto come se dopo l’istruzione LOOP fosse inserita una lettura sequenziale dell’estratto.
Si noti che dopo la fase di selezione, i campi LFA1-NAME1, LFA1-LIFNR, LFA1-ORT01, LFA1-STRAS sono interpretati come campi dell’estratto e non come quelli dell’ultimo record della tabella LFA1 letto durante la fase di selezione.
Per evitare confusione tra differenti campi aventi il medesimo nome, si consiglia talvolta di attribuire ai campi dell’estratto un nome diverso da quello presente nelle tabelle SAP da cui tali campi sono selezionati. Nel caso precedente si potrebbe ad esempio operare come segue:

Volendo successivamente anche una stampa ordinata per codice fornitore è sufficiente aggiungere anche le seguenti istruzioni:

Operazioni interne al LOOP sull’estratto
All’interno di un loop è possibile inserire delle istruzioni che devono essere eseguite:
- per ogni record di estratto;
- solo al verificarsi di particolari eventi.
Ad esempio:

Per ulteriori approfondimenti si rimanda all’uso dell’help in linea fornito da SAP. |