Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

ALV Report

Former Member
0 Kudos

Hi Gurus,

please help me the sample code for alv report in which the coloums are editable. And also explain me theoritically.

Thanks in Advance

Ravi Kanth .G

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Thsi doc will be very useful for ALV,

https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/e8a1d690-0201-0010-b7ad-d9719a41...

And a sample code is below,


*&---------------------------------------------------------------------*
*& Report  ZKB_EDIT_ALV
*&---------------------------------------------------------------------*

REPORT  zkb_edit_alv.

DATA: i_zkb_test TYPE TABLE OF zkb_test,
      w_zkb_test TYPE zkb_test.

DATA: o_grid      TYPE REF TO cl_gui_alv_grid,
      o_container TYPE REF TO cl_gui_custom_container.

DATA: lt_fcat     TYPE lvc_t_fcat,
      ls_layo     TYPE lvc_s_layo,
      ls_sort     TYPE lvc_s_sort,
      lt_sort     TYPE lvc_t_sort,
      ls_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.

START-OF-SELECTION.

  CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS '9000'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  display_alv_9000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE display_alv_9000 OUTPUT.

  IF o_container IS INITIAL.

    SELECT * FROM zkb_test INTO TABLE i_zkb_test.

    IF cl_gui_alv_grid=>offline( ) IS INITIAL.

* Create a custom container control for ALV Control
      CREATE OBJECT o_container
          EXPORTING
              container_name = 'CONTAINER'.

* Create a ALV Control
      CREATE OBJECT o_grid
          EXPORTING i_parent = o_container.

      PERFORM build_field_catalgue.

      CALL METHOD o_grid->set_table_for_first_display
        EXPORTING
          i_save          = 'A'
          i_default       = 'X'
          is_layout       = ls_layo
        CHANGING
          it_outtab       = i_zkb_test
          it_fieldcatalog = lt_fcat
          it_sort         = lt_sort[].

    ENDIF.
  ENDIF.

ENDMODULE.                 " display_alv_9000  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  user_command_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
  CASE sy-ucomm .
    WHEN 'BACK' OR 'EXIT'.
      SET SCREEN 0.
      LEAVE SCREEN.
    WHEN 'UPDATE'.
      CALL METHOD o_grid->check_changed_data.
      MODIFY  zkb_test FROM TABLE i_zkb_test.
      IF sy-subrc EQ 0.
        COMMIT WORK AND WAIT.
        MESSAGE 'Data updated' TYPE 'I'.
      ENDIF.
* Refresh the same in ALV
      CALL METHOD o_grid->refresh_table_display.
  ENDCASE.

ENDMODULE.                 " user_command_9000  INPUT
*&---------------------------------------------------------------------*
*&      Form  build_field_catalgue
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_field_catalgue .

  DATA: ls_fcat TYPE lvc_s_fcat.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-cprog
      i_internal_tabname     = 'I_ZKB_TEST'
      i_structure_name       = 'ZKB_TEST'
      i_client_never_display = 'X'
    CHANGING
      ct_fieldcat            = ls_fieldcat[]
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE 'FCAT Error' TYPE 'I'.
    EXIT.
  ENDIF.

  LOOP AT  ls_fieldcat.
    CLEAR ls_fcat.
    ls_fcat-fieldname = ls_fieldcat-fieldname.     "Fieldname
    ls_fcat-ref_table = ls_fieldcat-tabname.       "DDIC ref struct
    ls_fcat-inttype   = ls_fieldcat-inttype.       "Data type
    ls_fcat-outputlen = ls_fieldcat-outputlen.     "Column width
    ls_fcat-coltext   = ls_fieldcat-seltext_m.     "Column Header
    ls_fcat-seltext   = ls_fieldcat-seltext_m.     "Column Desc
    ls_fcat-ref_field = ls_fieldcat-ref_fieldname. "Reference field
    ls_fcat-ref_table = ls_fieldcat-ref_tabname.   "Reference table
    CASE  ls_fieldcat-fieldname.
      WHEN 'MANDT' OR 'SNO'.
        ls_fcat-edit      = ' '.
      WHEN OTHERS.
        ls_fcat-edit      = 'X'.
    ENDCASE.
    APPEND ls_fcat TO lt_fcat.
  ENDLOOP.

ENDFORM.                    " build_field_catalgue

Regards

