Sei sulla pagina 1di 17

SAP/ABAP4 - Istruzioni per l’uso

Definizioni:
Cosa sono SAP e ABAP? SAP è un motore di database? ABAP è un linguaggio di
programmazione? A cosa serve principalmente?

Risposta:

SAP è una soluzione ERP completa e Abap è un linguaggio di programmazione


utilizzato nello sviluppo di moduli SAP. Il modulo SAP è configurato con diversi
database, come ms sql server, Oracle ecc. La maggior parte delle grandi aziende
acquista il modulo SAP e personalizza questi moduli in base a requisiti specifici. La
piattaforma è anche conosciuta come SAP R/3 (o qualche altra versione come R/2) per
distinguerla dal venditore stesso. ABAP è un linguaggio di programmazione orientato
agli oggetti, che è completamente retrocompatibile con le versioni precedenti che
assomigliano più a COBOL. Mentre il linguaggio è stato modernizzato ed è orientato agli
oggetti, molti sviluppatori si attengono alla sintassi simile a COBOL.

Ci sono alcuni moduli funzionali che quasi tutte le realtà commerciali usano
indipendentemente dal loro settore specifico:

HR: Risorse umane | PM: Project Management | FI: finanziario | CO: controllori

MM: gestione dei material | SD: vendite e distribuzione | PP: pianificazione della
produzione |

MDM: Master Data Management (che incapsula i dati per cliente/fornitore/ materiale
ecc.)

Cosa è l’HANA?

E’ un RDBMS in memoria. Un altro strumento/prodotto di SAP, si potrebbe dire, e il suo


obiettivo primario è quello di facilitare “analisi". Il modo in cui è progettato, offre
un'elevata compressione (archiviazione basata su colonne) e quindi viene utilizzato
principalmente per le operazioni "READ", motivo per cui è associato a "analisi".

SAP e HANA insieme riassumono la complessità sottostante delle query di accesso al


database e dell'interfaccia utente (sviluppata in java), insieme, per rendere l'esperienza
utente valida per il sistema di gestione (utilizzata principalmente nell'analisi e in modo
che l'attenzione principale rimanga nell'analisi). Questo strumento / prodotto molto
specifico è detto "tecnologia", in quanto ha un proprio ambiente (terminologie, ecc.).
ABAP facilita l'ulteriore sviluppo di SAP-ERP.
ABAP: Sintassi per la creazione di una tabella interna dalla tabella di database
esistente.

L’istruzione per creare una *tabella interna da una tabella di database è la seguente:

data: it_mara type table of mara.

*MARA è una tabella trasparente il che significa che funziona allo stesso tempo del tipo
di struttura MARA. Questo è il modo in cui funziona SAP.

La tabella DDIC SAP ( tabella trasparente, tabella raggruppata, tabella cluster) funziona
come una struttura . La *tabella interna è un elenco di valori di struttura (= tabella DDIC.)

Nell’esempio che segue di tabella SAP DDIC MARA (Dati materiali generali), possiamo
definirlo come una tabella interna simile:

data: it_mara type STANDARD table of mara. (che crea una tabella interna STANDARD)

data: it_mara type SORTED table of mara. (che crea una tabella interna SORTED)

Qual è il significato del termine "Object Class" in ABAP? Cosa significa “Oggetto di
autorizzazione?” Poiché gli oggetti vengono creati in fase di runtime, come possiamo
creare un oggetto in fase di progettazione?

In SAP, si sente molto spesso il termine "class" e "object". Non significano nulla come i
concetti di OO. Una classe di autorizzazione è solo una descrizione generale di "cosa è
permesso fare" mentre un oggetto di autorizzazione è una descrizione più
particolareggiata di ciò. Gli oggetti di autorizzazione possono essere utilizzati in modo
programmatico per verificare se un utente ha il diritto di "x" e come sviluppatore, è
possibile dimenticare di controllarli, il che può causare problemi di sicurezza.

Quando utilizzare le tabelle interne?

