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

HELP!!! Open a window from ALV

Former Member
0 Likes
2,583

Hi, expert

We have an ALV that I add three column, after a validation process an internal table is filled, but there are more than 3 records to put on each column of internal table for same record, how can I show internal table in a new window from ALV, when user make "Double click" .

Regards,

mgg

1 ACCEPTED SOLUTION
Read only

jayanthi_jayaraman
Active Contributor
0 Likes
1,387

Hi,

On double click, try using a statement like as below.

CALL SCREEN 100 starting at 1 1.

Hi, expert

We have an ALV that I add three column, after a validation process an internal table is filled, but there are more than 3 records to put on each column of internal table for same record, how can I show internal table in a new window from ALV, when user make "Double click" .

Regards,

mgg

7 REPLIES 7
Read only

rodrigo_paisante3
Active Contributor
0 Likes
1,387

Hi,

You said what you need to do: event double click.

Try to search about events in alv. Maybe this help you:

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

See page 40 "Double Clicking".

FORM handle_double_click USING i_row TYPE lvc_s_row

i_column TYPE lvc_s_col

is_row_no TYPE lvc_s_roid.

READ TABLE gt_list INDEX is_row_no-row_id .

IF sy-subrc = 0 AND i_column-fieldname = 'SEATSOCC' .

<b>CALL SCREEN 200 . "Details about passenger-seat matching</b>

ENDIF .

ENDFORM .

Reward points if useful!

Regards.

RP

Read only

Former Member
0 Likes
1,387

An alternative to building a screen is to use a standard function module to provide the pop-up.

Try REUSE_ALV_POPUP_TO_SELECT - you need to set up a second field catalog for it and an appropriate internal table.

Then just fill the internal table with desired values and call the function from within the USER_COMMAND form of the main ALV display when the relevant column is selected.

If instead of a pop-up you want to display in the main list - look at the function REUSE_ALV_HIERSEQ_LIST_DISPLAY for your main report.

output can then be:

Main record 1 line

record 1 sub record 1

record 1 sub record 2

record 1 sub record 3

...

record 1 sub record n

Main record 2 line

record 2 sub record 1

record 2 sub record 2

record 2 sub record 3

...

record 2 sub record n

etc.

Andrew

Read only

0 Likes
1,387

Thanks to all for answer

How can I capture field value from internal table where user make double click? , I'm using REUSE_ALV_POPUP_TO_SELECT as Andrew suggested.

it was possible to get field value from slis_selfield-fieldname and fieldvalue, how can I show on windows displayed an internal table???

Regards

mgg

Read only

0 Likes
1,387

Hello mgg

The following report is a variation of the previously posted sample report ZUS_SDN_THREE_ALV_GRIDS.

*&---------------------------------------------------------------------*
*& Report ZUS_SDN_THREE_ALV_GRIDS_POPUP
*&
*&---------------------------------------------------------------------*
*& Display Customer data in three ALV lists:
*& 1st ALV: Customers
*& 2nd ALV: Sales order of selected customer (double-click)
*& 3rd ALV: Positions   of selected sales order (double-click)  &
*&          ALV list in Popup
*&          Double-click on material -> display material (MM02)
*&---------------------------------------------------------------------*

REPORT  ZUS_SDN_THREE_ALV_GRIDS_POPUP.




DATA:
  gd_okcode        TYPE ui_func,
*
  go_docking       TYPE REF TO cl_gui_docking_container,
  go_splitter      TYPE REF TO cl_gui_splitter_container,
  go_splitter_2    TYPE REF TO cl_gui_splitter_container,
  go_cell_top      TYPE REF TO cl_gui_container,
  go_cell_bottom   TYPE REF TO cl_gui_container,
  go_cell_left     TYPE REF TO cl_gui_container,
  go_cell_right    TYPE REF TO cl_gui_container,
  go_grid1         TYPE REF TO cl_gui_alv_grid,
  go_grid2         TYPE REF TO cl_gui_alv_grid,
  go_grid3         TYPE REF TO cl_gui_alv_grid.


DATA:
  gt_knb1          TYPE STANDARD TABLE OF knb1,
  gt_vbak          TYPE STANDARD TABLE OF vbak,
  gt_vbap          TYPE STANDARD TABLE OF vbap.




