SAP Tabella interna ABAP: crea, leggi, popola, copia ed elimina

Cos'è una tabella interna?

TAVOLO INTERNO vengono utilizzati per ottenere dati da una struttura fissa per l'uso dinamico in ABAP. Ogni riga nella tabella interna ha la stessa struttura di campo. L'utilizzo principale delle tabelle interne è per l'archiviazione e la formattazione dei dati da una tabella di database all'interno di un programma.

Cos'è un'area di lavoro?

Le aree di lavoro sono singole righe di dati. Dovrebbero avere lo stesso formato di qualsiasi tabella interna. Viene utilizzato per elaborare i dati in una tabella interna una riga alla volta.

Differenza tra tavolo interno e area di lavoro?

Una foto dice più di mille parole

Differenza tra tavolo interno e area di lavoro

Tipi di tabelle interne

Esistono due tipi di tabelle interne.

  1. Tavoli interni con linea HEADER
  2. Tabelle interne senza riga HEADER.

Tabelle interne con riga di intestazione

  • Qui il sistema crea automaticamente l'area di lavoro.
  • L'area di lavoro ha lo stesso tipo di dati della tabella interna.
  • Questa area di lavoro è chiamata riga HEADER.
  • È qui che vengono eseguite tutte le modifiche o qualsiasi azione sul contenuto della tabella. Di conseguenza, i record possono essere inseriti direttamente nella tabella o accessibili direttamente dalla tabella interna.

Tabelle interne senza riga di intestazione :

  • Qui non è presente alcuna area di lavoro associata alla tabella.
  • L'area di lavoro deve essere specificata esplicitamente quando dobbiamo accedere a tali tabelle.
  • Pertanto non è possibile accedere direttamente a queste tabelle.

Creazione di tabelle interne

Esistono molti modi per creare una tabella interna. Vediamoli uno per uno-

1.Utilizzando la dichiarazione Type

Creiamo ora una tabella interna itab utilizzando il file Istruzione TIPO.

La sintassi è –

Types : begin of line,

column1 type I,

column2 type I,

end of line.

Esempio:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

L'istruzione TYPES crea una linea di struttura come definito.

Per creare effettivamente una tabella interna itab utilizzare il seguente comando:

Data itab type line occurs 10.

Viene creata una tabella interna itab con la struttura di line. Oltre a dichiarare la struttura di una tabella interna, la clausola OCCURS definisce anche quante voci della tabella vengono mantenute nella memoria principale (in questo caso 10). I record aggiuntivi vengono scritti nell'area di paginazione e possono influire sulle prestazioni

2. Facendo riferimento ad un'altra Tabella

È possibile creare una tabella interna facendo riferimento a una tabella esistente. La tabella esistente potrebbe essere uno standard SAP tavolo, un tavolo Z o un altro tavolo interno.

Sintassi-

Data <f> <type> [with header line].

Esempio-

DATA itab TYPE line OCCURS 10 with header line.

Qui viene creata una tabella interna itab del tipo riga con una riga di intestazione. Tieni presente che "con riga di intestazione" è facoltativo.

3. Facendo riferimento alla Struttura esistente

Sintassi-

Data	<f> LIKE <struct> occurs n [with header line].

Esempio-

DATA itab LIKE sline OCCURS 10.

Qui viene creata una tabella itab avente una struttura uguale a quella di sline

4.Creando una nuova struttura

Creiamo ora una tabella interna con una struttura tutta nostra. Qui la tabella viene creata con una riga di intestazione, per impostazione predefinita,.

Sintassi –

Data : Begin of <f> occurs <n>,

<component declaration>,

.................................,

End of <f>.

Esempio -

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

Viene creata la tabella interna itab

Popolamento di tabelle interne

Ora che abbiamo creato con successo alcune tabelle interne, vediamo come popolarle con alcuni record. Sono disponibili vari metodi per popolare le tabelle

1.Aggiungi dati riga per riga

Il primo metodo disponibile è l'utilizzo dell'istruzione APPEND.

Utilizzando l'istruzione APPEND possiamo aggiungere una riga da un'altra area di lavoro alla tabella interna oppure possiamo aggiungere una riga iniziale alla tabella interna.

Sintassi –

APPEND [<wa> TO / INITIAL LINE TO] <itable>.

Qui l'area di lavoro oppure la riga iniziale viene aggiunta alla tabella interna .

