Welcome To My BLOG

This site is to give a brief idea for the abap learners who are looking for some real time programs .It consists of collection of programs from my side . I hope these programs are very much used for all of the learners. Please check the links for any information in ABAP.
Please vote for my Blog. And please input me on this mail addrssess.Email me

Share this link with your friends

http://www.rebtel.com/u/15163104576

For every friend who signs up using this link and makes a payment, we'll give you 8 €!


Tuesday, May 22, 2012

Finding the Enhancement Name and Project Name from function module exit name

STEP 1  
Execute the transparent table ‘MODSAP’ and provide the function module name in the Enhancement Field and component type = 'E'.


Now Press F8.  
Now you will get the Enhancement Name for the function module exit.  

STEP 2  
Go to table ‘MODACT’ and provide the enhancement name from(Step 1) and press F8.  

Now the project name associated with the enhancement name is displayed.   

Thursday, May 10, 2012

TREE ALV


REPORT  zalv_tree_02.

* §1a. Define reference variables
DATA: g_alv_tree         TYPE REF TO cl_gui_alv_tree,
      g_custom_container 
TYPE REF TO cl_gui_custom_container.

DATA: gt_sflight      TYPE qmsm OCCURS 0,      "Output-Table
      ok_code 
LIKE sy-ucomm,
      save_ok 
LIKE sy-ucomm,           "OK-Code
      g_max 
TYPE i VALUE 255.

END-OF-SELECTION.

  
CALL SCREEN 100.

*&---------------------------------------------------------------------*
*&      Module  PBO  OUTPUT
*&---------------------------------------------------------------------*
*       process before output
*----------------------------------------------------------------------*
MODULE pbo OUTPUT.

  
SET PF-STATUS 'MAIN100'.
  
SET TITLEBAR 'MAINTITLE'.

  
IF g_alv_tree IS INITIAL.
    
PERFORM init_tree.

    
CALL METHOD cl_gui_cfw=>flush
      
EXCEPTIONS
        cntl_system_error = 
1
        cntl_error        = 
2.
    
IF sy-subrc NE 0.
      
CALL FUNCTION 'POPUP_TO_INFORM'
        
EXPORTING
          titel = 
'Automation Queue failure'(801)
          txt1  = 
'Internal error:'(802)
          txt2  = 
'A method in the automation queue'(803)
          txt3  = 
'caused a failure.'(804).
    
ENDIF.
  
ENDIF.

ENDMODULE.                             " PBO  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  PAI  INPUT
*&---------------------------------------------------------------------*
*       process after input
*----------------------------------------------------------------------*
MODULE pai INPUT.
  save_ok = ok_code.
  
CLEAR ok_code.

  
CASE save_ok.
    
WHEN 'EXIT' OR 'BACK' OR 'CANC'.
      
PERFORM exit_program.

    
WHEN OTHERS.
* §6. Call dispatch to process toolbar functions
      
CALL METHOD cl_gui_cfw=>dispatch.

  
ENDCASE.

  
CALL METHOD cl_gui_cfw=>flush.
ENDMODULE.                             " PAI  INPUT

*&---------------------------------------------------------------------*
*&      Form  init_tree
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM init_tree.
* §1b. Create ALV Tree Control and corresponding Container.

* create container for alv-tree
  
DATA: l_tree_container_name(30TYPE c.

  l_tree_container_name = 
'CCONTAINER1'.

  
CREATE OBJECT g_custom_container
    
EXPORTING
      container_name              = l_tree_container_name
    
EXCEPTIONS
      cntl_error                  = 
1
      cntl_system_error           = 
2
      create_error                = 
3
      lifetime_error              = 
4
      lifetime_dynpro_dynpro_link = 
5.
  
IF sy-subrc <> 0.
    
MESSAGE x208(00WITH 'ERROR'(100).
  
ENDIF.

* create tree control
  
CREATE OBJECT g_alv_tree
    
EXPORTING
      parent                      = g_custom_container
      node_selection_mode         = cl_gui_column_tree=>node_sel_mode_single
      item_selection              = 
'X'
      no_html_header              = 
'X'
      no_toolbar                  = 
''
    
EXCEPTIONS
      cntl_error                  = 
1
      cntl_system_error           = 
2
      create_error                = 
3
      lifetime_error              = 
4
      illegal_node_selection_mode = 
5
      failed                      = 
6
      illegal_column_name         = 
7.
  
IF sy-subrc <> 0.
    
MESSAGE x208(00WITH 'ERROR'.                          "#EC NOTEXT
  
ENDIF.

* §2. Create Hierarchy-header
* The simple ALV Tree uses the text of the fields which were used
* for sorting to define this header. When you use
* the 'normal' ALV Tree the hierarchy is build up freely
* by the programmer this is not possible, so he has to define it
* himself.
  
DATA l_hierarchy_header TYPE treev_hhdr.
  
PERFORM build_hierarchy_header CHANGING l_hierarchy_header.

* §3. Create empty Tree Control
* IMPORTANT: Table 'gt_sflight' must be empty. Do not change this table
* (even after this method call). You can change data of your table
* by calling methods of CL_GUI_ALV_TREE.
* Furthermore, the output table 'gt_outtab' must be global and can
* only be used for one ALV Tree Control.
  
CALL METHOD g_alv_tree->set_table_for_first_display
    
EXPORTING
      i_structure_name    = 
'QMSM'
      is_hierarchy_header = l_hierarchy_header
    
CHANGING
      it_outtab           = gt_sflight. 
"table must be empty !

* §4. Create hierarchy (nodes and leaves)
  
PERFORM create_hierarchy.

* §5. Send data to frontend.
  
CALL METHOD g_alv_tree->frontend_update.

* wait for automatic flush at end of pbo
ENDFORM.                               " init_tree
*&---------------------------------------------------------------------*
*&      Form  build_hierarchy_header
*&---------------------------------------------------------------------*
*       build hierarchy-header-information
*----------------------------------------------------------------------*
*      -->P_L_HIERARCHY_HEADER  strucxture for hierarchy-header
*----------------------------------------------------------------------*
FORM build_hierarchy_header CHANGING
                               p_hierarchy_header 
TYPE treev_hhdr.

  p_hierarchy_header-heading = 
'Notification'(300).
  p_hierarchy_header-tooltip = 
'number'(400).
  p_hierarchy_header-width = 
40.
  p_hierarchy_header-width_pix = 
' '.

ENDFORM.                               " build_hierarchy_header
*&---------------------------------------------------------------------*
*&      Form  exit_program
*&---------------------------------------------------------------------*
*       free object and leave program
*----------------------------------------------------------------------*
FORM exit_program.

  
CALL METHOD g_custom_container->free.
  
LEAVE PROGRAM.

ENDFORM.                               " exit_program
*&---------------------------------------------------------------------*
*&      Form  create_hierarchy
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_hierarchy.

  
DATA: lt_sflight TYPE STANDARD TABLE OF qmsm ,
        ls_sflight 
LIKE LINE OF lt_sflight,
        l_yyyymm 
TYPE qmsm-qmnum,            "year and month of sflight-fldate
        l_yyyymm_last 
TYPE qmsm-qmnum,
        l_carrid 
LIKE qmsm-qmnum,
        l_carrid_last 
LIKE qmsm-qmnum.

  
DATA: l_month_key TYPE lvc_nkey,
        l_monthkey 
TYPE lvc_nkey,
        l_carrid_key 
TYPE lvc_nkey,
        l_carridkey 
TYPE lvc_nkey,
        l_last_key 
TYPE lvc_nkey,
        l_lastkey 
TYPE lvc_nkey.

  
DATA: lt_qmma TYPE STANDARD TABLE OF qmma ,
        ls_qmma 
LIKE LINE OF lt_qmma.
* §4a. Select data
  
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_sflight FROM qmsm ."WHERE qmnum = '000200000006 '. "UP TO g_max ROWS.

  
SORT lt_sflight BY qmnum .
* Note: The top level nodes do not correspond to a field of the
* output table. Instead we use data of the table to invent another
* hierarchy level above the levels that can be build by sorting.

* §4c. Add data to tree

  
LOOP AT lt_sflight INTO ls_sflight.
* Prerequesite: The table is sorted.
* You add a node everytime the values of a sorted field changes.
* Finally, the complete line is added as a leaf below the last
* node.
    l_yyyymm = ls_sflight-qmnum.
    l_carrid = ls_sflight-qmnum.
"ls_sflight-mncod.

* Top level nodes:
    
IF l_yyyymm <> l_yyyymm_last.      "on change of l_yyyymm
      l_yyyymm_last = l_yyyymm.

*Providing no key means that the node is added on top level:
      
PERFORM add_month USING    l_yyyymm ls_sflight
                                      
''
                             
CHANGING l_month_key.
* The month changed, thus, there is no predecessor carrier
      
CLEAR l_carrid_last.
    
ENDIF.

* Carrier nodes:
* (always inserted as child of the last month
*  which is identified by 'l_month_key')
    
IF l_carrid <> l_carrid_last.      "on change of l_carrid
      l_carrid_last = l_carrid.
*Folder Task
      
PERFORM add_carrid_line USING    ls_sflight
                                       l_month_key
                              
CHANGING l_carrid_key.
*Folder Activity
      l_carrid_last = l_carrid.
      
PERFORM add_carridline USING     ls_sflight
                                       l_month_key
                              
CHANGING l_carridkey.
    
ENDIF.

** Leaf:
** (always inserted as child of the last carrier
**  which is identified by 'l_carrid_key')
*Folder Task Item
    
PERFORM add_complete_line USING  ls_sflight
                                     l_carrid_key
                            
CHANGING l_last_key.
*Folder Activity Item
    
ON
 CHANGE OF ls_sflight-qmnum.
      
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_qmma FROM qmma WHERE qmnum = ls_sflight-qmnum.
      
LOOP AT lt_qmma INTO ls_qmma.
        
PERFORM add_completeline USING  ls_qmma
                                        l_carridkey
                            
CHANGING    l_lastkey.
      
ENDLOOP.
    
ENDON.
  
ENDLOOP.

ENDFORM.                               " create_hierarchy

*&---------------------------------------------------------------------*
*&      Form  add_month
*&---------------------------------------------------------------------*
FORM add_month  USING     p_yyyymm TYPE qmnum
                          p_flight  
TYPE qmsm
                          p_relat_key 
TYPE lvc_nkey
                
CHANGING  p_node_key TYPE lvc_nkey.

  
DATA: l_node_text TYPE lvc_value,
        ls_sflight 
TYPE qmsm,
        l_month(
15TYPE c.            "output string for month

* get month name for node text
  
PERFORM get_month USING p_yyyymm
                    
CHANGING l_month.
  
CONCATENATE 'Notification' '->'p_yyyymm INTO l_node_text .

* add node:
* ALV Tree firstly inserts this node as a leaf if you do not provide
* IS_NODE_LAYOUT with field ISFOLDER set. In form 'add_carrid_line'
* the leaf gets a child and thus ALV converts it to a folder
* automatically.
*
  
CALL METHOD g_alv_tree->add_node
    
EXPORTING
      i_relat_node_key = p_relat_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = l_node_text
      is_outtab_line   =  p_flight
    
IMPORTING
      e_new_node_key   = p_node_key.

ENDFORM.                               " add_month
*--------------------------------------------------------------------
FORM add_carrid_line USING     ps_sflight TYPE qmsm
                               p_relat_key 
TYPE lvc_nkey
                     
CHANGING  p_node_key TYPE lvc_nkey.

  
DATA: l_node_text TYPE lvc_value,
        ls_sflight 
TYPE qmsm.

* add node
* ALV Tree firstly inserts this node as a leaf if you do not provide
* IS_NODE_LAYOUT with field ISFOLDER set. In form 'add_carrid_line'
* the leaf gets a child and thus ALV converts it to a folder
* automatically.
*
*  l_node_text =  ps_sflight-mncod.
  
CONCATENATE 'Task' '' INTO l_node_text.
  
CALL METHOD g_alv_tree->add_node
    
EXPORTING
      i_relat_node_key = p_relat_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = l_node_text
      is_outtab_line   = ls_sflight
    
IMPORTING
      e_new_node_key   = p_node_key.

ENDFORM.                               " add_carrid_line
*&---------------------------------------------------------------------*
*&      Form  add_carridline
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PS_SFLIGHT   text
*      -->P_RELAT_KEY  text
*      -->P_NODE_KEY   text
*----------------------------------------------------------------------*
FORM add_carridline USING      ps_sflight TYPE qmsm
                               p_relat_key 
TYPE lvc_nkey
                     
CHANGING  p_node_key TYPE lvc_nkey.

  
DATA: l_node_text TYPE lvc_value,
        ls_sflight 
TYPE qmsm.

* add node
* ALV Tree firstly inserts this node as a leaf if you do not provide
* IS_NODE_LAYOUT with field ISFOLDER set. In form 'add_carrid_line'
* the leaf gets a child and thus ALV converts it to a folder
* automatically.
*
*  l_node_text =  ps_sflight-mncod.
  
CONCATENATE 'Activity' '' INTO l_node_text.
  
CALL METHOD g_alv_tree->add_node
    
EXPORTING
      i_relat_node_key = p_relat_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      i_node_text      = l_node_text
      is_outtab_line   = ls_sflight
    
IMPORTING
      e_new_node_key   = p_node_key.

ENDFORM.                               " add_carrid_line
*&---------------------------------------------------------------------*
*&      Form  add_complete_line
*&---------------------------------------------------------------------*
FORM add_completeline USING   ps_sflight TYPE qmma
                               p_relat_key 
TYPE lvc_nkey
                     
CHANGING  p_node_key TYPE lvc_nkey.

  
DATA: l_node_text TYPE lvc_value.

  
WRITE ps_sflight-manum TO l_node_text MM/DD/YYYY.

* add leaf:
* ALV Tree firstly inserts this node as a leaf if you do not provide
* IS_NODE_LAYOUT with field ISFOLDER set.
* Since these nodes will never get children they stay leaves
* (as intended).
*
  
CALL METHOD g_alv_tree->add_node
    
EXPORTING
      i_relat_node_key = p_relat_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      is_outtab_line   = ps_sflight
      i_node_text      = l_node_text
    
IMPORTING
      e_new_node_key   = p_node_key.

ENDFORM.                               " add_complete_line
*&---------------------------------------------------------------------*
*&      Form  add_complete_line
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PS_SFLIGHT   text
*      -->P_RELAT_KEY  text
*      -->P_NODE_KEY   text
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  GET_MONTH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_YYYYMM  text
*      <--P_L_MONTH  text
*----------------------------------------------------------------------*
FORM get_month USING    p_yyyymm
               
CHANGING p_month.
* Returns the name of month according to the digits in p_yyyymm

  
DATA: l_monthdigits(2TYPE c.

  l_monthdigits = p_yyyymm+
4(2).
  
CASE l_monthdigits.
    
WHEN '01'.
      p_month = 
'January'(701).
    
WHEN '02'.
      p_month = 
'February'(702).
    
WHEN '03'.
      p_month = 
'March'(703).
    
WHEN '04'.
      p_month = 
'April'(704).
    
WHEN '05'.
      p_month = 
'May'(705).
    
WHEN '06'.
      p_month = 
'June'(706).
    
WHEN '07'.
      p_month = 
'July'(707).
    
WHEN '08'.
      p_month = 
'August'(708).
    
WHEN '09'.
      p_month = 
'September'(709).
    
WHEN '10'.
      p_month = 
'October'(710).
    
WHEN '11'.
      p_month = 
'November'(711).
    
WHEN '12'.
      p_month = 
'December'(712).
  
ENDCASE.
  
CONCATENATE p_yyyymm+0(4'->' p_month INTO p_month.

ENDFORM.                               " GET_MONTH
*-----------------------------------------------------------------------
*&---------------------------------------------------------------------*
*&      Form  ADD_COMPLETE_LINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LS_SFLIGHT  text
*      -->P_L_CARRID_KEY  text
*      <--P_L_LAST_KEY  text
*----------------------------------------------------------------------*
FORM add_complete_line USING   ps_sflight TYPE qmsm
                               p_relat_key 
TYPE lvc_nkey
                     
CHANGING  p_node_key TYPE lvc_nkey.

  
DATA: l_node_text TYPE lvc_value.

  
WRITE ps_sflight-mncod TO l_node_text MM/DD/YYYY.

* add leaf:
* ALV Tree firstly inserts this node as a leaf if you do not provide
* IS_NODE_LAYOUT with field ISFOLDER set.
* Since these nodes will never get children they stay leaves
* (as intended).
*
  
CALL METHOD g_alv_tree->add_node
    
EXPORTING
      i_relat_node_key = p_relat_key
      i_relationship   = cl_gui_column_tree=>relat_last_child
      is_outtab_line   = ps_sflight
      i_node_text      = l_node_text
    
IMPORTING
      e_new_node_key   = p_node_key.


ENDFORM.                    " ADD_COMPLETE_LINE

OOPS ALV Steps

REPORT  ytest_alv.
TABLES: mara.
DATABEGIN OF it_tab OCCURS 0,
      matnr 
LIKE mara-matnr,
      ersda 
LIKE mara-ersda,  "creation date
      ernam 
LIKE mara-ernam,  "person created
      pstat 
LIKE mara-pstat,  "maint stat
      lvorm 
LIKE mara-lvorm,  "flg for deletion
      mtart 
LIKE mara-mtart,  "mat type
      meins 
LIKE mara-meins,  "uom
      
END OF it_tab.
DATA: wa_it_tab LIKE LINE OF it_tab.  "making work area
DATA: i_modified TYPE STANDARD TABLE OF mara,"For getting modified rows
      w_modified 
TYPE mara.
CLASS lcl_events_d0100 DEFINITION DEFERRED.
DATA: event_receiver1  TYPE REF TO lcl_events_d0100,
      i_selected_rows 
TYPE lvc_t_row,                "Selected Rows
      w_selected_rows 
TYPE lvc_s_row.
*---------------------------------------------------------------------*
*       CLASS lcl_events_d0100 DEFINITION
*---------------------------------------------------------------------*
CLASS lcl_events_d0100 DEFINITION.
  
PUBLIC SECTION.
    
METHODS
        handle_hotspot_click
        
FOR EVENT hotspot_click OF cl_gui_alv_grid
        
IMPORTING
             e_row_id
             e_column_id
             es_row_no
             sender.
*---code addition for ALV pushbuttons
*--for placing buttons
    
METHODS handle_toolbar_set
        
FOR EVENT toolbar OF cl_gui_alv_grid
        
IMPORTING
              e_object
              e_interactive.
*---user command on clicking a button
    
METHODS handle_user_command
        
FOR EVENT user_command OF cl_gui_alv_grid
        
IMPORTING
             e_ucomm.
ENDCLASS.                    "lcl_events_d0100 DEFINITION
TYPE-POOLS cndp.
DATA ok_code TYPE sy-ucomm.
*----------------------------------------------------------------------*
*                       FOR VARIANT
*----------------------------------------------------------------------*
DATA st_var TYPE disvariant .
DATA save TYPE c.
st_var-
report = 'YKC_ALV_OOPS'.
save = 
'A'.
*----------------------------------------------------------------------*
*         FOR LAYOUT
*----------------------------------------------------------------------*
DATA loyo TYPE lvc_s_layo.
*loyo-zebra = 'X'.
*loyo-detailinit = 'X'.
*loyo-info_fname = 'RED'.
*----------------------------------------------------------------------*
*           FOR FIELD CATALOG
*----------------------------------------------------------------------*
DATA fcat TYPE lvc_t_fcat.
DATA wa_fcat LIKE LINE OF fcat.
*--Declaration for toolbar buttons
DATA : ty_toolbar      TYPE stb_button.
DATA : e_object        TYPE REF TO cl_alv_event_toolbar_set,
       io_alv_toolbar  
TYPE REF TO cl_alv_event_toolbar_set.
*---custom container
DATA container TYPE REF TO cl_gui_custom_container.
DATA ref_grid TYPE REF TO cl_gui_alv_grid.
CREATE OBJECT container
  
EXPORTING
    container_name = 
'CONTAINER'."name of container in module pool
CREATE OBJECT ref_grid
  
EXPORTING
    i_parent = container.
*---------------------------------------------------------------------*
*       CLASS lcl_events_d0100 IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_events_d0100 IMPLEMENTATION.
*---method for hotspot
  
METHOD handle_hotspot_click.
    
DATA:ls_col_id   TYPE lvc_s_col.
    
READ TABLE it_tab INTO wa_it_tab
                             
INDEX e_row_id-index.
    
IF sy-subrc = 0.
      
CHECK ( wa_it_tab-matnr IS NOT INITIAL ).
      
CASE e_column_id-fieldname.
        
WHEN 'MATNR'.
          
call screen 200.
*---put your own logic as per requirement on hotspot click
        
WHEN OTHERS.
*       do nothing
      
ENDCASE.
      
CALL METHOD ref_grid->set_current_cell_via_id
        
EXPORTING
          is_row_id    = e_row_id
          is_column_id = ls_col_id.
    
ENDIF.
  
ENDMETHOD.                    "handle_hotspot_click
**---method for handling toolbar
  
METHOD handle_toolbar_set.
    
CLEAR ty_toolbar.
    ty_toolbar-
function = 'EDIT'"name of btn to  catch click
    ty_toolbar-butn_type = 
0.
    ty_toolbar-
text = 'EDIT'.
    
APPEND ty_toolbar    TO e_object->mt_toolbar.
  
ENDMETHOD.                    "handle_toolbar_set
  
METHOD handle_user_command.
    
DATA: wr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
    
DATA: lt_rows TYPE lvc_t_row,
          lt_index 
TYPE  lvc_s_row-index.
    
CASE e_ucomm.
      
WHEN 'EDIT'.
        
PERFORM save_database.
        
CALL METHOD ref_grid->refresh_table_display.
    
ENDCASE.
  
ENDMETHOD.                    "handle_user_command
ENDCLASS.                    "lcl_events_d0100 IMPLEMENTATION

START-
OF-SELECTION.
  
PERFORM get_data.
  
PERFORM field_catalog.
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text : getting data into internal table
*----------------------------------------------------------------------*
FORM get_data .
  
SELECT matnr ersda ernam pstat lvorm mtart meins
         
INTO TABLE it_tab
         
FROM mara
         
WHERE matnr GE '000000000000000001'.
ENDFORM.                    " get_data
*&---------------------------------------------------------------------*
*&      Form  field_catalog
*&---------------------------------------------------------------------*
*       text  :setting field cat
*----------------------------------------------------------------------*
FORM field_catalog .
  
REFRESH fcat.
  
DATA: lv_pos TYPE i.
  lv_pos = lv_pos + 
1.
  wa_fcat-fieldname = 
'MATNR'.
  wa_fcat-coltext = 
'Material No'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-
hotspot = 'X'.
  wa_fcat-outputlen = 
18.
  
APPEND wa_fcat TO fcat.
  
CLEAR wa_fcat.
  lv_pos = lv_pos + 
1.
  wa_fcat-fieldname = 
'ERSDA'.
  wa_fcat-coltext = 
'Creation Date'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-
edit = 'X'.
  wa_fcat-outputlen = 
18.
  
APPEND wa_fcat TO fcat.
  
CLEAR wa_fcat.
  lv_pos = lv_pos + 
1.
  wa_fcat-fieldname = 
'ERNAM'.
  wa_fcat-coltext = 
'Person Created'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-outputlen = 
18.
  
APPEND wa_fcat TO fcat.
  
CLEAR wa_fcat.
  lv_pos = lv_pos + 
1.
  wa_fcat-fieldname = 
'PSTAT'.
  wa_fcat-coltext = 
'Maint Stat'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-outputlen = 
18.
  
APPEND wa_fcat TO fcat.
  
CLEAR wa_fcat.
  lv_pos = lv_pos + 
1.
  wa_fcat-fieldname = 
'LVORM'.
  wa_fcat-coltext = 
'Flag For Deletion'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-outputlen = 
18.
  
APPEND wa_fcat TO fcat.
  
CLEAR wa_fcat.
  lv_pos = lv_pos + 
1.
  wa_fcat-fieldname = 
'MTART'.
  wa_fcat-coltext = 
'Material Type'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-outputlen = 
18.
  
APPEND wa_fcat TO fcat.
  
CLEAR wa_fcat.
  lv_pos = lv_pos + 
1.
  wa_fcat-fieldname = 
'MEINS'.
  wa_fcat-coltext = 
'UOM'.
  wa_fcat-col_pos = lv_pos.
  wa_fcat-outputlen = 
18.
  
APPEND wa_fcat TO fcat.
  
CLEAR wa_fcat.
  
CREATE OBJECT event_receiver1.
*---setting event handlers
  
SET HANDLER event_receiver1->handle_toolbar_set   FOR ref_grid.
  
SET HANDLER event_receiver1->handle_user_command  FOR ref_grid.
  
SET HANDLER event_receiver1->handle_hotspot_click FOR ref_grid.
*----------------------------------------------------------------------*
*           ALV GRID DISPLAY
*----------------------------------------------------------------------*
  
CALL METHOD ref_grid->set_table_for_first_display
    
EXPORTING
      is_variant      = st_var
      i_save          = save
      is_layout       = loyo
    
CHANGING
      it_outtab       = it_tab[]
      it_fieldcatalog = fcat.
  
CALL SCREEN 100.
ENDFORM.                    " field_catalog
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
*  CREATE OBJECT gr_events_d0100.
*
*  SET HANDLER gr_events_d0100->double_click
*
*                 FOR ref_grid.
  
CALL METHOD ref_grid->register_edit_event
    
EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.
  
SET PF-STATUS 'S100'.
  
SET TITLEBAR 'XXX'.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  exit  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit INPUT.
  
CASE ok_code.
    
WHEN 'EXIT' .
      
CLEAR ok_code.
      
LEAVE PROGRAM.
  
ENDCASE.
ENDMODULE.                 " exit  INPUT
*&---------------------------------------------------------------------*
*&      Form  SAVE_DATABASE
*&---------------------------------------------------------------------*
*       text : saving into DDIC from internal table
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM save_database .
*--- Getting the selected rows index
  
CALL METHOD ref_grid->get_selected_rows
    
IMPORTING
      et_index_rows = i_selected_rows.
*--- Through the index capturing the values of selected rows
  
LOOP AT i_selected_rows INTO w_selected_rows.
    
READ TABLE it_tab INTO wa_it_tab INDEX w_selected_rows-index.
    
IF sy-subrc EQ 0.
      
MOVE-CORRESPONDING wa_it_tab TO w_modified.
      
APPEND w_modified TO i_modified.
    
ENDIF.
  
ENDLOOP.
  
MODIFY mara FROM TABLE i_modified.
ENDFORM.                    " SAVE_DATABASE
*&---------------------------------------------------------------------*
*&      Module  EXIT_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module EXIT_COMMAND_0100 input.

CASE sy-ucomm.
  
WHEN 'EXIT' OR 'CANCEL' OR 'BACK'.
    
LEAVE PROGRAM.

  
WHEN OTHERS.
ENDCASE.


endmodule.                 " EXIT_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
  
SET PF-STATUS 'STAT_200'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_0200  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.

if sy-ucomm = 'BACK'.
  
leave to SCREEN 0.
endif.

ENDMODULE.