Con la parola REPORT si intende un programma che accedendo ad archivi SAP (TABLES) produce normalmente l’emissione di un listato comunque complesso.
Digitando il codice transazione SE38 si entra nella videata per la gestione ABAP/4.
Normalmente quando si esegue un REPORT il sistema emette automaticamente una videata di selezione utilizzata dall’utente per far sì che il programma si limiti a considerare solo particolari range di valori. Ad esempio un programma di stampa fornitori normalmente emette in maniera automatica una videata che permette all’utente di limitare la lista ai soli fornitori il cui codice risulta compreso entro particolari limiti. La struttura ed i campi campi richiesti nella videata di selezione dipendono dal data base logico e dalle tabelle a cui il programma accede; il programmatore può aggiungere nuovi criteri di selezione.
Un esempio di videata di selezione potrebbe essere simile alla seguente:
COD. FORNITORE Da:______________ A:_________________
COD. NAZIONE Da ______________ A:_________________
Il listato comprenderà solo i fornitori il cui codice risulta compreso tra gli eventuali limiti indicati ed appartenenti alle nazioni il cui codice è compreso entro gli estremi indicati.
Un REPORT si compone dei seguenti elementi fondamentali:
- TESTO SORGENTE: che contiene le istruzioni in linguaggio ABAP/4 che descrivono la logica del programma;
- ATTRIBUTI: che descrivono alcune caratteristiche generali del REPORT come: il tipo di programma; una sua descrizione; l’applicazione cui il programma appartiene; l’eventuale data base logico sul quale è basato il REPORT stesso; …
- ELEMENTI DI TESTO: utilizzati per inserire dei testi fissi utilizzati dal programma (intestazioni, titoli, testi per la videata di selezione);
- VARIANTI: utilizzate per definire differenti inizializzazioni per i campi previsti sulla videata di selezione.
Il compito più impegnativo del programmatore ABAP/4 è senza dubbio la stesura del testo sorgente perché richiede (come ogni altro linguaggio) l’utilizzo corretto sia della logica di programmazione, sia della sintassi del linguaggio.
Un programma scritto ABAP/4 normalmente si compone di alcune parti fondamentali:
Al momento dell’esecuzione del programma saranno eseguite in sequenza tutte le istruzioni inserite nella parte operativa del programma nell’ambito dell’attivazione di ciascun evento. Questo significa che al verificarsi di un certo evento, saranno eseguite tutte le istruzioni che sono state previste per tale evento in sequenza tra di loro, indipendentemente dalla posizione dove il programmatore ha inserito nel sorgente tale blocco di istruzioni. Ad esempio, tutte le istruzioni inserite nella fase di INITIALIZATION, saranno eseguite prima di qualunque altra istruzione, anche se tale fase fosse stata posta in un altro punto del programma da parte del programmatore. Tuttavia è buona cosa inserire la gestione degli eventi ordinari di un programma SAP nella stessa sequenza con cui di solito si verificano tali eventi, rendendo così più leggibile il programma.
Dal punto di vista della sintassi il programmatore deve tenere presente le seguenti regole:
- Tutte le istruzioni SAP devono terminare con il punto (.);
- All’interno di una istruzione occorre separare le varie parole o i simboli logici o aritmetici da almeno uno spazio;
- I nomi dei campi non possono contenere degli spazi;
- L’editor trasforma tutto in maiuscolo ad esclusione dei caratteri posti tra apici;
- Un asterisco in prima posizione trasforma il seguito della riga in semplice commento che non è interpretato né eseguito;
- SAP opera con vari automatismi che facilitano la vita al programmatore, ma che a volte risultano difficili o impossibili da inibire;
- Prima di utilizzare una istruzione è buona norma leggere il relativo help.
Base della programmazione ABAP/4 è la conoscenza della struttura fisica e logica delle TABLES di SAP e delle relative strutture gerarchiche (Data Base Logici), questa conoscenza si acquisisce utilizzando la transazione SE36 che permette la visualizzazione dei data base logici. Sarà questa pertanto la prima transazione necessaria al programmatore.
Se al momento della definizione degli attributi del programma, specifichiamo che il programma è basato sul data base logico KDF otteniamo due risultati:
- Al momento dell’esecuzione del programma sarà presentata la videata di selezione in maniera automatica (il programmatore potrà solo aggiungere ulteriori criteri di selezione, ma non eliminarne);
- Il programma risulta abilitato all’utilizzo delle istruzioni GET di accesso sequenziale alle varie tabelle di un data base. Si possono utilizzare le GET solo in relazione a tabelle appartenenti al data base logico sul quale è basato il programma, per accessi ad altre tabelle di SAP occorre utilizzare altri strumenti di lettura come le SELECT.
Per illustrare la logica di funzionamento della istruzione GET, facciamo riferimento alla struttura del data base logico KDF (Fornitori).
L’istruzione GET ha la seguente logica di funzionamento:

L’istruzione GET LFA1 produce un ciclo automatico di letture sequenziali (cioè secondo il valore della chiave della tabella (campo LFA1-LIFNR)) che comprende tutte le istruzioni che seguono la GET e che pertanto sono eseguite per tutti i records della tabella LFA1. In pratica le istruzioni di cui sopra corrispondono alla seguente struttura di pseudocodifica:

produce un ciclo di lettura sequenziale della tabella LFA1; per ciascun record della tabella LFA1 è eseguito un ciclo di lettura relativo a tutti i record della tabella LFBK che sono “figli” del record di LFA1 appena letto.
In termini di pseudocodifica la sequenza di cui sopra è rappresentata dalla seguente struttura elaborativi:

Tramite l’istruzione GET è possibile anche accedere direttamente a tabelle che non si trovano al vertice di un DB logico ma a livelli sottostanti senza dover effettuare la GET delle tabelle poste ai livelli superiori. In tale caso il programma, dopo una lettura di una tabella al livello N, ha a disposizione anche tutti i record degli N-1 livelli che gerarchicamente si trovano ai livelli superiori.
Ad esempio, effettuando una GET LFC1 il programma ha a disposizione anche il record di LFB1 “padre” del record LFC1 appena letto, inoltre sono anche disponibili tutti i campi del record di LFA1 “padre” della tabella LFB1. Non è quindi necessaria una lettura delle tabelle gerarchicamente superiori a quella della quale è effettuata la GET. Si noti che una struttura come la seguente:

genera un ciclo di lettura che interessa tutti i record della tabella LFBK presenti sul data base in ordine di chiave senza interruzione di sorta al cambio di livello superiore. Ciò significa che il sistema non si accorge se nello scorrere i record di LFBK passa da un fornitore al successivo del data base. Per ovviare a tale inconveniente è possibile utilizzare la GET LATE nella forma seguente:

Le istruzioni: ISTRUZIONE6. e ISTRUZIONE7. sono eseguite solo dopo la lettura dell’ultimo record di LFBK tra tutti quelli che sono figli dello stesso record di LFA1, in pratica sono eseguite al cambio del codice fornitore.
GENERAZIONE CICLI
L’istruzione GET genera un ciclo automatico sul data base, tuttavia esistono anche altre possibilità fornite da ABAP/4 per la creazione di cicli. Brevemente:
LOOP
Istruzioni
ENDLOOP.
Le istruzioni comprese tra LOOP e ENDLOOP sono eseguite per ogni record presente nell’archivio estratto (LOOP semplice) oppure sulla tabella sulla quale è effettuato il ciclo (LOOP AT tabella).
DO…
Istruzioni
ENDDO.
Le istruzioni comprese tra DO e ENDDO sono eseguite fino a quando il programma incontra una istruzione che lo obbliga ad abbandonare il ciclo (EXIT) oppure fino al raggiungimento del numero di iterazioni previste.
WHILE…(condizione)
Istruzioni
ENDWHILE.
Le istruzioni comprese tra WHILE e ENDWHILE sono eseguite fino al momento in cui la condizione che segue WHILE diventa falsa.
SELECT FROM dbtab….
Istruzioni
ENDSELECT.
Le istruzioni comprese tra SELECT e ENDSELECT sono eseguite per tutti i record della tabella dbtab trovati sul data base.
Per ulteriori approfondimenti si rimanda all’uso dell’help in linea fornito da SAP. |