banner ads

Table Control Output by Select Option Input

Table Control Output by Select Option Input

We have developed here a Module Pool program where Table Control has been used for output and Select Option for input. In the standard selection screen 100 we have maintained a select option for input like follows.

Here the Selection Screen is actually a sub screen and screen number 100 has been maintained by the program. The buttons DISPLAY and CLEAR have been maintained from the custom screen 9001. Hence the 9001 screen contains the selection screen as a sub screen and the sub screen 100 is maintained from the program. The layout of the 9001 screen is as follows:

Hence the logic of the selection screen is Calling the sub screen <sub screen name> which is including program name and screen number 100. This logic has to be maintained in the PBO block. After that PAI block is started. Here we have to Call sub screen <sub screen name> and then we shall call the user command module. 

Here calling the sub screen in PBO is basically calling the selection screen and calling the sub screen in PAI is basically passing the value from the screen to the program. Hence if we don't call sub screen in PAI then input parameter and selection option will be blank in the main program. 

Now we have prepared second screen 9002 where the Table Control is there. In the PBO block of the 9002 screen we have to Loop at output table with table control <table control name>. Inside this loop we have created a module table_control which passes data of output table to the screen fields. 

After that in the PAI block we have to maintain the table control's next page which is triggered by Scroll down or by clicking the down arrow of table control. Hence we have Loop at output table again and inside the loop we have read output table with index Current Line. This Read is for checking if any further lines exist or not. So by checking sy-subrc value we have modified output table with current line index.

The layout of Screen 9002 is as follows:

The steps are as follows.

Step 1:
Create a module pool program with proper naming convention and activate all the include programs.

INCLUDE mz_test_top                             .  " global Data
INCLUDE mz_test_o01                             .  " PBO-Modules
INCLUDE mz_test_i01                             .  " PAI-Modules
INCLUDE mz_test_f01                             .  " FORM-Routines

Step 2:
Declare all the important declarations at top include.

PROGRAM  sapmz_test.

TABLES mara.

        matnr TYPE mara-matnr, "Material Number
        ersda TYPE mara-ersda, "Date
        ernam TYPE mara-ernam, "Name
        laeda TYPE mara-laeda, "Date of Last Change
        aenam TYPE mara-aenam, "Name of Person Who Changed Object
        pstat TYPE mara-pstat, "Maintenance status
        mtart TYPE mara-mtart, "Material Type
        mbrsh TYPE mara-mbrsh, "Industry sector
        matkl TYPE mara-matkl, "Material Group
        meins TYPE mara-meins, "Base Unit of Measure
        bstme TYPE mara-bstme, "Purchase Order Unit of Measure
       END OF ty_mara.

DATA: wa_mara TYPE ty_mara,
      it_mara TYPE TABLE OF ty_mara.

DATA: ok_code_sel TYPE sy-ucomm,
      ok_code_mat TYPE sy-ucomm.


SELECT-OPTIONS   s_matnr FOR mara-matnr.

Step 3:
Create a screen 9001 and set the ok code = ok_code_sel.

Step 4:
Write the flow logic as follows.

  MODULE status_9001.

  "Calling the Subscreen including program name & screen
  CALL SUBSCREEN sel INCLUDING sy-repid '100'.


  "Calling the Subscreen at PAI
  MODULE user_command_9001.

Step 5:
Create the custom layout as follows. In the layout we need to create the sub screen by layout palate.

Step 6:
Create the PBO module of screen 9001.

MODULE status_9001 OUTPUT.


ENDMODULE.                 " status_9001  OUTPUT
Step 7:
Create the PAI module of screen 9001.

MODULE user_command_9001 INPUT.

  CASE ok_code_sel.
    WHEN 'DISP'.    "Display button
      PERFORM get_data_mara.
    WHEN 'CLR'.     "Clear button
      CLEAR   s_matnr.
      REFRESH s_matnr[].
    WHEN 'BACK'.    "Back button

ENDMODULE.                 " user_command_9001  INPUT
Step 8:
Now we need to create the subroutine get_data_mara.

FORM get_data_mara .

  IF s_matnr[] IS NOT INITIAL.
    SELECT matnr ersda ernam laeda aenam
           pstat mtart mbrsh matkl meins bstme
      FROM mara INTO TABLE it_mara
      WHERE matnr IN s_matnr.

    IF sy-subrc = 0.
      SORT it_mara.

      "Refreshing table control from the screen

      "Calling the screen of table control
      CALL SCREEN 9002.

ENDFORM.                    " get_data_mara

Step 9:
Now create the 9002 screen and set ok code = ok_code_mat.

Step 10:
Write the flow logic of table control as follows.


  "Looping the table with table control
  LOOP AT it_mara INTO wa_mara WITH CONTROL tab_ctrl.
    MODULE prepare_table_control.

  "Looping the table at PAI
  LOOP AT it_mara.
    MODULE modify_table_control.

  MODULE user_command_9002.

Step 11:
Create the PBO & PAI module as follows.

MODULE status_9002 OUTPUT.


ENDMODULE.                 " status_9002  OUTPUT
MODULE user_command_9002 INPUT.

  CASE ok_code_mat.
    WHEN 'BACK'.
      CLEAR ok_code_mat.

ENDMODULE.                 " user_command_9002  INPUT
Step 12:
Now prepare the table control at PBO level as follows.

MODULE prepare_table_control OUTPUT.

  "Describing table to populate sy-dbcnt
  DESCRIBE TABLE it_mara LINES sy-dbcnt.

  "Current line populates the loop information in table control
  tab_ctrl-current_line = sy-loopc.

  "Lines are populated with number of table lines
  tab_ctrl-lines        = sy-dbcnt.

  "Moving data from work area to screen fields
  mara-matnr = wa_mara-matnr.
  mara-ersda = wa_mara-ersda.
  mara-ernam = wa_mara-ernam.
  mara-laeda = wa_mara-laeda.
  mara-aenam = wa_mara-aenam.
  mara-pstat = wa_mara-pstat.
  mara-mtart = wa_mara-mtart.
  mara-mbrsh = wa_mara-mbrsh.
  mara-matkl = wa_mara-matkl.
  mara-meins = wa_mara-meins.
  mara-bstme = wa_mara-bstme.
  CLEAR wa_mara.

ENDMODULE.                 " prepare_table_control  OUTPUT

Step 13:
Create the PAI module of table control to modify the internal table.

MODULE modify_table_control INPUT.

  "Reading the table with current line of table control
  READ TABLE it_mara INTO wa_mara INDEX tab_ctrl-current_line.

  IF sy-subrc = 0.

    "Modifying the table with table control current line
    MODIFY it_mara FROM wa_mara INDEX tab_ctrl-current_line.

ENDMODULE.                 " modify_table_control  INPUT

Step 14:
Now create the T-code to execute this program.

 Now entering the Material number range we are getting this details with table control.

Now we can scroll as follows.

 Similarly we can scroll to view further column at right side.

No comments