Aserei S.r.l.

home

AZIENDA
sede

ERP
Introduzione agli ERP
Corso SAP

GESTIONE delle RETI
CISCO
VPN

LINUX
Installare Vmware su Suse Linux

VBA Excel-Powerpoint
Macro crea grafico "Walk"

< 10 11 12 13 14 15 16 17 18 19 > indice
CORSO SAP R/3 - PROGRAMMAZIONE ABAP/4

Tipologia di Programmi in SAP

REPORT – LE TABELLE INTERNE

Un programma ABAP/4 spesso ha la necessità di memorizzare informazioni strutturate in records uguali tra di loro e necessari esclusivamente durante l’esecuzione del programma. In pratica si tratta di veri e propri files che sono visti come archivi a indici (o sequenziali) interni al programma e che sono eliminati al termine dell’esecuzione dello stesso. A tale scopo ABAP/4 prevede le cosiddette tabelle interne (chiamate itab nell’help in linea). La definizione di una tabella interna è effettuata secondo l’esempio seguente che prevede una tabella che memorizzi il numero dei fornitori per ciascuna nazione presente nel sistema:

La clausola OCCURS 10 fa in modo che durante l’esecuzione del programma sia prevista in memoria la possibilità di memorizzare fino a 10 record aventi ciascuno il tracciato indicato. Gli eventuali record ulteriori (oltre al decimo e senza alcun limite superiore) saranno memorizzati e trattati come un file esterno anche se tutto ciò risulta completamente trasparente al programmatore. Conviene comunque fissare un numero di record adeguato al fine di ottimizzare le prestazioni del programma.

Per inserire un record nella tabella TAB occorre valorizzare i campi del tracciato record e successivamente eseguire una delle due seguenti istruzioni:

1. APPEND itab

Con questa istruzione è accodato un nuovo record alla tabella; il nuovo record è posto dopo quelli già presenti indipendentemente dal valore attribuito alla parte iniziale non numerica (NAZIONE); il nuovo inserimento è effettuato anche se esiste già in tabella un record avente lo stesso valore nella parte iniziale non numerica. Ad esempio le seguenti istruzioni:

2. COLLECT itab

L’istruzione COLLECT effettua una ricerca sulla tabella per verificare l’esistenza di un record avente il medesimo valore nella sua parte iniziale non numerica. Se tale record non esiste, allora viene accodato un nuovo record alla tabella (esattamente come con la APPEND) se invece il record esiste già, allora la COLLECT incrementa la parte numerica di tale record.

Se eseguiamo le seguenti istruzioni sulla tabella TAB precedentemente creata:

otteniamo l’inserimento di un nuovo record contenente FR 10 con la prima COLLECT e l’incremento della parte numerica di tale record (NUMERO = 10 + 11 = 21) con la seconda COLLECT. Al termine la tabella assumerà il seguente aspetto:

Successivamente una tabella interna può essere ordinata con il comando SORT e letta sequenzialmente con le istruzioni LOOP e ENDLOOP. In particolare tali istruzioni assumono una forma leggermente diversa rispetto a quella utilizzata durante l’elaborazione dell’estratto:

All’interno del LOOP su una tabella interna restano valide tutte le istruzioni del tipo AT (END OF…, FIRST, LAST, NEW…, ENDAT) viste durante l’elaborazione dell’archivio ESTRATTO. Inoltre, è possibile trattare una tabella interna anche come archivio a indici avente come chiave il numero del record tramite istruzioni del tipo:

READ itab INDEX num

Dove itab è una tabella interna e num è un campo numerico che contiene il numero progressivo del record da leggere.

DELETE itab INDEX num

Elimina il record num-esimo della tabella.

MODIFY itab INDEX num

Che varia il contenuto del record num-esimo della tabella interna. L’istruzione MODIFY può essere utilizzata anche durante una elaborazione sequenziale (LOOP AT itab… ENDLOOP), in tale caso è modificato il record corrente e non è necessario utilizzare la clausola INDEX. Nell’esempio seguente si ottiene ad esempio la modifica di tutti i record di una tabella interna impostando a 100 il campo NUMERO.

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


indietro  
indice
  avanti