Variabelen, datatypes & naamgeving
ABAP's strikte typesysteem: ingebouwde types, het Data Dictionary (domeinen en data-elementen), TYPES, constanten en de prefix-conventies die je in vrijwel alle code ziet.
01Variabelen & ingebouwde datatypes
ABAP is strikt getypeerd: elke variabele heeft een vast type en heeft vanaf declaratie altijd een waarde — er bestaat geen "undefined" of "null" voor gewone variabelen.
DATA: lv_naam TYPE string,
lv_aantal TYPE i, " integer
lv_bedrag TYPE p LENGTH 13 DECIMALS 2, " packed, 2 decimalen
lv_datum TYPE dats, " datum JJJJMMDD
lv_vlag TYPE abap_bool. " 'X' (abap_true) of leeg (abap_false)
| Type | Betekenis | Initiële waarde |
|---|---|---|
c LENGTH n | Tekst met vaste lengte n (rechts opgevuld met spaties) | spaties |
string | Tekst, variabele lengte | lege string |
n LENGTH n | Numerieke tekst: alleen cijfers, vaste lengte, met voorloopnullen (bijv. materiaalnummers) | 0…0 |
i | Geheel getal (4 bytes, ±2,1 miljard) | 0 |
int8 | Groot geheel getal (8 bytes) | 0 |
p LENGTH l DECIMALS n | "Packed" decimaal getal — dé keuze voor bedragen en hoeveelheden (exacte decimale rekenkunde) | 0 |
f | Floating point (binair; afrondingsartefacten mogelijk — niet voor geld) | 0.0 |
decfloat16 / decfloat34 | Decimale floating point; combineert bereik van f met exactheid van p | 0 |
dats | Datum als teksveld JJJJMMDD — zie datums & tijd | 00000000 |
tims | Tijd als tekstveld UUMMSS | 000000 |
x LENGTH n / xstring | Binaire (hexadecimale) data, vast/variabel | 00… / leeg |
'X' = waar, ' ' (spatie) = onwaar. Gebruik het type abap_bool met de constanten abap_true/abap_false voor leesbaarheid. Verwar dit niet met een echte boolean: IF lv_vlag. is ongeldig, je schrijft IF lv_vlag = abap_true.Initial value & IS INITIAL
Elke variabele heeft vanaf declaratie de initial value van haar type (zie tabel). Daarop is de check IS INITIAL gebaseerd: IF lv_datum IS INITIAL. betekent "is de datum nog 00000000?". Met CLEAR lv_x. zet je een variabele terug naar de initiële waarde. Zie ook operatoren.
Constanten en eigen types
CONSTANTS: lc_max_pogingen TYPE i VALUE 3,
lc_status_open TYPE c LENGTH 1 VALUE 'O'.
TYPES: BEGIN OF ty_regel, " eigen structuurtype
matnr TYPE matnr,
menge TYPE menge_d,
END OF ty_regel,
ty_regels TYPE STANDARD TABLE OF ty_regel WITH EMPTY KEY.
Met TYPES definieer je herbruikbare typedefinities (er wordt geen geheugen gereserveerd — dat gebeurt pas bij DATA). Zie structuren & tabellen voor de tabeltypes.
TYPE vs. LIKE en verwijzende declaraties
TYPE— verwijst naar een type (ingebouwd, TYPES of DDIC).LIKE— verwijst naar een bestaand data-object:DATA lv_kopie LIKE lv_origineel.TYPE LINE OF ty_tab— het regeltype van een tabeltype;TYPE TABLE OF ty_regel— tabel van een regeltype;TYPE REF TO cl_x— objectreferentie.
02Het Data Dictionary (DDIC)
Het centrale, systeembrede typesysteem van SAP — beheerd in transactie SE11. Vrijwel elk veld in echte code verwijst naar een DDIC-type.
Het DDIC kent een drielaagse opbouw:
| Laag | Wat het vastlegt | Voorbeeld |
|---|---|---|
| Domein | Technische eigenschappen: basistype, lengte, toegestane waarden (fixed values), conversie-exit | MATNR: CHAR 18/40, conversie-exit MATN1 |
| Data-element | Semantiek: veldlabels (kort/middel/lang), F1-documentatie, zoekhulp — gebouwd op een domein | MATNR "Materiaalnummer" |
| Tabelveld / structuurveld | Gebruik van een data-element in een tabel of structuur | MARA-MATNR |
Waarom dit belangrijk is: declareer je DATA lv_matnr TYPE matnr., dan krijg je automatisch de juiste lengte, het juiste veldlabel op schermen, de F1-help, de zoekhulp (F4) én de conversie-exit voor voorloopnullen. Eén wijziging in het domein werkt overal door.
Andere DDIC-objecten
- Transparante tabel — een databasetabel; de DDIC-definitie komt 1-op-1 overeen met de fysieke tabel. Zie standaardtabellen.
- Structuur — herbruikbare velddefinitie zonder database-opslag (bijv. BAPI-structuren).
- Tabeltype — globaal gedefinieerd intern-tabeltype (bijv.
BAPIRET2_T). - View — klassieke database-view (join van tabellen); grotendeels opgevolgd door CDS-views.
- Zoekhulp (search help) — definieert het F4-waardenlijstje bij een veld.
- Lock-object — genereert de ENQUEUE/DEQUEUE-functiemodules, zie locks.
- Number range-object — zie nummerreeksen.
Technische instellingen van tabellen
Bij een transparante tabel horen technische instellingen: delivery class (A = applicatiedata, C = customizing, S = systeemdata), buffering (geen / enkel record / generiek / volledig — belangrijk voor performance) en of de tabel via SE16/SM30 onderhouden mag worden. Voor onderhoudbare Z-tabellen genereer je een table maintenance dialog (SM30-onderhoudsscherm) via SE11 → Utilities.
03Naamgeving: de prefix-conventie
Geen taalregel, maar een breed gedragen conventie (Hungarian notation) — zo zie je meteen wat iets is en waar het "leeft". Clean ABAP raadt prefixen juist af, maar in bestaande code kom je ze overal tegen; je moet ze dus kunnen lezen.
Eerste letter: scope
| Prefix | Betekenis |
|---|---|
l | Local — lokaal binnen de methode/procedure |
g | Global — programma-/functiegroepniveau |
m | Member — instance-attribuut van een class |
i | Importing-parameter |
e | Exporting-parameter |
c | Changing-parameter (in én uit) |
r | Returning-parameter (functionele methode) |
Tweede letter: soort
| Prefix | Betekenis |
|---|---|
v | Variable — losse waarde |
s | Structure — record met velden |
t | Table — interne tabel |
o / r | Object reference (verwijzing naar een instance) |
r (bij lr_) | Ook: Range-tabel (TYPE RANGE OF) — context bepaalt de betekenis |
x | "Update-vlag"-structuren (zie BAPI's) of binair veld |
c (bij lc_) | Constant |
Combinaties die je overal ziet
| Prefix | Voluit | Voorbeeld |
|---|---|---|
lv_ | Local Variable | lv_datum |
ls_ | Local Structure | ls_order |
lt_ | Local Table | lt_items |
lo_ | Local Object | lo_alv |
lr_ | Local Range / Reference | lr_matnr |
lc_ | Local Constant | lc_max |
gv_ / gt_ / gs_ / go_ | Global … | gt_result |
iv_ / it_ / is_ / io_ | Importing … | iv_matnr |
ev_ / et_ / es_ / eo_ | Exporting … | et_result |
cv_ / ct_ / cs_ | Changing … | cv_counter |
rv_ / rt_ / rs_ / ro_ | Returning … | rv_result |
mv_ / mt_ / ms_ / mo_ | Member … | mv_status |
<fs_...> / <ls_...> | Field-symbol (punthaken zijn verplicht) | <fs_regel> |
ty_ | Typedefinitie (TYPES) | ty_regel |
Naamgeving van objecten
| Patroon | Betekenis |
|---|---|
Z... / Y... | Klantspecifiek (custom) object — het naamgebied dat SAP vrijhoudt. Zie transportwezen. |
ZCL_... / ZIF_... | Custom class / interface (SAP-standaard: CL_..., IF_...) |
ZCX_... | Custom exception class (standaard: CX_...) |
LCL_... / LIF_... | Lokale class / interface binnen één programma |
SAPMZ... / SAPLZ... | Module pool / gegenereerd hoofdprogramma van een Z-functiegroep |
/NAMESPACE/... | Geregistreerd namespace van een partner/add-on (bijv. /SCWM/ voor EWM) |