Kathirvel

10 REPLIES 10

Former Member
0 Kudos

Thsi doc will be very useful for ALV,

https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/e8a1d690-0201-0010-b7ad-d9719a41...

And a sample code is below,


*&---------------------------------------------------------------------*
*& Report  ZKB_EDIT_ALV
*&---------------------------------------------------------------------*

REPORT  zkb_edit_alv.

DATA: i_zkb_test TYPE TABLE OF zkb_test,
      w_zkb_test TYPE zkb_test.

DATA: o_grid      TYPE REF TO cl_gui_alv_grid,
      o_container TYPE REF TO cl_gui_custom_container.

DATA: lt_fcat     TYPE lvc_t_fcat,
      ls_layo     TYPE lvc_s_layo,
      ls_sort     TYPE lvc_s_sort,
      lt_sort     TYPE lvc_t_sort,
      ls_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.

START-OF-SELECTION.

  CALL SCREEN 9000.

*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS '9000'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  display_alv_9000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE display_alv_9000 OUTPUT.

  IF o_container IS INITIAL.

    SELECT * FROM zkb_test INTO TABLE i_zkb_test.

    IF cl_gui_alv_grid=>offline( ) IS INITIAL.

* Create a custom container control for ALV Control
      CREATE OBJECT o_container
          EXPORTING
              container_name = 'CONTAINER'.

* Create a ALV Control
      CREATE OBJECT o_grid
          EXPORTING i_parent = o_container.

      PERFORM build_field_catalgue.

      CALL METHOD o_grid->set_table_for_first_display
        EXPORTING
          i_save          = 'A'
          i_default       = 'X'
          is_layout       = ls_layo
        CHANGING
          it_outtab       = i_zkb_test
          it_fieldcatalog = lt_fcat
          it_sort         = lt_sort[].

    ENDIF.
  ENDIF.

ENDMODULE.                 " display_alv_9000  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  user_command_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
  CASE sy-ucomm .
    WHEN 'BACK' OR 'EXIT'.
      SET SCREEN 0.
      LEAVE SCREEN.
    WHEN 'UPDATE'.
      CALL METHOD o_grid->check_changed_data.
      MODIFY  zkb_test FROM TABLE i_zkb_test.
      IF sy-subrc EQ 0.
        COMMIT WORK AND WAIT.
        MESSAGE 'Data updated' TYPE 'I'.
      ENDIF.
* Refresh the same in ALV
      CALL METHOD o_grid->refresh_table_display.
  ENDCASE.

ENDMODULE.                 " user_command_9000  INPUT
*&---------------------------------------------------------------------*
*&      Form  build_field_catalgue
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_field_catalgue .

  DATA: ls_fcat TYPE lvc_s_fcat.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-cprog
      i_internal_tabname     = 'I_ZKB_TEST'
      i_structure_name       = 'ZKB_TEST'
      i_client_never_display = 'X'
    CHANGING
      ct_fieldcat            = ls_fieldcat[]
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE 'FCAT Error' TYPE 'I'.
    EXIT.
  ENDIF.

  LOOP AT  ls_fieldcat.
    CLEAR ls_fcat.
    ls_fcat-fieldname = ls_fieldcat-fieldname.     "Fieldname
    ls_fcat-ref_table = ls_fieldcat-tabname.       "DDIC ref struct
    ls_fcat-inttype   = ls_fieldcat-inttype.       "Data type
    ls_fcat-outputlen = ls_fieldcat-outputlen.     "Column width
    ls_fcat-coltext   = ls_fieldcat-seltext_m.     "Column Header
    ls_fcat-seltext   = ls_fieldcat-seltext_m.     "Column Desc
    ls_fcat-ref_field = ls_fieldcat-ref_fieldname. "Reference field
    ls_fcat-ref_table = ls_fieldcat-ref_tabname.   "Reference table
    CASE  ls_fieldcat-fieldname.
      WHEN 'MANDT' OR 'SNO'.
        ls_fcat-edit      = ' '.
      WHEN OTHERS.
        ls_fcat-edit      = 'X'.
    ENDCASE.
    APPEND ls_fcat TO lt_fcat.
  ENDLOOP.

ENDFORM.                    " build_field_catalgue

Regards

Kathirvel

Former Member
0 Kudos

hi

good

