*&---------------------------------------------------------------------*
*& Report ZSCH_021_DYNAMIC_PROGRAM
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsch_021_dynamic_program.
* Datengedöns
DATA: gt_program TYPE stringtab, "Das Programm
gd_prog TYPE c LENGTH 8, "Erzeugter Name des Programms
gd_msg TYPE c LENGTH 120, "Fehlernachricht
gd_lin TYPE c LENGTH 10, "Fehlerzeile im Programm
gd_wrd TYPE c length 10, "Erstes fehlerhaftes Token
gd_off TYPE c length 3. "Offset im Token

START-OF-SELECTION.
* Programm schreiben 
APPEND 'program subpool.' TO gt_program.
APPEND 'form hallo_schroe.' TO gt_program.
APPEND 'write / ''Hallo, dynamischer Schrö''.' TO gt_program.
APPEND 'endform.' TO gt_program.
* Programm erzeugen 
GENERATE SUBROUTINE POOL gt_program "Programm
NAME gd_prog "Names des Programms
MESSAGE gd_msg "Ab hier Fehlerbehandlung
LINE gd_lin
WORD gd_wrd
OFFSET gd_off.
IF sy-subrc <> 0.
WRITE: / 'Fehler während der Erzeugung in Zeile',
gd_lin,
/ gd_msg,
/ 'Wort:',
gd_wrd,
'in Zeile ',
gd_lin.
ELSE.
PERFORM hallo_schroe IN PROGRAM (gd_prog).
ENDIF.