ABAP & SAP Fundament
Fundament

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.

Op deze pagina

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)
TypeBetekenisInitiële waarde
c LENGTH nTekst met vaste lengte n (rechts opgevuld met spaties)spaties
stringTekst, variabele lengtelege string
n LENGTH nNumerieke tekst: alleen cijfers, vaste lengte, met voorloopnullen (bijv. materiaalnummers)0…0
iGeheel getal (4 bytes, ±2,1 miljard)0
int8Groot geheel getal (8 bytes)0
p LENGTH l DECIMALS n"Packed" decimaal getal — dé keuze voor bedragen en hoeveelheden (exacte decimale rekenkunde)0
fFloating point (binair; afrondingsartefacten mogelijk — niet voor geld)0.0
decfloat16 / decfloat34Decimale floating point; combineert bereik van f met exactheid van p0
datsDatum als teksveld JJJJMMDD — zie datums & tijd00000000
timsTijd als tekstveld UUMMSS000000
x LENGTH n / xstringBinaire (hexadecimale) data, vast/variabel00… / leeg
Er is geen boolean-type. ABAP gebruikt van oudsher een 1-teken-veld: '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

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:

LaagWat het vastlegtVoorbeeld
DomeinTechnische eigenschappen: basistype, lengte, toegestane waarden (fixed values), conversie-exitMATNR: CHAR 18/40, conversie-exit MATN1
Data-elementSemantiek: veldlabels (kort/middel/lang), F1-documentatie, zoekhulp — gebouwd op een domeinMATNR "Materiaalnummer"
Tabelveld / structuurveldGebruik van een data-element in een tabel of structuurMARA-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

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

PrefixBetekenis
lLocal — lokaal binnen de methode/procedure
gGlobal — programma-/functiegroepniveau
mMember — instance-attribuut van een class
iImporting-parameter
eExporting-parameter
cChanging-parameter (in én uit)
rReturning-parameter (functionele methode)

Tweede letter: soort

PrefixBetekenis
vVariable — losse waarde
sStructure — record met velden
tTable — interne tabel
o / rObject 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

PrefixVoluitVoorbeeld
lv_Local Variablelv_datum
ls_Local Structurels_order
lt_Local Tablelt_items
lo_Local Objectlo_alv
lr_Local Range / Referencelr_matnr
lc_Local Constantlc_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

PatroonBetekenis
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)