4 weeks ago - last edited 4 weeks ago by anne-petteroe
I want to create a report that will print the data of vbak table with the hyperlink on vbeln.
when double click on vbeln it will show new table of vbap for the same value of vbeln and it should be done with docking by splliting the screen in 50% ration once someone double click on vbeln of vbak by showing vbak table on 50% and vbap table on other 50%.
this is the code i have written.
DATA: lt_vbak TYPE TABLE OF vbak.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS: on_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD on_double_click.
DATA: lv_vbeln TYPE vbak-vbeln,
lt_vbap TYPE TABLE OF vbap,
lv_row TYPE i,
lv_vbeln_c TYPE abap_bool.
* lo_alv TYPE REF TO cl_gui_alv_grid.
lv_row = e_row + sy-tabix - 2.
FIELD-SYMBOLS: <fs_data> TYPE LINE OF zzz_vbak.
READ TABLE lt_vbak INDEX lv_row ASSIGNING <fs_data>.
IF sy-subrc = 0.
* ASSIGN er_data->* TO <fs_data>.
lv_vbeln = <fs_data>-vbeln.
SELECT * FROM vbap INTO TABLE lt_vbap WHERE vbeln = lv_vbeln.
CALL SCREEN 200.
DATA:lo_alv TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container.
CREATE OBJECT lo_alv
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90.
CREATE OBJECT go_splitter
EXPORTING
parent = lo_alv.
endif.
ENDMETHOD.
ENDCLASS.
DATA: lo_event_receiver TYPE REF TO lcl_event_receiver.
START-OF-SELECTION.
SELECT * FROM vbak INTO TABLE lt_vbak.
PERFORM display_alv USING lt_vbak.
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
FORM display_alv USING it_data TYPE table.
DATA: lo_alv_grid TYPE REF TO cl_gui_alv_grid,
lo_events TYPE REF TO cl_gui_custom_container.
CREATE OBJECT lo_events
EXPORTING
container_name = 'ALV_CONTAINER'.
CREATE OBJECT lo_alv_grid
EXPORTING
i_parent = lo_events.
SET HANDLER lo_event_receiver->on_double_click FOR lo_alv_grid.
lo_alv_grid->set_table_for_first_display(
EXPORTING
i_structure_name = 'VBAK'
CHANGING
it_outtab = it_data ).
ENDFORM.
I have made a quick sample code.
CLASS split_alv DEFINITION FINAL.
PUBLIC SECTION.
METHODS constructor.
PRIVATE SECTION.
DATA: purchase_orders TYPE STANDARD TABLE OF vbak WITH KEY vbeln,
purchase_items TYPE STANDARD TABLE OF vbap WITH KEY vbeln posnr.
DATA: salv_vbak TYPE REF TO cl_salv_table,
salv_vbap TYPE REF TO cl_salv_table.
METHODS on_link_click FOR EVENT link_click OF cl_salv_events_table IMPORTING row column.
ENDCLASS.
CLASS split_alv IMPLEMENTATION.
METHOD constructor.
SELECT * FROM vbak UP TO 10 ROWS INTO TABLE @purchase_orders.
DATA(split) = NEW cl_gui_splitter_container( parent = cl_gui_custom_container=>default_screen
no_autodef_progid_dynnr = abap_true
rows = 2
columns = 1 ).
DATA(spl_1) = split->get_container( row = 1 column = 1 ).
DATA(spl_2) = split->get_container( row = 2 column = 1 ).
cl_salv_table=>factory( EXPORTING r_container = spl_1
IMPORTING r_salv_table = salv_vbak
CHANGING t_table = purchase_orders ).
cl_salv_table=>factory( EXPORTING r_container = spl_2
IMPORTING r_salv_table = salv_vbap
CHANGING t_table = purchase_items ).
CAST cl_salv_column_table( salv_vbak->get_columns( )->get_column( 'VBELN' ) )->set_cell_type( if_salv_c_cell_type=>hotspot ).
SET HANDLER on_link_click FOR salv_vbak->get_event( ).
salv_vbak->display( ).
salv_vbap->display( ).
WRITE space.
ENDMETHOD.
METHOD on_link_click.
CASE column.
WHEN 'VBELN'.
TRY.
DATA(document_number) = purchase_orders[ row ]-vbeln.
CLEAR purchase_items.
SELECT * FROM vbap INTO TABLE @purchase_items WHERE vbeln EQ @document_number.
salv_vbak->refresh( ).
salv_vbap->refresh( ).
CATCH cx_sy_itab_line_not_found.
RETURN.
ENDTRY.
ENDCASE.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
NEW split_alv( ).
This will create an ALV with the header documents. When you click on the document ID, it will display the document items in another ALV.
I have used hotspot link event, although double click could be an option as well. Hope this helps you as a reference.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
81 | |
11 | |
10 | |
8 | |
7 | |
6 | |
6 | |
6 | |
5 | |
5 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.