‎2007 Dec 17 9:38 AM
Hii Guys,
i have a drill-down report , where i have to extend the drill-level upto 3 levels.
A sample code would be appreciated.
Regards,,
‎2007 Dec 17 9:47 AM
Hi,
This is an sample code for two levels, hope this helps:
&----
*& Report Z_INTERACTIVEREPORT1 *
*& *
&----
*& OBJECTIVE: The objective of this report is to display one basic list
*& from which we can access two secondary lists.The user can move to
*& transaction 'MM02' by clicking on matnr value in the second
*& secondary list. *
&----
REPORT z_interactivereport1 NO STANDARD PAGE HEADING LINE-SIZE 255.
PROVIDE TABLES WORK AREA IN THE APPLICATION SERVER.
TABLES: lfa1,ekko,ekpo,mara.
DESIGN SELECTION SCREEN WITH SELECT-OPTIONS.
SELECT-OPTIONS: vendor FOR lfa1-lifnr.
DEFINE STRUCTURE FOR BASIC LIST.
TYPES: BEGIN OF s_lfa1,
vendor TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
END OF s_lfa1.
DEFINE AN INTERNAL TABLE BASED ON S_KNA1 STRUCTURE.
DATA: it_lfa1 TYPE STANDARD TABLE OF s_lfa1 WITH HEADER LINE WITH
DEFAULT
KEY.
DEFINE STRUCTURE FOR FIRST SECONDARY LIST.
TYPES: BEGIN OF s_ekko,
ebeln TYPE ekko-ebeln,
aedat TYPE ekko-aedat,
END OF s_ekko.
DEFINE AN INTERNAL TABLE BASED ON S_EKKO STRUCTURE.
DATA: it_ekko TYPE STANDARD TABLE OF s_ekko WITH HEADER LINE WITH
DEFAULT KEY.
DEFINE STRUCTURE FOR SECOND SECONDARY LIST.
TYPES: BEGIN OF s_ktab,
ebelp TYPE ekpo-ebelp,
matnr TYPE mara-matnr,
END OF s_ktab.
DEFINE AN INTERNAL TABLE BASED ON S_KTAB STRUCTURE.
DATA: it_ktab TYPE STANDARD TABLE OF s_ktab WITH HEADER LINE WITH
DEFAULT KEY.
DEFINE VARIABLES FOR GET CURSOR LOGIC.
DATA: fname(10), fval(10).
PROVIDE LOGIC TO PASS DEFAULT VALUES TO SELECTION-SCREEN.
INITIALIZATION.
vendor-low = 1000.
vendor-high = 1007.
vendor-sign = 'I'.
vendor-option = 'BT'.
APPEND vendor.
PROVIDE LOGIC REQUIRED FOR BASIC LIST.
START-OF-SELECTION.
SELECT lifnr name1 FROM lfa1 INTO TABLE it_lfa1 WHERE
lifnr IN vendor.
PROCESSING SCREEN LOGIC FOR BASIC LIST.
LOOP AT it_lfa1.
WRITE:/ it_lfa1-vendor HOTSPOT, it_lfa1-name1.
HIDE it_lfa1-vendor.
ENDLOOP.
PROVIDE logic for first secondary list.
AT LINE-SELECTION.
CASE sy-lsind.
WHEN 1.
SELECT ebeln aedat FROM ekko INTO TABLE it_ekko WHERE lifnr =
it_lfa1-vendor.
PROCESSING SCREEN LOGIC FOR first secondary list.
LOOP AT it_ekko.
WRITE:/ it_ekko-ebeln HOTSPOT, it_ekko-aedat.
HIDE it_ekko-ebeln.
ENDLOOP.
PROVIDE LOGIC REQUIRED FOR SECOND SECONDARY LIST.
WHEN 2.
SELECT ekpoebelp maramatnr INTO it_ktab FROM ekpo INNER JOIN mara ON
ekpomatnr = maramatnr.
APPEND it_ktab.
ENDSELECT.
PROCESSING SCREEN LOGIC FOR SECOND SECONDARY LIST.
LOOP AT it_ktab.
WRITE:/ it_ktab-ebelp, it_ktab-matnr HOTSPOT.
HIDE it_ktab-matnr.
ENDLOOP.
PROVIDE LOGIC TO MOVE THE CURSOR FROM REPORT TO TRANSACTION.
WHEN 3.
GET CURSOR FIELD fname VALUE fval.
PROVIDE THE MEMORY ID OF THE FIELD.
SET PARAMETER ID 'MAT' FIELD fval.
PROVIDE LOGIC TO MOVE TO SCREEN.
CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN.
ENDCASE.
PROVIDE THE LOGIC TO MAINTAIN HEADERS.
TOP-OF-PAGE.
WRITE:/ 'VENDOR DETAILS'.
TOP-OF-PAGE DURING LINE-SELECTION.
CASE sy-lsind.
WHEN 1.
WRITE:/ 'First Secondary List'.
WHEN 2.
WRITE:/ 'Second Secondary List'.
ENDCASE.
Reward points if found helpful...
Cheers,
Chandra Sekhar.
‎2007 Dec 17 9:55 AM
Hii Chandra sekar,
Thanks for the reply.
But the issue is , i need the code for drill-down report up to 3 levels , not for interactive report.
drill down is where an extension button will be displayed , and on pressing that extension button a new data can be displayed....
hope u undtood wat i meant
regards
‎2007 Dec 17 9:48 AM
Hi krishna,
Check this sample code..
REPORT zdrill_down NO STANDARD PAGE HEADING.
TABLES : eban, makt.
DATA : BEGIN OF itab OCCURS 100,
matnr LIKE eban-matnr,
menge LIKE eban-menge,
END OF itab.
SELECT-OPTIONS : s_matnr FOR eban-matnr.
PERFORM get_data.
PERFORM write_list.
AT LINE-SELECTION.
READ LINE sy-lilli FIELD VALUE itab-matnr.
CHECK itab-matnr NE space.
CASE sy-lsind.
when '1'.
PERFORM second_list.
WHEN '2'.
READ LINE sy-lilli FIELD VALUE itab-matnr.
WRITE 😕 itab-matnr.
WHEN '3'.
READ LINE sy-lilli FIELD VALUE itab-matnr.
SELECT SINGLE * FROM makt WHERE matnr = itab-matnr.
WRITE 😕 makt-maktx.
ENDCASE.
&----
to get data from datbase table EBAN
----
FORM get_data.
SELECT matnr menge INTO CORRESPONDING FIELDS OF TABLE
itab FROM eban UP TO 20 ROWS WHERE matnr IN s_matnr .
SORT itab BY matnr.
ENDFORM. "get_data
&----
*& Main list
&----
FORM write_list.
PERFORM header.
LOOP AT itab.
WRITE 😕 sy-vline,
(18) itab-matnr.
HIDE itab-matnr.
WRITE : sy-vline,
(13) itab-menge DECIMALS 0,
sy-vline.
ENDLOOP.
ULINE /(38).
ENDFORM. "write_list
&----
*& Form header
&----
FORM header.
ULINE /(38).
WRITE 😕 sy-vline,
(18) 'Material' CENTERED.
WRITE : sy-vline,
(13) 'Qunatity' ,
sy-vline.
ULINE /(38).
ENDFORM. "header
&----
*& Form second_list drill down list
&----
FORM second_list.
PERFORM header_2.
SELECT SINGLE * FROM makt WHERE matnr = itab-matnr.
WRITE 😕 sy-vline,
(18) itab-matnr.
HIDE itab-matnr.
WRITE : sy-vline,
(35) makt-maktx,
sy-vline.
ULINE /(60).
ENDFORM. "second_list
&----
Second list header
----
FORM header_2.
ULINE /(60).
WRITE 😕 sy-vline,
(18) 'Material',
sy-vline,
(35) 'Material description',
sy-vline.
ULINE /(60).
ENDFORM. "header_2
‎2007 Dec 17 9:56 AM
Hii Chandra sekar,
Thanks for the reply.
But the issue is , i need the code for drill-down report up to 3 levels , not for interactive report.
drill down is where an extension button will be displayed , and on pressing that extension button a new data can be displayed....
hope u undtood wat i meant
regards
‎2007 Dec 17 9:49 AM
Hi,
Check the below link..
http://www.sap-img.com/abap/example-code-for-drill-down-report.htm
Regards,
Nagaraj
‎2007 Dec 17 9:59 AM
Hi,
just copy paste this program and test (The first level will be with regards to Vendor,
The second level will be with regards to Purchase order
The last level contains the details of the Purchase Order)
note: when you copypaste this code, you have to create your own MENU.
&----
*& Report Z10JKRISHNANTEST3 *
*& *
&----
*& *
*& *
&----
REPORT Z10JKRISHNANTEST3 NO STANDARD PAGE HEADING LINE-COUNT 50
MESSAGE-ID Z10JK1.
*name: PO using MENU and READ LINE.
*description: Using tables LFA1 EKKO EKPO T001.
--
TYPES: BEGIN OF T_BASIC,
LIFNR TYPE LIFNR,
NAME1 TYPE NAME1_GP,
ORT01 TYPE ORT01_GP,
END OF T_BASIC.
DATA: WA_BASIC TYPE T_BASIC.
DATA: IT_BASIC TYPE STANDARD TABLE OF T_BASIC.
TYPES: BEGIN OF T_T001,
BUKRS TYPE BUKRS,
ADRNR TYPE ADRNR,
BUTXT TYPE BUTXT,
END OF T_T001.
DATA: WA_T001 TYPE T_T001.
DATA: IT_T001 TYPE T_T001.
TYPES: BEGIN OF T_EKKO,
EBELN TYPE EBELN,
LIFNR TYPE LIFNR,
EKORG TYPE EKORG,
WAERS TYPE WAERS,
BUKRS TYPE BUKRS,
END OF T_EKKO.
DATA: WA_EKKO TYPE T_EKKO.
DATA: IT_EKKO TYPE STANDARD TABLE OF T_EKKO.
TYPES: BEGIN OF T_EKPO,
EBELP TYPE EBELP,
EBELN TYPE EBELN,
MATNR TYPE MATNR,
MENGE TYPE BSTMG,
MEINS TYPE BSTME,
NETPR TYPE BPREI,
NETWR TYPE BWERT,
END OF T_EKPO.
DATA: WA_EKPO TYPE T_EKPO.
DATA: IT_EKPO TYPE STANDARD TABLE OF T_EKPO.
--
INITIALIZATION.
SELECTION-SCREEN BEGIN OF BLOCK JAGAN WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_LIFNR FOR WA_BASIC-LIFNR.
SELECTION-SCREEN END OF BLOCK JAGAN.
DATA: L TYPE I.
DATA: CHECK.
DATA: K TYPE I.
"DATA: D_FIELD(40).
"DATA: D_VALUE(40).
--
AT SELECTION-SCREEN.
SELECT LIFNR
INTO CORRESPONDING FIELDS OF TABLE IT_BASIC
FROM LFA1
WHERE LIFNR IN S_LIFNR.
IF SY-SUBRC <> 0.
MESSAGE E000.
ENDIF.
--
START-OF-SELECTION.
CLEAR WA_BASIC.
REFRESH IT_BASIC.
SELECT LIFNR NAME1 ORT01 INTO CORRESPONDING FIELDS OF TABLE IT_BASIC
FROM LFA1 WHERE LIFNR IN S_LIFNR.
--
END-OF-SELECTION.
SORT IT_BASIC BY LIFNR.
LOOP AT IT_BASIC INTO WA_BASIC.
WRITE:/ WA_BASIC-LIFNR,
WA_BASIC-NAME1,
WA_BASIC-ORT01.
HIDE: WA_BASIC-LIFNR.
ENDLOOP.
--
AT LINE-SELECTION.
SET PF-STATUS 'JAGAN'.
GET CURSOR LINE L.
IF L > 0.
CASE SY-LSIND.
WHEN 1.
"GET CURSOR FIELD D_FIELD VALUE D_VALUE.
CLEAR WA_EKKO.
REFRESH IT_EKKO.
SELECT EBELN
EKORG
BUKRS
INTO CORRESPONDING FIELDS OF TABLE
IT_EKKO
FROM EKKO WHERE LIFNR = WA_BASIC-LIFNR.
SORT IT_EKKO BY EBELN.
LOOP AT IT_EKKO INTO WA_EKKO.
WRITE:/ CHECK AS CHECKBOX,
WA_EKKO-EBELN,
WA_EKKO-EKORG,
WA_EKKO-BUKRS.
HIDE: WA_EKKO-EBELN.
ENDLOOP.
WHEN 2.
CLEAR WA_EKPO.
REFRESH IT_EKPO.
SELECT EBELP
EBELN
MATNR
MENGE
MEINS
NETPR
NETWR
INTO CORRESPONDING FIELDS OF TABLE
IT_EKPO
FROM EKPO WHERE EBELN = WA_EKKO-EBELN.
SORT IT_EKPO BY EBELN EBELP.
LOOP AT IT_EKPO INTO WA_EKPO.
WRITE:/ WA_EKPO-EBELP,
WA_EKPO-EBELN,
WA_EKPO-MATNR,
WA_EKPO-MENGE,
WA_EKPO-MEINS,
WA_EKPO-NETPR,
WA_EKPO-NETWR.
ENDLOOP.
WHEN OTHERS.
ENDCASE.
ELSE.
WRITE:/ 'please do correct selection'.
ENDIF.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'GO01'.
K = 1.
DO.
READ LINE K FIELD VALUE CHECK WA_EKKO-EBELN.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
IF CHECK = 'X'.
SELECT EBELP
EBELN
MATNR
MENGE
MEINS
NETPR
NETWR
INTO CORRESPONDING FIELDS OF TABLE
IT_EKPO
FROM EKPO WHERE EBELN = WA_EKKO-EBELN.
SORT IT_EKPO BY EBELN EBELP.
LOOP AT IT_EKPO INTO WA_EKPO.
WRITE:/ WA_EKPO-EBELP,
WA_EKPO-EBELN,
WA_EKPO-MATNR,
WA_EKPO-MENGE,
WA_EKPO-MEINS,
WA_EKPO-NETPR,
WA_EKPO-NETWR.
ENDLOOP.
ENDIF.
K = K + 1.
ENDDO.
WHEN 'EXT1'.
LEAVE PROGRAM.
ENDCASE.
-
This is also an interactive report which is used to know how many plants are maintained for a material and what does the plant contains. (with regards to double click).
Level 1 - Material number
Level 2 - Plants for that material number
Level 3 - Plants details for that plant.
NOTE: This is a very preliminary program hence performance wise its very slow and no need to create your own MENU.
&----
*& Report Z10JKRISHNAN8TH *
*& *
&----
*& *
*& *
&----
REPORT Z10JKRISHNAN8TH LINE-COUNT 15 MESSAGE-ID Z10SSG.
include Z10JKRISHNANINC. "this contains all the work place, tables.
&----
*& Include Z10JKRISHNANINC *
&----
TABLES: MARA , "master table.
MAKT , "material description.
T001W , "holds the details of plant.
MARD , "holds the details of storage location data.
T006A , "assign internal to language-dependant unit.
T001L . "storage location.
DATA: BEGIN OF MATERIAL_RECORD,
MATNR LIKE MARA-MATNR ,
MTART LIKE MARA-MTART ,
meins like mara-meins ,
MAKTX LIKE MAKT-MAKTX ,
WERKS LIKE T001W-WERKS ,
SPRAS LIKE MAKT-SPRAS ,
LABST LIKE MARD-LABST ,
lgort like mard-lgort ,
NAME1 LIKE T001W-NAME1 ,
END OF MATERIAL_RECORD .
data: lin type i.
" data: cursorfield(20).
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.
--
AT SELECTION-SCREEN.
SELECT MATNR INTO MATERIAL_RECORD-MATNR FROM MARA WHERE MATNR IN S_MATNR.
EXIT.
ENDSELECT.
IF SY-SUBRC <> 0.
MESSAGE E001.
ENDIF.
--
START-OF-SELECTION.
perform selection_process. "subroutine.
&----
*& Form selection_process
&----
text
----
--> p1 text
<-- p2 text
----
FORM selection_process .
CLEAR MATERIAL_record.
SELECT MATNR MTART MEINS INTO (MATERIAL_record-MATNR,
MATERIAL_record-MTART,
MATERIAL_record-MEINS) FROM MARA WHERE
MATNR IN S_MATNR.
SELECT SINGLE MAKTX INTO MATERIAL_record-MAKTX FROM MAKT
WHERE MATNR = MATERIAL_record-MATNR
AND SPRAS = SY-LANGU.
IF SY-SUBRC <> 0.
MATERIAL_record-MAKTX = 'NO DESCRIPTION'.
ENDIF.
WRITE:/ MATERIAL_record-MATNR,MATERIAL_record-MAKTX,
MATERIAL_record-MTART,
MATERIAL_record-MEINS.
HIDE: MATERIAL_record-MATNR, MATERIAL_record-MAKTX.
ENDSELECT.
IF SY-SUBRC <> 0.
MESSAGE E001.
ENDIF.
ENDFORM. " selection_process
--
at line-selection.
window starting at 5 40 ending at 50 55.
get cursor line lin. "to get cusor position.
if lin > 2. "condition for checking the cursor position.
case sy-lsind. "gives the exact position of the cursor.
when 1.
write:/5 'plants regarding the material:', material_record-matnr, material_record-maktx.
clear material_record-werks.
select werks into material_record-werks from marc where matnr = material_record-matnr.
write:/5 'no of plants:', material_record-werks.
hide: material_record-werks. "to pass the datas in the variables to the next stage.
endselect.
when 2.
write:/5 'storage location:', material_record-matnr, material_record-maktx.
write:/5 'plant:', material_record-werks color 5.
select lgort labst into (material_record-lgort ,
material_record-labst) from mard where matnr = material_record-matnr and werks = material_record-werks.
write:/5 'storage loc:', material_record-lgort color 4.
write:/5 'quantity:', material_record-labst color 4.
endselect.
when others.
endcase.
else.
write:/ 'do correct selection' color 4.
endif.
--
TOP-OF-PAGE DURING LINE-SELECTION.
CASE sy-lsind.
when 1.
WRITE:'plant informations'.
when 2.
write:/'storage information'.
ULINE.
WHEN OTHERS.
ENDCASE.
--
TOP-OF-PAGE .
WRITE:/25 'Number of pages', SY-DATUM ,
SY-PAGNO.
INCLUDE Z10JKRISHNAN8TH_SELECTION_PF01.
&----
*& Form selection_process
&----
text
----
--> p1 text
<-- p2 text
----
FORM selection_process .
CLEAR MATERIAL_record.
SELECT MATNR MTART MEINS INTO (MATERIAL_record-MATNR,
MATERIAL_record-MTART,
MATERIAL_record-MEINS) FROM MARA WHERE
MATNR IN S_MATNR.
SELECT SINGLE MAKTX INTO MATERIAL_record-MAKTX FROM MAKT
WHERE MATNR = MATERIAL_record-MATNR
AND SPRAS = SY-LANGU.
IF SY-SUBRC <> 0.
MATERIAL_record-MAKTX = 'NO DESCRIPTION'.
ENDIF.
WRITE:/ MATERIAL_record-MATNR,MATERIAL_record-MAKTX,
MATERIAL_record-MTART,
MATERIAL_record-MEINS.
HIDE: MATERIAL_record-MATNR, MATERIAL_record-MAKTX.
ENDSELECT.
IF SY-SUBRC <> 0.
MESSAGE E001.
ENDIF.
ENDFORM. " selection_process
‎2007 Dec 17 10:05 AM
Hii Jagannathan,
Thanks for the reply.
But the issue is , i need the code for drill-down report up to 3 levels , not for interactive report.
drill down is where an extension button will be displayed , and on pressing that extension button a new data can be displayed....
hope u undtood wat i meant
regards
‎2007 Dec 17 10:02 AM
hi
good
the interactive report can be extended from 0 to 19 means you can create upto 20 secondary list, here if you want to to only upto 3 levels than you can use the hide statement to move from one level to another level.
Thanks
mrutyun^
‎2007 Dec 17 10:11 AM
Hii guys,
I have a small request here....
i really appreciate for the reply given...
wat exactly i need is....a DRILL-DOWN TREE STRUCTURE report , where i can display one record below another when v click the extension button.
I dont need for interactive report for double-click.
Regards..
‎2007 Dec 17 10:16 AM
Hi,
I think you are confusing between interactive and Drilldown.
Dont confuse yourself with buttons, even buttons can be used for interactive reports. Is it not??
Ok anyway, please refer my previous reply's second program that is what you call 'Drilldown'.
hope this helps.
‎2007 Dec 18 4:18 AM
Hi,
If your requirement is Tree Report and not Drill down Interactive report.
Then please go through is PDF link.
http://hackaback.googlepages.com/MicrosoftWord-ReportTree.pdf
hope this helps.
‎2007 Dec 18 4:25 AM
Hi,
This has a part of TREE REPORT logic which i could get from SDN Forms.
Note: (OOPS ALV ).
Following code is to add checkboxes in ALV tree:
FORM add_root_request USING pls_data_ TYPE csg_gs_outtab_p_key__l_is_sub_node_ TYPE c
CHANGING pl_carrid_key._node = nodes->add_node( related_node = p_key
relationship = cl_gui_column_tree=>relat_last_child ).
... §0.2 if information should be displayed at
the hierarchy column set the carrid as text for this node
text = p_ls_data-object.
node->set_text( text ).
... §0.3 set the data for the nes node
node->set_data_row( p_ls_data ).
item = node->get_hierarchy_item( ).
item = node->get_item( 'FCHECKBOX' ). "FCHECKBOX is my radio button field in internal table which I am using to populate the ALV
item->set_type( if_salv_c_item_type=>checkbox ).
pl_carrid_key = node->get_key( )._
CATCH cx_salv_msg.
ENDFORM_._Following code is for handling checbox_change event
PERFORM application_action_events.
FORM application_action_events .
data: lr_events type ref to cl_salv_events_tree.
*data gr_events type ref to lcl_handle_events.
lr_events = gr_tree->get_event( ).
create object gr_events.
set handler gr_events->check for lr_events.
set handler gr_events->on_link_click for lr_events.
*
set handler gr_events->on_before_user_command for lr_events.
*
set handler gr_events->on_after_user_command for lr_events.
*
set handler gr_events->on_keypress for lr_events.
endform. " application_action_events----
-
CLASS lcl_handle_events DEFINITION.
PUBLIC SECTION.
METHODS:
check FOR EVENT checkbox_change OF cl_salv_events_tree IMPORTING node_key columnname checked. "Here node_key is the row number
ENDCLASS. "lcl_handle_events DEFINITION
*----
*
CLASS lcl_handle_events IMPLEMENTATION
*----
*
§4.2 implement the events for handling the events of cl_salv_table
*----
*
CLASS lcl_handle_events IMPLEMENTATION_._
METHOD check_._
WRITE 'hello'_._
DATA lwa_modify_check_ TYPE REF TO csg_gs_outtab.
node_key = node_key - 1_._
READ TABLE csg_gt_list INDEX node_key REFERENCE INTO lwa_modify_check._
if columnname = 'FCHECKBOX'_._
IF checked = 'X'_._
If the value in internal table is set to X, then it is deselct
lwa_modify_check->fcheckbox =_ ' '_._
ELSE_._
lwa_modify_check->fcheckbox =_ 'X'_._
ENDIF_._
ENDIF_._
if columnname = 'CHECKBOX_READ'_._
IF checked = 'X'_._
If the value in internal table is set to X, then it is deselct
lwa_modify_check->checkbox_read =_ ' '_._
ELSE_._
lwa_modify_check->checkbox_read =_ 'X'_._
ENDIF_._
ENDIF_._
*MODIFY TABLE csg_gt_list from l_wa_modify_check.
flag_test = flag_test + 1_._
ENDMETHOD_._ "check
ENDCLASS_._ "lcl_handle_events IMPLEMENTATION