Application Development and Automation 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: 
Read only

ALV Drilldown Help

Former Member
0 Likes
436

Hi Guys,

Im outputing an internal table in ALV that has been collected so i have a second internal table that contains all records. Im not using ABAP objects or anything just PERFORM alv_grid_display TABLES gt_main. to display.

I need some way of clicking on a field in a row, lets say its product type CPE, and then being able to loop through the second ITAB and find all CPE records (many), and either display or even just write them to screen. Im just stick at how i code a person double clicking CPE to being able to loop through itab2 to get the relevant records.

Thanks,

Dave

3 REPLIES 3
Read only

Former Member
0 Likes
411

Hi,

try this code :

&----


*& Form HANDLE_USER_COMMAND

&----


  • text

----


  • -->R_UCOMM text

  • -->RS_SELFIELD text

----


FORM user_command USING r_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield.

STEP2 :

CASE r_ucomm.

WHEN '&IC1'.

CLEAR ALV_display1.

READ TABLE ALV_display1 INDEX rs_selfield-tabindex.

READ TABLE ALV_DISPLAY2 with key filed1 = alv_display1-field1.

if sy-subrc eq 0.

loop at alv_display2 where filed1 = alv_display1-field1.

endloop.

perform alv_display2.

Regards,

Mohan.

Read only

former_member249594
Participant
0 Likes
411

&----


*& Report ZCLICK_ON_ALV_ROW

*&

&----


*&

*&

&----


REPORT zclick_on_alv_row.

DATA: gt_bseg TYPE bseg OCCURS 0,

gt_bkpf TYPE bkpf OCCURS 0,

gs_bseg TYPE bseg,

gs_bkpf TYPE bkpf.

DATA: g_container_bkpf TYPE REF TO cl_gui_custom_container,

g_container_bseg TYPE REF TO cl_gui_custom_container,

g_alv_grid_bkpf TYPE REF TO cl_gui_alv_grid,

g_alv_grid_bseg TYPE REF TO cl_gui_alv_grid.

DATA: gs_bkpf_layout TYPE lvc_s_layo,

gs_bseg_layout TYPE lvc_s_layo.

DATA: ok_code LIKE sy-ucomm.

----


  • CLASS LCL_EVENT_RECEIVER DEFINITION

----


*

----


CLASS lcl_event_receiver DEFINITION.

PUBLIC SECTION.

DATA: ls_bkpf TYPE bkpf.

METHODS: handle_double_click

FOR EVENT double_click OF cl_gui_alv_grid

IMPORTING e_row e_column.

PRIVATE SECTION.

ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION

----


  • CLASS LCL_EVENT_RECEIVER IMPLEMENTATION

----


*

----


CLASS lcl_event_receiver IMPLEMENTATION.

METHOD handle_double_click.

READ TABLE gt_bkpf INDEX e_row-index INTO ls_bkpf.

************HERE, YOU CAN LOOP YOUR HEADER ITAB BY GETTING THE CPE

************INTO CPE ITEM ITAB AND THEN CALL ANOTHER SCREEN FOR OUTPUT

REFRESH gt_bseg.

SELECT * INTO TABLE gt_bseg FROM bseg

WHERE bukrs = ls_bkpf-bukrs

AND gjahr = ls_bkpf-gjahr

AND belnr = ls_bkpf-belnr.

IF sy-subrc = 0.

CALL SCREEN 201 STARTING AT 1 22

ENDING AT 130 40.

ELSE.

MESSAGE 'CAN NOT GET THE ITEM DATA' TYPE 'E'.

ENDIF.

********************************

ENDMETHOD. "handle_double_click

ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION

DATA: event_receiver TYPE REF TO lcl_event_receiver.

PARAMETERS: p_bukrs LIKE bkpf-bukrs OBLIGATORY,

p_gjahr LIKE bkpf-gjahr OBLIGATORY,

p_monat LIKE bkpf-monat OBLIGATORY.

START-OF-SELECTION.

SELECT * INTO TABLE gt_bkpf FROM bkpf WHERE bukrs = p_bukrs

AND gjahr = p_gjahr

AND monat = p_monat.

CALL SCREEN 200.

&----


