ABAP & SAP Fundament
Fundament

Programma-opbouw & selectieschermen

De soorten ABAP-objecten die je tegenkomt, de vaste event-structuur van een report, en hoe selectieschermen met PARAMETERS en SELECT-OPTIONS werken.

Op deze pagina

01Soorten ABAP-objecten

De verschillende "soorten" ABAP-code die je tegenkomt, en hoe ze zich tot elkaar verhouden.

ObjecttypeWat het isAanmaken/bekijken
Report (executable)Op zichzelf staand, direct uitvoerbaar programma — begint met REPORT zmijn_report.SE38 / SE80
IncludeStuk code dat in een ander programma wordt ingeladen met INCLUDE znaam. — puur om grote programma's op te delen. Een include is zelf niet uitvoerbaar.SE38
Function groupContainer voor één of meer functiemodules, met eigen gedeelde (globale) data en eigen includes (TOP-include voor declaraties).SE37 / SE80
Class (globaal)Op zichzelf staande class, systeembreed zichtbaar — zie OO-ABAP.SE24 / ADT
Interface (globaal)Contract dat classes kunnen implementeren — zie interfaces.SE24 / ADT
Module poolOuder programmatype achter klassieke schermen (dynpro's), naam begint vaak met SAPMZ.... Wordt gestart via een transactiecode, niet direct.SE80
CDS-viewDatabase-view met semantische annotaties, gedefinieerd als broncode — zie CDS.alleen ADT (Eclipse)
TransactiecodeSnelkoppeling (bijv. ZMIJN_APP) die een programma, scherm of class start. Standaardcodes: zie de transactiecode-index.SE93
SE80 vs. ADT — klassiek ontwikkel je in de SAP GUI (SE80, SE38, SE24). Modern gebeurt vrijwel alles in ADT (ABAP Development Tools, een Eclipse-plugin). CDS-views en RAP-objecten kún je alleen in ADT bewerken.

02Events in een klassiek report

Een executable report bestaat uit vaste "event"-blokken die de runtime in een vaste volgorde aanroept. Je schrijft dus geen main-functie: je vult blokken in.

REPORT zmijn_report.

INITIALIZATION.
  " vóór het tonen van het selectiescherm: standaardwaarden zetten
  p_datum = sy-datum.

AT SELECTION-SCREEN ON p_werk.
  " validatie van één veld; MESSAGE type E houdt de gebruiker op het scherm
  IF p_werk IS INITIAL.
    MESSAGE 'Vul een werk (plant) in' TYPE 'E'.
  ENDIF.

START-OF-SELECTION.
  " hoofdlogica: data ophalen en verwerken

END-OF-SELECTION.
  " afronding: resultaten tonen (bijv. ALV)
EventMoment
LOAD-OF-PROGRAMEénmalig bij het laden van het programma in het geheugen.
INITIALIZATIONVóór het selectiescherm; ideaal voor standaardwaarden.
AT SELECTION-SCREEN OUTPUTTelkens vóór het (opnieuw) tonen van het selectiescherm; velden tonen/verbergen.
AT SELECTION-SCREEN (evt. ON veld)Na Enter/uitvoeren: invoervalidatie. Een MESSAGE type E toont de fout en laat het veld invoerbaar.
START-OF-SELECTIONDe hoofdverwerking. Als je géén event schrijft, valt losse code impliciet hieronder.
END-OF-SELECTIONNa de hoofdverwerking; klassiek gebruikt voor output.
TOP-OF-PAGE / END-OF-PAGEKop- en voetregels bij klassieke WRITE-lijsten.
AT LINE-SELECTION / AT USER-COMMANDInteractie op klassieke lijsten (dubbelklik, eigen knoppen).

03Selectieschermen: PARAMETERS & SELECT-OPTIONS

Het selectiescherm is het invoerscherm dat SAP automatisch genereert uit declaraties in je code.

PARAMETERS — één invoerveld

PARAMETERS: p_werk  TYPE werks_d OBLIGATORY,          " verplicht veld
            p_datum TYPE dats DEFAULT sy-datum,       " met standaardwaarde
            p_test  TYPE xfeld AS CHECKBOX DEFAULT 'X', " checkbox
            p_optie1 RADIOBUTTON GROUP grp1,
            p_optie2 RADIOBUTTON GROUP grp1.

Veelgebruikte toevoegingen: OBLIGATORY (verplicht), DEFAULT, AS CHECKBOX, RADIOBUTTON GROUP, LOWER CASE (anders wordt invoer naar hoofdletters omgezet!), NO-DISPLAY (variabele bestaat wel, veld niet zichtbaar), MATCHCODE OBJECT (zoekhulp koppelen).

SELECT-OPTIONS — reeksen en meervoudige selectie

DATA: gv_matnr TYPE matnr.   " referentieveld is verplicht
SELECT-OPTIONS: s_matnr FOR gv_matnr.

Een select-option is onder de motorkap een interne tabel met vier velden per regel — de zogeheten range-tabel:

VeldBetekenisVoorbeeldwaarden
SIGNInsluiten of uitsluitenI (include) / E (exclude)
OPTIONVergelijkingsoperatorEQ, BT (between), CP (pattern), GE, LE, NE
LOW(Onder)waarde100
HIGHBovenwaarde (alleen bij BT)200

In een SELECT gebruik je hem met WHERE matnr IN s_matnr. Een lege range-tabel selecteert álles. Je kunt zelf ook range-tabellen declareren zonder scherm: DATA lr_matnr TYPE RANGE OF matnr. en vullen met VALUE #( ( sign = 'I' option = 'EQ' low = '100' ) ).

Opmaak van het scherm

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS: p_werk TYPE werks_d.
  SELECT-OPTIONS: s_matnr FOR gv_matnr.
SELECTION-SCREEN END OF BLOCK b1.

TEXT-001 verwijst naar een tekstsymbool: vertaalbare teksten die bij het programma horen (menu: Goto → Text Elements). Ook selectieteksten (labels naast de velden) beheer je daar — zo blijft het programma meertalig.

Varianten

Gebruikers kunnen ingevulde selectieschermen opslaan als variant en die later hergebruiken — essentieel voor achtergrondjobs, die altijd met een variant draaien. Dynamische datums (bijv. "altijd gisteren") regel je met variant-attributen (selection variables).

04Een net programma opbouwen

Hoe professionele reports doorgaans zijn georganiseerd.

"---------------------------------------------------------------
" Report  : ZMM_VOORRAAD_OVERZICHT
" Auteur  : J. Jansen        Datum: 2026-07-01
" Doel    : Voorraadoverzicht per plant met ALV-uitvoer
"---------------------------------------------------------------
REPORT zmm_voorraad_overzicht.

CLASS lcl_app DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS run.
ENDCLASS.

CLASS lcl_app IMPLEMENTATION.
  METHOD run.
    " ... logica ...
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  lcl_app=>run( ).