Friday, June 7, 2013

Simple Tabstrip Control

Tab strip control is a screen element which contains more than one tab. Each of these tabs is a sub screen. The tab strip control contains one main screen and n number of sub screen. This n number denotes the number of tabs. Tab strip is like follows.



When we click other tab then we can find different screen fields.



Each tab contains a tab title and page area. In the page area we can store the screen elements. This page area is actually the sub screen. Hence a tab strip is a combination of the main screen and all those sub screens. If there are many tabs and all of those tabs contain big tab titles then in one tab strip control area is not sufficient to display all those tabs. In this condition a scroll bar appears and then we can scroll to all of those tabs. Apart from that there will be a button which will display the list of all tabs.

The tab title acts as a button in tab strip control. We can set the function code of any tab as we do for push button. We also can set a title and icon for that tab. We generally create all of these by the screen painter toolbar. We can customize the screen area of the main screen, tab strip screen and also the sub screens. We also can modify the position of these as per requirement.

Now we have created here a tab strip which contains three tabs. The main screen contains the tab strip and material number input field. It also contains two push buttons ‘DISPALY’ and ‘CLEAR’. The functionality of this tab strip is to display the material details in tab1, material unit in tab2 and material sales data in tab3 based on the material input at the main screen when user clicks on the display button. The program will clear all of the screen fields if the clear button is clicked. Since we have only one main screen we only need one ok_code to capture the user command.

Step – 1:
At first we are creating the include programs as follows.

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

Now at top include we need to declare all the possible set of variables as follows.

*-------Declaring DB tables to mention the screen fields---------------*
TABLES: mara, makt, marm, mvke.

*-----Declaring an work area for Material details----------------------*
DATA: BEGIN OF wa_mara,
        matnr TYPE mara-matnr,
        ersda TYPE mara-ersda,
        ernam TYPE mara-ernam,
        mtart TYPE mara-mtart,
      END OF wa_mara.

*-----Declaring an work area for Material description------------------*
DATA: BEGIN OF wa_makt,
        matnr TYPE makt-matnr,
        maktx TYPE makt-maktx,
      END OF wa_makt.

*-----Declaring an work area for Material units------------------------*
DATA: BEGIN OF wa_marm,
        matnr TYPE marm-matnr,
        meinh TYPE marm-meinh,
        volum TYPE marm-volum,
        voleh TYPE marm-voleh,
      END OF wa_marm.

*-----Declaring an work area for Material sales data-------------------*
DATA: BEGIN OF wa_mvke,
        matnr TYPE mvke-matnr,
        vkorg TYPE mvke-vkorg,
        vtweg TYPE mvke-vtweg,
      END OF wa_mvke.

*-----Declaring ok_code to capture user command------------------------*
DATA: ok_code TYPE sy-ucomm.

*--------Declaring the Tabstrip----------------------------------------*
CONTROLS ts_mat TYPE TABSTRIP.

Here to declare the work area we have used the Pattern as follows.



Then after declaring the table name on the mentioned place press enter. Now select the required fields and press Copy button.



Enter the name of the work area which you want to declare and press enter.


In this way we can make any big structure with less amount of time.

Step – 2:
Next we are creating the screen 9001 which is the main screen. Here in the attributes the normal screen will be selected.



This screen will contain the OK_CODE for the user command.



Step – 3:
After that we shall declare the PBO and PAI for this screen 9001.



In PBO we have the following.

MODULE status_9001 OUTPUT.

  SET PF-STATUS 'PF_MAT'.
  SET TITLEBAR 'TI_MAT'.

ENDMODULE.                 " status_9001  OUTPUT

The PF status is as follows.



The title bar is as follows.



Step – 4:
Now we shall go to the layout and this will trigger the screen painter by which we shall make the main screen of tab strip. Here we have a tab strip ts_mat which we have created by the tab strip button in the palate. Initially the system shows two tabs tab1 and tab2.



Double click on the tab strip ts_mat and by editing the tab title value we can increase the tab as per requirement.



Now we double click on a particular tab (tab1) and the following attributes will come. Here we have set the function code TAB1, the title text Material details and reference field SUB1. This SUB1 will be the name of the sub screen which needs to be created by specifying different screen number. In this way we are creating the other tabs also.



Now we just create a sub screen by dragging the mouse pointer after selecting the sub screen from palate. The name of this will be SUB1.



After that we are creating two buttons for display and clear the screen fields.



After customizing and adjusting the screen elements the final screen appears as follows.



Step – 5:
Now we are creating the first sub screen SUB1 for material details. Here the screen type will be sub screen.



Since this is a sub screen no OK_CODE is there. It will take the main screen user command.



Step – 6:
After that we need to create the screen elements for this sub screen as follows. In this way we are creating the rest of sub screens.



Similarly we are creating rest of the sub screens with different screen elements.

Step – 7:
Now we need to call these sub screens including program name and screen number at PBO level and PAI level.

PROCESS BEFORE OUTPUT.

*--------Creating the PF status & Title in PBO-------------------------*
  MODULE status_9001.

*------Calling the sub screens with program name and screen number-----*
  CALL SUBSCREEN sub1 INCLUDING sy-repid '9002'.
  CALL SUBSCREEN sub2 INCLUDING sy-repid '9003'.
  CALL SUBSCREEN sub3 INCLUDING sy-repid '9004'.

PROCESS AFTER INPUT.

*--------Declaring the buttons functionality in PAI--------------------*
  MODULE user_command_9001.

*------Calling the sub screens-----------------------------------------*
  CALL SUBSCREEN sub1.
  CALL SUBSCREEN sub2.
  CALL SUBSCREEN sub3.

Step – 8:
Now in PAI we have to define the button functionality at user command.

MODULE user_command_9001 INPUT.

*------Capturing the function code for different button----------------*
  CASE ok_code.
    WHEN 'TAB1'.    "When user clicks on TAB1 button
      PERFORM tab1.
    WHEN 'TAB2'.    "When user clicks on TAB1 button
      PERFORM tab2.
    WHEN 'TAB3'.    "When user clicks on TAB1 button
      PERFORM tab3.

    WHEN 'DISP'.    "When user clicks on Display button
      PERFORM get_material.
      PERFORM get_material_description.
      PERFORM get_material_unit.
      PERFORM get_material_sales_data.
    WHEN 'CLR'.     "When user clicks on Clear button
      PERFORM clear_screen.

    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      "When user clicks on Standard toolbar buttons
      LEAVE PROGRAM.
  ENDCASE.

ENDMODULE.                 " user_command_9001  INPUT

Here the tab titles are treated as buttons.

Step – 9:
Now we need to define all of those tab related subroutines to activate the tabs. Here the purpose is to active the tab with tab title as follows.



Step – 10:
Now we shall declare the subroutine for display button function as follows.

*&---------------------------------------------------------------------*
*&      Form  get_material
*&---------------------------------------------------------------------*
*       Get data from MARA
*----------------------------------------------------------------------*
FORM get_material .

  IF mara-matnr IS NOT INITIAL.
    SELECT SINGLE matnr ersda ernam mtart
      FROM mara INTO wa_mara
      WHERE matnr = mara-matnr.

    IF sy-subrc = 0.
      "Passing the data from work area to screen fields of TAB1
      mara-matnr = wa_mara-matnr.
      mara-ersda = wa_mara-ersda.
      mara-ernam = wa_mara-ernam.
      mara-mtart = wa_mara-mtart.
      CLEAR wa_mara.
    ENDIF.
  ENDIF.

ENDFORM.                    " get_material
*&---------------------------------------------------------------------*
*&      Form  get_material_description
*&---------------------------------------------------------------------*
*       Get data from MAKT
*----------------------------------------------------------------------*
FORM get_material_description .

  IF mara-matnr IS NOT INITIAL.
    SELECT SINGLE matnr maktx
      FROM makt INTO wa_makt
      WHERE matnr = mara-matnr
        AND spras = 'EN'.

    IF sy-subrc = 0.
      "Passing the data from work area to screen fields of TAB1
      makt-maktx = wa_makt-maktx.
      CLEAR wa_makt.
    ENDIF.
  ENDIF.

ENDFORM.                    " get_material_description
*&---------------------------------------------------------------------*
*&      Form  get_material_unit
*&---------------------------------------------------------------------*
*       Get data from MARM
*----------------------------------------------------------------------*
FORM get_material_unit .

  IF mara-matnr IS NOT INITIAL.
    SELECT SINGLE matnr meinh volum voleh
      FROM marm INTO wa_marm
      WHERE matnr = mara-matnr.

    IF sy-subrc = 0.
      "Passing the data from work area to screen fields of TAB2
      marm-matnr = wa_marm-matnr.
      marm-meinh = wa_marm-meinh.
      marm-volum = wa_marm-volum.
      marm-voleh = wa_marm-voleh.
      CLEAR wa_marm.
    ENDIF.
  ENDIF.

ENDFORM.                    " get_material_unit
*&---------------------------------------------------------------------*
*&      Form  get_material_sales_data
*&---------------------------------------------------------------------*
*       Get data from MVKE
*----------------------------------------------------------------------*
FORM get_material_sales_data .

  IF mara-matnr IS NOT INITIAL.
    SELECT SINGLE matnr vkorg vtweg
      FROM mvke INTO wa_mvke
      WHERE matnr = mara-matnr.

    IF sy-subrc = 0.
      "Passing the data from work area to screen fields of TAB3
      mvke-matnr = wa_mvke-matnr.
      mvke-vkorg = wa_mvke-vkorg.
      mvke-vtweg = wa_mvke-vtweg.
      CLEAR wa_mvke.
    ENDIF.
  ENDIF.

ENDFORM.                    " get_material_sales_data

Step – 11:
Now we shall create the clear function. Here the purpose will be to clear the screen fields whenever user clicks on the clear button.

*&---------------------------------------------------------------------*
*&      Form  clear_screen
*&---------------------------------------------------------------------*
*       Refresh the screen fields data
*----------------------------------------------------------------------*
FORM clear_screen .

  "Clearing all the screen fields & work area
  CLEAR:    mara,    makt,    marm,    mvke,
         wa_mara, wa_makt, wa_marm, wa_mvke.

ENDFORM.                    " clear_screen

Now here is the main screen output:


Now we declare a material number here and click on the Display button. The system is displaying the material details with description on the first tab.


Now we click on the Material unit and the second tab will display required data with its screen fields. Here the tab title is working like a button.


Similarly when we click the Material Sales data we get the following output.

14 comments:

Unknown said...

really good... great work.

Unknown said...

thank you very much... sir can u explain me about bapi and badi concept

Sandip Roy said...

Yes. It will be there.

Anonymous said...

Great! Sir what about BDC..... Please explain about BDC.

Anonymous said...

clear button not working. it is not clear all screen fields.

Prakash said...

nPlz help me..
I have requirement in which there are 2(Subscreen 100 & Subscreen 200) tabs with selection screen 1000 using tabstrip control.

if tab1 clicked with i/p parameters filled & click on execute button 'F8' then one alv is displayed & when click on BACK,it will return to screen 100.this situation is ok.

if tab2 clicked with i/p parameters filled & click on execute button 'F8' then second alv is displayed.But my issue is when i clicked on BACk button my defualt window is set 100. i want to set it to screen 200 becuase i execute alv from tab2 (screen 200 & expected to return on tab2.i.e. 200 )

How to achive this??

Unknown said...

this post really very good. its help me lot. even i scared in module pool, but i have learn little bit from this your site. if possible please describe little bit more.

Unknown said...

Hi,
I am very confused about the concept Call Screen, Set Screen and Leave Screen.
Please can anyone explain.

Unknown said...

IDIOT

Anonymous said...

SAP Success Factors Real Time Hands on Training in Chennai...

Don't always Depend on Training Institute Alone and so please aware of Best Trainers too..

http://thecreatingexperts.com/sap-successfactors-training-in-chennai/

If You need a Best Trainer over SAP Success Factors Means??? Please ready for an DEMO From the Trainer MR.Karthick
CONTACT:8122241286

Both Classroom/Online Training is Available!!!!!!

Anonymous said...

trgfvb fc

Unknown said...

Very Nice, detailed Explanation, Thank you.

Unknown said...

Sir, Many Many Thanks for your Support...
I learn alot from your blog.... Please always be with us
....

Anonymous said...

Great Job.. Very nice expalnation. Thank you.