Tecniche & Materiali
ABAP: sintassi, tipi di dati e parole chiave
In ABAP ogni istruzione inizia con una parola chiave e termina con un punto: la sintassi è rigida, il codice non è sensibile alle maiuscole e le righe possono essere spezzate senza caratteri di continuazione. Le istruzioni di base si imparano in poche ore, ma vanno scritte rispettando l'ordine dei blocchi, perché il compilatore non perdona una parola fuori posto. Chi cerca un riferimento ordinato su sintassi ABAP, istruzioni ABAP, basi ABAP trova le tre voci trattate come capitoli separati, con esempi di codice e l'indice dei comandi.
Come si scrive la sintassi e le istruzioni ABAP di base?
Un programma ABAP è una sequenza di istruzioni separate dal punto. La prima riga utile è in genere REPORT ztest_prova. per un programma eseguibile, oppure FUNCTION z_funzione. per un modulo funzione. Da lì in poi valgono tre regole pratiche.
La prima: la parola chiave apre l'istruzione e gli operandi seguono separati da spazi. WRITE 'ciao'. scrive a video la stringa; DATA lv_num TYPE i. dichiara una variabile intera. Non servono parentesi né punti e virgola, e l'indentazione è solo una convenzione di lettura, non un requisito del compilatore.
La seconda: le strutture di controllo hanno un inizio e una fine espliciti. IF ... ENDIF., DO ... ENDDO., WHILE ... ENDWHILE., CASE ... ENDCASE., LOOP AT ... ENDLOOP.. Ogni blocco va chiuso, e l'annidamento è consentito ma va tenuto leggibile.
La terza: le stringhe letterali si scrivono fra apici singoli, i commenti iniziano con un asterisco in colonna uno oppure con le virgolette doppie a metà riga. * commento di blocco e WRITE lv_num. " commento di riga sono entrambi validi.
Un esempio minimo completo, che dichiara una variabile, la valorizza e la stampa:
``abap REPORT zprova_base. DATA lv_nome TYPE string. lv_nome = 'Mario'. WRITE: / 'Ciao', lv_nome. ``
Il carattere / dentro WRITE manda a capo prima di scrivere. La virgola separa più operandi della stessa istruzione, e questo evita di ripetere WRITE per ogni valore.
Quali tipi di dati si usano in ABAP?
ABAP distingue i tipi elementari da quelli strutturati. I primi sono i mattoni, i secondi li raggruppano.
I tipi elementari più usati:
- C è un campo carattere di lunghezza fissa, dichiarato come TYPE c LENGTH 10. Gli spazi finali fanno parte del valore.
- STRING è una stringa di lunghezza variabile, senza riempimento.
- I è un intero a 4 byte, INT8 un intero a 8 byte.
- P è un numero packed, usato per importi e quantità, con decimali dichiarati: TYPE p DECIMALS 2.
- F è un numero in virgola mobile, da usare solo per calcoli scientifici.
- D è una data nel formato AAAAMMGG, T un orario nel formato HHMMSS.
- X è un campo esadecimale, XSTRING una stringa di byte.
I tipi strutturati si costruiscono con TYPES. Una struttura è un insieme di campi con nomi propri; una tabella interna è una sequenza di righe dello stesso tipo. La dichiarazione tipica di una tabella interna con chiave è:
```abap TYPES: BEGIN OF ty_cliente, id TYPE i, nome TYPE string, END OF ty_cliente.
DATA: lt_clienti TYPE STANDARD TABLE OF ty_cliente WITH NON-UNIQUE KEY id, ls_cliente TYPE ty_cliente. ```
Il prefisso lt_ indica una tabella, ls_ una struttura di lavoro, lv_ una variabile scalare: non è obbligatorio, ma è la convenzione più diffusa e rende il codice leggibile anche a distanza di mesi.
Per riempire una tabella interna si usa APPEND ls_cliente TO lt_clienti. Per leggerla si usa READ TABLE lt_clienti INTO ls_cliente WITH KEY id = 10. Per scorrerla tutta si usa LOOP AT lt_clienti INTO ls_cliente. ... ENDLOOP. Per ordinarla si usa SORT lt_clienti BY nome. Queste quattro istruzioni coprono la maggior parte del lavoro quotidiano su una tabella interna.
Dove trovo l'indice delle parole chiave ABAP?
L'indice delle parole chiave non è un elenco unico e chiuso: ABAP ha centinaia di istruzioni, e ognuna ha una pagina di documentazione con sintassi, varianti ed esempi. I posti dove cercarle sono tre.
Il primo è la documentazione ufficiale SAP, accessibile dall'ambiente di sviluppo tramite il tasto funzione di help sul comando selezionato. Premendo il tasto di aiuto con il cursore su READ TABLE si apre la pagina con tutte le varianti, comprese quelle con BINARY SEARCH e con TRANSPORTING.
Il secondo è la transazione ABAPDOCU, che raccoglie esempi eseguibili divisi per argomento. Da qui si possono lanciare programmi dimostrativi senza scrivere codice.
Il terzo è il dizionario dei dati, transazione SE11, che non elenca le parole chiave ma i tipi, le tabelle, le viste e le chiavi primarie usate dal programma. È il posto giusto per capire la forma dei dati prima di scrivere l'istruzione che li legge.
Un elenco ragionato per argomento, con le istruzioni raggruppate per funzione, resta comunque più comodo di una ricerca alfabetica quando non si sa come si chiama il comando che serve.
Dalla dichiarazione alla lista: il percorso minimo
Il percorso che un principiante segue più spesso è questo: si dichiara una struttura in SE11 o con TYPES, si legge una tabella con SELECT, si riempie una tabella interna, si scorre con LOOP e si stampa con WRITE. Da qui si arriva alle liste ALV, che sono il modo standard di presentare i dati in una griglia interattiva con ordinamento e filtri.
Il passaggio da WRITE a una lista ALV non cambia la logica: cambia solo il contenitore di output. La tabella interna resta la stessa, e le stesse istruzioni di lettura e ordinamento restano valide.
Errori frequenti agli inizi
Il primo errore è dimenticare il punto finale. Il compilatore segnala la riga successiva, non quella vera, e la ricerca del punto mancante può richiedere qualche minuto.
Il secondo è confondere TYPE con LIKE. TYPE dichiara il tipo, LIKE copia la dichiarazione di un altro oggetto già esistente. Se l'oggetto di riferimento cambia, cambia anche la variabile che lo imita.
Il terzo è usare READ TABLE senza controllare SY-SUBRC. Se la riga non viene trovata, la struttura di lavoro resta invariata e il programma prosegue con dati vecchi. Il controllo IF sy-subrc = 0. dopo ogni lettura è una buona abitudine, non una formalità.
Il quarto è dichiarare una tabella interna senza chiave e poi cercarla con WITH KEY: funziona, ma su tabelle grandi la ricerca lineare diventa lenta. Una chiave dichiarata o un SORT prima della lettura risolvono il problema.
In sintesi
La sintassi ABAP si regge su poche regole: parola chiave, operandi, punto. I tipi di dati si dividono in elementari e strutturati, e la tabella interna è il contenitore centrale del lavoro. L'indice delle parole chiave si consulta dall'help in linea, da ABAPDOCU e, per i tipi, da SE11. Con queste tre basi si scrive un report funzionante e lo si mantiene senza sorprese.