‎2007 Sep 02 7:09 AM
hi friends,,,
i am using oo alv to display report..
in that report..
i maintained EDIT bt in the application Tool bar using PF-Status..
if i press EDIT bt the entire grid( key fields and other fields) become editable..
but my requirement is i want all the key fields uneditable.and remaining fields editable if i press EDIT bt.
thanks in advance
‎2007 Sep 03 10:51 AM
Check below program
&----
*& Report ZEDIT_ALV
&----
REPORT zedit_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
Rewards if useful...
Regards,
Minal
‎2007 Sep 02 4:39 PM
Hello Deva
The following sample report <b>ZUS_SDN_ALV_GRID_EDITABLE</b> shows how to toggle editability of entire columns.
For more details on ALV grid programming please refer to the excellent tutorial
<a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/e8a1d690-0201-0010-b7ad-d9719a415907">An Easy Reference For ALV Grid Control</a>
Further useful transactions are:
SE83 (Reuse library)
DWDM (Development Worbench Samples)Finally, have a look at package <b>SLIS</b>. There are plenty of well documented sample reports (e.g. BCALV_EDIT_...).
*&---------------------------------------------------------------------*
*& Report ZUS_SDN_ALV_GRID_EDITABLE
*&
*&---------------------------------------------------------------------*
*& Screen '0100' contains no elements.
*& ok_code -> assigned to GD_OKCODE
*&
*& Flow logic:
* PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
**
* PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
*&
*&---------------------------------------------------------------------*
REPORT zus_sdn_alv_grid_editable.
DATA:
gd_okcode TYPE ui_func,
*
go_docking TYPE REF TO cl_gui_docking_container,
go_grid TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo,
gs_variant TYPE disvariant.
DATA:
gt_outtab TYPE STANDARD TABLE OF knb1.
START-OF-SELECTION.
SELECT * FROM knb1 INTO TABLE gt_outtab
WHERE bukrs = '1000'.
PERFORM init_controls.
* Display data
gs_layout-grid_title = 'Customers'.
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'KNB1'
is_layout = gs_layout
CHANGING
it_outtab = gt_outtab
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
PERFORM modify_fieldcatalog.
* Link the docking container to the target dynpro
CALL METHOD go_docking->link
EXPORTING
repid = syst-repid
dynnr = '0100'
* CONTAINER =
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* NOTE: dynpro does not contain any elements
CALL SCREEN '0100'.
* Flow logic of dynpro (does not contain any dynpro elements):
*
*PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
**
*PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'. " contains push button "DETAIL"
* SET TITLEBAR 'xxx'.
*** Refresh display of detail ALV list
** CALL METHOD go_grid2->refresh_table_display
*** EXPORTING
*** IS_STABLE =
*** I_SOFT_REFRESH =
** EXCEPTIONS
** OTHERS = 2.
** IF sy-subrc <> 0.
*** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
** ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
TRANSLATE gd_okcode TO UPPER CASE.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
* User has pushed button "Display/Change"
WHEN 'EDIT'.
PERFORM toggle_display_edit.
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form TOGGLE_DISPLAY_EDIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM toggle_display_edit .
IF ( go_grid->is_ready_for_input( ) = 0 ). " not editable
go_grid->set_ready_for_input( 1 ). " editable
ELSE.
go_grid->set_ready_for_input( 0 ). " not editable
ENDIF.
go_grid->refresh_table_display( ).
ENDFORM. " TOGGLE_DISPLAY_EDIT
*&---------------------------------------------------------------------*
*& Form INIT_CONTROLS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM init_controls .
* Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD go_docking->set_extension
EXPORTING
extension = 9999 " fill entire dynpro
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT go_grid
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
i_parent = go_docking
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " INIT_CONTROLS
*&---------------------------------------------------------------------*
*& Form MODIFY_FIELDCATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM modify_fieldcatalog .
* define local data
DATA:
ls_fcat TYPE lvc_s_fcat,
lt_fcat TYPE lvc_t_fcat.
CALL METHOD go_grid->get_frontend_fieldcatalog
IMPORTING
et_fieldcatalog = lt_fcat.
" set non-key fields editable
ls_fcat-edit = 'X'.
MODIFY lt_fcat FROM ls_fcat
TRANSPORTING edit
WHERE ( key NE 'X' ).
go_grid->set_frontend_fieldcatalog( lt_fcat ).
go_grid->set_ready_for_input( 0 ). " default = display
go_grid->refresh_table_display( ).
ENDFORM. " MODIFY_FIELDCATALOGRegards
Uwe
‎2007 Sep 03 8:24 AM
In the field catalog, you can specify a value for the attribute EDIT:
LOOP AT gt_fcat INTO ls_fcat.
CASE ls_fcat-fieldname.
WHEN 'KEYFLD1'.
ls_fcat-edit = ''. " Non-editable field
WHEN 'KEYFLD2'.
ls_fcat-edit = ''. " Non-editable field
WHEN 'FLD3.
ls_fcat-edit = 'X'. " Editable field
ENDCASE.
modify gt_fcat from ls_fcat.
endloop.
Regards,
Rao A
‎2007 Sep 03 10:51 AM
Check below program
&----
*& Report ZEDIT_ALV
&----
REPORT zedit_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
Rewards if useful...
Regards,
Minal
‎2007 Sep 03 1:49 PM
hi
The steps:
1) input the following field in ur internal Table: cell_style TYPE lvc_t_styl.
2) Using the condition for display enter the value to the field:
wal_cell_stl-style = cl_gui_alv_grid=>mc_style_enabled.
INSERT wal_cell_stl INTO TABLE wal_out_tab-cell_style.
* or
wal_cell_stl-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT wal_cell_stl INTO TABLE wal_out_tab-cell_style.
Hope That Helps
Anirban M.