‎2007 Jun 12 6:18 AM
Hi...
I am doing a report where output will be displayed in ALV list format.
After the alv is displayed if user clicks on any line the report should run a select for a table based on the values in the line.
Have anyone done such sort of interactive program.
Do let me know.
Regards,
Sandy
‎2007 Jun 12 6:20 AM
Hi,
&----
*& Report ZREPORT *
*& *
&----
*& *
*& *
&----
REPORT zreport1.
TABLES : ekko,ekpo.
DATA : total TYPE i.
DATA : BEGIN OF itab2 OCCURS 0,
ekorg LIKE ekko-ekorg,
ebeln LIKE ekko-ebeln,
lifnr LIKE ekko-lifnr,
zterm LIKE ekko-zterm,
matnr LIKE ekpo-matnr,
menge LIKE ekpo-menge,
netpr LIKE ekpo-netpr,
END OF itab2.
TYPES : BEGIN OF itab1,
lifnr LIKE lfa1-lifnr,
name1 LIKE lfa1-name1,
adrnr LIKE lfa1-adrnr,
ort01 LIKE lfa1-ort01,
pstl2 LIKE lfa1-pstl2,
regio LIKE lfa1-regio,
END OF itab1.
DATA : itab TYPE TABLE OF itab1 WITH HEADER LINE,
wa LIKE LINE OF itab.
START-OF-SELECTION.
SELECT-OPTIONS : aedat FOR ekko-aedat.
SELECT ekkoebeln ekkolifnr ekkoekorg ekkozterm ekpomatnr ekpomenge ekpo~netpr
INTO CORRESPONDING FIELDS OF TABLE itab2 FROM ( ekko INNER JOIN ekpo ON ekkoebeln = ekpoebeln )
WHERE ekko~aedat IN aedat AND
ekko~bstyp EQ 'F' AND
ekko~bsart EQ 'ZWT' AND
ekko~statu EQ '9' .
SORT itab2 BY ekorg.
FORMAT HOTSPOT ON.
WRITE : /3 'PO NUM' , 25 'VENDOR NUM' , 50 'purchase org' , 75 'payment term' , 100 'matnum' , 110 'quantity' , 130 'netvalue'.
ULINE.
LOOP AT itab2.
WRITE : / itab2-ebeln UNDER 'PO NUM'.
WRITE : itab2-lifnr UNDER 'VENDOR NUM'.
WRITE : itab2-ekorg UNDER 'purchase org'.
WRITE : itab2-zterm UNDER 'payment term'.
WRITE : itab2-matnr UNDER 'matnum'.
WRITE : itab2-menge UNDER 'quantity'.
WRITE : itab2-netpr UNDER 'netvalue'.
HIDE : itab2-lifnr.
AT END OF ekorg.
ULINE.
SUM.
WRITE: /110 itab2-menge COLOR 3 , 130 itab2-netpr COLOR 3.
ULINE.
ENDAT.
ENDLOOP.
SELECT lifnr name1 adrnr ort01 pstl2 regio FROM lfa1 INTO
TABLE itab.
FORMAT HOTSPOT OFF.
AT LINE-SELECTION.
WRITE : /3 'vendor num' , 25 'vendor name' , 50 'address' , 75 'city' , 100 'postal code' , 125 'state'.
ULINE.
READ TABLE itab INTO wa WITH KEY lifnr = itab2-lifnr.
WRITE : / wa-lifnr UNDER 'vendor num'.
WRITE : wa-name1 UNDER 'vendor name'.
WRITE : wa-adrnr UNDER 'address'.
WRITE : wa-ort01 UNDER 'city'.
WRITE : wa-pstl2 UNDER 'postal code'.
WRITE : wa-regio UNDER 'state'.
TOP-OF-PAGE.
WRITE : /40 'PURCHASE ORDER DETAIL REPORT'.
ULINE.
END-OF-PAGE.
<b>CHeck this code.hope this helps.</b>
Regards,
Priyanka.
‎2007 Jun 12 6:20 AM
Hi,
&----
*& Report ZREPORT *
*& *
&----
*& *
*& *
&----
REPORT zreport1.
TABLES : ekko,ekpo.
DATA : total TYPE i.
DATA : BEGIN OF itab2 OCCURS 0,
ekorg LIKE ekko-ekorg,
ebeln LIKE ekko-ebeln,
lifnr LIKE ekko-lifnr,
zterm LIKE ekko-zterm,
matnr LIKE ekpo-matnr,
menge LIKE ekpo-menge,
netpr LIKE ekpo-netpr,
END OF itab2.
TYPES : BEGIN OF itab1,
lifnr LIKE lfa1-lifnr,
name1 LIKE lfa1-name1,
adrnr LIKE lfa1-adrnr,
ort01 LIKE lfa1-ort01,
pstl2 LIKE lfa1-pstl2,
regio LIKE lfa1-regio,
END OF itab1.
DATA : itab TYPE TABLE OF itab1 WITH HEADER LINE,
wa LIKE LINE OF itab.
START-OF-SELECTION.
SELECT-OPTIONS : aedat FOR ekko-aedat.
SELECT ekkoebeln ekkolifnr ekkoekorg ekkozterm ekpomatnr ekpomenge ekpo~netpr
INTO CORRESPONDING FIELDS OF TABLE itab2 FROM ( ekko INNER JOIN ekpo ON ekkoebeln = ekpoebeln )
WHERE ekko~aedat IN aedat AND
ekko~bstyp EQ 'F' AND
ekko~bsart EQ 'ZWT' AND
ekko~statu EQ '9' .
SORT itab2 BY ekorg.
FORMAT HOTSPOT ON.
WRITE : /3 'PO NUM' , 25 'VENDOR NUM' , 50 'purchase org' , 75 'payment term' , 100 'matnum' , 110 'quantity' , 130 'netvalue'.
ULINE.
LOOP AT itab2.
WRITE : / itab2-ebeln UNDER 'PO NUM'.
WRITE : itab2-lifnr UNDER 'VENDOR NUM'.
WRITE : itab2-ekorg UNDER 'purchase org'.
WRITE : itab2-zterm UNDER 'payment term'.
WRITE : itab2-matnr UNDER 'matnum'.
WRITE : itab2-menge UNDER 'quantity'.
WRITE : itab2-netpr UNDER 'netvalue'.
HIDE : itab2-lifnr.
AT END OF ekorg.
ULINE.
SUM.
WRITE: /110 itab2-menge COLOR 3 , 130 itab2-netpr COLOR 3.
ULINE.
ENDAT.
ENDLOOP.
SELECT lifnr name1 adrnr ort01 pstl2 regio FROM lfa1 INTO
TABLE itab.
FORMAT HOTSPOT OFF.
AT LINE-SELECTION.
WRITE : /3 'vendor num' , 25 'vendor name' , 50 'address' , 75 'city' , 100 'postal code' , 125 'state'.
ULINE.
READ TABLE itab INTO wa WITH KEY lifnr = itab2-lifnr.
WRITE : / wa-lifnr UNDER 'vendor num'.
WRITE : wa-name1 UNDER 'vendor name'.
WRITE : wa-adrnr UNDER 'address'.
WRITE : wa-ort01 UNDER 'city'.
WRITE : wa-pstl2 UNDER 'postal code'.
WRITE : wa-regio UNDER 'state'.
TOP-OF-PAGE.
WRITE : /40 'PURCHASE ORDER DETAIL REPORT'.
ULINE.
END-OF-PAGE.
<b>CHeck this code.hope this helps.</b>
Regards,
Priyanka.
‎2007 Jun 12 7:22 AM
‎2007 Jun 12 7:30 AM
‎2007 Jun 12 7:37 AM
Hi Sandeep,
If you use objecy oriented approach for ALV, you can very easily do this using the predefined events in class cl_gui_alv_grid. What you need to do is define a local class in your program and define the handler method for the required event
(of cl_gui_alv_grid) in the local class. Suppose you want to use the event called double_click in cl_gui_alv_grid. So in your local class define a handler method for that and whenever the user double clicks on any line this method will be triggered.
In that method you can do whatever processing you want to do.
Check the events section in the following URL:
Award points if found useful.
Regards
Indrajit
‎2007 Jun 14 10:32 AM
i have used my own z table so please use another table....
this is the standard program for all interactive reports.
&----
*& Report Name:- ZNA_INT_ALV_REP Create Date : -
*& Author Name:-
*& Program Title:-
&----
*&
&----
REPORT ZNA_INT_ALV_REP.
break-point.
TYPE-POOLS: SLIS.
TABLES: ZNA_TEST_TABLE.
DATA: IT LIKE ZNA_TEST_TABLE OCCURS 0 WITH HEADER LINE.
DATA: IT1 LIKE ZNA_TEST_TABLE OCCURS 0 WITH HEADER LINE.
DATA: FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: HEADER TYPE SLIS_T_LISTHEADER.
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT_001.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN: BEGIN OF LINE.
SELECTION-SCREEN: COMMENT (30) TEXT_002.
SELECT-OPTIONS: ROLLNO FOR ZNA_TEST_TABLE-ROLLNO.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN ULINE.
selection-screen uline .
SELECTION-SCREEN: END OF BLOCK B1.
INITIALIZATION.
TEXT_001 = 'SELECTION CRITERIA'.
TEXT_002 = 'Roll Number'.
START-OF-SELECTION.
SELECT * FROM ZNA_TEST_TABLE
INTO TABLE IT
WHERE
ROLLNO IN ROLLNO.
PERFORM BUILD_FIELDS.
PERFORM BUILD_LAYOUT.
PERFORM BUILD_HEADER USING HEADER.
PERFORM BUILD_COMMENTRY.
PERFORM DISPLAY_ALV.
&----
*& Form BUILD_FIELDS
&----
text
----
--> p1 text
<-- p2 text
----
FORM BUILD_FIELDS .
DATA: FLDCAT TYPE SLIS_FIELDCAT_ALV.
DATA: POS TYPE I VALUE 0.
FLDCAT-FIELDNAME = 'ROLLNO'.
FLDCAT-SELTEXT_M = 'ROLL NUMBER'.
FLDCAT-HOTSPOT = 'X'.
FLDCAT-COL_POS = POS.
FLDCAT-JUST = 'C'.
FLDCAT-OUTPUTLEN = 12.
APPEND FLDCAT TO FIELDCAT.
POS = POS + 1.
CLEAR FLDCAT.
FLDCAT-FIELDNAME = 'NAME'.
FLDCAT-SELTEXT_M = 'NAME'.
FLDCAT-COL_POS = POS.
FLDCAT-JUST = 'L'.
FLDCAT-OUTPUTLEN = 25.
APPEND FLDCAT TO FIELDCAT.
POS = POS + 1.
CLEAR FLDCAT.
FLDCAT-FIELDNAME = 'ADDRESS'.
FLDCAT-SELTEXT_M = 'ADDRESS'.
FLDCAT-COL_POS = POS.
FLDCAT-JUST = 'L'.
FLDCAT-OUTPUTLEN = 20.
APPEND FLDCAT TO FIELDCAT.
POS = POS + 1.
CLEAR FLDCAT.
FLDCAT-FIELDNAME = 'CITY'.
FLDCAT-SELTEXT_M = 'CITY'.
FLDCAT-HOTSPOT = 'X'.
FLDCAT-COL_POS = POS.
FLDCAT-JUST = 'L'.
FLDCAT-OUTPUTLEN = 20.
APPEND FLDCAT TO FIELDCAT.
POS = POS + 1.
CLEAR FLDCAT.
FLDCAT-FIELDNAME = 'COMPANY_NAME'.
FLDCAT-SELTEXT_M = 'COMPANY NAME'.
FLDCAT-COL_POS = POS.
FLDCAT-JUST = 'L'.
FLDCAT-OUTPUTLEN = 30.
APPEND FLDCAT TO FIELDCAT.
POS = POS + 1.
FLDCAT-FIELDNAME = 'CURRC'.
FLDCAT-SELTEXT_M = 'SALARY'.
FLDCAT-COL_POS = POS.
FLDCAT-JUST = 'L'.
FLDCAT-OUTPUTLEN = 20.
APPEND FLDCAT TO FIELDCAT.
CLEAR FLDCAT.
ENDFORM. " BUILD_FIELDS
&----
*& Form BUILD_LAYOUT
&----
text
----
--> p1 text
<-- p2 text
----
FORM BUILD_LAYOUT .
LAYOUT-NO_INPUT = 'X'.
LAYOUT-ZEBRA = 'X'.
LAYOUT-COLWIDTH_OPTIMIZE = ' '.
LAYOUT-NO_COLHEAD = ' '.
LAYOUT-NO_VLINE = ' '.
ENDFORM. " BUILD_LAYOUT
&----
*& Form BUILD_HEADER
&----
text
----
--> p1 text
<-- p2 text
----
FORM BUILD_HEADER USING GT_HEADER TYPE SLIS_T_LISTHEADER.
DATA: TP TYPE SLIS_LISTHEADER.
TP-TYP = 'H'.
TP-INFO = 'INTERACTIVE ALV REPORT'.
APPEND TP TO GT_HEADER.
ENDFORM. " BUILD_HEADER
&----
*& Form BUILD_COMMENTRY
&----
text
----
--> p1 text
<-- p2 text
----
FORM BUILD_COMMENTRY .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEADER
I_LOGO = 'FLOWER'.
ENDFORM. " BUILD_COMMENTRY
&----
*& Form DISPLAY_ALV
&----
text
----
--> p1 text
<-- p2 text
----
FORM DISPLAY_ALV .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'BUILD_COMMENTRY'
I_STRUCTURE_NAME =
I_GRID_TITLE =
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FIELDCAT[]
I_SAVE = 'X'
IT_EVENTS =
IT_EVENT_EXIT =
TABLES
T_OUTTAB = IT
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. " DISPLAY_ALV
&----
*& Form USER_COMMAND
&----
text
----
-->R_UCOMM text
-->SELECT_FIELD text
----
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM SELECT_FIELD TYPE SLIS_SELFIELD.
DATA: FIELD_NAME TYPE SLIS_FIELDNAME.
FIELD_NAME = SELECT_FIELD-FIELDNAME.
CASE FIELD_NAME.
WHEN 'ROLLNO'.
REFRESH IT1.
READ TABLE IT INTO IT1 WITH KEY ROLLNO = SELECT_FIELD-VALUE.
APPEND IT1.
PERFORM DISPLAY_ROLLNO.
WHEN 'CITY'.
REFRESH IT1.
SELECT * FROM ZNA_TEST_TABLE
INTO TABLE IT1
FOR ALL ENTRIES IN IT
WHERE
CITY = SELECT_FIELD-VALUE AND
ROLLNO = IT-ROLLNO.
PERFORM DISPLAY_CITY.
ENDCASE.
ENDFORM. "USER_COMMAND
&----
*& Form DISPLAY_ROLLNO
&----
text
----
--> p1 text
<-- p2 text
----
FORM DISPLAY_ROLLNO .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_TOP_OF_PAGE = 'BUILD_COMMENTRY'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_GRID_TITLE = 'ROLL NUMBER WISE DISPLAY'
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FIELDCAT[]
I_SAVE = 'X'
TABLES
T_OUTTAB = IT1[]
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. " DISPLAY_ROLLNO
&----
*& Form DISPLAY_CITY
&----
text
----
--> p1 text
<-- p2 text
----
FORM DISPLAY_CITY .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_TOP_OF_PAGE = 'BUILD_COMMENTRY'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_GRID_TITLE = 'CITY WISE LIST OF EMPLOYEES.'
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FIELDCAT[]
I_SAVE = 'X'
TABLES
T_OUTTAB = IT1[]
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. " DISPLAY_CITY