PARAMETERS:
  p_bukrs          TYPE bukrs  DEFAULT '1000'.



*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler DEFINITION.

  PUBLIC SECTION.
    CLASS-METHODS:
      handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
        IMPORTING
          e_row
          e_column
          es_row_no
          sender.  " sending control, i.e. ALV grid that raised event


ENDCLASS.                    "lcl_eventhandler DEFINITION



*---------------------------------------------------------------------*
*       CLASS lcl_eventhandler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_eventhandler IMPLEMENTATION.

  METHOD handle_double_click.
*   define local data
    DATA:
      ls_knb1      TYPE knb1,
      ls_vbak      TYPE vbak,
      ls_vbap      TYPE vbap.

    FIELD-SYMBOLS:
      <ld_value>   TYPE ANY.


*   Distinguish according to sending grid instance
    CASE sender.
      WHEN go_grid1.
        READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.
        CHECK ( ls_knb1-kunnr IS NOT INITIAL ).

        CALL METHOD go_grid1->set_current_cell_via_id
          EXPORTING
*              IS_ROW_ID    =
*              IS_COLUMN_ID =
            is_row_no    = es_row_no.


*         Triggers PAI of the dynpro with the specified ok-code
        CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDERS' ).


      WHEN go_grid2.
        READ TABLE gt_vbak INTO ls_vbak INDEX e_row-index.
        CHECK ( ls_vbak-vbeln IS NOT INITIAL ).


        ASSIGN COMPONENT e_column-fieldname
              OF STRUCTURE ls_vbak TO <ld_value>.
        MESSAGE i398(00) WITH 'Selected Value =' <ld_value>.

        CALL METHOD go_grid1->set_current_cell_via_id
          EXPORTING
*              IS_ROW_ID    =
*              IS_COLUMN_ID =
            is_row_no    = es_row_no.

*         Triggers PAI of the dynpro with the specified ok-code
        CALL METHOD cl_gui_cfw=>set_new_ok_code( 'ORDER_DETAILS' ).



      WHEN go_grid3.
        READ TABLE gt_vbap INTO ls_vbap INDEX e_row-index.
        CHECK ( ls_vbap-matnr IS NOT INITIAL ).

        SET PARAMETER ID 'MAT' FIELD ls_vbap-matnr.
        CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN.

      WHEN OTHERS.
        RETURN.
    ENDCASE.


  ENDMETHOD.                    "handle_double_click

ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION






START-OF-SELECTION.

  SELECT        * FROM  knb1 INTO TABLE gt_knb1
         WHERE  bukrs  = p_bukrs.


* 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.



* Create splitter container
  CREATE OBJECT go_splitter
    EXPORTING
      parent            = go_docking
      rows              = 1
      columns           = 2
*      NO_AUTODEF_PROGID_DYNNR =
*      NAME              =
    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.

* Get cell container
  CALL METHOD go_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = go_cell_left.
  CALL METHOD go_splitter->get_container
    EXPORTING
      row       = 1
      column    = 2
    RECEIVING
      container = go_cell_right.


* Create 2nd splitter container
  CREATE OBJECT go_splitter_2
    EXPORTING
      parent            = go_cell_left
      rows              = 2
      columns           = 1
*      NO_AUTODEF_PROGID_DYNNR =
*      NAME              =
    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.

* Get cell container
  CALL METHOD go_splitter_2->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = go_cell_top.
  CALL METHOD go_splitter_2->get_container
    EXPORTING
      row       = 2
      column    = 1
    RECEIVING
      container = go_cell_bottom.


* Create ALV grids
  CREATE OBJECT go_grid1
    EXPORTING
      i_parent          = go_cell_top
    EXCEPTIONS
      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.



  CREATE OBJECT go_grid2
    EXPORTING
      i_parent          = go_cell_bottom
    EXCEPTIONS
      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.


  CREATE OBJECT go_grid3
    EXPORTING
      i_parent          = go_cell_right
    EXCEPTIONS
      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.





* Set event handler
  SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid1.
  SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid2.
  SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid3.