*& Module status_0200 OUTPUT

&----


  • text

----


MODULE status_0200 OUTPUT.

SET PF-STATUS '200'.

SET TITLEBAR '200'.

ENDMODULE. " status_0200 OUTPUT

&----


*& Module USER_COMMAND_0200 INPUT

&----


  • text

----


MODULE user_command_0200 INPUT.

CASE sy-ucomm.

WHEN 'BACK'.

SET SCREEN 0.

LEAVE SCREEN.

WHEN 'UP'.

SET SCREEN 0.

LEAVE SCREEN.

WHEN 'CAN'.

SET SCREEN 0.

LEAVE SCREEN.

ENDCASE.

ENDMODULE. " USER_COMMAND_0200 INPUT

&----


*& Module output_data OUTPUT

&----


  • text

----


MODULE output_data OUTPUT.

gs_bkpf_layout-grid_title = 'HEADER'.

gs_bkpf_layout-zebra = 'X'.

gs_bkpf_layout-cwidth_opt = 'X'.

IF g_container_bkpf IS INITIAL.

CREATE OBJECT g_container_bkpf

EXPORTING container_name = 'G_CONTAINER_BKPF'.

CREATE OBJECT g_alv_grid_bkpf

EXPORTING i_parent = g_container_bkpf.

CALL METHOD g_alv_grid_bkpf->set_table_for_first_display

EXPORTING

i_structure_name = 'BKPF'

is_layout = gs_bkpf_layout

CHANGING

it_outtab = gt_bkpf.

ELSE.

CALL METHOD g_alv_grid_bkpf->refresh_table_display

EXPORTING

i_soft_refresh = 'X'.

ENDIF.

CREATE OBJECT event_receiver.

SET HANDLER event_receiver->handle_double_click FOR g_alv_grid_bkpf.

CALL METHOD cl_gui_alv_grid=>set_focus

EXPORTING

control = g_alv_grid_bkpf.

CALL METHOD cl_gui_cfw=>flush.

ENDMODULE. " output_data OUTPUT

&----


*& Module STATUS_0201 OUTPUT

&----


  • text

----


MODULE status_0201 OUTPUT.

SET PF-STATUS '201'.

SET TITLEBAR '201'.

ENDMODULE. " STATUS_0201 OUTPUT

&----


*& Module USER_COMMAND_0201 INPUT

&----


  • text

----


MODULE user_command_0201 INPUT.

IF sy-ucomm = 'OK'.

SET SCREEN 0.

LEAVE SCREEN.

ENDIF.

ENDMODULE. " USER_COMMAND_0201 INPUT

&----


*& Module ITEM_OUTPUT OUTPUT

&----


  • text

----


MODULE item_output OUTPUT.

gs_bseg_layout-grid_title = 'ITEM'.

gs_bseg_layout-zebra = 'X'.

gs_bseg_layout-cwidth_opt = 'X'.

IF g_container_bseg IS INITIAL.

CREATE OBJECT g_container_bseg

EXPORTING container_name = 'G_CONTAINER_BSEG'.

CREATE OBJECT g_alv_grid_bseg

EXPORTING i_parent = g_container_bseg.

CALL METHOD g_alv_grid_bseg->set_table_for_first_display

EXPORTING

i_structure_name = 'BSEG'

is_layout = gs_bseg_layout

CHANGING

it_outtab = gt_bseg.

ELSE.

CALL METHOD g_alv_grid_bseg->refresh_table_display

EXPORTING

i_soft_refresh = 'X'.

ENDIF.

ENDMODULE. " ITEM_OUTPUT OUTPUT

Read only

former_member249594
Participant
0 Likes
411

Hi Daves,

you can create a class called event_receiver to get the docble-click event in the ALV grid. Example codes please ref to my previous reply in you thread.

In my example codes,:

1) in the DEFINITION of class lcl_event_receiver, I will get the row number which the user clicks on the ALV grid.

2) And then in the IMPLEMENTATION, I read the header itab to get the docuemnt header data and retrieve the item data from bseg into my item itab. The call the screen(for example 201) to show the item data.

3) Put the event class in main screen(for example 200) and program will triger the class once the user double click the main ALV grid.

Hope it can help you