In this guide, I will explain to you how to make a subscreen in sap ABAP with examples.
I can explain with an example of mini project , we use tables sbook, sflight and spfli -sbook to fetch carrid , connid , fldate, and lugguage weight , sflight- to fetch occupied for the economy, first and business class and spfli – is to fetch cityto and cityfrom.
this is very simple find the sum, weight, and average of flight, it triggers when a particular key is pressed.
step 1: you need to create 2 screens – Main Screen ‘9001’ and Subscreen ‘9002’.
Step 2: you need to define the variable ‘dynp’ and set the default value empty screen ‘9003’
PROGRAM yxex_airline_mp_copy.
TABLES : sbook, Yrex_FFINAL.
DATA: gt_sbook TYPE TABLE OF sbook,
gt_sflight TYPE TABLE OF sflight,
gt_spfli TYPE TABLE OF spfli.
DATA: wa_sbook TYPE sbook,
wa_sflight TYPE sflight,
wa_spfli TYPE spfli.
Data: gt_ffinal type TABLE OF Yrex_FFINAL,
wa_ffinal type Yrex_FFINAL.
Data : dynp TYPE sy-dynnr VALUE '9003'.
Step 3 : Screen 9001, you need to call subscreen in both PBO and PAI and make input screen

PROCESS BEFORE OUTPUT.
MODULE STATUS_9001.
Call SUBSCREEN SUBS1 INCLUDING sy-repid dynp.
PROCESS AFTER INPUT.
MODULE back_command.
MODULE USER_COMMAND_9001.
CALL SUBSCREEN SUBS1.
Step 4: GO inside the module USER_COMMAND_9001, to call the subscreen at any condition
IF sy-ucomm = 'CALCS'.
PERFORM getflight.
dynp = '9002'.
ELSEIF SY-UCOMM = 'GETPLAT'.
ENDIF.
Step 5: Inside the getflight subroutine you need to write logic that finds the sum, and an average of the flight.
FORM getflight .
select * from sbook INTO TABLE gt_sbook
where carrid = sbook-carrid
AND connid = sbook-connid
AND fldate = sbook-fldate.
IF sy-subrc = 0.
SELECT * From sflight INTO TABLE gt_sflight
FOR ALL ENTRIES IN gt_sbook
WHERE carrid = gt_sbook-carrid
AND connid = gt_sbook-connid
AND fldate = gt_sbook-fldate.
IF sy-subrc = 0.
SELECT * FROM spfli INTO TABLE gt_spfli
FOR ALL ENTRIES IN gt_sbook
WHERE carrid = gt_sbook-carrid
AND connid = gt_sbook-connid.
IF sy-subrc = 0 .
* sum =lugguage
* avg = sum/ seats
LOOP AT gt_sbook INTO wa_sbook.
READ TABLE gt_sflight INTO wa_sflight
WITH KEY carrid = wa_sbook-carrid
connid = wa_sbook-connid
fldate = wa_sbook-fldate.
IF sy-subrc = 0.
READ TABLE gt_spfli INTO wa_spfli
WITH KEY carrid = wa_sbook-carrid
connid = wa_sbook-connid.
IF sy-subrc = 0.
// sum
IF wa_sbook-class = 'Y'.
wa_ffinal-sum_e = wa_ffinal-sum_e + wa_sbook-luggweight.
ELSEIF wa_sbook-class = 'C'.
wa_ffinal-sum_b = wa_ffinal-sum_b + wa_sbook-luggweight.
ELSEIF wa_sbook-class = 'F'.
wa_ffinal-sum_f = wa_ffinal-sum_f + wa_sbook-luggweight.
ENDIF.
//economy class
IF wa_ffinal-economy is INITIAL.
wa_ffinal-economy = wa_sflight-seatsocc.
ENDIF.
//first class
IF wa_ffinal-firstclass IS INITIAL.
wa_ffinal-firstclass = wa_sflight-seatsocc_f.
ENDIF.
//business class
IF wa_ffinal-business IS INITIAL.
wa_ffinal-business = wa_sflight-seatsocc_b.
ENDIF.
AT END OF fldate.
wa_ffinal-avgweight_e = wa_ffinal-sum_e / wa_ffinal-economy.
wa_ffinal-avgweight_b = wa_ffinal-sum_b / wa_ffinal-business.
wa_ffinal-avgweight_f = wa_ffinal-sum_f / wa_ffinal-firstclass.
ENDAT.
ENDIF.
ENDIF.
ENDLOOP.
move-CORRESPONDING wa_ffinal TO yrex_ffinal.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
Step 6: In a subscreen ‘9002’ you need to make an output field (go to layout- get from a dictionary or get from the program )where your output will be displayed – In my case, I use the yrex_ffinal table that has attributes sum_e, sum_f, sum_b, and avg_f,avg_e, avg_b.
In the subscreen, you can add validation but in my case, I am not adding that much functionality, this is for giving a subscreen overview.
PROCESS BEFORE OUTPUT.
* MODULE STATUS_9002.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_9002.