* Display data
  CALL METHOD go_grid1->set_table_for_first_display
    EXPORTING
      i_structure_name = 'KNB1'
    CHANGING
      it_outtab        = gt_knb1
    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.

  REFRESH: gt_vbak.
  CALL METHOD go_grid2->set_table_for_first_display
    EXPORTING
      i_structure_name = 'VBAK'
    CHANGING
      it_outtab        = gt_vbak    " empty !!!
    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.


  REFRESH: gt_vbap.
  CALL METHOD go_grid3->set_table_for_first_display
    EXPORTING
      i_structure_name = 'VBAP'
    CHANGING
      it_outtab        = gt_vbap    " empty !!!
    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.

* 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 (ok_code -> GD_OKCODE)
  CALL SCREEN '0100'.
* Flow logic of dynpro:
*
*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 "ORDERS"
*  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.


* Refresh display of detail ALV list
  CALL METHOD go_grid3->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.

  CASE gd_okcode.
    WHEN 'BACK' OR
         'END'  OR
         'CANC'.
      SET SCREEN 0. LEAVE SCREEN.

*   User has pushed button "Display Orders"
    WHEN 'ORDERS'.
      PERFORM customer_show_orders.

    WHEN 'ORDER_DETAILS'.
      PERFORM order_show_details.

    WHEN OTHERS.
  ENDCASE.

  CLEAR: gd_okcode.

ENDMODULE.                 " USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*
*&      Form  CUSTOMER_SHOW_ORDERS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM customer_show_orders .
* define local data
  DATA:
    ld_row      TYPE i,
    ls_knb1     TYPE knb1.

  CALL METHOD go_grid1->get_current_cell
    IMPORTING
      e_row = ld_row.

  READ TABLE gt_knb1 INTO ls_knb1 INDEX ld_row.
  CHECK ( syst-subrc = 0 ).

  SELECT        * FROM  vbak INTO TABLE gt_vbak
         WHERE  kunnr  = ls_knb1-kunnr.


  REFRESH: gt_vbap.




ENDFORM.                    " CUSTOMER_SHOW_ORDERS

*&---------------------------------------------------------------------*
*&      Form  ORDER_SHOW_DETAILS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM order_show_details .
* define local data
  DATA:
    ld_row      TYPE i,
    ls_vbak     TYPE vbak.



  " Get cell that has been double-clicked
  CALL METHOD go_grid1->get_current_cell
    IMPORTING
      e_row = ld_row.
  " For the sake of simplicity just evaluate entire row (and not cell)

  READ TABLE gt_vbak INTO ls_vbak INDEX ld_row.
  CHECK ( syst-subrc = 0 ).



  SELECT        * FROM  vbap INTO TABLE gt_vbap
         WHERE  vbeln  = ls_vbak-vbeln.


  CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
    EXPORTING
      i_title                       = 'Sales Orders'
      i_selection                   = 'X'
*     I_ALLOW_NO_SELECTION          =
      i_zebra                       = 'X'
*     i_screen_start_column         = 0
*     i_screen_start_line           = 0
*     i_screen_end_column           = 0
*     i_screen_end_line             = 0
*     I_CHECKBOX_FIELDNAME          =
*     I_LINEMARK_FIELDNAME          =
*     I_SCROLL_TO_SEL_LINE          = 'X'
      i_tabname                     = 'VBAP'
      i_structure_name              = 'VBAP'
*     IT_FIELDCAT                   =
*     IT_EXCLUDING                  =
*     I_CALLBACK_PROGRAM            =
*     I_CALLBACK_USER_COMMAND       =
*     IS_PRIVATE                    =
*   IMPORTING
*     ES_SELFIELD                   =
*     E_EXIT                        =
    TABLES
      t_outtab                      = gt_vbap
    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.                    " ORDER_SHOW_DETAILS

Regards

Uwe

Read only

jayanthi_jayaraman
Active Contributor
0 Likes
1,388

Hi,

On double click, try using a statement like as below.

CALL SCREEN 100 starting at 1 1.

Read only

sharat_chandra
Product and Topic Expert
Product and Topic Expert
0 Likes
1,387

Hi,

Please check the programs :

BCALV_GRID_02 - Display Detail List in Dialog Box Container

BCALV_GRID_03 - Detail List in Dialog Window

Regards,

Sharat

Read only

Former Member
0 Likes
1,387

Solved.