‎2019 Aug 28 6:21 AM
Hello,
I have seen many questions regarding the same but no solution work for me.
PROBLEM: GET_SELECTED_ROWS returns the selected index the first time when a button is triggered but does not return any value the second time even after refreshing the internal table and grid.
Even setting the SEL_MODE does not work for me.
CALL SCREEN 9000.
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'STATUS'.
IF MATRL_R = 'X'.
SET TITLEBAR 'TITLE'.
ELSE.
SET TITLEBAR 'TITLE1'.
ENDIF.
CREATE OBJECT CONTAINER
EXPORTING
CONTAINER_NAME = 'CCONTAINER'.
CREATE OBJECT SPLITTER
EXPORTING
PARENT = CONTAINER
ROWS = 2
COLUMNS = 1.
CALL METHOD SPLITTER->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = CONTAINER_1.
CALL METHOD SPLITTER->GET_CONTAINER
EXPORTING
ROW = 2
COLUMN = 1
RECEIVING
CONTAINER = CONTAINER_2.
CREATE OBJECT GRID1
EXPORTING
I_PARENT = CONTAINER_1.
CREATE OBJECT GRID2
EXPORTING
I_PARENT = CONTAINER_2.
IF MATRL_R = 'X'.
PERFORM M_OO.
ELSE.
PERFORM S_OO.
ENDIF.
ENDMODULE.
MODULE USER_COMMAND_9000 INPUT.
CASE SY-UCOMM.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'DISPLAY' .
IF MATRL_R = 'X'.
PERFORM LINE_MATERIAL.
CALL METHOD GRID2->REFRESH_TABLE_DISPLAY
EXPORTING
I_SOFT_REFRESH = 'X'.
ELSE.
PERFORM LINE_SALES.
CALL METHOD GRID1->REFRESH_TABLE_DISPLAY
EXPORTING
I_SOFT_REFRESH = 'X'.
ENDIF.
CLEAR SY-UCOMM.
ENDCASE.
ENDMODULE.
FORM M_OO.
GS_LAYOUT-GRID_TITLE = 'Material Report'.
* gs_layout-SEL_MODE = 'A'.
CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_OUTTAB = IT_FINAL
IT_FIELDCATALOG = IT_FCAT.
ENDFORM.
FORM S_OO.
GS_LAYOUT-GRID_TITLE = 'Sales Report'.
* gs_layout-SEL_MODE = 'A'.
CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_FIELDCATALOG = IT_FCAT1
IT_OUTTAB = IT_VBAK.
ENDFORM.
CALL METHOD GRID1->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = ROWS.
LOOP AT ROWS INTO WA_ROWS.
READ TABLE IT_MARA INTO WA_MARA INDEX WA_ROWS-INDEX.
WA_FINAL-MATNR = WA_MARA-MATNR.
WA_FINAL-ERSDA = WA_MARA-ERSDA.
WA_FINAL-ERNAM = WA_MARA-ERNAM.
WA_FINAL-LAEDA = WA_MARA-LAEDA.
WA_FINAL-MTART = WA_MARA-MTART.
WA_FINAL-MATKL = WA_MARA-MATKL.
WA_FINAL-MEINS = WA_MARA-MEINS.
READ TABLE IT_MARD INTO WA_MARD WITH KEY MATNR = WA_FINAL-MATNR.
WA_FINAL-LGORT = WA_MARD-LGORT.
WA_FINAL-WERKS = WA_MARD-WERKS.
APPEND WA_FINAL TO IT_FINAL.
ENDLOOP.
For Full Code
Please Refer full-code.txt
THANK YOU
‎2019 Aug 28 7:37 AM
‎2019 Aug 28 7:37 AM
‎2019 Aug 28 11:10 AM
-> you don't need to create again and again the same objects reference (container and grid) only create when initial/inactive.
Thank You, it worked.
IF GRID1 IS INITIAL AND GRID2 IS INITIAL.
‎2019 Aug 28 8:26 AM
If you're using the CL_SALV_TABLE Class with custom Container you have to call the method
GET_METADATA before you can access the selected rows a.s.o.
‎2019 Aug 28 10:29 AM
Thank you for answering sir, but I'm not using CL_SALV_TABLE.
‎2019 Aug 28 8:28 AM
Your code contains errors where you used GRID1 for GRID2 and vice versa.
Note that ET_INDEX_ROWS is deprecated, you should use ET_ROW_NO as per documentation (but it still works).
+ do what Raymond suggests.
‎2019 Aug 28 11:10 AM
‎2019 Aug 28 9:56 AM
‎2019 Aug 28 10:33 AM
Thank you for answering chandchitme.
As I can see you have added:
But it does not work the second time 😞
‎2019 Aug 28 10:38 AM
For me the code working fine and i am getting the values every time for the selected number of rows
Regards,
Chitme
‎2019 Aug 28 10:41 AM
chandchitme
I'm really sorry, I forgot to uncomment a line. 😛
It works. Thank you so much.