L'uso delle tabelle interne aumenta le prestazioni del programma. Le tabelle interne
dovrebbero essere utilizzate per l'elaborazione dei dati, come liste o array in altre lingue
(c #, java ecc.). Dal punto di vista delle prestazioni e del carico di sistema, è preferibile
caricare prima tutti i dati necessari in una tabella interna, quindi elaborare quella tabella
interna anziché caricare singoli record dal database. Per quanto riguarda l'istruzione
select-endselect, l'istruzione in realtà non crea singole query di database per ogni riga.
L'interfaccia di database del server delle applicazioni ottimizza la query, trasferendo le
righe in blocco sul server delle applicazioni. Da lì i record vengono trasferiti al report
abap uno alla volta (perché nel report c'è solo l'area di lavoro per memorizzare una
singola riga), che ha un impatto significativo sulle prestazioni, in particolare per le query
con set di risultati di grandi dimensioni. Una selezione in una tabella interna può
trasportare tutte le righe direttamente nel report abap.

Esempi pratici: Tabella Interna

In questo caso “yyy" è una struttura di tipo PPP e può essere aggiunta a xxx poiché
sono dello stesso tipo:

DATA: xxx TYPE STANDARD TABLE OF PPP, “produces table with lines of type ppp"

yyy type PPP. "produces flat structure of type ppp.”

——————————————————————————————————————

Possiamo dichiarare come tipo di tabella come mostrato di seguito:

——————————————————————————————————————

E se voglio memorizzare per attributo specifico di tabella, posso usare il tipo di struttura:

——————————————————————————————————————

Una tabella è più o meno come un elenco di elementi. In questo esempio, una struttura
rappresenta uno studente. Una tabella potrebbe essere utilizzata per memorizzare più
studenti. La creazione di un TYPE è il metodo più recente e consigliato da utilizzare.

Un riferimento dati ( TYPE REF TO DATA), che è un'aggiunta relativamente recente a


ABAP, consente di creare un'istanza di dati in fase di esecuzione senza conoscere
preventivamente il tipo utilizzando l'istruzione 'CREATE DATA'.

——————————————————————————————————————

Quando crei un DATA, diciamo per una tabella interna, puoi avere la tabella interna con
la riga di intestazione: (vecchio metodo)
Quando si usa TYPE per dichiarare una tabella interna, è possibile utilizzare
contemporaneamente la sua intestazione e il suo contenuto:

Ad esempio: puoi usare questo TYPE per creare tutte le tabelle interne che vuoi come:

TYPE-POOL è un raggruppamento di tipi definiti localmente in modo da poter utilizzare


questi tipi senza duplicazione in molti moduli. Un esempio di a TYPE-POOL è il gruppo
di tipi ABAP. Vai alla transazione SE11e seleziona Tipo di gruppo e digita ABAP lì, quindi
premi F7.

Come ottenere il conteggio delle righe della tabella interna in Abap?

È possibile utilizzare la seguente funzione:

Dopo la chiamata, la variabile contiene il numero di righe della tabella interna.

Percorso per accedere alle GUI disponibili:


Come ottenere il conteggio delle righe della tabella del database?

La variabile di sistema “SY-DBCNT” ci fornisce il numero di righe selezionate, ma solo


dopo che la selezione finisce. L'alternativa a “SELECT-ENDSELECT” consiste nel
selezionare tutte le righe contemporaneamente con “SELECT INTO TABLE” in una
tabella interna (a condizione che non si selezioni troppo in una volta).

Questo selezionerà tutto da quella tabella in una volta nella tabella interna. Quindi quello
che potresti fare è dichiarare una tabella interna con tutti i campi attualmente nella tua
dichiarazione “INTO” e quindi specificare “INTO TABLE” per la tua tabella interna.

Dopo l'esecuzione di SELECT, SY-DBCNT conterrà il numero di righe selezionate.

Esempio:

Ecco un esempio completo, costruito attorno all'istruzione SELECT:


Somma di righe nella tabella ALV:

Dovresti espandere la tua tabella interna con la colonna "somma". vale a dire:

Istruzione ABAP per ottenere tutti i dati di una tabella di database:

Come faccio a raggruppare le condizioni in un'istruzione SELECT in ABAP?

Voglio aggiungere una condizione a SELECT in un report esistente per escludere il


record se il campo F1 è un determinato valore e il campo F2 è 0 (entrambe le condizioni
devono essere vere per escludere il record).

Crea operazioni matematiche su una tabella raggruppata:


Analisi:

Effettuare il costo totale della posizione (dopo la selezione ovviamente). Quindi, la


tabella verrà raggruppata in base a due campi (MATNR e BUKRS), quindi è necessario
conoscere per ciascun gruppo il costo totale MAX, il costo totale MIN e il costo totale
MEDIO delle posizioni.

Risoluzione:

Per le aggregazioni di tabelle si utilizzano le funzioni AT all'interno di un LOOP perché


risultano molto utili. Si ordinano i campi in base alle dimensioni necessarie e si ordinano
i valori in ordine crescente o decrescente. L'ordine dei campi è molto importante, perché
l'AT cerca le modifiche nel campo specificato e tutti i campi rimasti nella stessa riga.
Quindi gestiamo gruppo per gruppo e aggiungiamo il risultato dell'aggregazione di
gruppo alla tabella dei risultati.
Aggiunta di un nuovo record nella tabella interna in ABAP:

Passa alla tabella interna ed elimina una riga nella tabella interna usando un'istruzione
if: Avendo un internal table it_mseg. In questa tabella, c'è un campo chiamato amnt.
Voglio controllare per ogni riga in it_mseg, se il campo amnt è maggiore 10. Se lo è,
voglio eliminarlo dalla tabella interna.
Comprendere il LOOP:

Esempio pratico (1).

In questo esempio, l'itab della tabella interna ordinata viene riempita con i dati dalla
tabella del database SBOOK utilizzando l'istruzione SELECT. La sequenza delle
colonne nella tabella interna definisce la gerarchia del livello di controllo. Poiché la
chiave della tabella è l'intera riga, la sequenza di ordinamento e la gerarchia del livello di
controllo sono uguali. La sequenza dei blocchi AT-ENDAT all'interno delle istruzioni
LOOP-ENDLOOP è importante.

Il risultato in Output è il seguente:


Utilizzando delle Work Area:

LOOP AT itab INTO wa bedingung.

Il contenuto delle linee “table lines” deve essere convertibile in tipo di dati della work
area di lavoro. In ogni passaggio del ciclo, una table line è copiata nell'area di lavoro.La
fine del LOOP non influisce sull'area di lavoro, ovvero il contenuto di wa è lo stesso
dopo l'istruzione ENDLOOP così come lo era nel passaggio del ciclo finale. Se nessuna
voce della tabella viene elaborata nel ciclo, poiché la tabella è in entrata, o nessuna riga
soddisfa la condizione cond, l'area di lavoro non viene modificata.

Sap - Abap ‘sd_salesdocument_create’:

Esempio (1).

Attualmente sto lavorando alla creazione di un programma personalizzato che richiede


fm ‘sd_salesdocument_create'. L'obiettivo del programma è quello di creare in modo
massiccio un ordine di selezione tramite la transazione se38, a partire da un file .csv
pieno di dettagli.
Operatori di tabella interna in SAP ABAP:

Le operazioni della internal table (it) sono le più importanti per uno sviluppatore ABAP, di
seguito alcune delle operazioni più importanti.

APPEND | INSERT | SORT | DESCRIBE TABLE | READ TABLE WITH KEY | READ
TABLE WITH INDEX | LOOP/ENDLOOP | MODIFY | DELETE | DELETE ADJACENT
DUPLICATES | CLEAR, REFRESH, FREE | APPEND LINES OF | INSERT LINES OF |
MOVE | COLLECT

1) APPEND in SAP/ABAP4:

L'istruzione APPEND viene utilizzata per aggiungere o aggiungere un record dall'area di


lavoro alla tabella interna, il nuovo record verrà aggiunto alla fine della tabella interna.

2) INSERT in SAP/ABAP4:

L'istruzione INSERT viene utilizzata per inserire o aggiungere un record dall'area di


lavoro nella tabella interna nella posizione specificata.

3) SORT in SAP/ABAP4:

L’istruzione SORT viene utilizzata per ordinare i dati di una tabella interna in ordine
crescente o decrescente, per impostazione predefinita ordinerà i dati in ordine
crescente. Inoltre, possiamo ordinare i dati in base ai campi specificati.
4) DESCRIBE TABLE in SAP/ABAP4:

L’ istruzione DESCRIBE TABLE viene utilizzata per contare il numero di record in una
tabella interna.

5) READ TABLE WITH KEY in SAP/ABAP4:

L’istruzione READ TABLE WITH KEY viene utilizzata per leggere un singolo record da
una tabella interna in un'area di lavoro specificata dal nome del campo e dal valore del
campo. BINARY SEARCH è un meccanismo di ricerca che viene utilizzato per leggere
un record dalla tabella interna all'area di lavoro molto velocemente, la funzionalità della
ricerca binaria divide in parti e ricerche, per i dettagli completi meccanismo di ricerca
binaria in SAP ABAP. La tabella interna deve essere ordinata in ordine crescente prima
di usare la ricerca binaria.

6) READ TABLE WITH INDEX in SAP/ABAP4:

L’istruzione READ TABLE WITH INDEX viene utilizzata per leggere un singolo record da
una tabella interna nell'area di lavoro specificata dall’indice.
8) MODIFY

L’istruzione MODIFY viene utilizzata per modificare uno o più record di tabella interni in
base alle condizioni. TRANSPORTING è una parola chiave che viene utilizzata per
specificare un elenco di campi da modificare anziché tutti i campi.

SY-TABIX è una parola chiave che memorizza il numero indice del record attualmente
elaborato.
9) DELETE in SAP/ABAP4

L’istruzione DELETE viene utilizzata per eliminare singoli o più record da una tabella
interna dall'area di lavoro in base ad alcune condizioni.

10) DELETE DUPLICATES ADJACENT in SAP/ABAP4.

L’istruzione DELETE DUPLICATES ADJACENT viene utilizzata per eliminare i record


duplicati di eliminazione che sono adiacenti l'uno all'altro. Requisito per questo è che la
tabella interna deve essere ordinata in ordine crescente.
11) CLEAR, REFRESH, FREE in SAP/ABAP4.

L’istruzione CLEAR viene utilizzato per cancellare un valore in un'area di lavoro o in una
variabile. REFRESH è usata per cancellare tutti i valori in una tabella interna. FREE è
usato per cancellare (gratuitamente) la memoria di una tabella interna o area di lavoro.
Sappiamo tutti che ogni volta che dichiariamo una tabella interna o area di lavoro, verrà
allocata memoria 8kb.