La variabile di sistema SY-TABIX contiene l'indice della riga aggiunta.

Esempio:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

Risultati: ' ' '0'

Righe iniziali aggiunge alla tabella una riga inizializzata con il valore corretto per il suo tipo. Qui, col1 è un carattere e col2 è un numero intero. Quindi APPEND riga iniziale, aggiunge una riga inizializzata rispetto al tipo di dati delle colonne, ovvero spazio per col1 e 0 per col2.

2.Utilizzo dell'istruzione COLLECT

COLLECT è un'altra forma di istruzione utilizzata per popolare le tabelle interne. Generalmente COLLECT viene utilizzato durante l'inserimento di righe in una tabella interna con chiave standard univoca.

Sintassi-

COLLECT [<wa> INTO] <itable>.

In caso di tabelle con riga di intestazione, l'opzione INTO viene omessa. Supponiamo che ci sia già una voce con una chiave uguale a quella che stai tentando di aggiungere, quindi non viene aggiunta una nuova riga alla tabella, ma vengono aggiunti i campi numerici di entrambe le voci ed è presente solo una voce corrispondente alla chiave . Il valore di SY-TABIX viene modificato nella riga della voce originale. Altrimenti COLLECT agisce in modo simile ad APPEND e SY-TABIX contiene l'indice della riga elaborata.

3.Utilizzando l'istruzione INSERT

L'istruzione INSERT aggiunge un'area di riga/lavoro alla tabella interna. È possibile specificare la posizione in cui deve essere aggiunta la nuova riga utilizzando la clausola INDEX con l'istruzione INSERT.

Sintassi

INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].

Ecco, l'area di lavoro o RIGA INIZIALE inserita nella tabella interna all'indice .

Copia di tabelle interne

Il contenuto di una tabella interna può essere copiato in un'altra usando l'istruzione APPEND LINES o INSERT LINES. Un modo più semplice è usare una qualsiasi delle seguenti sintassi.

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

Questi copiano il contenuto di ITAB1 in ITAB2. In caso di tabelle interne con riga di intestazione dobbiamo utilizzare [] per distinguerle dall'area di lavoro. Quindi, per copiare il contenuto delle tabelle interne con la riga di intestazione la sintassi diventa,

itab1[] = itab2[].

Leggi le tabelle interne

Ora abbiamo familiarità con la creazione di tabelle interne e il loro popolamento con i dati. Vedremo ora come utilizzare effettivamente i dati o recuperare i dati dalle tabelle interne.

1. Utilizzo di Loop -Endloop

Uno dei modi per accedere o leggere la tabella interna è utilizzare LOOP-ENDLOOP.

Sintassi

LOOP AT <itable> [INTO <wa>]

...................................

ENDLOOP.

Qui quando dici LOOP AT ITABLE, la tabella interna ITABLE viene letta riga per riga. È possibile accedere ai valori delle colonne per quella riga durante qualsiasi parte della struttura LOOP-ENDLOOP. Il valore di SY-SUBRC è impostato su 0, anche se viene letto un solo record.

2. Utilizzando LEGGI

L'altro metodo per leggere la tabella interna consiste nell'utilizzare l'istruzione READ.

Sintassi-

READ TABLE <itable> [INTO <wa>] INDEX <idx>.

Questa istruzione legge la riga corrente o la riga come specificato dall'indice . Il valore di SY-TABIX è l'indice della riga letta. Se viene trovata una voce con l'indice specificato, SY-SUBRC viene impostato su 0. Se l'indice specificato è inferiore a 0, si verifica un errore di runtime. Se l'indice specificato supera la dimensione della tabella, SY-SUBRC viene impostato su 4.

Eliminazione di tabelle interne

Esistono molti modi per eliminare righe da una tabella interna.

1.Eliminazione di righe in un ciclo.

Questo è il modo più semplice per eliminare le righe.

Sintassi

DELETE <ITABLE>.

Questa istruzione funziona solo all'interno di un ciclo. Cancella la riga corrente. È possibile eliminare le righe in un ciclo in modo condizionale aggiungendo il file Dove la clausola.

2.Eliminazione di righe utilizzando l'indice.

Viene utilizzato per eliminare una riga dalla tabella interna in qualsiasi indice conosciuto.

Sintassi

DELETE <ITABLE> INDEX <IDX>.

La linea con l'indice viene eliminato. L'indice della riga seguente viene decrementato di 1.