‎2009 Apr 29 7:50 AM
Hi Experts,
I am doing a interactive report in ALV grid...and my requirement is
when the user clicks on SPMON which is displayed on the initial screen the first screen
should display and in first screen when the user clicks LIFNR second screen should display..
I am able to display initial and first screen but second screen is not displaying...I am
pasting a pinch of my code please have a look and advice me..
FORM USER_COMM USING P_UCOMM LIKE SY-UCOMM
R_SELFIELD TYPE SLIS_SELFIELD.
DATA : OK_CODE TYPE SY-UCOMM.
OK_CODE = P_UCOMM.
CASE OK_CODE.
WHEN '&IC1'.
IF R_SELFIELD-FIELDNAME = 'SPMON'.
READ TABLE IT_TAB INDEX R_SELFIELD-TABINDEX.
REFRESH IT_TAB_1[].
CLEAR IT_TAB_1.
LOOP AT IT_FIRST WHERE WERK EQ IT_TAB-WERK AND SPMON EQ IT_TAB-SPMON
AND ART = IT_TAB-ART.
MOVE IT_FIRST-WERK TO IT_TAB_1-WERK.
MOVE IT_FIRST-LIFNR TO IT_TAB_1-LIFNR.
MOVE IT_FIRST-MEANQ TO IT_TAB_1-MEANQ.
MOVE IT_FIRST-BASME_QM TO IT_TAB_1-BASME_QM.
APPEND IT_TAB_1.
CLEAR: IT_FIRST, IT_TAB_1.
ENDLOOP.
REFRESH IT_FIELDCAT1[].
S_LAYOUT-ZEBRA = 'X' .
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X' .
PERFORM FIELD_CATALOG1 TABLES IT_FIELDCAT1
USING:
'IT_TAB_1' 'WERK' ' ' 'PLANT' ' ' ' ',
'IT_TAB_1' 'LIFNR' ' ' 'VENDOR NUMBER' ' ' ' ',
'IT_TAB_1' 'MEANQ' ' ' 'MEANQSCORE' ' ' ' ',
'IT_TAB_1' 'BASME_QM' ' ' 'BuM' ' ' ' ',
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_USER_COMMAND = 'USER_COMM_1'
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = IT_FIELDCAT1[]
TABLES
T_OUTTAB = IT_TAB_1[]
.
ENDIF.
ENDCASE.
ENDFORM. "USER_COMMFor second screen : which is not working
FORM USER_COMM_1 USING P_UCOMM LIKE SY-UCOMM
R_SELFIELD TYPE SLIS_SELFIELD.
DATA : OK_CODE TYPE SY-UCOMM.
OK_CODE = P_UCOMM.
CASE OK_CODE.
WHEN '&IC2'.
IF R_SELFIELD-FIELDNAME = 'LIFNR'.
READ TABLE IT_TAB_1 INDEX R_SELFIELD-TABINDEX.
REFRESH IT_TAB_2[].
CLEAR IT_TAB_2.
LOOP AT IT_SECOND WHERE WERK EQ IT_TAB_1-WERK AND
SPMON EQ IT_TAB_1-SPMON AND ART = IT_TAB_1-ART AND LIFNR = IT_TAB_1-LIFNR.
MOVE IT_SECOND-ART TO IT_TAB_2-ART.
MOVE IT_SECOND-SPMON TO IT_TAB_2-SPMON.
MOVE IT_SECOND-MATNR TO IT_TAB_2-MATNR.
APPEND IT_TAB_2.
CLEAR: IT_SECOND, IT_TAB_2.
ENDLOOP.
REFRESH IT_FIELDCAT2[].
S_LAYOUT-ZEBRA = 'X' .
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X' .
PERFORM FIELD_CATALOG1 TABLES IT_FIELDCAT2
USING:
'IT_TAB_2' 'MATNR' ' ' 'MATERIAL NUMBER' ' ' ' ',
'IT_TAB_2' 'MEANQ' ' ' 'MEANQSCORE' ' ' ' ',
'IT_TAB_2' 'BASME_QM' ' ' 'BuM' ' ' ' ',
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = IT_FIELDCAT2[]
TABLES
T_OUTTAB = IT_TAB_2[]
.
ENDIF.
ENDCASE.
ENDFORM. "USER_COMM_1Please advice
Karthik
Edited by: Karthik R on Apr 29, 2009 12:22 PM
‎2009 Apr 29 8:04 AM
Use both conditions in USER_COMM.
FORM USER_COMM USING P_UCOMM LIKE SY-UCOMM
R_SELFIELD TYPE SLIS_SELFIELD.
DATA : OK_CODE TYPE SY-UCOMM.
OK_CODE = P_UCOMM.
CASE OK_CODE.
WHEN '&IC1'.
IF R_SELFIELD-FIELDNAME = 'SPMON'. " Field name SPMON
READ TABLE IT_TAB INDEX R_SELFIELD-TABINDEX.
REFRESH IT_TAB_1[].
CLEAR IT_TAB_1.
LOOP AT IT_FIRST WHERE WERK EQ IT_TAB-WERK AND SPMON EQ IT_TAB-SPMON
AND ART = IT_TAB-ART.
MOVE IT_FIRST-WERK TO IT_TAB_1-WERK.
MOVE IT_FIRST-LIFNR TO IT_TAB_1-LIFNR.
MOVE IT_FIRST-MEANQ TO IT_TAB_1-MEANQ.
MOVE IT_FIRST-BASME_QM TO IT_TAB_1-BASME_QM.
APPEND IT_TAB_1.
CLEAR: IT_FIRST, IT_TAB_1.
ENDLOOP.
REFRESH IT_FIELDCAT1[].
S_LAYOUT-ZEBRA = 'X' .
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X' .
PERFORM FIELD_CATALOG1 TABLES IT_FIELDCAT1
USING:
'IT_TAB_1' 'WERK' ' ' 'PLANT' ' ' ' ',
'IT_TAB_1' 'LIFNR' ' ' 'VENDOR NUMBER' ' ' ' ',
'IT_TAB_1' 'MEANQ' ' ' 'MEANQSCORE' ' ' ' ',
'IT_TAB_1' 'BASME_QM' ' ' 'BuM' ' ' ' ',
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_USER_COMMAND = 'USER_COMM_1'
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = IT_FIELDCAT1[]
TABLES
T_OUTTAB = IT_TAB_1[]
.
ELSEIF R_SELFIELD-FIELDNAME = 'LIFNR'. " ELSE FIELDNAME LIFNR
READ TABLE IT_TAB_1 INDEX R_SELFIELD-TABINDEX.
REFRESH IT_TAB_2[].
CLEAR IT_TAB_2.
LOOP AT IT_SECOND WHERE WERK EQ IT_TAB_1-WERK AND
SPMON EQ IT_TAB_1-SPMON AND ART = IT_TAB_1-ART AND LIFNR = IT_TAB_1-LIFNR.
MOVE IT_SECOND-ART TO IT_TAB_2-ART.
MOVE IT_SECOND-SPMON TO IT_TAB_2-SPMON.
MOVE IT_SECOND-MATNR TO IT_TAB_2-MATNR.
APPEND IT_TAB_2.
CLEAR: IT_SECOND, IT_TAB_2.
ENDLOOP.
REFRESH IT_FIELDCAT2[].
S_LAYOUT-ZEBRA = 'X' .
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X' .
PERFORM FIELD_CATALOG1 TABLES IT_FIELDCAT2
USING:
'IT_TAB_2' 'MATNR' ' ' 'MATERIAL NUMBER' ' ' ' ',
'IT_TAB_2' 'MEANQ' ' ' 'MEANQSCORE' ' ' ' ',
'IT_TAB_2' 'BASME_QM' ' ' 'BuM' ' ' ' ',
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = IT_FIELDCAT2[]
TABLES
T_OUTTAB = IT_TAB_2[]
.
ENDIF.
ENDCASE.
ENDFORM. "USER_COMMRegards,
Gurpreet
‎2009 Apr 29 8:04 AM
Use both conditions in USER_COMM.
FORM USER_COMM USING P_UCOMM LIKE SY-UCOMM
R_SELFIELD TYPE SLIS_SELFIELD.
DATA : OK_CODE TYPE SY-UCOMM.
OK_CODE = P_UCOMM.
CASE OK_CODE.
WHEN '&IC1'.
IF R_SELFIELD-FIELDNAME = 'SPMON'. " Field name SPMON
READ TABLE IT_TAB INDEX R_SELFIELD-TABINDEX.
REFRESH IT_TAB_1[].
CLEAR IT_TAB_1.
LOOP AT IT_FIRST WHERE WERK EQ IT_TAB-WERK AND SPMON EQ IT_TAB-SPMON
AND ART = IT_TAB-ART.
MOVE IT_FIRST-WERK TO IT_TAB_1-WERK.
MOVE IT_FIRST-LIFNR TO IT_TAB_1-LIFNR.
MOVE IT_FIRST-MEANQ TO IT_TAB_1-MEANQ.
MOVE IT_FIRST-BASME_QM TO IT_TAB_1-BASME_QM.
APPEND IT_TAB_1.
CLEAR: IT_FIRST, IT_TAB_1.
ENDLOOP.
REFRESH IT_FIELDCAT1[].
S_LAYOUT-ZEBRA = 'X' .
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X' .
PERFORM FIELD_CATALOG1 TABLES IT_FIELDCAT1
USING:
'IT_TAB_1' 'WERK' ' ' 'PLANT' ' ' ' ',
'IT_TAB_1' 'LIFNR' ' ' 'VENDOR NUMBER' ' ' ' ',
'IT_TAB_1' 'MEANQ' ' ' 'MEANQSCORE' ' ' ' ',
'IT_TAB_1' 'BASME_QM' ' ' 'BuM' ' ' ' ',
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_USER_COMMAND = 'USER_COMM_1'
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = IT_FIELDCAT1[]
TABLES
T_OUTTAB = IT_TAB_1[]
.
ELSEIF R_SELFIELD-FIELDNAME = 'LIFNR'. " ELSE FIELDNAME LIFNR
READ TABLE IT_TAB_1 INDEX R_SELFIELD-TABINDEX.
REFRESH IT_TAB_2[].
CLEAR IT_TAB_2.
LOOP AT IT_SECOND WHERE WERK EQ IT_TAB_1-WERK AND
SPMON EQ IT_TAB_1-SPMON AND ART = IT_TAB_1-ART AND LIFNR = IT_TAB_1-LIFNR.
MOVE IT_SECOND-ART TO IT_TAB_2-ART.
MOVE IT_SECOND-SPMON TO IT_TAB_2-SPMON.
MOVE IT_SECOND-MATNR TO IT_TAB_2-MATNR.
APPEND IT_TAB_2.
CLEAR: IT_SECOND, IT_TAB_2.
ENDLOOP.
REFRESH IT_FIELDCAT2[].
S_LAYOUT-ZEBRA = 'X' .
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X' .
PERFORM FIELD_CATALOG1 TABLES IT_FIELDCAT2
USING:
'IT_TAB_2' 'MATNR' ' ' 'MATERIAL NUMBER' ' ' ' ',
'IT_TAB_2' 'MEANQ' ' ' 'MEANQSCORE' ' ' ' ',
'IT_TAB_2' 'BASME_QM' ' ' 'BuM' ' ' ' ',
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = IT_FIELDCAT2[]
TABLES
T_OUTTAB = IT_TAB_2[]
.
ENDIF.
ENDCASE.
ENDFORM. "USER_COMMRegards,
Gurpreet
‎2009 Apr 29 9:34 AM
Hi Gurpreet,
Thank u !!! But its not working, I think u have understood my requirement wrongly
as u have not used user command USER_COMM_1 ...
Actually my requirement is three different screens.
1. 1st one is initial screen ..when user clicks s068~spmon the details of it
should appear in the second screen.
2. In second screen details of s068~spmon should fire and when user clicks s068~lifnr
other screen ie is the third screen should appear.
3. In third screen detials of s068~lifnr should appear.
Please advice
Karthik
‎2009 Apr 29 9:45 AM
1) Instead of using Two Dynamic use one Subroutine.
FORM USER_COMM USING P_UCOMM LIKE SY-UCOMM
R_SELFIELD TYPE SLIS_SELFIELD.
ENDFORM.2) When the Line is clicked:
Check for the field which is clicked.
If SPMOM.
First Screen.
ELSEIF LIFNR.
SECOND SCREEN.
ENDIF.It will work in the same subroutine.Just check for the field name in condition.
Regards,
Gurpreet
‎2009 Apr 29 9:53 AM
Hello Karthik,
FORM USER_COMM_1 USING P_UCOMM LIKE SY-UCOMM
R_SELFIELD TYPE SLIS_SELFIELD.
DATA : OK_CODE TYPE SY-UCOMM.
OK_CODE = P_UCOMM.
CASE OK_CODE.
WHEN '&IC2'.
There is no Ok_code &IC2. It must be &IC1 only.Change it. It works.
Regards
Venkat
‎2009 Apr 29 8:33 AM
Hi,
FORM USER_COMM_1 USING P_UCOMM LIKE SY-UCOMM
R_SELFIELD TYPE SLIS_SELFIELD.
DATA : OK_CODE TYPE SY-UCOMM.
OK_CODE = P_UCOMM.
CASE OK_CODE.
WHEN '&IC2'. --> should have been &IC1 i guess
‎2009 Apr 29 10:17 AM
Hi,
'&IC2' does not have any meaning.
'&IC1' means double click.
So you should change it.
Please try.
Regards,
Chris Gu
Edited by: Gu Chris on Apr 29, 2009 11:19 AM