FORM subroutine
  [TABLES   { itab [typing] } ]
  [USING    { [parameter | VALUE(parameter)] [typing] }]
  [CHANGING { [parameter | VALUE(parameter)] [typing] }].
 

Diese Anweisung definiert ein Unterprogramm. Es endet mit der Anweisung ENDFORM. Dem Unterprogramm können sowohl interne Tabellen als auch Felder und Feldleisten als Parameter übergeben werden. Die Zuordnung der aktuellen zu den formalen Parametern erfolgt entsprechend der Reihenfolge der Parameter beim Aufruf des Unterprogramms. Zur Unterscheidung der Parameter ist einer der Zusätze TABLES für interne Tabellen sowie USING und CHANGING für Feldparameter erforderlich. Parameter werden prinzipiell als Referenzparameter behandelt, erst der Zusatz VALUE erzwingt die Behandlung als Wertparameter.
Alle Parameter können mit zusätzlichen Typangaben versehen werden. Zur Laufzeit wird geprüft, ob der aktuelle Parameter den erforderlichen Typ besitzt. Die möglichen Optionen zur Typisierung zeigt die folgende Tabelle.

Typisierungs-Option Wirkung für einfache Parameter für interne Tabellen
STRUCTURE record Der Parameter entspricht dem Aufbau von record. Ja Ja
TYPE typ Der Parameter hat den angegebenen Typ. Ja Ja
TYPE LINE OF itab Der Parameter hat die Struktur eines Datensatzes der kopfzeilenlosen Tabelle itab. Ja Nein
LIKE field Der Parameter hat die Eigenschaften und den Typ von field. Ja Nein
LIKE LINE OF itab Der Parameter hat die Struktur der internen Tabelle itab. Ja Nein
TYPE TABLE Der aktuelle Parameter muß eine Tabelle ohne Kopfzeile sein. Ja Ja
TYPE ANY Jeder Typ ist zugelassen. Ja Nein
TYPE REF TO class Der Parameter ist eine Referenz auf ein Objekt der angegebenen Klasse. Ja Nein
TYPE REF TO DATA Der Parameter ist eine Datenreferenz. Ja Nein
TYPE [ ANY | INDEX | STANDARD| SORTED | HASHED ] TABLE Der Parameter ist eine Tabelle des angegebenen Tabellentyps. Nein Ja