go to se38 give BCALV* and than put f4 ,you ll get lots of example related to various scenarios,test them and use for your requirement.

Thanks

mrutyun^

Former Member
0 Kudos

Hi RaviKanth,

when you are filling up the FIELDCATALOG you have to give this statement.

WA_FIELDCAT-FIELDNAME = 'EBELP'.

WA_FIELDCAT-COL_POS = '2'.

WA_FIELDCAT-JUST = 'C'.

WA_FIELDCAT-SELTEXT_L = 'Item Number'.

WA_FIELDCAT-LOWERCASE = 'X'.

<b> WA_FIELDCAT-EDIT = 'X'.</b> " This is the statement.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

Thanks

Vikranth Khimavath

Message was edited by:

Khimavath Vikranth

0 Kudos

Hi All,

Thanks for giving valuable answers.

Vikranth can u give me the answer after editing we have to save those changes into the database. For that what is the code we have to written.

Thanks,

Ravi Kanth

Former Member
0 Kudos

Hi Ravi,

Check this link.It has a sample code and theory.

http://www.sapdevelopment.co.uk/reporting/alv/alvgrid_editable.htm

regards,

Priya.

Former Member
0 Kudos

Hello Ravi,

<b>To modify database or ztable from the ALV grid</b>,you need to do the following:

---You have to modify the field Catalog fields (fields that you want to make <b>editable).Set the field EDIT as 'X'</b>.For example if you want to make the field below editable:

ls_fcat-fieldname = 'CARRID'.

...

...

<b>ls_fcat-edit = 'X'.</b>

APPEND ls_fcat TO pt_fieldcat.

---Call the method below before you call the set_table_for_first_display.

<b>CALL METHOD ALV_GRID_INSTANCE->set_ready_for_input</b>

EXPORTING

i_ready_for_input = 0. ( For Display ) and ('1' for Edit )

After this put the set_table_for_first_display.

Now if the ALV data has changed,and you want to change the database or ztable,then in your pf status give a function code for SAVE button in the GUI.

In the PAI of the screen,in user command module write the following:

WHEN 'SAVE'.

<b>call method gr_alvgrid->check_changed_data</b>

importing e_valid = l_valid.

if l_valid = 'X'.

<b>MODIFY spfli FROM TABLE itab_spfli.</b>

endif.

(l_valid is a flag.

DATA:l_valid type c.

If you want to check if the user has entered any value on the grid, use the Method : CALL METHOD gr_alvgrid->check_changed_data.

This method returns a flag l_valid which can be checked to see if the data on the ALV grid has been changed or not.)

Also check:

<b>https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/ec31e990-0201-0010-f4b6-c02d876ce033</b>

Regards,

Beejal

**Reward if this helps

0 Kudos

Hi Rawal,

Thanks for your valuable suggestion. can you explain that concept with out object oriented. coz am using reuse_alv_grid_display.

Thanks

0 Kudos

1. To make a field editable , in the fieldcatalog

wa_fieldcat-edit = 'X'.

2. to get the changed data reflected in internal table

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

I_CALLBACK_USERCOMMAND = 'USER_COMMAND'.

3. FORM USER_COMMAND using p_ucomm like sy-ucomm ......

Data ref1 type ref to cl_gui_alv_grid.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

IMPORTING

E_GRID = ref1.

call method ref1->check_changed_data

CASE P_UCOMM.

ENDCASE.

ENDFORM.

Former Member
0 Kudos

hi,

inorder to change in alv grid and modify the changes to database table

we have to use field catalog-edit = x

and use user-command for modifying database

thank u

former_member181995
Active Contributor
0 Kudos

IN WHICH COLUMN U WANT TO MAKE IT EDITABLE NOTHING TO DO

MUCH FOR IT...AM SENDING U A SAMPLE CODE FOR IT..

JUST WRITE IT IN UR OWN CODE WHERE U DEFINE THE FIELD CATALOD FOR ALV DISPLAY..

wa_fieldcat-fieldname = 'EXNUM'.

wa_fieldcat-seltext_m = 'EXCISE INVOICE'.

wa_fieldcat-tabname = 'T_FINAL'.

WA_FIELDCAT-EDIT = 'X'. " THIS MAKES PERTICULAR COLUMN EDITABLE

APPEND wa_fieldcat TO it_fieldcat.

CLEAR wa_fieldcat.

ENJOY...