2007 May 03 12:20 PM
Hi
I'm looking to develop a simple report with an ALV grid at a summary level, with either a drill down or separate screen for the lower level items.
Can anyone direct me to a demo SAP program that has the functionality I'm looking for?
2007 May 03 12:22 PM
Hi,
check this program.
REPORT ZBHALV_LIST_GRID2.
TABLES:MARA.
DATA:BEGIN OF ITAB OCCURS 0,
MATNR LIKE MARA-MATNR,
ERSDA LIKE MARA-ERSDA,
ERNAM LIKE MARA-ERNAM,
MBRSH LIKE MARA-MBRSH,
END OF ITAB.
TYPE-POOLS:SLIS.
DATA:FIELDCAT1 TYPE SLIS_T_FIELDCAT_ALV.
DATA:EVE TYPE SLIS_T_EVENT WITH HEADER LINE.
DATA:HEAD TYPE SLIS_T_LISTHEADER WITH HEADER LINE.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = 'ITAB'
I_STRUCTURE_NAME = 'ITAB'
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = SY-REPID
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = FIELDCAT1.
EVE-NAME = 'TOP_OF_PAGE'.
EVE-FORM = 'HEADER'.
APPEND EVE.
CLEAR EVE.
EVE-NAME = 'END_OF_LIST'.
EVE-FORM = 'LISTEND'.
APPEND EVE.
CLEAR EVE.
EVE-NAME = 'TOP_OF_LIST'.
EVE-FORM = 'LISTTOP'.
APPEND EVE.
CLEAR EVE.
SELECT * FROM MARA INTO CORRESPONDING FIELDS OF TABLE ITAB UP TO 20 ROWS
.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_STRUCTURE_NAME = 'ITAB'
IT_FIELDCAT = FIELDCAT1
I_DEFAULT = 'X'
I_SAVE = 'A'
IT_EVENTS = EVE[]
TABLES
T_OUTTAB = ITAB.
FORM HEADER.
REFRESH HEAD.
HEAD-TYP = 'H'.
HEAD-INFO = 'GENERAL MATERIAL DATA'.
APPEND HEAD.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEAD[].
ENDFORM.
FORM LISTEND.
REFRESH HEAD.
HEAD-TYP = 'H'.
HEAD-INFO = 'END OF THE LIST'.
APPEND HEAD.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEAD[].
ENDFORM.
FORM LISTTOP.
REFRESH HEAD.
HEAD-TYP = 'H'.
HEAD-INFO = 'TOP OF THE LIST'.
APPEND HEAD.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEAD[].
ENDFORM.
rgds,
bharat.
the following code will help you.
DATA: save_ok LIKE sy-ucomm,
g_container TYPE scrfname VALUE 'CC1',
g_grid TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container,
gt_fieldcat TYPE lvc_t_fcat,
g_max TYPE i VALUE 100.
declarations for top of page event
Data: gv_c_split type ref to cl_gui_splitter_container,
gv_c_ptv type ref to cl_gui_container,
gv_alv_ptv type ref to cl_gui_alv_grid,
o_dd_doc TYPE REF TO cl_dd_document,
text TYPE sdydo_text_element,
o_split type ref to cl_gui_easy_splitter_container,
o_top type ref to cl_gui_container,
o_bot type ref to cl_gui_container,
gv_c_vp type ref to cl_gui_container.
end of declaration for top of page.
CLASS lcl_event_receiver DEFINITION DEFERRED.
*class lcl_application_dc definition deferred.
DATA: o_event_receiver TYPE REF TO lcl_event_receiver.
g_dc type ref to lcl_application_dc.
DATA: gt_outtab TYPE TABLE OF sbook.
*----
*
CLASS lcl_event_receiver DEFINITION
*----
*
*
*----
*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS: handle_f4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display,
handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid
IMPORTING e_dyndoc_id.
METHODS: reset.
METHODS: show_f4.
PRIVATE SECTION.
**
attributes for creating an own F4-Help
(using a second ALV Grid Control
**
DATA: f4_grid TYPE REF TO cl_gui_alv_grid,
f4_custom_container TYPE REF TO cl_gui_custom_container.
TYPES: BEGIN OF ty_f4.
TYPES: value TYPE s_class.
TYPES: descr(20) TYPE c.
TYPES: END OF ty_f4.
DATA: f4_itab TYPE TABLE OF ty_f4.
DATA: f4_fieldcatalog TYPE lvc_t_fcat.
**
attributes to store event parameters
(after the CALL SCREEN command, the event parameters
are not accessible)
**
TYPES: BEGIN OF onf4_event_parameters_type.
TYPES: c_fieldname TYPE lvc_fname.
TYPES: cs_row_no TYPE lvc_s_roid.
TYPES: cr_event_data TYPE REF TO cl_alv_event_data.
TYPES: ct_bad_cells TYPE lvc_t_modi.
TYPES: c_display TYPE char01.
TYPES: END OF onf4_event_parameters_type.
DATA: f4_params TYPE onf4_event_parameters_type.
**
Methods to create own F4-Help
(This is done using a second ALV Grid Control)
**
METHODS: init_f4.
METHODS: build_fieldcatalog.
METHODS: fill_f4_itab .
METHODS: on_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING es_row_no.
ENDCLASS. "lcl_application_f4 DEFINITION
*----
*
CLASS lcl_event_receiver IMPLEMENTATION
*----
*
*
*----
*
CLASS lcl_event_receiver IMPLEMENTATION.
*§2. Implement an event handler method for event ONF4.
METHOD handle_f4.
Save event parameter as global attributes of this class
(maybe solved differently if you use a function module!)
f4_params-c_fieldname = e_fieldname.
f4_params-cs_row_no = es_row_no.
f4_params-cr_event_data = er_event_data.
f4_params-ct_bad_cells = et_bad_cells.
f4_params-c_display = e_display.
*§3. Call your own f4 help. To customize your popup check
first if the cell is ready for input (event parameter E_DISPLAY).
(parameter E_DISPLAY is checked later in method on_double_click)
(Probably, you would call a function module at this point,
pass the needed event parameter and call the popup screen
within that function module. This is not done in this example
to avoid scattering its code).
CALL SCREEN 101 STARTING AT 10 10.
*§7. Inform the ALV Grid Control that an own f4 help has been processed
to suppress the standard f4 help.
er_event_data->m_event_handled = 'X'.
ENDMETHOD. "on_f4
*----
-
METHOD show_f4.
DATA: ls_outtab TYPE sbook.
initialize own f4 help if needed
IF f4_custom_container IS INITIAL.
CALL METHOD init_f4.
ENDIF.
CALL METHOD fill_f4_itab.
refresh list of values in f4 help and show it
CALL METHOD f4_grid->refresh_table_display.
CAUTION: Do not use method REFRESH_TABLE_DISPLAY for
your editable ALV Grid instances while handling events
DATA_CHANGED or ONf4. You would overwrite intermediate
values of your output table on frontend.
'f4_grid' is a non-editable ALV Grid Control for the
application specific F4-Help. Therefore, calling
REFRESH_TABLE_DISPLAY for this instance has no
negative effect.
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD. "show_f4
*----
-
METHOD init_f4.
DATA: ls_f4_layout TYPE lvc_s_layo.
build fieldcatalog entries for f4
CALL METHOD build_fieldcatalog.
create controls
CREATE OBJECT f4_custom_container
EXPORTING container_name = 'CC_ONF4'.
CREATE OBJECT f4_grid
EXPORTING i_parent = f4_custom_container.
hide toolbar
ls_f4_layout-no_toolbar = 'X'.
CALL METHOD f4_grid->set_table_for_first_display
EXPORTING
is_layout = ls_f4_layout
CHANGING
it_fieldcatalog = f4_fieldcatalog
it_outtab = f4_itab.
register event double click on backend
SET HANDLER me->on_double_click FOR f4_grid.
flush since 'ls_layout' is local!
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD. "init_f4
*----
-
METHOD fill_f4_itab.
DATA ls_f4_itab TYPE ty_f4.
Delete all entries in f4_itab to determine
offered values dynamically
CLEAR f4_itab[].
ls_f4_itab-value = 'C'.
ls_f4_itab-descr = text-t03. "Business Class
APPEND ls_f4_itab TO f4_itab.
ls_f4_itab-value = 'Y'.
ls_f4_itab-descr = text-t04. "Economie Class
APPEND ls_f4_itab TO f4_itab.
ls_f4_itab-value = 'F'.
ls_f4_itab-descr = text-t05. "First Class
APPEND ls_f4_itab TO f4_itab.
ENDMETHOD. "fill_f4_itab
*----
-
METHOD build_fieldcatalog.
DATA: ls_fcat TYPE lvc_s_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'VALUE'.
ls_fcat-coltext = text-t02.
ls_fcat-inttype = 'S_CLASS'.
ls_fcat-outputlen = 5.
APPEND ls_fcat TO f4_fieldcatalog.
CLEAR ls_fcat.
ls_fcat-fieldname = 'DESCR'.
ls_fcat-coltext = text-t01.
ls_fcat-inttype = 'C'.
ls_fcat-outputlen = 20.
APPEND ls_fcat TO f4_fieldcatalog.
ENDMETHOD. "build_fieldcatalog
*----
-
METHOD on_double_click.
*§5. If not already caught by your own f4 help, check whether
the triggered cell was ready for input by using E_DISPLAY
and if not, exit.
IF f4_params-c_display EQ 'X'.
LEAVE SCREEN.
ENDIF.
*§6. After the user selected a value, pass it to the ALV Grid Control:
*§ 6a. Define a field symbol of type: LVC_T_MODI and a structure of
type LVC_S_MODI to pass the value later on.
FIELD-SYMBOLS TYPE lvc_t_modi.
DATA: ls_modi TYPE lvc_s_modi,
ls_f4_itab TYPE ty_f4.
*§ 6b. Dereference attribute M_DATA into your field symbol and add
the selected value to the table to which this symbol points to.
ASSIGN f4_params-cr_event_data->m_data->* TO .
LEAVE TO SCREEN 0.
ENDMETHOD. "on_double_click
*----
-
METHOD reset.
FIELD-SYMBOLS display_document
EXPORTING parent = o_top.
ENDMETHOD. "handle_top_of_page
ENDCLASS. "lcl_application_f4 IMPLEMENTATION
END-OF-SELECTION.
CALL SCREEN 100.
*----
*
MODULE PBO OUTPUT *
*----
*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
SET TITLEBAR 'MAIN100'.
IF g_custom_container IS INITIAL.
PERFORM create_and_init_alv CHANGING gt_outtab[]
gt_fieldcat.
ENDIF.
ENDMODULE. "pbo OUTPUT
*----
*
MODULE PAI INPUT *
*----
*
MODULE pai INPUT.
save_ok = sy-ucomm.
CLEAR sy-ucomm.
CASE save_ok.
WHEN 'EXIT' OR 'BACK' OR 'CANCEL'.
PERFORM exit_program.
WHEN 'SWITCH'.
PERFORM switch_edit_mode.
WHEN OTHERS.
do nothing
ENDCASE.
ENDMODULE. "pai INPUT
*----
*
FORM EXIT_PROGRAM *
*----
*
FORM exit_program.
LEAVE PROGRAM.
ENDFORM. "exit_program
*&----
*
*& Form build_fieldcat
*&----
*
text
*----
*
-->PT_FIELDCAT text
*----
*
FORM build_fieldcat CHANGING pt_fieldcat TYPE lvc_t_fcat.
DATA ls_fcat TYPE lvc_s_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'SBOOK'
CHANGING
ct_fieldcat = pt_fieldcat.
LOOP AT pt_fieldcat INTO ls_fcat.
Exchange smoker field with invoice field - just to
make the dependance between SMOKER and CLASS more transparent
(Smoking is only allowed in the first class).
IF ls_fcat-fieldname EQ 'SMOKER'.
ls_fcat-col_pos = 11.
ls_fcat-outputlen = 10.
ls_fcat-edit = 'X'.
Field 'checktable' is set to avoid shortdumps that are caused
by inconsistend data in check tables. You may comment this out
when the test data of the flight model is consistent in your system.
ls_fcat-checktable = '!'. "do not check foreign keys
MODIFY pt_fieldcat FROM ls_fcat.
ELSEIF ls_fcat-fieldname EQ 'INVOICE'.
ls_fcat-col_pos = 7.
MODIFY pt_fieldcat FROM ls_fcat.
ELSEIF ls_fcat-fieldname EQ 'CLASS'.
ls_fcat-edit = 'X'.
ls_fcat-outputlen = 5.
ls_fcat-checktable = '!'. "do not check foreign keys
MODIFY pt_fieldcat FROM ls_fcat.
ENDIF.
ENDLOOP.
ENDFORM. "build_fieldcat
*&----
*
*& Form create_and_init_alv
*&----
*
text
*----
*
-->PT_OUTTAB text
-->PT_FIELDCAT text
*----
*
FORM create_and_init_alv CHANGING pt_outtab TYPE STANDARD TABLE
pt_fieldcat TYPE lvc_t_fcat.
DATA: lt_exclude TYPE ui_functions,
ls_layout TYPE lvc_s_layo.
CREATE OBJECT g_custom_container
EXPORTING container_name = g_container.
CREATE OBJECT g_grid
EXPORTING i_parent = g_custom_container.
CREATE OBJECT gv_c_split
EXPORTING
link_dynnr = lv_dynnr
link_repid = lv_repid
parent = g_custom_container
rows = 2
columns = 1
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
others = 3 .
CALL METHOD gv_c_split->set_border
EXPORTING
border = space.
CALL METHOD gv_c_split->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = gv_c_ptv.
CALL METHOD gv_c_split->set_row_height
EXPORTING
id = 1
height = 20
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 6 .
CALL METHOD gv_c_split->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = gv_c_vp .
CALL METHOD gv_c_split->set_row_height
EXPORTING
id = 2
height = 10
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3 .
CREATE OBJECT o_split
EXPORTING
parent = gv_c_ptv
with_border = 1
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
others = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
o_top = o_split->top_left_container.
o_bot = o_split->bottom_right_container.
CREATE OBJECT gv_alv_ptv
EXPORTING
i_parent = o_bot
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
others = 5 .
CREATE OBJECT g_grid
EXPORTING
i_parent = gv_c_vp
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
others = 5 .
PERFORM build_fieldcat CHANGING pt_fieldcat.
Optionally restrict generic functions to 'change only'.
(The user shall not be able to add new lines).
PERFORM exclude_tb_functions CHANGING lt_exclude.
PERFORM build_data CHANGING pt_outtab.
ls_layout-grid_title = 'F4 help implemented for field CLASS'.
CREATE OBJECT o_event_receiver.
SET HANDLER o_event_receiver->handle_top_of_page FOR gv_alv_ptv.
SET HANDLER o_event_receiver->handle_top_of_page FOR g_grid.
CREATE OBJECT o_dd_doc EXPORTING style = 'ALV_GRID'
no_margins = 'X'.
CALL METHOD gv_alv_ptv->set_table_for_first_display
EXPORTING
is_layout = ls_layout
CHANGING
it_outtab = pt_outtab[]
it_fieldcatalog = pt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
it_toolbar_excluding = lt_exclude
is_layout = ls_layout
CHANGING
it_fieldcatalog = pt_fieldcat
it_outtab = pt_outtab[].
CALL METHOD gv_alv_ptv->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = o_dd_doc.
register f4 for field CLASS
PERFORM register_events.
Set editable cells to ready for input initially
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ENDFORM. "CREATE_AND_INIT_ALV
*&----
*
*& Form exclude_tb_functions
*&----
*
text
*----
*
-->PT_EXCLUDE text
*----
*
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
Only allow to change data not to create new entries (exclude
generic functions).
DATA ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND ls_exclude TO pt_exclude.
ENDFORM. " EXCLUDE_TB_FUNCTIONS
*&----
*
*& Form build_data
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM build_data CHANGING pt_outtab TYPE STANDARD TABLE.
DATA: ls_sbook TYPE sbook,
l_index TYPE i.
SELECT * FROM sbook INTO TABLE gt_outtab UP TO g_max ROWS.
IF sy-subrc NE 0.
PERFORM generate_entries CHANGING pt_outtab.
ENDIF.
LOOP AT pt_outtab INTO ls_sbook.
l_index = sy-tabix.
CLEAR ls_sbook-class.
Alternate between smoker and non smoker to make
it more obvious what this example is about
l_index = l_index MOD 2.
IF l_index EQ 1.
ls_sbook-smoker = 'X'.
ELSE.
ls_sbook-smoker = ' '.
ENDIF.
MODIFY pt_outtab FROM ls_sbook.
ENDLOOP.
ENDFORM. " build_data
*&----
*
*& Form generate_entries
*&----
*
text
*----
*
-->PT_SBOOK text
*----
*
FORM generate_entries CHANGING pt_sbook TYPE STANDARD TABLE.
DATA: ls_sbook TYPE sbook,
l_month(2) TYPE c,
l_day(2) TYPE c,
l_date(8) TYPE c,
l_prebookid TYPE i.
ls_sbook-carrid = 'LH'.
ls_sbook-connid = '0400'.
ls_sbook-forcurkey = 'DEM'.
ls_sbook-loccurkey = 'USD'.
ls_sbook-custtype = 'B'.
DO 110 TIMES.
l_prebookid = sy-index.
ls_sbook-forcuram = sy-index * 10.
ls_sbook-loccuram = ls_sbook-loccuram * 2.
ls_sbook-customid = sy-index.
ls_sbook-counter = 18.
ls_sbook-agencynum = 11.
l_month = sy-index / 10 + 1.
DO 2 TIMES.
l_day = 3 + l_month + sy-index * 2.
l_date+0(4) = '2000'.
l_date+4(2) = l_month.
l_date+6(2) = l_day.
ls_sbook-fldate = l_date.
SUBTRACT 3 FROM l_day.
ls_sbook-order_date+0(6) = l_date+0(6).
ls_sbook-order_date+6(2) = l_day.
ls_sbook-bookid = l_prebookid * 2 + sy-index.
IF sy-index EQ 1.
ls_sbook-smoker = 'X'.
ELSE.
ls_sbook-smoker = space.
ENDIF.
ls_sbook-luggweight = l_prebookid * 10.
IF ls_sbook-luggweight GE 1000.
ls_sbook-wunit = 'G'.
ls_sbook-class = 'C'.
ELSE.
ls_sbook-wunit = 'KG'.
ls_sbook-class = 'Y'.
ENDIF.
IF ls_sbook-bookid > 40 AND ls_sbook-wunit EQ 'KG'.
ls_sbook-invoice = 'X'.
ENDIF.
IF ls_sbook-bookid EQ 2.
ls_sbook-cancelled = 'X'.
ls_sbook-class = 'F'.
ENDIF.
APPEND ls_sbook TO pt_sbook.
ENDDO.
ENDDO.
ENDFORM. " generate_entries
*&----
*
*& Form register_events
*&----
*
text
*----
*
FORM register_events.
*§1. Register event ONF4 at frontend using method
register_f4_for_fields. For this purpose, you pass a table
with all fields, for which you want to implement your own
f4 help.
remark: If you want to use an own f4 help for fields where
no standard f4 help exists set field F4AVAILABL for
this field in the fieldcatalog.
DATA: lt_f4 TYPE lvc_t_f4 WITH HEADER LINE.
CLEAR lt_f4.
lt_f4-fieldname = 'CLASS'.
If you would like to deregister the field again,
pass value SPACE with field 'register'.
lt_f4-register = 'X'.
*§ 1b. If the value range in your f4 help depends on other
values of cells that are input enabled, set the
GETBEFORE parameter.
The consequence is that the ALV Grid Control raises
event DATA_CHANGED before the f4 help is called to
check values that the f4 help depends on.
lt_f4-getbefore = 'X'.
The next parameter is used to change values after onf4 has
been processed. The ALV Grid Control will raise
event DATA_CHANGED afterwards, if you set it.
lt_f4-chngeafter = space.
INSERT TABLE lt_f4.
CALL METHOD g_grid->register_f4_for_fields
EXPORTING
it_f4 = lt_f4[].
register events for abap objects (backend)
SET HANDLER o_event_receiver->handle_f4 FOR g_grid.
ENDFORM. " register_events
*----
*
MODULE status_0101 OUTPUT
*----
*
*
*----
*
MODULE status_0101 OUTPUT.
SET PF-STATUS 'POPUP'.
SET TITLEBAR 'POPUP'.
CALL METHOD o_event_receiver->show_f4.
ENDMODULE. " STATUS_0101 OUTPUT
*&----
*
*& Module USER_COMMAND_0101 INPUT
*&----
*
text
*----
*
MODULE user_command_0101 INPUT.
PERFORM user_command.
ENDMODULE. " USER_COMMAND_0101 INPUT
*&----
*
*& Form user_command
*&----
*
text
*----
*
FORM user_command.
DATA: save_ok TYPE sy-ucomm.
save_ok = sy-ucomm.
CLEAR sy-ucomm.
CASE save_ok.
WHEN 'CANCEL'.
CALL METHOD o_event_receiver->reset.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM. "user_command
*&----
*
*& Form switch_edit_mode
*&----
*
text
*----
*
FORM switch_edit_mode.
IF g_grid->is_ready_for_input( ) EQ 0.
set edit enabled cells ready for input
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ELSE.
lock edit enabled cells against input
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
ENDIF.
ENDFORM. "switch_edit_mode
2007 May 03 12:22 PM
Hi,
check this program.
REPORT ZBHALV_LIST_GRID2.
TABLES:MARA.
DATA:BEGIN OF ITAB OCCURS 0,
MATNR LIKE MARA-MATNR,
ERSDA LIKE MARA-ERSDA,
ERNAM LIKE MARA-ERNAM,
MBRSH LIKE MARA-MBRSH,
END OF ITAB.
TYPE-POOLS:SLIS.
DATA:FIELDCAT1 TYPE SLIS_T_FIELDCAT_ALV.
DATA:EVE TYPE SLIS_T_EVENT WITH HEADER LINE.
DATA:HEAD TYPE SLIS_T_LISTHEADER WITH HEADER LINE.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = 'ITAB'
I_STRUCTURE_NAME = 'ITAB'
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = SY-REPID
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = FIELDCAT1.
EVE-NAME = 'TOP_OF_PAGE'.
EVE-FORM = 'HEADER'.
APPEND EVE.
CLEAR EVE.
EVE-NAME = 'END_OF_LIST'.
EVE-FORM = 'LISTEND'.
APPEND EVE.
CLEAR EVE.
EVE-NAME = 'TOP_OF_LIST'.
EVE-FORM = 'LISTTOP'.
APPEND EVE.
CLEAR EVE.
SELECT * FROM MARA INTO CORRESPONDING FIELDS OF TABLE ITAB UP TO 20 ROWS
.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_STRUCTURE_NAME = 'ITAB'
IT_FIELDCAT = FIELDCAT1
I_DEFAULT = 'X'
I_SAVE = 'A'
IT_EVENTS = EVE[]
TABLES
T_OUTTAB = ITAB.
FORM HEADER.
REFRESH HEAD.
HEAD-TYP = 'H'.
HEAD-INFO = 'GENERAL MATERIAL DATA'.
APPEND HEAD.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEAD[].
ENDFORM.
FORM LISTEND.
REFRESH HEAD.
HEAD-TYP = 'H'.
HEAD-INFO = 'END OF THE LIST'.
APPEND HEAD.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEAD[].
ENDFORM.
FORM LISTTOP.
REFRESH HEAD.
HEAD-TYP = 'H'.
HEAD-INFO = 'TOP OF THE LIST'.
APPEND HEAD.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEAD[].
ENDFORM.
rgds,
bharat.
2007 May 03 12:23 PM
the following code will help you.
DATA: save_ok LIKE sy-ucomm,
g_container TYPE scrfname VALUE 'CC1',
g_grid TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_custom_container,
gt_fieldcat TYPE lvc_t_fcat,
g_max TYPE i VALUE 100.
declarations for top of page event
Data: gv_c_split type ref to cl_gui_splitter_container,
gv_c_ptv type ref to cl_gui_container,
gv_alv_ptv type ref to cl_gui_alv_grid,
o_dd_doc TYPE REF TO cl_dd_document,
text TYPE sdydo_text_element,
o_split type ref to cl_gui_easy_splitter_container,
o_top type ref to cl_gui_container,
o_bot type ref to cl_gui_container,
gv_c_vp type ref to cl_gui_container.
end of declaration for top of page.
CLASS lcl_event_receiver DEFINITION DEFERRED.
*class lcl_application_dc definition deferred.
DATA: o_event_receiver TYPE REF TO lcl_event_receiver.
g_dc type ref to lcl_application_dc.
DATA: gt_outtab TYPE TABLE OF sbook.
*----
*
CLASS lcl_event_receiver DEFINITION
*----
*
*
*----
*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS: handle_f4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display,
handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid
IMPORTING e_dyndoc_id.
METHODS: reset.
METHODS: show_f4.
PRIVATE SECTION.
**
attributes for creating an own F4-Help
(using a second ALV Grid Control
**
DATA: f4_grid TYPE REF TO cl_gui_alv_grid,
f4_custom_container TYPE REF TO cl_gui_custom_container.
TYPES: BEGIN OF ty_f4.
TYPES: value TYPE s_class.
TYPES: descr(20) TYPE c.
TYPES: END OF ty_f4.
DATA: f4_itab TYPE TABLE OF ty_f4.
DATA: f4_fieldcatalog TYPE lvc_t_fcat.
**
attributes to store event parameters
(after the CALL SCREEN command, the event parameters
are not accessible)
**
TYPES: BEGIN OF onf4_event_parameters_type.
TYPES: c_fieldname TYPE lvc_fname.
TYPES: cs_row_no TYPE lvc_s_roid.
TYPES: cr_event_data TYPE REF TO cl_alv_event_data.
TYPES: ct_bad_cells TYPE lvc_t_modi.
TYPES: c_display TYPE char01.
TYPES: END OF onf4_event_parameters_type.
DATA: f4_params TYPE onf4_event_parameters_type.
**
Methods to create own F4-Help
(This is done using a second ALV Grid Control)
**
METHODS: init_f4.
METHODS: build_fieldcatalog.
METHODS: fill_f4_itab .
METHODS: on_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING es_row_no.
ENDCLASS. "lcl_application_f4 DEFINITION
*----
*
CLASS lcl_event_receiver IMPLEMENTATION
*----
*
*
*----
*
CLASS lcl_event_receiver IMPLEMENTATION.
*§2. Implement an event handler method for event ONF4.
METHOD handle_f4.
Save event parameter as global attributes of this class
(maybe solved differently if you use a function module!)
f4_params-c_fieldname = e_fieldname.
f4_params-cs_row_no = es_row_no.
f4_params-cr_event_data = er_event_data.
f4_params-ct_bad_cells = et_bad_cells.
f4_params-c_display = e_display.
*§3. Call your own f4 help. To customize your popup check
first if the cell is ready for input (event parameter E_DISPLAY).
(parameter E_DISPLAY is checked later in method on_double_click)
(Probably, you would call a function module at this point,
pass the needed event parameter and call the popup screen
within that function module. This is not done in this example
to avoid scattering its code).
CALL SCREEN 101 STARTING AT 10 10.
*§7. Inform the ALV Grid Control that an own f4 help has been processed
to suppress the standard f4 help.
er_event_data->m_event_handled = 'X'.
ENDMETHOD. "on_f4
*----
-
METHOD show_f4.
DATA: ls_outtab TYPE sbook.
initialize own f4 help if needed
IF f4_custom_container IS INITIAL.
CALL METHOD init_f4.
ENDIF.
CALL METHOD fill_f4_itab.
refresh list of values in f4 help and show it
CALL METHOD f4_grid->refresh_table_display.
CAUTION: Do not use method REFRESH_TABLE_DISPLAY for
your editable ALV Grid instances while handling events
DATA_CHANGED or ONf4. You would overwrite intermediate
values of your output table on frontend.
'f4_grid' is a non-editable ALV Grid Control for the
application specific F4-Help. Therefore, calling
REFRESH_TABLE_DISPLAY for this instance has no
negative effect.
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD. "show_f4
*----
-
METHOD init_f4.
DATA: ls_f4_layout TYPE lvc_s_layo.
build fieldcatalog entries for f4
CALL METHOD build_fieldcatalog.
create controls
CREATE OBJECT f4_custom_container
EXPORTING container_name = 'CC_ONF4'.
CREATE OBJECT f4_grid
EXPORTING i_parent = f4_custom_container.
hide toolbar
ls_f4_layout-no_toolbar = 'X'.
CALL METHOD f4_grid->set_table_for_first_display
EXPORTING
is_layout = ls_f4_layout
CHANGING
it_fieldcatalog = f4_fieldcatalog
it_outtab = f4_itab.
register event double click on backend
SET HANDLER me->on_double_click FOR f4_grid.
flush since 'ls_layout' is local!
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD. "init_f4
*----
-
METHOD fill_f4_itab.
DATA ls_f4_itab TYPE ty_f4.
Delete all entries in f4_itab to determine
offered values dynamically
CLEAR f4_itab[].
ls_f4_itab-value = 'C'.
ls_f4_itab-descr = text-t03. "Business Class
APPEND ls_f4_itab TO f4_itab.
ls_f4_itab-value = 'Y'.
ls_f4_itab-descr = text-t04. "Economie Class
APPEND ls_f4_itab TO f4_itab.
ls_f4_itab-value = 'F'.
ls_f4_itab-descr = text-t05. "First Class
APPEND ls_f4_itab TO f4_itab.
ENDMETHOD. "fill_f4_itab
*----
-
METHOD build_fieldcatalog.
DATA: ls_fcat TYPE lvc_s_fcat.
CLEAR ls_fcat.
ls_fcat-fieldname = 'VALUE'.
ls_fcat-coltext = text-t02.
ls_fcat-inttype = 'S_CLASS'.
ls_fcat-outputlen = 5.
APPEND ls_fcat TO f4_fieldcatalog.
CLEAR ls_fcat.
ls_fcat-fieldname = 'DESCR'.
ls_fcat-coltext = text-t01.
ls_fcat-inttype = 'C'.
ls_fcat-outputlen = 20.
APPEND ls_fcat TO f4_fieldcatalog.
ENDMETHOD. "build_fieldcatalog
*----
-
METHOD on_double_click.
*§5. If not already caught by your own f4 help, check whether
the triggered cell was ready for input by using E_DISPLAY
and if not, exit.
IF f4_params-c_display EQ 'X'.
LEAVE SCREEN.
ENDIF.
*§6. After the user selected a value, pass it to the ALV Grid Control:
*§ 6a. Define a field symbol of type: LVC_T_MODI and a structure of
type LVC_S_MODI to pass the value later on.
FIELD-SYMBOLS TYPE lvc_t_modi.
DATA: ls_modi TYPE lvc_s_modi,
ls_f4_itab TYPE ty_f4.
*§ 6b. Dereference attribute M_DATA into your field symbol and add
the selected value to the table to which this symbol points to.
ASSIGN f4_params-cr_event_data->m_data->* TO .
LEAVE TO SCREEN 0.
ENDMETHOD. "on_double_click
*----
-
METHOD reset.
FIELD-SYMBOLS display_document
EXPORTING parent = o_top.
ENDMETHOD. "handle_top_of_page
ENDCLASS. "lcl_application_f4 IMPLEMENTATION
END-OF-SELECTION.
CALL SCREEN 100.
*----
*
MODULE PBO OUTPUT *
*----
*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
SET TITLEBAR 'MAIN100'.
IF g_custom_container IS INITIAL.
PERFORM create_and_init_alv CHANGING gt_outtab[]
gt_fieldcat.
ENDIF.
ENDMODULE. "pbo OUTPUT
*----
*
MODULE PAI INPUT *
*----
*
MODULE pai INPUT.
save_ok = sy-ucomm.
CLEAR sy-ucomm.
CASE save_ok.
WHEN 'EXIT' OR 'BACK' OR 'CANCEL'.
PERFORM exit_program.
WHEN 'SWITCH'.
PERFORM switch_edit_mode.
WHEN OTHERS.
do nothing
ENDCASE.
ENDMODULE. "pai INPUT
*----
*
FORM EXIT_PROGRAM *
*----
*
FORM exit_program.
LEAVE PROGRAM.
ENDFORM. "exit_program
*&----
*
*& Form build_fieldcat
*&----
*
text
*----
*
-->PT_FIELDCAT text
*----
*
FORM build_fieldcat CHANGING pt_fieldcat TYPE lvc_t_fcat.
DATA ls_fcat TYPE lvc_s_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'SBOOK'
CHANGING
ct_fieldcat = pt_fieldcat.
LOOP AT pt_fieldcat INTO ls_fcat.
Exchange smoker field with invoice field - just to
make the dependance between SMOKER and CLASS more transparent
(Smoking is only allowed in the first class).
IF ls_fcat-fieldname EQ 'SMOKER'.
ls_fcat-col_pos = 11.
ls_fcat-outputlen = 10.
ls_fcat-edit = 'X'.
Field 'checktable' is set to avoid shortdumps that are caused
by inconsistend data in check tables. You may comment this out
when the test data of the flight model is consistent in your system.
ls_fcat-checktable = '!'. "do not check foreign keys
MODIFY pt_fieldcat FROM ls_fcat.
ELSEIF ls_fcat-fieldname EQ 'INVOICE'.
ls_fcat-col_pos = 7.
MODIFY pt_fieldcat FROM ls_fcat.
ELSEIF ls_fcat-fieldname EQ 'CLASS'.
ls_fcat-edit = 'X'.
ls_fcat-outputlen = 5.
ls_fcat-checktable = '!'. "do not check foreign keys
MODIFY pt_fieldcat FROM ls_fcat.
ENDIF.
ENDLOOP.
ENDFORM. "build_fieldcat
*&----
*
*& Form create_and_init_alv
*&----
*
text
*----
*
-->PT_OUTTAB text
-->PT_FIELDCAT text
*----
*
FORM create_and_init_alv CHANGING pt_outtab TYPE STANDARD TABLE
pt_fieldcat TYPE lvc_t_fcat.
DATA: lt_exclude TYPE ui_functions,
ls_layout TYPE lvc_s_layo.
CREATE OBJECT g_custom_container
EXPORTING container_name = g_container.
CREATE OBJECT g_grid
EXPORTING i_parent = g_custom_container.
CREATE OBJECT gv_c_split
EXPORTING
link_dynnr = lv_dynnr
link_repid = lv_repid
parent = g_custom_container
rows = 2
columns = 1
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
others = 3 .
CALL METHOD gv_c_split->set_border
EXPORTING
border = space.
CALL METHOD gv_c_split->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = gv_c_ptv.
CALL METHOD gv_c_split->set_row_height
EXPORTING
id = 1
height = 20
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 6 .
CALL METHOD gv_c_split->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = gv_c_vp .
CALL METHOD gv_c_split->set_row_height
EXPORTING
id = 2
height = 10
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3 .
CREATE OBJECT o_split
EXPORTING
parent = gv_c_ptv
with_border = 1
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
others = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
o_top = o_split->top_left_container.
o_bot = o_split->bottom_right_container.
CREATE OBJECT gv_alv_ptv
EXPORTING
i_parent = o_bot
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
others = 5 .
CREATE OBJECT g_grid
EXPORTING
i_parent = gv_c_vp
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
others = 5 .
PERFORM build_fieldcat CHANGING pt_fieldcat.
Optionally restrict generic functions to 'change only'.
(The user shall not be able to add new lines).
PERFORM exclude_tb_functions CHANGING lt_exclude.
PERFORM build_data CHANGING pt_outtab.
ls_layout-grid_title = 'F4 help implemented for field CLASS'.
CREATE OBJECT o_event_receiver.
SET HANDLER o_event_receiver->handle_top_of_page FOR gv_alv_ptv.
SET HANDLER o_event_receiver->handle_top_of_page FOR g_grid.
CREATE OBJECT o_dd_doc EXPORTING style = 'ALV_GRID'
no_margins = 'X'.
CALL METHOD gv_alv_ptv->set_table_for_first_display
EXPORTING
is_layout = ls_layout
CHANGING
it_outtab = pt_outtab[]
it_fieldcatalog = pt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
it_toolbar_excluding = lt_exclude
is_layout = ls_layout
CHANGING
it_fieldcatalog = pt_fieldcat
it_outtab = pt_outtab[].
CALL METHOD gv_alv_ptv->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = o_dd_doc.
register f4 for field CLASS
PERFORM register_events.
Set editable cells to ready for input initially
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ENDFORM. "CREATE_AND_INIT_ALV
*&----
*
*& Form exclude_tb_functions
*&----
*
text
*----
*
-->PT_EXCLUDE text
*----
*
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
Only allow to change data not to create new entries (exclude
generic functions).
DATA ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND ls_exclude TO pt_exclude.
ENDFORM. " EXCLUDE_TB_FUNCTIONS
*&----
*
*& Form build_data
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM build_data CHANGING pt_outtab TYPE STANDARD TABLE.
DATA: ls_sbook TYPE sbook,
l_index TYPE i.
SELECT * FROM sbook INTO TABLE gt_outtab UP TO g_max ROWS.
IF sy-subrc NE 0.
PERFORM generate_entries CHANGING pt_outtab.
ENDIF.
LOOP AT pt_outtab INTO ls_sbook.
l_index = sy-tabix.
CLEAR ls_sbook-class.
Alternate between smoker and non smoker to make
it more obvious what this example is about
l_index = l_index MOD 2.
IF l_index EQ 1.
ls_sbook-smoker = 'X'.
ELSE.
ls_sbook-smoker = ' '.
ENDIF.
MODIFY pt_outtab FROM ls_sbook.
ENDLOOP.
ENDFORM. " build_data
*&----
*
*& Form generate_entries
*&----
*
text
*----
*
-->PT_SBOOK text
*----
*
FORM generate_entries CHANGING pt_sbook TYPE STANDARD TABLE.
DATA: ls_sbook TYPE sbook,
l_month(2) TYPE c,
l_day(2) TYPE c,
l_date(8) TYPE c,
l_prebookid TYPE i.
ls_sbook-carrid = 'LH'.
ls_sbook-connid = '0400'.
ls_sbook-forcurkey = 'DEM'.
ls_sbook-loccurkey = 'USD'.
ls_sbook-custtype = 'B'.
DO 110 TIMES.
l_prebookid = sy-index.
ls_sbook-forcuram = sy-index * 10.
ls_sbook-loccuram = ls_sbook-loccuram * 2.
ls_sbook-customid = sy-index.
ls_sbook-counter = 18.
ls_sbook-agencynum = 11.
l_month = sy-index / 10 + 1.
DO 2 TIMES.
l_day = 3 + l_month + sy-index * 2.
l_date+0(4) = '2000'.
l_date+4(2) = l_month.
l_date+6(2) = l_day.
ls_sbook-fldate = l_date.
SUBTRACT 3 FROM l_day.
ls_sbook-order_date+0(6) = l_date+0(6).
ls_sbook-order_date+6(2) = l_day.
ls_sbook-bookid = l_prebookid * 2 + sy-index.
IF sy-index EQ 1.
ls_sbook-smoker = 'X'.
ELSE.
ls_sbook-smoker = space.
ENDIF.
ls_sbook-luggweight = l_prebookid * 10.
IF ls_sbook-luggweight GE 1000.
ls_sbook-wunit = 'G'.
ls_sbook-class = 'C'.
ELSE.
ls_sbook-wunit = 'KG'.
ls_sbook-class = 'Y'.
ENDIF.
IF ls_sbook-bookid > 40 AND ls_sbook-wunit EQ 'KG'.
ls_sbook-invoice = 'X'.
ENDIF.
IF ls_sbook-bookid EQ 2.
ls_sbook-cancelled = 'X'.
ls_sbook-class = 'F'.
ENDIF.
APPEND ls_sbook TO pt_sbook.
ENDDO.
ENDDO.
ENDFORM. " generate_entries
*&----
*
*& Form register_events
*&----
*
text
*----
*
FORM register_events.
*§1. Register event ONF4 at frontend using method
register_f4_for_fields. For this purpose, you pass a table
with all fields, for which you want to implement your own
f4 help.
remark: If you want to use an own f4 help for fields where
no standard f4 help exists set field F4AVAILABL for
this field in the fieldcatalog.
DATA: lt_f4 TYPE lvc_t_f4 WITH HEADER LINE.
CLEAR lt_f4.
lt_f4-fieldname = 'CLASS'.
If you would like to deregister the field again,
pass value SPACE with field 'register'.
lt_f4-register = 'X'.
*§ 1b. If the value range in your f4 help depends on other
values of cells that are input enabled, set the
GETBEFORE parameter.
The consequence is that the ALV Grid Control raises
event DATA_CHANGED before the f4 help is called to
check values that the f4 help depends on.
lt_f4-getbefore = 'X'.
The next parameter is used to change values after onf4 has
been processed. The ALV Grid Control will raise
event DATA_CHANGED afterwards, if you set it.
lt_f4-chngeafter = space.
INSERT TABLE lt_f4.
CALL METHOD g_grid->register_f4_for_fields
EXPORTING
it_f4 = lt_f4[].
register events for abap objects (backend)
SET HANDLER o_event_receiver->handle_f4 FOR g_grid.
ENDFORM. " register_events
*----
*
MODULE status_0101 OUTPUT
*----
*
*
*----
*
MODULE status_0101 OUTPUT.
SET PF-STATUS 'POPUP'.
SET TITLEBAR 'POPUP'.
CALL METHOD o_event_receiver->show_f4.
ENDMODULE. " STATUS_0101 OUTPUT
*&----
*
*& Module USER_COMMAND_0101 INPUT
*&----
*
text
*----
*
MODULE user_command_0101 INPUT.
PERFORM user_command.
ENDMODULE. " USER_COMMAND_0101 INPUT
*&----
*
*& Form user_command
*&----
*
text
*----
*
FORM user_command.
DATA: save_ok TYPE sy-ucomm.
save_ok = sy-ucomm.
CLEAR sy-ucomm.
CASE save_ok.
WHEN 'CANCEL'.
CALL METHOD o_event_receiver->reset.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM. "user_command
*&----
*
*& Form switch_edit_mode
*&----
*
text
*----
*
FORM switch_edit_mode.
IF g_grid->is_ready_for_input( ) EQ 0.
set edit enabled cells ready for input
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ELSE.
lock edit enabled cells against input
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
ENDIF.
ENDFORM. "switch_edit_mode
2007 May 03 12:23 PM
hi Chris ,
Please find the code below .
It involves interactive ALV with 2 level drill down .
************************************************************************
--
************************************************************************
THIS DEFINES GLOBAL TYPES FOR ALV.
TYPE-POOLS: slis.
TRANSPARENT TABLES USED FOR DATA FETCHING
TABLES: ekko,ekpo,eket,lfa1,ekbe.
DATA : i_fieldcat TYPE slis_t_fieldcat_alv," FOR FIELDCATALOG
i2_fieldcat TYPE slis_t_fieldcat_alv,"FOR FIELDCATALOG 2
i3_fieldcat TYPE slis_t_fieldcat_alv, "FOR FIELDCATALOG 3
i_eventcat TYPE slis_t_event, "FOR EVENTCATALOG
i_layout TYPE slis_layout_alv, "FOR LAYOUT
i_sortinfo TYPE slis_t_sortinfo_alv. "FOR SORTING
VARIABLE FOR COUNT OF PO
DATA: n TYPE i ,
i TYPE i,
po_item TYPE ebelp,
v_count(1) VALUE 'N'.
*********************************************************************
--
*********************************************************************
--
TYPES: BEGIN OF t_lfa1,
lifnr TYPE lifnr, "VENDOR CODE
name1 TYPE name1_gp, "VENDOR NAME
END OF t_lfa1.
--
TYPES: BEGIN OF t_ekko,
ebeln TYPE ebeln, "PURCHASE ORDER NUMBER
lifnr TYPE elifn, "VENDOR CODE
c TYPE i, "PURCHASE ORDER COUNT
END OF t_ekko.
--
TYPES: BEGIN OF t_ekpo,
ebeln TYPE ebeln, "PURCHASE ORDER NUMBER
ebelp TYPE ebelp, "PURCHASE ORDER ITEM
menge TYPE bstmg, "PURCHASE ORDER QTY
END OF t_ekpo,
--
BEGIN OF t_eket,
ebeln TYPE ebeln, "PURCHASE ORDER NUMBER
ebelp TYPE ebelp, "PURCHASE ORDER ITEM
etenr TYPE eeten, "DELIVERY SCHEDULE LINE COUNTER
wemng TYPE weemg, "QUANTITY OF GOODS RECIEVED
END OF t_eket ,
*----
DATA DECLARATION FOR FINAL TABLE(FIRST
SCREEN)----
BEGIN OF t_tab,
lifnr TYPE elifn,
ebeln TYPE ebeln,
name1 TYPE name1_gp,
ebelp TYPE ebelp,
menge TYPE bstmg,
etenr TYPE eeten,
wemng TYPE weemg,
c TYPE i,
END OF t_tab.
--
TYPES: BEGIN OF t_vendor,
lifnr TYPE elifn,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
menge TYPE bstmg,
wemng TYPE p,
END OF t_vendor,
--
BEGIN OF t_ekbe,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
bwart TYPE bwart,
menge TYPE menge_d,
END OF t_ekbe.
*********************************************************************
--
*********************************************************************
DATA : wa_lfa1 TYPE t_lfa1,
wa_ekko TYPE t_ekko,
wa_ekpo TYPE t_ekpo,
wa_eket TYPE t_eket,
wa_tab TYPE t_tab,
wa_vendor TYPE t_vendor,
wa_ekbe TYPE t_ekbe,
wa_grn TYPE t_ekbe,
wa_full TYPE t_vendor.
*********************************************************************
--
*********************************************************************
DATA: it_lfa1 TYPE STANDARD TABLE OF t_lfa1 WITH HEADER LINE ,
it_ekko TYPE STANDARD TABLE OF t_ekko WITH HEADER LINE ,
it_ekpo TYPE STANDARD TABLE OF t_ekpo WITH HEADER LINE,
it_eket TYPE STANDARD TABLE OF t_eket WITH HEADER LINE,
it_tab TYPE STANDARD TABLE OF t_tab WITH HEADER LINE,
it_vendor TYPE STANDARD TABLE OF t_vendor WITH HEADER LINE,
it_ekbe TYPE STANDARD TABLE OF t_ekbe WITH HEADER LINE,
it_grn TYPE STANDARD TABLE OF t_ekbe WITH HEADER LINE,
it_full TYPE STANDARD TABLE OF t_vendor WITH HEADER LINE.
DATA: vendor TYPE elifn.
DATA: qty TYPE p,
c TYPE i.
*********************************************************************
--
**********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_lifnr FOR lfa1-lifnr OBLIGATORY.
SELECTION-SCREEN END OF BLOCK main.
*********************************************************************
--
*********************************************************************
AT SELECTION-SCREEN.
SELECT lifnr INTO (it_lfa1-lifnr) FROM lfa1 WHERE lifnr IN
s_lifnr.
ENDSELECT.
IF sy-subrc <> 0.
MESSAGE e001.
ENDIF.
*********************************************************************
--
*********************************************************************
START-OF-SELECTION.
FETCH RECORDS FROM THE DATABASE INTO THE INTERNAL TABLE.
PERFORM zf_select_it_tab.
PREPARE FIELDCATALOG FOR THE MAIN (1ST LIST) REPORT.
PERFORM zf_build_fieldcat USING i_fieldcat.
DEFINE EVENT TABLE
PERFORM build_eventcat USING i_eventcat.
DETERMINE THE SORTING SEQUENCE.
PERFORM build_sort USING i_sortinfo.
DISPLAY ALV GRID.
PERFORM zf_display_alv_list.
&----
*& Form ZF_SELECT_IT_TAB
&----
text
----
--> p1 text
<-- p2 text
----
*SELECTING DATA FROM IT_LFA1 TABLE
FORM zf_select_it_tab .
SELECT lifnr
name1
INTO TABLE it_lfa1
FROM lfa1
WHERE lifnr IN s_lifnr.
IF sy-subrc = 0.
SORT it_lfa1 BY lifnr.
ENDIF.
*SELECTING DATA FROM EKKO TABLE
IF NOT it_lfa1[] IS INITIAL.
SELECT
ebeln
lifnr
FROM ekko
INTO TABLE it_ekko
FOR ALL ENTRIES IN it_lfa1
WHERE lifnr = it_lfa1-lifnr.
IF sy-subrc = 0.
SORT it_ekko BY ebeln.
ENDIF.
ENDIF.
*SELECTING DATA FROM EKPO TABLE
IF NOT it_ekko[] IS INITIAL.
SELECT
ebeln
ebelp
menge
FROM ekpo
INTO TABLE it_ekpo
FOR ALL ENTRIES IN it_ekko
WHERE ebeln = it_ekko-ebeln.
IF sy-subrc = 0.
SORT it_ekpo BY ebeln ebelp.
ENDIF.
ENDIF.
*SELECTING DATA FROM EKET TABLE
IF NOT it_ekpo[] IS INITIAL.
SELECT
ebeln
ebelp
etenr
wemng
FROM eket
INTO TABLE it_eket
FOR ALL ENTRIES IN it_ekpo
WHERE ebeln = it_ekpo-ebeln
AND ebelp = it_ekpo-ebelp.
SORT it_eket BY ebeln ebelp etenr.
ENDIF.
*SELECTING DATA FROM EKBE TABLE
IF NOT it_eket[] IS INITIAL.
SELECT
ebeln
ebelp
bwart
menge
FROM ekbe
INTO TABLE it_ekbe
FOR ALL ENTRIES IN it_eket
WHERE ebelp = it_eket-ebelp
AND ebeln = it_eket-ebeln
AND bwart = '101'.
ENDIF.
*********************************************************
THIS BLOCK MOVES THE FIELDS FROM DIFFERENT *
TABLES(EKKO,LFA1,EKPO,EKET) INTO A FINAL TABLE IT_TAB *
*
*********************************************************
CLEAR wa_tab.
CLEAR it_tab.
LOOP AT it_lfa1 INTO wa_lfa1.
READ TABLE it_ekko INTO wa_ekko WITH KEY lifnr = wa_lfa1-lifnr
BINARY SEARCH.
READ TABLE it_lfa1 INTO wa_lfa1
WITH KEY lifnr = wa_lfa1-lifnr
BINARY SEARCH.
IF sy-subrc = 0.
MOVE: wa_lfa1-name1 TO wa_tab-name1.
MOVE: wa_lfa1-lifnr TO wa_tab-lifnr.
ENDIF.
Regards,
Amber
Reward Points if helpful
2007 May 03 12:27 PM
Hi Chris,
TYPE-POOLS : slis.
DATA: BEGIN OF d_structure, "TO DEFINE WA CUM STRUCTURE,FOR THIS METHOD WE USE DATA
v_lights(2) TYPE c,
v_chkbox(1) TYPE c,
v_box(1) TYPE c,
matnr LIKE mara-matnr, "MATERIAL NO
werks LIKE marc-werks, "PLANT
lgort LIKE mard-lgort, "STORAGE LOCATION
labst LIKE mard-labst, "QUANTITY
maktx LIKE makt-maktx, "MATERIAL DESCRIPTION
meins LIKE mara-meins, "UNIT OF MEASUREMENT
END OF d_structure.
*DATA : IT_MATSTOCK TYPE STANDARD TABLE OF D_STRUCTURE WITH HEADER LINE. " TO DEFINE INTERNAL TABLE OF STRUCTURE SAME AS D_STRUCTURE
*DATA : D_FIELD TYPE D_STRUCTURE. " TO DEFINE WA OF TYPE D_STRUCTURE(IN THIS METHD WE DECLARE
" STRUCTURE BY TYPES )
DATA: it_matstock LIKE d_structure OCCURS 0 WITH HEADER LINE. " INTERNAL TABLE SAME AS WA CUM STRUCTURE
DATA DEC FOR VARIANT
DATA: it_variant LIKE disvariant.
DATA DEC FOR SORTING
DATA: it_sortinfo TYPE slis_t_sortinfo_alv.
DATA DEC FOR FIELDCATLOG
DATA: it_fieldcat TYPE slis_t_fieldcat_alv.
DATA DEC FOR EVENT CATALOG
DATA: I_EVENTCAT TYPE SLIS_T_EVENT.
DATA DEC FOR LAYOUT DEFINITION
DATA: it_layout TYPE slis_layout_alv.
DATA DEC FOR PROGRAMNAME
DATA: v_progname LIKE sy-repid.
DATA DEC FOR GRID TITLE
DATA: v_gridtitle TYPE lvc_title.
DATA DEC FOR LIST HEADER
DATA: it_listheader TYPE slis_t_listheader.
*####################################SELECTION SCREEN#########################################
SELECTION-SCREEN BEGIN OF SCREEN 123 AS WINDOW TITLE text-001.
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-002.
SELECT-OPTIONS : s_matnr FOR it_matstock-matnr.
PARAMETERS : p_var LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK bl1.
SELECTION-SCREEN END OF SCREEN 123.
CALL SCREEN 123.
*###########################INITIALIZATION EVENT ###################################################
DISPALY DEFAULT VARIANT
PERFORM default_variant.
PROVIDING F4 HELP
PERFORM variant_f4.
*##############################VALIDATION##############################
AT SELECTION-SCREEN.
SELECT matnr INTO it_matstock-matnr FROM mara WHERE matnr IN s_matnr.
ENDSELECT.
IF sy-subrc <> 0.
MESSAGE e001.
ENDIF.
*###########################LOGIC#############################
START-OF-SELECTION.
*PREPARAING FIELDCATALOG FOR THE MAIN(BASIC LIST) REPORT
PERFORM build_fieldcatlog USING it_fieldcat.
*FETCH RECORDS FROM DATABASE TABLE TO INTERNAL TABLE
PERFORM select_mat_data.
*MODIFY THE RECORDS IN INTERNAL TABLE FOR ICONS , SYMBOL & TRAFFIC LIGHTS
PERFORM modify_it_matstock.
*DETERMINE LAYOUT OF THE ALV DISPLAY
PERFORM build_layout.
*SORTING SEQUENCE
PERFORM build_sort USING it_sortinfo.
DEFINE THE EVENT TABLE
PERFORM BUILD_EVENTCAT USING I_EVENTCAT.
BUILD THE LISTHEADER FOR THE TOP OF PAGE EVENT.
PERFORM build_listheader USING it_listheader.
TOP OF PAGE.
PERFORM top_of_page.
*INITIALIZE THE GRID TITLE
PERFORM build_grid_title.
*DISPLAY ALV GRID
PERFORM alv_display_grid.
***********READING DATA FROM INTERNAL TABLE****************
LOOP AT it_matstock.
WRITE:/10 it_matstock-matnr , 30 it_matstock-werks , 40 it_matstock-lgort , 60 it_matstock-labst ,90 it_matstock-meins, 110 it_matstock-maktx
.
ENDLOOP.
*#############################START###################################################
&----
*& Form BUILD_FIELDCATLOG
&----
text
----
-->P_IT_FIELDCAT text
----
FORM build_fieldcatlog USING p_it_fieldcat TYPE slis_t_fieldcat_alv.
DATA: itab_fieldcat TYPE slis_fieldcat_alv.
FOR LIGHTS
CLEAR itab_fieldcat.
itab_fieldcat-col_pos = '1'. " POSITION OF THE COLUMN.
itab_fieldcat-fieldname = 'V_LIGHTS'. " FIELD FOR WHICH CATALOG ID FILLED.
itab_fieldcat-tabname = 'It_matstock'. " INTERNAL TABLE TO WHICH THE FIELD BELONGS TO.
itab_fieldcat-emphasize = 'C410'. " COLOR OF THIS COLUMN.
itab_fieldcat-seltext_l = 'Category'. " LONG TEXT FOR HEADER.
itab_fieldcat-seltext_m = 'Category'. " MEDIUM TEXT FOR HEADER.
itab_fieldcat-seltext_s = 'Category'. " SHORT TEXT FOR HEADER.
itab_fieldcat-outputlen = 7. " TO DEFINE OUTPUT LENGTH OF THE COLUMN.
APPEND itab_fieldcat TO p_it_fieldcat.
FOR CHECK BOX
CLEAR itab_fieldcat.
itab_fieldcat-col_pos = '2'. " POSITION OF THE COLUMN.
itab_fieldcat-fieldname = 'V_CHKBOX'. " FIELD FOR WHICH CATALOG ID FILLED.
itab_fieldcat-tabname = 'It_matstock'. " INTERNAL TABLE TO WHICH THE FIELD BELONGS TO.
itab_fieldcat-emphasize = 'C410'. " COLOR OF THIS COLUMN.
itab_fieldcat-seltext_l = 'CHECKBOX'. " LONG TEXT FOR HEADER.
itab_fieldcat-seltext_m = 'CHKBOX'. " MEDIUM TEXT FOR HEADER.
itab_fieldcat-seltext_s = 'CHKBOX'. " SHORT TEXT FOR HEADER.
itab_fieldcat-checkbox = 'X'. " CHECK BOX
itab_fieldcat-edit = 'X'.
itab_fieldcat-outputlen = 2. " TO DEFINE OUTPUT LENGTH OF THE COLUMN.
APPEND itab_fieldcat TO p_it_fieldcat.
*FOR MATERIAL NO (IT_MATSTOCK-MATNR)
CLEAR itab_fieldcat.
itab_fieldcat-col_pos = '3'. " POSITION OF THE COLUMN.
itab_fieldcat-fieldname = 'MATNR'. " FIELD FOR WHICH CATALOG ID FILLED.
itab_fieldcat-tabname = 'IT_MATSTOCK'. " INTERNAL TABLE TO WHICH THE FIELD BELONGS TO.
itab_fieldcat-emphasize = 'C410'. " COLOR OF THIS COLUMN.
itab_fieldcat-seltext_l = 'MATERIAL NO'. " LONG TEXT FOR HEADER.
itab_fieldcat-seltext_m = 'MATNO'. " MEDIUM TEXT FOR HEADER.
itab_fieldcat-seltext_s = 'MATNO'. " SHORT TEXT FOR HEADER.
itab_fieldcat-hotspot = 'X'. " HOT SPOT
itab_fieldcat-outputlen = 20. " TO DEFINE OUTPUT LENGTH OF THE COLUMN.
APPEND itab_fieldcat TO p_it_fieldcat.
FOR PLANT (IT_MATSTOCK-WERKS)
CLEAR itab_fieldcat.
itab_fieldcat-col_pos = '4'. " POSITION OF THE COLUMN.
itab_fieldcat-fieldname = 'WERKS'. " FIELD FOR WHICH CATALOG ID FILLED.
itab_fieldcat-tabname = 'IT_MATSTOCK'. " INTERNAL TABLE TO WHICH THE FIELD BELONGS TO.
itab_fieldcat-emphasize = 'C510'. " COLOR OF THIS COLUMN.
itab_fieldcat-seltext_l = 'PLANT'.
itab_fieldcat-seltext_m = 'PLANT'.
itab_fieldcat-seltext_s = 'PLANT'.
itab_fieldcat-outputlen = 10. " TO DEFINE OUTPUT LENGTH OF THE COLUMN.
APPEND itab_fieldcat TO p_it_fieldcat.
FOR STORAGE LOCATION (IT_MATSTOCK-LGORT)
CLEAR itab_fieldcat.
itab_fieldcat-col_pos = '5'. " POSITION OF THE COLUMN.
itab_fieldcat-fieldname = 'LGORT'. " FIELD FOR WHICH CATALOG ID FILLED.
itab_fieldcat-tabname = 'IT_MATSTOCK'. " INTERNAL TABLE TO WHICH THE FIELD BELONGS TO.
itab_fieldcat-emphasize = 'C610'. " COLOR OF THIS COLUMN.
itab_fieldcat-seltext_l = 'STORAGE LOCATION'.
itab_fieldcat-seltext_m = 'STORAGE LOC'.
itab_fieldcat-seltext_s = 'SLOC'.
itab_fieldcat-outputlen = 10. " TO DEFINE OUTPUT LENGTH OF THE COLUMN.
APPEND itab_fieldcat TO p_it_fieldcat.
FOR QUANTITY (IT_MATSTOCK-LABST)
CLEAR itab_fieldcat.
itab_fieldcat-col_pos = '6'. " POSITION OF THE COLUMN.
itab_fieldcat-fieldname = 'LABST'. " FIELD FOR WHICH CATALOG ID FILLED.
itab_fieldcat-tabname = 'IT_MATSTOCK'. " INTERNAL TABLE TO WHICH THE FIELD BELONGS TO.
itab_fieldcat-emphasize = 'C710'. " COLOR OF THIS COLUMN.
itab_fieldcat-seltext_l = 'QUANTITY'.
itab_fieldcat-seltext_m = 'QUANTITY'.
itab_fieldcat-seltext_s = 'QUAN'.
itab_fieldcat-outputlen = 10. " TO DEFINE OUTPUT LENGTH OF THE COLUMN.
APPEND itab_fieldcat TO p_it_fieldcat.
FOR UNIT OF MEASUREMENT (IT_MATSTOCK-MEINS)
CLEAR itab_fieldcat.
itab_fieldcat-col_pos = '7'. " POSITION OF THE COLUMN.
itab_fieldcat-fieldname = 'MEINS'. " FIELD FOR WHICH CATALOG ID FILLED.
itab_fieldcat-tabname = 'IT_MATSTOCK'. " INTERNAL TABLE TO WHICH THE FIELD BELONGS TO.
itab_fieldcat-emphasize = 'C110'. " COLOR OF THIS COLUMN.
itab_fieldcat-seltext_l = 'UNIT OF MEASURE'.
itab_fieldcat-seltext_m = 'UNIT OF MSURE'.
itab_fieldcat-seltext_s = 'UOM'.
itab_fieldcat-outputlen = 10. " TO DEFINE OUTPUT LENGTH OF THE COLUMN.
APPEND itab_fieldcat TO p_it_fieldcat.
FOR MATERIAL DESCRIPTION (IT_MATSTOCK-MAKTX)
CLEAR itab_fieldcat.
itab_fieldcat-col_pos = '8'. " POSITION OF THE COLUMN.
itab_fieldcat-fieldname = 'MAKTX'. " FIELD FOR WHICH CATALOG ID FILLED.
itab_fieldcat-tabname = 'IT_MATSTOCK'. " INTERNAL TABLE TO WHICH THE FIELD BELONGS TO.
itab_fieldcat-emphasize = 'C410'. " COLOR OF THIS COLUMN.
itab_fieldcat-seltext_l = 'MATERIAL DESCRIPTION'. " LONG TEXT FOR HEADER.
itab_fieldcat-seltext_m = 'MAT DESCRIP'. " MEDIUM TEXT FOR HEADER.
itab_fieldcat-seltext_s = 'MDESCRIP'. " SHORT TEXT FOR HEADER.
itab_fieldcat-edit = 'X'. " TO MAKING FIELD EDITABLE
itab_fieldcat-outputlen = 40. " TO DEFINE OUTPUT LENGTH OF THE COLUMN.
APPEND itab_fieldcat TO p_it_fieldcat.
ENDFORM. " BUILD_FIELDCATLOG
*################################END######################################################
*###############################START######################################################
&----
*& Form SELECT_MAT_DATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM select_mat_data .
REFRESH it_matstock.
SELECT amatnr ameins bwerks clgort clabst dmaktx INTO CORRESPONDING FIELDS OF d_structure FROM mara AS a
INNER JOIN makt AS d ON
amatnr = dmatnr
INNER JOIN marc AS b ON
amatnr = bmatnr
INNER JOIN mard AS c ON
bmatnr = cmatnr AND
bwerks = cwerks
WHERE a~matnr IN s_matnr. "POPULATING DATA IN TO WA
APPEND d_structure TO it_matstock . "APPENDING DATA INTO INTERNAL TABLE FROM WA
ENDSELECT.
ENDFORM. " SELECT_MAT_DATA
*#################################END###################################################
*###############################START###########################################
&----
*& Form MODIFY_IT_MATSTOCK
&----
text
----
--> p1 text
<-- p2 text
----
FORM modify_it_matstock .
LOOP AT it_matstock.
IF it_matstock-labst < 100 OR it_matstock-labst > 50 .
it_matstock-v_lights = '3'.
MODIFY it_matstock TRANSPORTING v_lights.
ELSEIF it_matstock-labst < 50 OR it_matstock-labst > 20.
it_matstock-v_lights = '2'.
MODIFY it_matstock TRANSPORTING v_lights.
ELSEIF it_matstock-labst < 10 .
it_matstock-labst = '1'.
MODIFY it_matstock TRANSPORTING v_lights.
ENDIF.
ENDLOOP.
ENDFORM. " MODIFY_IT_MATSTOCK
*################################END#####################################################
*#############################START##########################################################
&----
*& Form BUILD_GRID_TITLE
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_grid_title .
v_gridtitle = 'MATERIAL STOCK DETAILS'.
ENDFORM. " BUILD_GRID_TITLE
*###############################END#########################################################
*#################################START#########################################################
&----
*& Form BUILD_LISTHEADER
&----
text
----
-->P_IT_LISTHEADER text
----
FORM build_listheader USING p_it_listheader TYPE slis_t_listheader.
DATA: itab_listheader TYPE slis_listheader.
REFRESH p_it_listheader.
CLEAR itab_listheader.
itab_listheader-typ = 'H'.
itab_listheader-info = text-003.
APPEND itab_listheader TO p_it_listheader.
CLEAR itab_listheader.
itab_listheader-typ = 'H'.
itab_listheader-info = text-004.
APPEND itab_listheader TO p_it_listheader.
ENDFORM. " BUILD_LISTHEADER
*############################END############################################
*##############################START##########################################
&----
*& Form ALV_DISPLAY_GRID
&----
text
----
--> p1 text
<-- p2 text
----
FORM alv_display_grid .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER = ' '
I_BUFFER_ACTIVE = ' '
i_callback_program = 'Z8HG_ALV1'
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
i_structure_name = 'D_STRUCTURE'
I_BACKGROUND_ID = ' '
i_grid_title = v_gridtitle
I_GRID_SETTINGS =
is_layout = it_layout
it_fieldcat = it_fieldcat
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
it_sort = it_sortinfo
IT_FILTER =
IS_SEL_HIDE =
i_default = 'X'
i_save = 'A'
is_variant = it_variant
IT_EVENTS = I_EVENTCAT
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IT_ALV_GRAPHICS =
IT_HYPERLINK =
IT_ADD_FIELDCAT =
IT_EXCEPT_QINFO =
I_HTML_HEIGHT_TOP =
I_HTML_HEIGHT_END =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_matstock
EXCEPTIONS
program_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.
ENDFORM. " ALV_DISPLAY_GRID
*##############################END#############################################################
*#################################START##########################################################
&----
*& Form BUILD_LAYOUT
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_layout .
it_layout-zebra = 'X'.
it_layout-lights_fieldname = 'V_LIGHTS'.
it_layout-lights_tabname = 'IT_MATSTOCK'.
it_layout-box_fieldname = 'V_BOX'.
it_layout-box_tabname = 'IT_MATSTOCK'.
*IT_LAYOUT-EDIT = 'X'.
*IT_LAYOUT-EDIT_MODE = 'X'.
ENDFORM. " BUILD_LAYOUT
*################################END#################################################
*################################START#################################################
&----
*& Form DEFAULT_VARIANT
&----
text
----
--> p1 text
<-- p2 text
----
FORM default_variant .
it_variant-report = 'Z8HG_ALV1'.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = 'X' " 'A' , 'X' , 'U' , ' '
CHANGING
cs_variant = it_variant
EXCEPTIONS
wrong_input = 1
not_found = 2
program_error = 3
OTHERS = 4.
IF sy-subrc = 0.
p_var = it_variant-variant.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " DEFAULT_VARIANT
*##############################END############################################
*#############################START#############################################
&----
*& Form VARIANT_F4
&----
text
----
--> p1 text
<-- p2 text
----
FORM variant_f4 .
DATA: i_variant LIKE disvariant.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = it_variant
I_TABNAME_HEADER =
I_TABNAME_ITEM =
IT_DEFAULT_FIELDCAT =
i_save = 'A'
i_display_via_grid = 'X'
IMPORTING
E_EXIT =
es_variant = i_variant
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3
.
IF sy-subrc = 0.
p_var = i_variant-variant.
CLEAR it_variant.
MOVE p_var TO it_variant-variant.
MOVE v_progname TO it_variant-report.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " VARIANT_F4
*#############################END#############################################
*###############################START###########################################
&----
*& Form TOP_OF_PAGE
&----
text
----
--> p1 text
<-- p2 text
----
FORM top_of_page .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_listheader
i_logo = 'ENJOYSAP_LOGO'
I_END_OF_LIST_GRID =
.
ENDFORM. " TOP_OF_PAGE
*###########################END###############################################
*############################START##############################################
&----
*& Form BUILD_SORT
&----
text
----
-->P_I_SORTINFO text
----
FORM build_sort USING p_i_sortinfo TYPE slis_t_sortinfo_alv.
DATA: i_sortinfo TYPE slis_sortinfo_alv.
CLEAR i_sortinfo.
i_sortinfo-spos = '1'.
i_sortinfo-fieldname = 'MATNR'.
i_sortinfo-tabname = 'IT_MATSTOCK'.
i_sortinfo-DOWN = 'X'.
APPEND i_sortinfo TO p_i_sortinfo.
ENDFORM. " BUILD_SORT
*#############################END#############################################
*#########################START#################################################
&----
*& Form BUILD_EVENTCAT
&----
text
----
-->P_I_EVENTCAT text
----
form BUILD_EVENTCAT using p_i_eventcat TYPE SLIS_T_EVENT.
DATA: I_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = P_I_EVENTCAT
EXCEPTIONS
LIST_TYPE_WRONG = 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.
CLEAR I_EVENT.
read table p_i_eventcat with key name = slis_ev_top_of_page into I_event.
if sy-subrc = 0.
move 'TOP_OF_PAGE' to I_event-form.
append I_event to p_i_eventcat.
endif.
clear I_event.
read table p_i_eventcat with key name = slis_ev_user_command into I_event.
if sy-subrc = 0.
move 'USER_COMMAND' to I_event-form.
append I_event to p_i_eventcat.
endif.
endform. " BUILD_EVENTCAT
Reward points if helpful.
Regards,
Hemant
2007 May 03 12:28 PM
Hi Chris,
Here is a simple SAP ALV Demo program....
You will also get it thru demoalv* and then press f4
/SAPQUERY/DEMO_ALV
Regards,
Jayant
<b>
Please Award if Helpful</b>
2007 May 03 12:31 PM
Hi Chris
Check this program it will be more usefull for u
REPORT ZALVGRID.
TABLES :mara .
TYPE-POOLS : slis.
DATA: gs_layout TYPE slis_layout_alv,
ct_fieldcat TYPE slis_t_fieldcat_alv,
g_repid LIKE sy-repid,
temp_cat TYPE slis_fieldcat_alv,
header_alv TYPE slis_t_listheader,
header_alv_wa TYPE slis_listheader.
DATA : BEGIN OF it OCCURS 0,
matnr LIKE mara-matnr,
mtart LIKE mara-mtart,
maktx LIKE makt-maktx,
mbrsh LIKE mara-mbrsh,
matkl LIKE mara-matkl,
END OF it.
SELECT-OPTIONS: p_matnr FOR mara-matnr.
INITIALIZATION.
g_repid = sy-repid.
START-OF-SELECTION.
SELECT
a~matnr a~mtart a~mbrsh a~matkl b~maktx
FROM mara AS a
JOIN makt AS b ON a~matnr = b~matnr
INTO CORRESPONDING FIELDS OF TABLE it
WHERE a~matnr IN p_matnr.
END-OF-SELECTION.
PERFORM field_catalog.
PERFORM change_catalog.
PERFORM alv_display.
*&---------------------------------------------------------------------
*& Form field_catalog
*&---------------------------------------------------------------------
FORM field_catalog .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = g_repid
i_internal_tabname = 'IT'
i_inclname = g_repid
CHANGING
ct_fieldcat = ct_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
ENDFORM. " field_catalog
*&---------------------------------------------------------------------
*& Form change_catalog
*&---------------------------------------------------------------------
FORM change_catalog .
LOOP AT ct_fieldcat INTO temp_cat.
temp_cat-key = ' '.
CASE temp_cat-fieldname.
WHEN 'MATNR'.
temp_cat-seltext_m = 'Material #'.
temp_cat-ddictxt = 'M'.
temp_cat-outputlen = 10.
WHEN 'MAKTX'.
temp_cat-seltext_m = 'Material Desc'.
temp_cat-ddictxt = 'M'.
temp_cat-outputlen = 40.
WHEN OTHERS.
CONTINUE.
ENDCASE.
MODIFY ct_fieldcat FROM temp_cat.
ENDLOOP.
gs_layout-zebra = 'X'.
ENDFORM. " change_catalog
*&---------------------------------------------------------------------
*& Form alv_display
*&---------------------------------------------------------------------
FORM alv_display .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
is_layout = gs_layout
it_fieldcat = ct_fieldcat
i_save = 'A'
TABLES
t_outtab = it
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " alv_displayRewards if helpfull
Regards
Pavan
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |