Multi layered drill down

Post Author: twowheeler
CA Forum: Xcelsius and Live Office
Hello,
Is there a way to do a multi layered drill down without having the Enterprise version?  I have the trial version of Xcelsius 2008.
e.g., I have expense bar chart for a 5 hospitals.  If I click on one of the hospitals, I'd like to have this drill down to the departments for that hospital and show a bar chart by department.  Then, I'd like to be able to drill down on a department and show a bar chart by account.
Is this doable with Xcelsius 2008? 
Thanks!

Post Author: diox
CA Forum: Xcelsius and Live Office
I think it would be better if u create a htm page to simplify drill down on xcelsius.You could create links on XCelsius.
good luck

Similar Messages

  • Multi-level Drill Down

    Hi All,
    I have to develop a Dashboard that has multi-level drill down on Charts.
    I am trying to figure out which is best practice.
    1. Display all the charts on 1 screen
    2. Display charts as they go down the drill path.
    An example would be
    Chart1 -> Chart2 -> Chart3 ->Chart4
    In this case would it require a close button or Back button to take me back to first screen when I am 1 or more level down. What is the general practice?
    Any Inputs are greatly appreciated.
    Mucho Gracias!
    Sam

    Hi Anil,
    Your idea was quite helpful. However, I am trying to dynamically hide/show a label based on the drill-down. The whole idea is to make it a close button as you suggested earlier.
    Initially the first screen should become visible with a chart. When a chart bar is clicked then second chart should be visible with close button on the top while the first chart becomes hidden. After clicking close, chart 1 is visible and chart2 is hidden.
    Any idea how to achieve this.
    Right now I tried to dynamically hide/show label but when I preview it is always showing. I have set the dynamic status and key to what the chart drill down will insert and for that I have a row insert with 1 and 2. This is not working.
    Thanks for your earlier response.
    -Sam

  • Unable to Multi Level Drill Down on Single Data Object in BAM Report

    Hi,
    We need to have multi level drill down in a BAM report.
    We are able to create single level drill down using 'Collapsed List' view in a Tiled Report, but unable to drill further.
    We are using BAM (11.1.1.2).
    Please let us know the steps to do this, your input is highly appreciated.
    Thanks,
    Arijit
    Edited by: user2917352 on May 4, 2011 11:21 PM

    Have you used Dimension? By defining Dimensions, you can create multi level drill down on the same data object, in the same report.
    1. Define the Dimension in the data object
    2. In the Studio, choose Drilling tab under the report
    3. Drill Hierarchies will be available. Choose the Dimension
    The drilling level will depend on the depth of the Dimension you have specified!
    -AR

  • Multi Layered Drill automatically goes to lowest level after first run

    Hi there,
    I'm using Xcelsius Engage 5.3.0.0.
    I have 3 combo charts each at a different level in drill down.
    Chart1: Faculty Level
    Chart2: Department Level
    Chart3: Discipline Level
    So 1 faculty can contain many departments and one department can contain many disciplines.
    Each graph dynamically appears over the other as the user drills down to level 3. I use "back" buttons using push buttons to clear previous input from the chart drill downs.
    My problem is that the drill down functionality works perfectly the FIRST TIME THROUGH but any time after that, it always drills through to the lowest level from the top automatically without letting me see Chart2.
    For example, if I drill on a faculty into the department chart and then select a department and drill into the discipline level that works fine. I then press back and am returned to the department level chart, click back one more time and am returned to the faculty level again. HOWEVER, once I select a different faculty to drill down on, I'm immediately shipped to the 3rd (discipline level) of that faculty.
    I've noticed that after it's worked properly the first time through, when I'm "backing out" using the push buttons and going back past the level 2 chart, a department is still highlighted as selected (even though all graphs involved are set to no default selection). So when I back out and select a different faculty I think department level chart still highlighted as selected is having an effect and Xcelsius thinks a user is clicking on a department so it ships me right off to the lowest level.
    I've done some googling and others are having the exact same problem I'm having:
    http://www.forumtopics.com/busobj/viewtopic.php?p=797270#797270
    I'd love a work around that doesn't involve the reset button.
    Thanks.

    http://www.forumtopics.com/busobj/viewtopic.php?p=797995
    Another of the same issue.
    Is there a bug fix or where can I submit this to be reviewed?

  • Multi-Use Drill Down Reports?

    Hi,
    I'm just starting out with reporting in SSRS so this may be a silly question but I'm struggling to find a way to do what I want :)
    I have a large graphical report with several top 10 reports on different a cube. (eg. top 10 number of events, top ten numbers of computers affected) 
    I want drill down reports for both the Event Name and Computer Name, also to be able to click on the header of the report and get a complete unrestricted report. I have created a drill down report that has all the data and if I choose one item (say computer
    name) I can drop down to the drill down and filter the table in that with the computer name and return any results for that computer. I cant figure out how to have a secondary link that passes a wildcard to returns all results. I'd also like to have the ability
    to send an event name to the same drill down and a wildcard for the computer name. However I cant figure out how to get the filter on the table to accept any wildcards. 
    I dont want to have to create multiple reports for each of the different drilldowns, is this possible? (Easy to understand answers for a newbie if possible :) )

    Hi Chris_C2000,
    If I understand correctly, you have configure “Go to report” action in your report. It is Drillthrough in SSRS. You want to pass a value link to the corresponding report. We can add parameters in the drillthrough report, then pass parameters values to the
    report.
    I have create a simple report in my test environment. Suppose we have the same dataset (DataSet1) in main report and subreport with two fields: CalendarYear, SalesAmount. Please refer to it.
    Subreport:
    Add a table in the report body, fill with CalendarYear, SalesAmount fields.
    Add another dataset (DataSet2) with CalenderYear field.
    Add a parameter (CalenderYear) get Available Values from DataSet2 CalenderYear field.
    Add filter in the DataSet1, with values below:
    Expression: [CalenderYear]
    Operator: =
    Value: [@CalenderYear]
    Main report:
    Add a chart in the report, fill SalesAmount in the Values dialog box, CalenderYear in the Category Groups dialog box.
    Right click the bar in the chart, click Series Properties.
    Click Action in the left pane. Select “Go to report” option.
    Select the subreport below “Specify a report” prompt.
    Click Add icon below, and fill with following values:
    Name: CalenderYear                 Value: [CalenderYear]
    Then, when we preview the report, we can click the specific bar link to the subreport get the corresponding data.
    Reference:
    http://technet.microsoft.com/en-us/library/aa337477(v=sql.105).aspx
    Regards,
    Alisa Tang
    Alisa Tang
    TechNet Community Support

  • Multi direction drill down

    Hi All,
    I have an issue with the report which has some complex drill down functionality.
    Available Hierarchies*
    1. Country->Area->City->SalesMan->Revenue
    2. Country->Area->SalesGroup->SalesManager->SalesMan->Revenue
    3. Country->Area->District->BusinessGroup->Revenue
    In the above hierarchies , i got the data from different dimensions. Here the 3rd level of column determines based on the Area value. Say when i click Area1 it should provide Hierarchy1 drilldown. if i click Area3 it should provide Hierarchy2 drilldown like other.
    How to achieve this kind of data based drilldown?
    If it is not possible threw normal BI Drilldown then hyperlink will sounds good?. If so how to populate the drill down data? Where to keep the hierarchy informations?

    Hello,
    You can go to column properties>column format and create a value interaction to go from one level to the next one by creating two reports and using a "hyperlink". Not exactly a drilldown but you will be able to do what you re saying. You will need to create a second report that depending on the value of Area displays the respective column you prefer.
    Regards,
    K.

  • Creating Drill-Down on single primary key

    I have 3 Tables
    1.Details Table(Contains State,Region,Branch,Member Name,Member ID)
    2.Fact Table (This is also contains all above columns)
    3.Fact Table(Contains Only Member ID)
    I can easily create drill-down for above 2 tables by complex joining of all columns
    But the problem is with 3rd table, while i want to create drill-down i have only one PK in that table..
    Kindly give an solution for this
    Regards,
    Satya

    Have you used Dimension? By defining Dimensions, you can create multi level drill down on the same data object, in the same report.
    1. Define the Dimension in the data object
    2. In the Studio, choose Drilling tab under the report
    3. Drill Hierarchies will be available. Choose the Dimension
    The drilling level will depend on the depth of the Dimension you have specified!
    -AR

  • Drill Down Charts - Oracle Graphics

    My understanding of drill down chart is when
    you click on the particular chart element in the Master chart the Detail chart should show up.
    But in my situation when I choose run from layout editor in oracle graphics, first the Master chart appears and then it automatically refreshes it with the Detail chart without user intervention. The Master
    chart appears as a minimized window.
    I am passing parameter between the Master chart and the detail chart.
    Could anyone tell me how to solve this
    and get the effect of drill down from
    Master Chart to show up the Detail Chart Please ?
    Thanks
    Mohan

    Hi Pradeep,
    You can careate your own dirlldown chart reports like :
    --Create a report using xtreem sample database
    --Crate two groups like Country & Reagion and use Yearly sales in your charts
    --Place a bar graph on your Country group footer and Region group footer.
    --Use Hide(Drill Down Ok) option for region group footer and suppress all other empty sections.
    --Now try to drill down through Country group to Region group.
    You will have to go through only help documents on drill down options in Crystal.
    You have to create a ODBC connection on server end also copy the xtreem database on your server to run you reports in infoview.
    Yes Crystal Reports 2008 supports multi level drill down.
    Thanks,
    Sastry

  • Drill down of manual cross tab reports with Multi variable subreports

    I tried to make a subreport by setting the hyperlink on the group sum of a manual crosstab (http://www.tek-tips.com/faqs.cfm?fid=1219) by setting Hyperlink to another report object.
    The documentation said I should copy and paste the name of the report object in the sub report over into the field in the primary report.  As I don' t really know what a report object is this failed.  Further I found some code in a sample report to deal with subreports that have multiple parameters.  The code was unbelievable; it couldn't be right.  So, how do I link my subreports to my reports by passing two parameters to the subreports that represent the row and column label of a given sum.
    Further what are the fields in the hyperlink another report object from for:
    Select from: //do they want a query here?
    Report title: //The don't let you type in this
    Object Name: //This seems elective
    Data Context:// No clue on this either
    Thanks for any help you can provide
    p.s. This forum doesn't seem to use traditional bit code

    Thanks for the reply.  I looked through those samples and other samples.  The two cross tab samples I could find were CtossTab and Inventory CrossTab.  Neither has a hyperlink to a sub report and I believe those were actual cross tabs, not manual crosstabs.  When I scoured the web for an answer, all I could find was what was linked.  This is going 20 pages deep on google.
    Crystal crosstabs are 98% better than the excel power pivot or pivot table.  However, with Excel, you can drill down to the details automatically.  With crosstabs you can't.  I was hoping to replicate this by making each summary in the manual cross tab a hyperlink to a sub report that filters the details based on the row and column just as excel does.  There is no sample for this.
    Oh yes, I'm using CR XI

  • Drill down using essbase

    Hi,
    I am currently looking into using OBI EE with essbase cubes. Setting up the cubes using the Administration tool is fine and so is creating reports. However I have an issue when I try to drill down - suddenly all of the parent levels appear in the report (in reverse order!)
    for example if I have a report which displays data at the month level and I click on a month to get daily data, the report suddenly also shows columns for quarter and year - which is definitely not what is required.
    I don't believe that there is anything wrong with the essbase cube (if I check data in it using hyperion tools then it is fine), nor do I think there is anything wrong with the definition in the repository (I used the standard 'Import from Multi-dimensional' to create the physical layer then drag and drop to create the business and presentation layers).
    The problem occurs both with versions 10.1.3.3.3 and 10.1.3.3.1. (and probably others)
    Any ideas ?
    Thanks,
    Chris

    You need Essbase Integration Services (EIS) and you will need to develop<BR>a relational data mart using a star schema.

  • Alv : drill down not working.

    Hi All,
    Could you please tell me whats wrong with this code ? its not drilling down to show 'ebeln' with me22n.  Am I missing something ?
    Please help.
    Hrishi
    code is :-
    REPORT  Z_VENDOR_BACKORDER_REPORT_ALV .
    TABLES:  EKKO, LFA1, MAKT, EKET, EKPO, AFPO, MARC.
    *Data Declaration
    DATA:  BEGIN OF ITAB OCCURS 0 ,
            ebeln       LIKE ekko-ebeln  ,  " PO number
            aedat       LIKE ekko-aedat  ,  " creation date
            ebelp       LIKE ekpo-ebelp  ,  " item no
            lifnr       LIKE ekko-lifnr  ,  " vendor number
            name1       LIKE lfa1-name1  ,  " vendor name
            RESWK       LIKE EKKO-RESWK  ,  " PLANT NO
            MEMORY      LIKE EKKO-MEMORY , " ORDER INCOMPLETE
            matnr       LIKE ekpo-matnr  ,  " material number
            werks       like ekpo-werks  ,  " plant
            txz01       LIKE ekpo-txz01  ,  " material description
            eindt       LIKE eket-eindt  ,  " Promised date
            menge       LIKE eket-menge  ,  " quantity
            wemng       LIKE eket-wemng  ,  " delivered quantity
            netpr       like ekpo-netpr  ,  " value in AUD
            peinh       like ekpo-peinh  ,  " price unit
            banfn       like ekpo-banfn  ,  " PR no
            aufnr       like ebkn-aufnr  ,  " Production order no
            MAABC       LIKE MARC-MAABC  ,  " MATERIAL ABC Indicator
            maktx       like makt-maktx  ,  " material long description
            open_quant  type p decimals 2,  " quantity - delivered
            VALUE       TYPE p decimals 2,  " $ VALUE * OPEN QUANTITY
            end of ITAB.
    data: wa like itab.
    DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
    DATA: TEMP TYPE EKKO-LIFNR.
    data: opt like CTU_PARAMS.
    *DATA:  WA TYPE FINAL.
    all ALV declarations
    type-pools: slis.                                 "ALV Declarations
    DATA:   fieldcatalog        TYPE slis_t_fieldcat_alv with header line,
            G_REPID             TYPE SY-REPID,
            GS_PRINT            TYPE SLIS_PRINT_ALV,
            GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
            GT_EVENTS           TYPE SLIS_T_EVENT,
            GT_SORT             TYPE SLIS_T_SORTINFO_ALV,
            GS_LAYOUT           TYPE SLIS_LAYOUT_ALV,
            COL_POS TYPE I.
    -----------------SELECTION SCREEN----------------------
      selection-screen begin of block b1 with frame title text-001.
      select-options VENDORNO for ekko-lifnr.
      select-options MATERIAL for ekpo-matnr.
      SELECT-OPTIONS PLANT FOR EKKO-RESWK.
      select-options REQDAT for eket-eindt.
      selection-screen end of block b1.
    *................... GET DATA..................
    START-OF-SELECTION.
    PERFORM GATHER_DATA.
    END-OF-SELECTION.
    FORM USER_COMMAND USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    CASE r_ucomm.
    WHEN '&IC1'.
    CASE  rs_selfield-sel_tab_field.
    WHEN 'ITAB-EBELN'.
    CHECK NOT rs_selfield-value IS INITIAL.
    SET PARAMETER ID 'BUS' FIELD rs_selfield-value.
    CALL TRANSACTION 'ME22N' AND SKIP FIRST SCREEN.
    Do something at 'Sales document type' field selection
    when 'ITAB-MATNR'.
    SET PARAMETER ID 'BUS' FIELD rs_selfield-value.
    CALL TRANSACTION 'MD04' AND SKIP FIRST SCREEN.
    ENDCASE.
    ENDCASE.
    ENDFORM.
    form gather_data.
    SELECT EKKO~EBELN
           EKKO~AEDAT
           EKKO~LIFNR
          EKKO~MEMORY
          EKKO~RESWK
           EKPO~EBELP
           EKPO~MATNR
           ekpo~werks
           ekpo~netpr
           ekpo~peinh
           ekpo~banfn
           ekpo~txz01
          makt~maktx
           EKET~EINDT
           EKET~MENGE
           EKET~WEMNG
           LFA1~NAME1
    INTO corresponding fields of ITAB
    FROM (
    EKKO inner JOIN EKPO
    ON EKKOEBELN = EKPOEBELN
    inner JOIN EKET
    ON EKPOEBELN = EKETEBELN
    AND EKPOEBELP = EKETEBELP
    inner JOIN LFA1
    ON EKKOLIFNR = LFA1LIFNR
    *left outer join makt
    *on ekpomatnr = maktmatnr
    WHERE EKKO~LIFNR IN VENDORNO
    AND EKKO~RESWK IN PLANT
    and EKPO~MATNR IN MATERIAL
    and ekpo~elikz eq ' '
    and ekpo~loekz ne 'L'
    and eket~eindt in REQDAT.
    append itab.
    CLEAR ITAB.
    endselect.
    clear temp.
    sort itab by lifnr.
    loop at itab .
    ITAB-OPEN_QUANT = ITAB-MENGE - ITAB-WEMNG.
    if itab-matnr eq ''.
    select single aufnr from ebkn into itab-aufnr where banfn = itab-banfn.
      select single matnr from afpo into itab-matnr where aufnr = itab-aufnr.
    endif.
    select single maktx from makt into itab-maktx where matnr = itab-matnr.
    select single maabc from MARC INTO ITAB-MAABC WHERE MATNR = ITAB-MATNR.
    ITAB-VALUE = ITAB-NETPR * ITAB-OPEN_QUANT / itab-peinh.
    modify itab.
    endloop.
    SKIP.
      fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'LIFNR'.
      fieldcatalog-seltext_m   = 'vendor no'.
      fieldcatalog-col_pos     = 1.
      fieldcatalog-outputlen   = 15.
       fieldcatalog-inttype = 'C'.
      fieldcatalog-emphasize   = 'X'.
      fieldcatalog-key         = 'X'.
    fieldcatalog-do_sum      = 'X'.
      fieldcatalog-no_zero     = 'X'.
      append fieldcatalog to fieldcatalog.
        clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'EBELN'.
      fieldcatalog-seltext_m   = 'po Number'.
      fieldcatalog-col_pos     = 2.
       fieldcatalog-inttype = 'C'.
       fieldcatalog-emphasize = 'C401'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'AEDAT'.
      fieldcatalog-seltext_m   = 'po date'.
      fieldcatalog-col_pos     = 3.
       fieldcatalog-inttype = 'C'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
    fieldcatalog-fieldname   = 'EBELP'.
      fieldcatalog-seltext_m   = 'item number'.
      fieldcatalog-col_pos     = 4.
       fieldcatalog-inttype = 'C'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'MATNR'.
       fieldcatalog-no_zero     = 'X'.
      fieldcatalog-seltext_m   = 'material number'.
      fieldcatalog-col_pos     = 5.
       fieldcatalog-inttype = 'C'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'MAABC'.
      fieldcatalog-seltext_m   = 'material type'.
      fieldcatalog-col_pos     = 6.
       fieldcatalog-inttype = 'C'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'TXZ01'.
      fieldcatalog-seltext_m   = 'short text'.
      fieldcatalog-col_pos     = 7.
       fieldcatalog-inttype = 'C'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'MAKTX'.
      fieldcatalog-seltext_m   = 'long text'.
      fieldcatalog-col_pos     = 8.
       fieldcatalog-inttype = 'C'.
       fieldcatalog-outputlen   = 15.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
    fieldcatalog-fieldname   = 'EINDT'.
      fieldcatalog-seltext_m   = 'date promised'.
      fieldcatalog-col_pos     = 9.
       fieldcatalog-inttype = 'C'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'MENGE'.
      fieldcatalog-seltext_m   = 'Quantity'.
      fieldcatalog-col_pos     = 10.
       fieldcatalog-inttype = 'C'.
      fieldcatalog-outputlen   = 15.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'WEMNG'.
      fieldcatalog-seltext_m   = 'Delivered'.
      fieldcatalog-col_pos     = 11.
       fieldcatalog-inttype = 'C'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
      fieldcatalog-fieldname   = 'OPEN_QUANT'.
      fieldcatalog-seltext_m   = 'Open quantity'.
      fieldcatalog-col_pos     = 12.
       fieldcatalog-inttype = 'C'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    fieldcatalog-tabname = 'ITAB'.
    fieldcatalog-fieldname   = 'VALUE'.
      fieldcatalog-seltext_m   = '$ value'.
      fieldcatalog-col_pos     = 13.
       fieldcatalog-inttype = 'C'.
       fieldcatalog-do_sum      = 'X'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    call function 'REUSE_ALV_GRID_DISPLAY'
           exporting
                i_callback_program      = g_repid
                 I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
                it_fieldcat             = fieldcatalog[]
                is_layout               = GS_layout
                  IT_SORT                = gt_sort
                  I_DEFAULT = 'X'
                    I_SAVE = 'X'
               is_variant              = z_template
           tables
                t_outtab                = ITAB
                exceptions
                program_error           = 1
                others                  = 2.
    endform.

    hi,
    please run the code below.
    REPORT yfi7g_ing_mic_001 .
    *PROGRAM YFI7G_ING_MIC_001.
    TABLES: vbak .
    TABLES: mara .
    TYPES: BEGIN OF tp_vbak ,
          vbeln TYPE vbak-vbeln,
          erdat TYPE vbak-erdat,
          erzet TYPE vbak-erzet,
          ernam TYPE vbak-ernam,
          vbtyp TYPE vbak-vbtyp,
          trvog TYPE vbak-trvog,
          auart TYPE vbak-auart,
          lifsk TYPE vbak-lifsk,
          faksk TYPE vbak-faksk,
          waerk TYPE vbak-waerk,
          vkorg TYPE vbak-vkorg,
          kunnr TYPE vbak-kunnr,
          vgbel TYPE vbak-vgbel,
          vgtyp TYPE vbak-vgtyp,
    END OF tp_vbak .
    TYPES: BEGIN OF tp_mara ,
            matnr TYPE mara-matnr,
    END OF tp_mara .
    TYPES: BEGIN OF tp_alv1_data.
    INCLUDE TYPE tp_vbak .
    TYPES: END OF tp_alv1_data.
    TYPES: BEGIN OF tp_alv2_data.
    INCLUDE TYPE tp_mara .
    TYPES: END OF tp_alv2_data.
    TYPE-POOLS: slis.
    DATA: gt_vbak TYPE STANDARD TABLE OF tp_vbak WITH HEADER LINE.
    DATA: gt_mara TYPE STANDARD TABLE OF tp_mara WITH HEADER LINE.
    DATA: gs_variant LIKE disvariant.
    DATA: gt_alv1_data TYPE STANDARD TABLE OF tp_alv1_data WITH HEADER LINE.
    DATA: gt_alv2_data TYPE STANDARD TABLE OF tp_alv2_data WITH HEADER LINE.
    SELECTION-SCREEN                                                     *
    BLOCK b0                                                             *
    SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME.
    SELECT-OPTIONS: s_vbeln FOR vbak-vbeln.        "<field not defined?>
    PARAMETERS: p_matnr LIKE mara-matnr.           "<field not defined?>
    SELECTION-SCREEN END OF BLOCK b0.
    BLOCK bvar                                                           *
    SELECTION-SCREEN BEGIN OF BLOCK bvar WITH FRAME.
    PARAMETERS: p_vari  LIKE disvariant-variant.
    SELECTION-SCREEN END OF BLOCK bvar.
    BLOCK bbox                                                           *
    SELECTION-SCREEN BEGIN OF BLOCK bbox WITH FRAME.
    PARAMETERS: p_box_up  RADIOBUTTON GROUP b1,
                p_box_do  RADIOBUTTON GROUP b1 DEFAULT 'X',
                p_box_no  RADIOBUTTON GROUP b1.
    SELECTION-SCREEN END OF BLOCK bbox.
          AT SELECTION-SCREEN ON P_VARI                                 *
    AT SELECTION-SCREEN ON p_vari.
      PERFORM alv_variant_existence USING    p_vari
                                    CHANGING gs_variant.
          AT SELECTION-SCREEN ON VALUE REQUEST FOR P_VARI               *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
      PERFORM alv_variant_f4 CHANGING p_vari
                                      gs_variant.
    INITIALIZATION                                                       *
    INITIALIZATION.
    START-OF-SELECTION                                                   *
    START-OF-SELECTION.
      PERFORM authority_check.
      PERFORM get_control_data.
      PERFORM get_transaction_data.
      PERFORM process_transaction_data.
    END-OF-SELECTION                                                     *
    END-OF-SELECTION.
      PERFORM output_data.
    F   O   R   M   S                                                   *
          FORM AUTHORITY_CHECK                                          *
          Perform authority checks for the report                       *
    FORM authority_check.
    !!! Note: authorisation checks are application-dependent.
    !!! Some common cases are listed below - please select one of them
    !!! or add new authorisation checks.
    !!! If the report is creating batch input session or using LDB
    !!! it may be sufficient to use automatic SAP auth.checks.
    Authorisation for displaying documents in a single company code
    authority-check object 'F_BKPF_BUK'
           id 'BUKRS' field p_bukrs
           id 'ACTVT' field '03'.
    if sy-subrc <> 0.
      message e001(z9) with 'No authorisation to display documents'
                            'in company code' p_bukrs.
    endif.
    Displaying documents from a list of company codes (select-options)
    call function 'Y_BUKRS_AUTHORITY_CHECK'
       EXPORTING
            ACTVT     = '03'
            NOMESSAGE = ' '
       tables
            s_bukrs   = s_bukrs.
    ENDFORM.                              " AUTHORITY_CHECK
          FORM GET_CONTROL_DATA                                         *
          Read configuration etc.                                       *
    FORM get_control_data.
    ENDFORM.                               " GET_CONTROL_DATA
          FORM GET_TRANSACTION_DATA                                     *
          Read documents etc.                                           *
    FORM get_transaction_data.
    !!! Data selection statement below has been generated automatically.
    !!! Please check if it is correct and complete.
    !!! Use table joins or 'SELECT FOR ALL ENTRIES' when selecting data
    !!! from related tables.
      SELECT
                vbeln
                erdat
                erzet
                ernam
       FROM vbak
          INTO CORRESPONDING FIELDS OF TABLE gt_vbak
      CHECK NOT gt_vbak[] IS INITIAL.
      SELECT
                matnr
       FROM mara
          INTO CORRESPONDING FIELDS OF TABLE gt_mara
          FOR ALL ENTRIES IN gt_vbak
          WHERE ernam = gt_vbak-ernam
    ENDFORM.                               " GET_TRANSACTION_DATA
          FORM PROCESS_TRANSACTION_DATA                                 *
    FORM process_transaction_data.
      LOOP AT gt_vbak .
        MOVE-CORRESPONDING gt_vbak TO gt_alv1_data .
        APPEND gt_alv1_data .
      ENDLOOP.
      FREE gt_vbak .
      LOOP AT gt_mara .
        MOVE-CORRESPONDING gt_mara TO gt_alv2_data .
        APPEND gt_alv2_data .
      ENDLOOP.
      FREE gt_mara .
    ENDFORM.                               " PROCESS_TRANSACTION_DATA
          FORM OUTPUT_DATA                                              *
    FORM output_data.
      PERFORM alv_list_display.
    ENDFORM.                               " OUTPUT_DATA
          FORM DISPLAY_RECORD                                           *
          Display object associated with the current ALV line           *
    FORM display_record USING is_selfield TYPE slis_selfield.
      READ TABLE gt_alv1_data INDEX is_selfield-tabindex.
      CHECK sy-subrc = 0.
    !!! SAMPLE IMPLEMENTATION FOR DISPLAYING FI DOCUMENTS:
      SET PARAMETER ID 'BUK' FIELD gt_alv1_data-vbeln.
    set parameter id 'BLN' field gt_alv1_data-belnr.
    set parameter id 'GJR' field gt_alv1_data-gjahr.
      CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
    ENDFORM.                               " DISPLAY_RECORD
          FORM ALV_LIST_DISPLAY                                         *
          Invoke main ALV function to format and show the report        *
    FORM alv_list_display.
      DATA: ls_layout      TYPE slis_layout_alv,
            ls_print       TYPE slis_print_alv,
            ls_keyinfo     TYPE slis_keyinfo_alv,
            lt_fieldcat    TYPE slis_t_fieldcat_alv,
            lt_exctab      TYPE slis_t_extab,
            lt_sorttab     TYPE slis_t_sortinfo_alv,
            lt_events      TYPE slis_t_event.
      PERFORM alv_init_report_events TABLES   lt_events.
      PERFORM alv_init_report_layout TABLES   lt_fieldcat
                                              lt_exctab
                                              lt_sorttab
                                     CHANGING ls_layout
                                              ls_print
                                              ls_keyinfo.
      CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        EXPORTING
          i_interface_check        = ' '
          i_callback_program       = sy-cprog
          is_layout                = ls_layout
          it_fieldcat              = lt_fieldcat
          it_excluding             = lt_exctab
        IT_SPECIAL_GROUPS        =
          it_sort                  = lt_sorttab
        IT_FILTER                =
        IS_SEL_HIDE              =
        I_SCREEN_START_COLUMN    = 0
        I_SCREEN_START_LINE      = 0
        I_SCREEN_END_COLUMN      = 0
        I_SCREEN_END_LINE        = 0
        I_DEFAULT                = 'X'
          i_save                   = 'A'
          is_variant               = gs_variant
          it_events                = lt_events
        IT_EVENT_EXIT            =
          i_tabname_header         = 'GT_ALV1_DATA'
          i_tabname_item           = 'GT_ALV2_DATA'
        I_STRUCTURE_NAME_HEADER  =
        I_STRUCTURE_NAME_ITEM    =
          is_keyinfo               =  ls_keyinfo
          is_print                 =  ls_print
        IS_REPREP_ID             =
      IMPORTING
        E_EXIT_CAUSED_BY_CALLER  =
        ES_EXIT_CAUSED_BY_USER   =
        TABLES
          t_outtab_header          = gt_alv1_data
          t_outtab_item            = gt_alv2_data.
      EXCEPTIONS
        PROGRAM_ERROR            = 1
        OTHERS                   = 2
    ENDFORM.                           " ALV_LIST_DISPLAY
          FORM ALV_INIT_REPORT_LAYOUT                                   *
          Set up report layout definition for ALV_LIST_DISPLAY          *
    <-- OT_FIELDCAT list of fields                                     *
    <-- OT_EXCTAB   excluded menu options                              *
    <-- OT_SORTTAB  sorting/grouping definition                        *
    <-- OS_LAYOUT   global report layout settings                      *
    <-- OS_PRINT    global report printout settings                    *
    <-- OS_KEYINFO  itab key fields (required only for hier.lists)     *
    FORM alv_init_report_layout TABLES ot_fieldcat TYPE slis_t_fieldcat_alv
                                       ot_exctab   TYPE slis_t_extab
                                       ot_sorttab  TYPE slis_t_sortinfo_alv
                              CHANGING cs_layout   TYPE slis_layout_alv
                                       cs_print    TYPE slis_print_alv
                                       cs_keyinfo  TYPE slis_keyinfo_alv.
    add menu items to be excluded to ot_exctab.
      REFRESH ot_exctab.
      REFRESH ot_fieldcat.
      REFRESH ot_sorttab.
    !!! List all ALV data fields for display here:
    DD-struct  = data dictionary structure name
    DD-field   = field of data dictionary structure
    itab       = internal table for output data
    itab-field = internal table field name
    key        = set to 'X' if key field
    sum        = set to 'X' for totals
    hid        = set to 'X' if field is initially hidden
    row        = list row number (multi-line list if >1)
    DD-struct    DD-field     itab         itab-field  key sum hid row
      PERFORM alv_build_fieldcat TABLES ot_fieldcat USING:
    'VBAK'       'VBELN'      'GT_ALV1_DATA' 'VBELN'     ' ' ' ' ' ' 1 ,
    'VBAK'       'ERDAT'      'GT_ALV1_DATA' 'ERDAT'     ' ' ' ' ' ' 1 ,
    'VBAK'       'ERZET'      'GT_ALV1_DATA' 'ERZET'     ' ' ' ' ' ' 1 ,
    'VBAK'       'ERNAM'      'GT_ALV1_DATA' 'ERNAM'     ' ' ' ' ' ' 1.
      PERFORM alv_build_fieldcat TABLES ot_fieldcat USING:
    'MARA'       'MATNR'      'GT_ALV2_DATA' 'MATNR'     ' ' ' ' ' ' 1 .
    !!! List all ALV data fields for sorting/grouping here
    itab       = internal table for output data
    itab-field = internal table field name
    up         = sort ascending
    down       = sort descending
    grp        = group by
    comp       = group initially compressed
    pos        = field position in sort sequence
    itab                   field              up down grp comp        pos
      PERFORM alv_build_sorttab TABLES ot_sorttab USING:
    'GT_ALV1_DATA'         'VBELN'             'X' ' ' ' ' ' '           1.
      PERFORM alv_build_sorttab TABLES ot_sorttab USING:
    'GT_ALV2_DATA'         'MATNR'             'X' ' ' ' ' ' '           1.
    !!! key definition - required only for hierarchical display (2 itabs)
      cs_keyinfo-header01 = 'VBELN' .
      cs_keyinfo-item01   = 'MATNR' .
    !!! See the declaration of type SLIS_LAYOUT_ALV and set the fields
    !!! of OS_LAYOUT record to change list-level attributes
    os_layout-no_colhead     = 'X'.         " no headings
      cs_layout-zebra          = 'X'.         " stripped pattern
    os_layout-no_vline       = 'X'.         " columns separated by space
    os_layout-totals_only    = 'X'.         " show only totals
    os_layout-totals_text    = 'Total'.     " totals line label
    os_layout-subtotals_text = 'Subtotal'.  " subtotals line label
    os_layout-subtotals_text = 'Subtotal'.  " subtotals line label
    os_layout-key_hotspot    = 'X'.         " keys as hotspot
    os_layout-expand_all     = 'X'.         " Expand all positions
    os_layout...
      cs_print-no_print_selinfos = 'X'.       " Skip selection statistics
      cs_print-no_print_listinfos = 'X'.      " Skip list statistics
    os_print-...
    ENDFORM.                               " INIT_REPORT_LAYOUT
          FORM ALV_BUILD_FIELDCAT                                       *
          Format a single line for ALV_INIT_REPORT_LAYOUT               *
    FORM alv_build_fieldcat TABLES ot_fieldcat
                            USING  iv_ref_tabname   "ref to a table/field
                                   iv_ref_fieldname
                                   iv_tabname     "actual table/field name
                                   iv_fieldname
                                   iv_key
                                   iv_do_sum
                                   iv_no_out
                                   iv_row_pos.
    status variables for auto-numbering of field column position
    (column number reset when a new table or row begins)
      STATICS: sv_last_tabname TYPE slis_tabname,
               sv_last_row_pos TYPE i,
               sv_current_col  TYPE i.
      IF sv_last_tabname <> iv_tabname OR sv_last_row_pos <> iv_row_pos.
        sv_current_col = 1.
      ELSE.
        ADD 1 TO sv_current_col.
      ENDIF.
      sv_last_tabname = iv_tabname.
      sv_last_row_pos = iv_row_pos.
      DATA: ls_fieldcat    TYPE slis_fieldcat_alv.
      DATA: lv_fieldname   TYPE slis_fieldname.
      lv_fieldname = iv_fieldname.
    !!! List all the special formatting requirements in cases below
    case lv_fieldname.
      when 'WRBTR'.                      "<-- link with currency required
        ls_fieldcat-cfieldname = 'WAERS'.
        ls_fieldcat-ctabname   = iv_tabname.
      when 'HKONT'.                     "<-- change default column header
        ls_fieldcat-seltext_s  = 'GL Acc.'.
        ls_fieldcat-ddictxt    = 'S'.          " (S)hort (M)iddle (L)ong
      when 'SOME_NUMBER'                 "<-- change number formatting
        ls_fieldcat-nosign     = 'X'.
        ls_fieldcat-nozero     = 'X'.
        ls_fieldcat-just       = 'L'.         " (L)eft (R)ight (C)enter
    endcase.
      ls_fieldcat-ref_tabname   = iv_ref_tabname.
      ls_fieldcat-ref_fieldname = iv_ref_fieldname.
      ls_fieldcat-tabname       = iv_tabname.
      ls_fieldcat-fieldname     = iv_fieldname.
      ls_fieldcat-key           = iv_key.
      ls_fieldcat-do_sum        = iv_do_sum.
      ls_fieldcat-no_out        = iv_no_out.
      ls_fieldcat-row_pos       = iv_row_pos.
      ls_fieldcat-col_pos       = sv_current_col.
      APPEND ls_fieldcat TO ot_fieldcat.
    ENDFORM.                          " ALV_BUILD_FIELDCAT
          FORM ALV_BUILD_SORTTAB                                        *
          Set up sorting information for ALV_INIT_REPORT_LAYOUT         *
    FORM alv_build_sorttab TABLES ot_sorttab TYPE slis_t_sortinfo_alv
                           USING  iv_tabname   TYPE slis_fieldname
                                  iv_fieldname TYPE slis_fieldname
                                  iv_up        TYPE c
                                  iv_down      TYPE c
                                  iv_subtot    TYPE c
                                  iv_comp      TYPE c
                                  iv_spos      TYPE n.
      ot_sorttab-spos      = iv_spos.
      ot_sorttab-fieldname = iv_fieldname.
      ot_sorttab-tabname   = iv_tabname.
      ot_sorttab-up        = iv_up.
      ot_sorttab-down      = iv_down.
      ot_sorttab-subtot    = iv_subtot.
      ot_sorttab-comp      = iv_comp.
      APPEND ot_sorttab.
    ENDFORM.                            " ALV_BUILD_SORTTAB
          FORM ALV_INIT_REPORT_EVENTS                                   *
          Set up program events for ALV_LIST_DISPLAY                    *
    <-- OT_EVENTS   list of events and associated report subroutines   *
    FORM alv_init_report_events TABLES ot_events TYPE slis_t_event.
      CLEAR   ot_events.
      REFRESH ot_events.
      ot_events-name = slis_ev_user_command.
      ot_events-form = 'USER_COMMAND'.
      APPEND ot_events.
      ot_events-name = slis_ev_pf_status_set.
      ot_events-form = ''.                         "'PF_STATUS_SET'.
      APPEND ot_events.
      ot_events-name = slis_ev_top_of_list.
      ot_events-form = 'TOP_OF_LIST'.
      APPEND ot_events.
      ot_events-name = slis_ev_end_of_list.
      ot_events-form = 'END_OF_LIST'.
      APPEND ot_events.
      ot_events-name = slis_ev_top_of_page.
      ot_events-form = 'TOP_OF_PAGE'.
      APPEND ot_events.
      ot_events-name = slis_ev_end_of_page.
      ot_events-form = 'END_OF_PAGE'.
      APPEND ot_events.
      ot_events-name = slis_ev_foreign_top_of_page.
      ot_events-form = ''.
      APPEND ot_events.
      ot_events-name = slis_ev_foreign_end_of_page.
      ot_events-form = ''.
      APPEND ot_events.
      ot_events-name = slis_ev_top_of_coverpage.
      ot_events-form = ''.
      APPEND ot_events.
      ot_events-name = slis_ev_end_of_coverpage.
      ot_events-form = ''.
      APPEND ot_events.
      ot_events-name = slis_ev_before_line_output.
      ot_events-form = ''.
      APPEND ot_events.
      ot_events-name = slis_ev_after_line_output.
      ot_events-form = ''.
      APPEND ot_events.
      ot_events-name = slis_ev_caller_exit_at_start.
      ot_events-form = ''.
      APPEND ot_events.
      ot_events-name = slis_ev_list_modify.
      ot_events-form = ''.
      APPEND ot_events.
      ot_events-name = slis_ev_subtotal_text.
      ot_events-form = ''.
      APPEND ot_events.
    ENDFORM.                            " ALV_INIT_REPORT_EVENTS
          FORM USER_COMMAND                                             *
          Subroutine attached as callback form to ABAP List Viewer      *
      --> UCOMM    - user command code passed from ALV                  *
      --> SELFIELD - information record describing current line/field   *
    FORM user_command USING value(iv_ucomm) LIKE sy-ucomm
                            is_selfield     TYPE slis_selfield.
      CASE iv_ucomm.
        WHEN '&IC1'.                                  "ALV record selection
          PERFORM display_record USING is_selfield.
      when ...
      ENDCASE.
    ENDFORM.                               " USER_COMMAND
          FORM PF_STATUS_SET                                            *
          Subroutine attached as callback form to ABAP List Viewer,     *
          allows setting alternative menu.  If necessary:               *
          1. Copy 'STANDARD' menu from SAPLKKBL and modify as required, *
          2. Activate callback                                          *
    FORM pf_status_set USING it_exctab TYPE slis_t_extab.
    set pf-status 'STANDARD' excluding it_exctab.
    ENDFORM.                               " PF_STATUS_SET
          FORM TOP_OF_LIST                                              *
          Subroutine attached as callback form to ABAP List Viewer,     *
          executed once at the start of list output.                    *
    FORM top_of_list.
      DATA: lt_seltab TYPE STANDARD TABLE OF rsparams WITH HEADER LINE.
      DATA: lv_report LIKE sy-repid.
      lv_report = sy-repid.             "do not pass sy-repid to function!
      IF p_box_up = 'X'. "display select options at report start
        CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
          EXPORTING
            curr_report     = lv_report
          TABLES
            selection_table = lt_seltab.
    remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'
    before display, if necessary
        CALL FUNCTION 'RS_LIST_SELECTION_TABLE'
           EXPORTING
                report        = lv_report
                seltext       = 'X'
            dyn_range     =
                newpage       = ' '
            screennr      = 1000
           TABLES
                sel_tab       = lt_seltab
           EXCEPTIONS
                sel_tab_empty = 1.
      ENDIF. "p_box_up = 'X'
    ENDFORM.                               " TOP_OF_LIST
          FORM END_OF_LIST                                              *
          Subroutine attached as callback form to ABAP List Viewer      *
          executed once at the end of list output.                      *
    FORM end_of_list.
      DATA: lt_seltab TYPE STANDARD TABLE OF rsparams WITH HEADER LINE.
      DATA: lv_report LIKE sy-repid.
      lv_report = sy-repid.             "do not pass sy-repid to function!
      IF p_box_do = 'X'. "display select options at report end
        CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
          EXPORTING
            curr_report     = lv_report
          TABLES
            selection_table = lt_seltab.
    remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'
    before display, if necessary
        CALL FUNCTION 'RS_LIST_SELECTION_TABLE'
           EXPORTING
                report        = lv_report
                seltext       = 'X'
            dyn_range     =
                newpage       = ' '
            screennr      = 1000
           TABLES
                sel_tab       = lt_seltab
           EXCEPTIONS
                sel_tab_empty = 1.
      ENDIF. "p_box_do = 'X'
    ENDFORM.                               " END_OF_LIST
          FORM TOP_OF_PAGE                                              *
          Subroutine attached as callback form to ABAP List Viewer      *
    FORM top_of_page.
    standard Ingram Micro report page heading
      DATA: lv_coco_pos TYPE i,          "CurPos of 'Company confidential'
            lv_title_pos TYPE i,           "CurPos of report title
            lv_title(70) TYPE c,           "Truncated report title
            lv_page_pos TYPE i,            "CurPos of page number
            lv_date_pos TYPE i,            "CurPos of date and time
            lv_page_no(10) TYPE c,
            lv_date(25) TYPE c,
            lv_time(20) TYPE c,
            lv_page(10) TYPE c.
    We may need to truncate title if the line size is < 81.
      IF sy-linsz < 81.
        lv_title = sy-title+0(50).
      ELSE.
        lv_title = sy-title.
      ENDIF.
    Decide on positioning of text depending on width of page
      lv_title_pos = ( sy-linsz / 2 ) - ( STRLEN( lv_title ) / 2 ).
      lv_coco_pos = sy-linsz - 20.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.
      WRITE: / 'Ingram Micro',
               AT lv_title_pos lv_title,
               AT lv_coco_pos 'Company Confidential'.
    Setup data correctly in the correct format for the display fields.
      lv_page = sy-pagno.
      SHIFT lv_page LEFT DELETING LEADING ' '.
      CONCATENATE sy-datum6(2) sy-datum4(2) sy-datum+0(4)
                   INTO lv_date SEPARATED BY '.'.
      CONCATENATE sy-uzeit0(2) ':' sy-uzeit2(2) INTO lv_time.
      CONCATENATE lv_date lv_time INTO lv_date SEPARATED BY ' '.
      CONCATENATE 'Page' lv_page INTO lv_page_no SEPARATED BY ' '.
    Decide on positioning of text depending on width of page.
      lv_page_pos = sy-linsz - ( STRLEN( lv_page_no ) ).
      WRITE: / lv_date,
               AT lv_page_pos lv_page_no.
      ULINE.
    ENDFORM.                               " TOP_OF_PAGE
          FORM END_OF_PAGE                                              *
          Subroutine attached as callback form to ABAP List Viewer      *
    FORM end_of_page.
    ENDFORM.                               " END_OF_PAGE
          Form  ALV_VARIANT_EXISTENCE
          Reads ALV variant definition
    FORM alv_variant_existence  USING    iv_variant LIKE disvariant-variant
                                CHANGING os_variant LIKE disvariant.
      CHECK NOT iv_variant IS INITIAL.
      os_variant-report  = sy-repid.
      os_variant-variant = iv_variant.
      IF iv_variant CP '/*'.    "user-specific variants begin with slash
        os_variant-username = sy-uname.
      ENDIF.
      CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
        EXPORTING
          i_save        = 'A'
        CHANGING
          cs_variant    = os_variant
        EXCEPTIONS
          wrong_input   = 1
          not_found     = 2
          program_error = 3
          OTHERS        = 4.
      IF sy-subrc <> 0.
        MESSAGE e001(z9) WITH 'Please select a valid display variant.'.
      ENDIF.
    ENDFORM.                               " ALV_VARIANT_EXISTENCE
          FORM ALV_VARIANT_F4                                           *
          Display list of layout variants on report selection screen    *
    FORM alv_variant_f4  CHANGING cv_varname  LIKE disvariant-variant
                                  cs_variant  LIKE disvariant.
      DATA: lv_exit(1) TYPE c.
      cs_variant-report = sy-repid.
      CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
           EXPORTING
                is_variant          = cs_variant
                i_save              = 'A'
              it_default_fieldcat =
           IMPORTING
                e_exit              = lv_exit
                es_variant          = cs_variant
           EXCEPTIONS
                not_found = 2.
      IF sy-subrc = 2.
        MESSAGE ID sy-msgid TYPE 'S'      NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ELSE.
        IF lv_exit = space.
          cv_varname = cs_variant-variant.
        ENDIF.
      ENDIF.
    hope this will help.
    see form  user_command.
    regards,
    Ruchika

  • Drill Down in Map Report

    I've been trying to get drill down reporting working in a map report I've created an can't seem to get things to behave properly. So far, I've done everything I've read in several posts, but yet drill don still isn't functional.
    Here's what I've done:
    - Downloaded esri file from online and imported the spatial data in my SQL Server
    - Created a map report using spatial data as a source for the map. I also have a dataset based on an Analysis Services query...Sales by State. Each figure has a corresponding state abbreviation. Below is the map report. The map report takes one parameter:
    Year. The report is a color analytical map. Colors vary based on sales amount and year.
    Below is the map display:
    I have a second report called SalesByState that takes two parameters: State and Year.
    What I would like to happen is when a user clicks on a state, they are taken directly to the report that lists detail information based on the year and the state chosen in the first map report. The year isn't getting passed to the second report nor is the
    state clicked on.
    When I set up the Action tab in the Polygon Properties dialog, I'm not seeing the dataset values as available as a parameter. When trying to give an expression for the state parameter, I get an error:
    =First(Fields!STUSPS.Value, "SQLSpatialData") saying "Unknown Collection Member".
    The STUSPS field is the state abbreviation.
    Not sure what I'm missing here!
    A. M. Robinson

    Hi A. M. Robinson,
    Please refer to the steps below:
    Subreport:
    Add two datasets in the report: Spatial data, ContactState.
    Add a parameter in the report named SpatialData. Please refer to the following Available Values:
    Dataset: Spatial data
    Value field: STUSPS
    Label field: STUSPS
    Add a table in the report fill with specify data.
    Right click the table, select Tablix Properties.
    Click Visibility in the left pane. Select “Show or hide based on an expression” option, and type following expression:
    =IIF(Parameters!STUSPS.Value="ID" ,False,True)
    (Note: It is use parameter’s value to control the tablix visibility.)
    Main report:
    Based on your map design, click the PointLayer arrow in the Map Layers dialog box, select Point Properties.
    Click Action in the left pane. Select “Go to report” option.
    Select the specific subreport below “Specify a report”.
    Click Add, please refer to these values below:
    Name: SpatialData (Subreport Parameter’s name)        Value: [STUSPS]
    Hope this helps.
    Regards,
    Alisa Tang
    If you have any feedback on our support, please click
    here.
    Alisa Tang
    TechNet Community Support

  • Drill down error

    Hello Experts
    When I drill down a report according to Characteristics( ship_to and sold_to) The report is displaying following Messege"abort System error in Program Cl_RSDM_READ_MASTER_DATA and form_sidval_drect_" and the report is disconnecting from BW server, I rpaired all the Masterdata Objects in RSRV but no use? I checked in SAP Note, looks like no relevent notes for this error.
    we are using BW3.1
    Any guidance or suggestions
    Thanks
    SP

    Hi SP,
    Check you have done the identifications properly in the multi provider. The error message shows for the SID Conflict for the particular infoobject. In RSRV Could you please run the following test and if there are any errors you can run repair.
    Tests in Transaction RSRV -> All Combined Tests   -> Master Data  -> Check Master Data for a Characteristic
    Regards

  • Drill down error in 10g - No Columns displayed

    When drilling down on OBIEE 10g reports sometimes the result is "No columns displayed", we cannot find any particular reason why this happened. The columns are available and should show up so it's perceived as an error for our users.
    Does anyone know how and why this happens and what a possible solution might be?
    Much appreciated!

    Hi SP,
    Check you have done the identifications properly in the multi provider. The error message shows for the SID Conflict for the particular infoobject. In RSRV Could you please run the following test and if there are any errors you can run repair.
    Tests in Transaction RSRV -> All Combined Tests   -> Master Data  -> Check Master Data for a Characteristic
    Regards

  • How to do a drill down whit 'REUSE_ALV_GRID_DISPLAY'

    Hi Guru,
    i must do a drill down with 2 field of a 'REUSE_ALV_GRID_DISPLAY'
    this is the program:
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
        I_INTERFACE_CHECK                 = ' '
        I_BYPASSING_BUFFER                = ' '
        I_BUFFER_ACTIVE                   = ' '
        I_CALLBACK_PROGRAM                = ' '
        I_CALLBACK_PF_STATUS_SET          = ' '
        I_CALLBACK_USER_COMMAND           = ' '
         IT_FIELDCAT                        = tabcatalogo
        TABLES
          t_outtab                          = appoggio
    where
    TYPE-POOLS slis.
    DATA : tabcatalogo TYPE slis_t_fieldcat_alv,
          rec_tabcatalogo TYPE slis_fieldcat_alv.
    TABLES: viob03,
            viob37,
            ekkn,
            ekko.
    DATA : BEGIN OF appoggio OCCURS 0,
           bukrs LIKE viob03-BUKRS,
           swenr LIKE viob03-swenr,
           j_objnr LIKE viob03-j_objnr,
           sgenr LIKE viob03-sgenr,
           anln1 LIKE viob37-anln1,
           anln2 LIKE viob37-anln2,
           ebeln LIKE ekkn-ebeln,
           kdatb LIKE ekko-kdatb,
           kdate LIKE ekko-kdate,
           END OF appoggio.
    THE FIELD FOR DRILL DOWN ARE swenr  AND  anln1
    Thanks and sorry for my english

    Hi
    See the sample code
    REPORT yfi7g_ing_mic_001 .
    *PROGRAM YFI7G_ING_MIC_001.
    TABLES: vbak .
    TABLES: mara .
    TYPES: BEGIN OF tp_vbak ,
    vbeln TYPE vbak-vbeln,
    erdat TYPE vbak-erdat,
    erzet TYPE vbak-erzet,
    ernam TYPE vbak-ernam,
    vbtyp TYPE vbak-vbtyp,
    trvog TYPE vbak-trvog,
    auart TYPE vbak-auart,
    lifsk TYPE vbak-lifsk,
    faksk TYPE vbak-faksk,
    waerk TYPE vbak-waerk,
    vkorg TYPE vbak-vkorg,
    kunnr TYPE vbak-kunnr,
    vgbel TYPE vbak-vgbel,
    vgtyp TYPE vbak-vgtyp,
    END OF tp_vbak .
    TYPES: BEGIN OF tp_mara ,
    matnr TYPE mara-matnr,
    END OF tp_mara .
    TYPES: BEGIN OF tp_alv1_data.
    INCLUDE TYPE tp_vbak .
    TYPES: END OF tp_alv1_data.
    TYPES: BEGIN OF tp_alv2_data.
    INCLUDE TYPE tp_mara .
    TYPES: END OF tp_alv2_data.
    TYPE-POOLS: slis.
    DATA: gt_vbak TYPE STANDARD TABLE OF tp_vbak WITH HEADER LINE.
    DATA: gt_mara TYPE STANDARD TABLE OF tp_mara WITH HEADER LINE.
    DATA: gs_variant LIKE disvariant.
    DATA: gt_alv1_data TYPE STANDARD TABLE OF tp_alv1_data WITH HEADER LINE.
    DATA: gt_alv2_data TYPE STANDARD TABLE OF tp_alv2_data WITH HEADER LINE.
    SELECTION-SCREEN *
    BLOCK b0 *
    SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME.
    SELECT-OPTIONS: s_vbeln FOR vbak-vbeln. "<field not defined?>
    PARAMETERS: p_matnr LIKE mara-matnr. "<field not defined?>
    SELECTION-SCREEN END OF BLOCK b0.
    BLOCK bvar *
    SELECTION-SCREEN BEGIN OF BLOCK bvar WITH FRAME.
    PARAMETERS: p_vari LIKE disvariant-variant.
    SELECTION-SCREEN END OF BLOCK bvar.
    BLOCK bbox *
    SELECTION-SCREEN BEGIN OF BLOCK bbox WITH FRAME.
    PARAMETERS: p_box_up RADIOBUTTON GROUP b1,
    p_box_do RADIOBUTTON GROUP b1 DEFAULT 'X',
    p_box_no RADIOBUTTON GROUP b1.
    SELECTION-SCREEN END OF BLOCK bbox.
    AT SELECTION-SCREEN ON P_VARI *
    AT SELECTION-SCREEN ON p_vari.
    PERFORM alv_variant_existence USING p_vari
    CHANGING gs_variant.
    AT SELECTION-SCREEN ON VALUE REQUEST FOR P_VARI *
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
    PERFORM alv_variant_f4 CHANGING p_vari
    gs_variant.
    INITIALIZATION *
    INITIALIZATION.
    START-OF-SELECTION *
    START-OF-SELECTION.
    PERFORM authority_check.
    PERFORM get_control_data.
    PERFORM get_transaction_data.
    PERFORM process_transaction_data.
    END-OF-SELECTION *
    END-OF-SELECTION.
    PERFORM output_data.
    F O R M S *
    FORM AUTHORITY_CHECK *
    Perform authority checks for the report *
    FORM authority_check.
    !!! Note: authorisation checks are application-dependent.
    !!! Some common cases are listed below - please select one of them
    !!! or add new authorisation checks.
    !!! If the report is creating batch input session or using LDB
    !!! it may be sufficient to use automatic SAP auth.checks.
    Authorisation for displaying documents in a single company code
    authority-check object 'F_BKPF_BUK'
    id 'BUKRS' field p_bukrs
    id 'ACTVT' field '03'.
    if sy-subrc <> 0.
    message e001(z9) with 'No authorisation to display documents'
    'in company code' p_bukrs.
    endif.
    Displaying documents from a list of company codes (select-options)
    call function 'Y_BUKRS_AUTHORITY_CHECK'
    EXPORTING
    ACTVT = '03'
    NOMESSAGE = ' '
    tables
    s_bukrs = s_bukrs.
    ENDFORM. " AUTHORITY_CHECK
    FORM GET_CONTROL_DATA *
    Read configuration etc. *
    FORM get_control_data.
    ENDFORM. " GET_CONTROL_DATA
    FORM GET_TRANSACTION_DATA *
    Read documents etc. *
    FORM get_transaction_data.
    !!! Data selection statement below has been generated automatically.
    !!! Please check if it is correct and complete.
    !!! Use table joins or 'SELECT FOR ALL ENTRIES' when selecting data
    !!! from related tables.
    SELECT
    vbeln
    erdat
    erzet
    ernam
    FROM vbak
    INTO CORRESPONDING FIELDS OF TABLE gt_vbak
    CHECK NOT gt_vbak[] IS INITIAL.
    SELECT
    matnr
    FROM mara
    INTO CORRESPONDING FIELDS OF TABLE gt_mara
    FOR ALL ENTRIES IN gt_vbak
    WHERE ernam = gt_vbak-ernam
    ENDFORM. " GET_TRANSACTION_DATA
    FORM PROCESS_TRANSACTION_DATA *
    FORM process_transaction_data.
    LOOP AT gt_vbak .
    MOVE-CORRESPONDING gt_vbak TO gt_alv1_data .
    APPEND gt_alv1_data .
    ENDLOOP.
    FREE gt_vbak .
    LOOP AT gt_mara .
    MOVE-CORRESPONDING gt_mara TO gt_alv2_data .
    APPEND gt_alv2_data .
    ENDLOOP.
    FREE gt_mara .
    ENDFORM. " PROCESS_TRANSACTION_DATA
    FORM OUTPUT_DATA *
    FORM output_data.
    PERFORM alv_list_display.
    ENDFORM. " OUTPUT_DATA
    FORM DISPLAY_RECORD *
    Display object associated with the current ALV line *
    FORM display_record USING is_selfield TYPE slis_selfield.
    READ TABLE gt_alv1_data INDEX is_selfield-tabindex.
    CHECK sy-subrc = 0.
    !!! SAMPLE IMPLEMENTATION FOR DISPLAYING FI DOCUMENTS:
    SET PARAMETER ID 'BUK' FIELD gt_alv1_data-vbeln.
    set parameter id 'BLN' field gt_alv1_data-belnr.
    set parameter id 'GJR' field gt_alv1_data-gjahr.
    CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
    ENDFORM. " DISPLAY_RECORD
    FORM ALV_LIST_DISPLAY *
    Invoke main ALV function to format and show the report *
    FORM alv_list_display.
    DATA: ls_layout TYPE slis_layout_alv,
    ls_print TYPE slis_print_alv,
    ls_keyinfo TYPE slis_keyinfo_alv,
    lt_fieldcat TYPE slis_t_fieldcat_alv,
    lt_exctab TYPE slis_t_extab,
    lt_sorttab TYPE slis_t_sortinfo_alv,
    lt_events TYPE slis_t_event.
    PERFORM alv_init_report_events TABLES lt_events.
    PERFORM alv_init_report_layout TABLES lt_fieldcat
    lt_exctab
    lt_sorttab
    CHANGING ls_layout
    ls_print
    ls_keyinfo.
    CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
    i_interface_check = ' '
    i_callback_program = sy-cprog
    is_layout = ls_layout
    it_fieldcat = lt_fieldcat
    it_excluding = lt_exctab
    IT_SPECIAL_GROUPS =
    it_sort = lt_sorttab
    IT_FILTER =
    IS_SEL_HIDE =
    I_SCREEN_START_COLUMN = 0
    I_SCREEN_START_LINE = 0
    I_SCREEN_END_COLUMN = 0
    I_SCREEN_END_LINE = 0
    I_DEFAULT = 'X'
    i_save = 'A'
    is_variant = gs_variant
    it_events = lt_events
    IT_EVENT_EXIT =
    i_tabname_header = 'GT_ALV1_DATA'
    i_tabname_item = 'GT_ALV2_DATA'
    I_STRUCTURE_NAME_HEADER =
    I_STRUCTURE_NAME_ITEM =
    is_keyinfo = ls_keyinfo
    is_print = ls_print
    IS_REPREP_ID =
    IMPORTING
    E_EXIT_CAUSED_BY_CALLER =
    ES_EXIT_CAUSED_BY_USER =
    TABLES
    t_outtab_header = gt_alv1_data
    t_outtab_item = gt_alv2_data.
    EXCEPTIONS
    PROGRAM_ERROR = 1
    OTHERS = 2
    ENDFORM. " ALV_LIST_DISPLAY
    FORM ALV_INIT_REPORT_LAYOUT *
    Set up report layout definition for ALV_LIST_DISPLAY *
    <-- OT_FIELDCAT list of fields *
    <-- OT_EXCTAB excluded menu options *
    <-- OT_SORTTAB sorting/grouping definition *
    <-- OS_LAYOUT global report layout settings *
    <-- OS_PRINT global report printout settings *
    <-- OS_KEYINFO itab key fields (required only for hier.lists) *
    FORM alv_init_report_layout TABLES ot_fieldcat TYPE slis_t_fieldcat_alv
    ot_exctab TYPE slis_t_extab
    ot_sorttab TYPE slis_t_sortinfo_alv
    CHANGING cs_layout TYPE slis_layout_alv
    cs_print TYPE slis_print_alv
    cs_keyinfo TYPE slis_keyinfo_alv.
    add menu items to be excluded to ot_exctab.
    REFRESH ot_exctab.
    REFRESH ot_fieldcat.
    REFRESH ot_sorttab.
    !!! List all ALV data fields for display here:
    DD-struct = data dictionary structure name
    DD-field = field of data dictionary structure
    itab = internal table for output data
    itab-field = internal table field name
    key = set to 'X' if key field
    sum = set to 'X' for totals
    hid = set to 'X' if field is initially hidden
    row = list row number (multi-line list if >1)
    DD-struct DD-field itab itab-field key sum hid row
    PERFORM alv_build_fieldcat TABLES ot_fieldcat USING:
    'VBAK' 'VBELN' 'GT_ALV1_DATA' 'VBELN' ' ' ' ' ' ' 1 ,
    'VBAK' 'ERDAT' 'GT_ALV1_DATA' 'ERDAT' ' ' ' ' ' ' 1 ,
    'VBAK' 'ERZET' 'GT_ALV1_DATA' 'ERZET' ' ' ' ' ' ' 1 ,
    'VBAK' 'ERNAM' 'GT_ALV1_DATA' 'ERNAM' ' ' ' ' ' ' 1.
    PERFORM alv_build_fieldcat TABLES ot_fieldcat USING:
    'MARA' 'MATNR' 'GT_ALV2_DATA' 'MATNR' ' ' ' ' ' ' 1 .
    !!! List all ALV data fields for sorting/grouping here
    itab = internal table for output data
    itab-field = internal table field name
    up = sort ascending
    down = sort descending
    grp = group by
    comp = group initially compressed
    pos = field position in sort sequence
    itab field up down grp comp pos
    PERFORM alv_build_sorttab TABLES ot_sorttab USING:
    'GT_ALV1_DATA' 'VBELN' 'X' ' ' ' ' ' ' 1.
    PERFORM alv_build_sorttab TABLES ot_sorttab USING:
    'GT_ALV2_DATA' 'MATNR' 'X' ' ' ' ' ' ' 1.
    !!! key definition - required only for hierarchical display (2 itabs)
    cs_keyinfo-header01 = 'VBELN' .
    cs_keyinfo-item01 = 'MATNR' .
    !!! See the declaration of type SLIS_LAYOUT_ALV and set the fields
    !!! of OS_LAYOUT record to change list-level attributes
    os_layout-no_colhead = 'X'. " no headings
    cs_layout-zebra = 'X'. " stripped pattern
    os_layout-no_vline = 'X'. " columns separated by space
    os_layout-totals_only = 'X'. " show only totals
    os_layout-totals_text = 'Total'. " totals line label
    os_layout-subtotals_text = 'Subtotal'. " subtotals line label
    os_layout-subtotals_text = 'Subtotal'. " subtotals line label
    os_layout-key_hotspot = 'X'. " keys as hotspot
    os_layout-expand_all = 'X'. " Expand all positions
    os_layout...
    cs_print-no_print_selinfos = 'X'. " Skip selection statistics
    cs_print-no_print_listinfos = 'X'. " Skip list statistics
    os_print-...
    ENDFORM. " INIT_REPORT_LAYOUT
    FORM ALV_BUILD_FIELDCAT *
    Format a single line for ALV_INIT_REPORT_LAYOUT *
    FORM alv_build_fieldcat TABLES ot_fieldcat
    USING iv_ref_tabname "ref to a table/field
    iv_ref_fieldname
    iv_tabname "actual table/field name
    iv_fieldname
    iv_key
    iv_do_sum
    iv_no_out
    iv_row_pos.
    status variables for auto-numbering of field column position
    (column number reset when a new table or row begins)
    STATICS: sv_last_tabname TYPE slis_tabname,
    sv_last_row_pos TYPE i,
    sv_current_col TYPE i.
    IF sv_last_tabname <> iv_tabname OR sv_last_row_pos <> iv_row_pos.
    sv_current_col = 1.
    ELSE.
    ADD 1 TO sv_current_col.
    ENDIF.
    sv_last_tabname = iv_tabname.
    sv_last_row_pos = iv_row_pos.
    DATA: ls_fieldcat TYPE slis_fieldcat_alv.
    DATA: lv_fieldname TYPE slis_fieldname.
    lv_fieldname = iv_fieldname.
    !!! List all the special formatting requirements in cases below
    case lv_fieldname.
    when 'WRBTR'. "<-- link with currency required
    ls_fieldcat-cfieldname = 'WAERS'.
    ls_fieldcat-ctabname = iv_tabname.
    when 'HKONT'. "<-- change default column header
    ls_fieldcat-seltext_s = 'GL Acc.'.
    ls_fieldcat-ddictxt = 'S'. " (S)hort (M)iddle (L)ong
    when 'SOME_NUMBER' "<-- change number formatting
    ls_fieldcat-nosign = 'X'.
    ls_fieldcat-nozero = 'X'.
    ls_fieldcat-just = 'L'. " (L)eft (R)ight (C)enter
    endcase.
    ls_fieldcat-ref_tabname = iv_ref_tabname.
    ls_fieldcat-ref_fieldname = iv_ref_fieldname.
    ls_fieldcat-tabname = iv_tabname.
    ls_fieldcat-fieldname = iv_fieldname.
    ls_fieldcat-key = iv_key.
    ls_fieldcat-do_sum = iv_do_sum.
    ls_fieldcat-no_out = iv_no_out.
    ls_fieldcat-row_pos = iv_row_pos.
    ls_fieldcat-col_pos = sv_current_col.
    APPEND ls_fieldcat TO ot_fieldcat.
    ENDFORM. " ALV_BUILD_FIELDCAT
    FORM ALV_BUILD_SORTTAB *
    Set up sorting information for ALV_INIT_REPORT_LAYOUT *
    FORM alv_build_sorttab TABLES ot_sorttab TYPE slis_t_sortinfo_alv
    USING iv_tabname TYPE slis_fieldname
    iv_fieldname TYPE slis_fieldname
    iv_up TYPE c
    iv_down TYPE c
    iv_subtot TYPE c
    iv_comp TYPE c
    iv_spos TYPE n.
    ot_sorttab-spos = iv_spos.
    ot_sorttab-fieldname = iv_fieldname.
    ot_sorttab-tabname = iv_tabname.
    ot_sorttab-up = iv_up.
    ot_sorttab-down = iv_down.
    ot_sorttab-subtot = iv_subtot.
    ot_sorttab-comp = iv_comp.
    APPEND ot_sorttab.
    ENDFORM. " ALV_BUILD_SORTTAB
    FORM ALV_INIT_REPORT_EVENTS *
    Set up program events for ALV_LIST_DISPLAY *
    <-- OT_EVENTS list of events and associated report subroutines *
    FORM alv_init_report_events TABLES ot_events TYPE slis_t_event.
    CLEAR ot_events.
    REFRESH ot_events.
    ot_events-name = slis_ev_user_command.
    ot_events-form = 'USER_COMMAND'.
    APPEND ot_events.
    ot_events-name = slis_ev_pf_status_set.
    ot_events-form = ''. "'PF_STATUS_SET'.
    APPEND ot_events.
    ot_events-name = slis_ev_top_of_list.
    ot_events-form = 'TOP_OF_LIST'.
    APPEND ot_events.
    ot_events-name = slis_ev_end_of_list.
    ot_events-form = 'END_OF_LIST'.
    APPEND ot_events.
    ot_events-name = slis_ev_top_of_page.
    ot_events-form = 'TOP_OF_PAGE'.
    APPEND ot_events.
    ot_events-name = slis_ev_end_of_page.
    ot_events-form = 'END_OF_PAGE'.
    APPEND ot_events.
    ot_events-name = slis_ev_foreign_top_of_page.
    ot_events-form = ''.
    APPEND ot_events.
    ot_events-name = slis_ev_foreign_end_of_page.
    ot_events-form = ''.
    APPEND ot_events.
    ot_events-name = slis_ev_top_of_coverpage.
    ot_events-form = ''.
    APPEND ot_events.
    ot_events-name = slis_ev_end_of_coverpage.
    ot_events-form = ''.
    APPEND ot_events.
    ot_events-name = slis_ev_before_line_output.
    ot_events-form = ''.
    APPEND ot_events.
    ot_events-name = slis_ev_after_line_output.
    ot_events-form = ''.
    APPEND ot_events.
    ot_events-name = slis_ev_caller_exit_at_start.
    ot_events-form = ''.
    APPEND ot_events.
    ot_events-name = slis_ev_list_modify.
    ot_events-form = ''.
    APPEND ot_events.
    ot_events-name = slis_ev_subtotal_text.
    ot_events-form = ''.
    APPEND ot_events.
    ENDFORM. " ALV_INIT_REPORT_EVENTS
    FORM USER_COMMAND *
    Subroutine attached as callback form to ABAP List Viewer *
    --> UCOMM - user command code passed from ALV *
    --> SELFIELD - information record describing current line/field *
    FORM user_command USING value(iv_ucomm) LIKE sy-ucomm
    is_selfield TYPE slis_selfield.
    CASE iv_ucomm.
    WHEN '&IC1'. "ALV record selection
    PERFORM display_record USING is_selfield.
    when ...
    ENDCASE.
    ENDFORM. " USER_COMMAND
    FORM PF_STATUS_SET *
    Subroutine attached as callback form to ABAP List Viewer, *
    allows setting alternative menu. If necessary: *
    1. Copy 'STANDARD' menu from SAPLKKBL and modify as required, *
    2. Activate callback *
    FORM pf_status_set USING it_exctab TYPE slis_t_extab.
    set pf-status 'STANDARD' excluding it_exctab.
    ENDFORM. " PF_STATUS_SET
    FORM TOP_OF_LIST *
    Subroutine attached as callback form to ABAP List Viewer, *
    executed once at the start of list output. *
    FORM top_of_list.
    DATA: lt_seltab TYPE STANDARD TABLE OF rsparams WITH HEADER LINE.
    DATA: lv_report LIKE sy-repid.
    lv_report = sy-repid. "do not pass sy-repid to function!
    IF p_box_up = 'X'. "display select options at report start
    CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
    EXPORTING
    curr_report = lv_report
    TABLES
    selection_table = lt_seltab.
    remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'
    before display, if necessary
    CALL FUNCTION 'RS_LIST_SELECTION_TABLE'
    EXPORTING
    report = lv_report
    seltext = 'X'
    dyn_range =
    newpage = ' '
    screennr = 1000
    TABLES
    sel_tab = lt_seltab
    EXCEPTIONS
    sel_tab_empty = 1.
    ENDIF. "p_box_up = 'X'
    ENDFORM. " TOP_OF_LIST
    FORM END_OF_LIST *
    Subroutine attached as callback form to ABAP List Viewer *
    executed once at the end of list output. *
    FORM end_of_list.
    DATA: lt_seltab TYPE STANDARD TABLE OF rsparams WITH HEADER LINE.
    DATA: lv_report LIKE sy-repid.
    lv_report = sy-repid. "do not pass sy-repid to function!
    IF p_box_do = 'X'. "display select options at report end
    CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
    EXPORTING
    curr_report = lv_report
    TABLES
    selection_table = lt_seltab.
    remove 'technical' parameters with 'DELETE LT_SELTAB WHERE...'
    before display, if necessary
    CALL FUNCTION 'RS_LIST_SELECTION_TABLE'
    EXPORTING
    report = lv_report
    seltext = 'X'
    dyn_range =
    newpage = ' '
    screennr = 1000
    TABLES
    sel_tab = lt_seltab
    EXCEPTIONS
    sel_tab_empty = 1.
    ENDIF. "p_box_do = 'X'
    ENDFORM. " END_OF_LIST
    FORM TOP_OF_PAGE *
    Subroutine attached as callback form to ABAP List Viewer *
    FORM top_of_page.
    standard Ingram Micro report page heading
    DATA: lv_coco_pos TYPE i, "CurPos of 'Company confidential'
    lv_title_pos TYPE i, "CurPos of report title
    lv_title(70) TYPE c, "Truncated report title
    lv_page_pos TYPE i, "CurPos of page number
    lv_date_pos TYPE i, "CurPos of date and time
    lv_page_no(10) TYPE c,
    lv_date(25) TYPE c,
    lv_time(20) TYPE c,
    lv_page(10) TYPE c.
    We may need to truncate title if the line size is < 81.
    IF sy-linsz < 81.
    lv_title = sy-title+0(50).
    ELSE.
    lv_title = sy-title.
    ENDIF.
    Decide on positioning of text depending on width of page
    lv_title_pos = ( sy-linsz / 2 ) - ( STRLEN( lv_title ) / 2 ).
    lv_coco_pos = sy-linsz - 20.
    FORMAT COLOR COL_HEADING INTENSIFIED ON.
    WRITE: / 'Ingram Micro',
    AT lv_title_pos lv_title,
    AT lv_coco_pos 'Company Confidential'.
    Setup data correctly in the correct format for the display fields.
    lv_page = sy-pagno.
    SHIFT lv_page LEFT DELETING LEADING ' '.
    CONCATENATE sy-datum6(2) sy-datum4(2) sy-datum+0(4)
    INTO lv_date SEPARATED BY '.'.
    CONCATENATE sy-uzeit0(2) ':' sy-uzeit2(2) INTO lv_time.
    CONCATENATE lv_date lv_time INTO lv_date SEPARATED BY ' '.
    CONCATENATE 'Page' lv_page INTO lv_page_no SEPARATED BY ' '.
    Decide on positioning of text depending on width of page.
    lv_page_pos = sy-linsz - ( STRLEN( lv_page_no ) ).
    WRITE: / lv_date,
    AT lv_page_pos lv_page_no.
    ULINE.
    ENDFORM. " TOP_OF_PAGE
    FORM END_OF_PAGE *
    Subroutine attached as callback form to ABAP List Viewer *
    FORM end_of_page.
    ENDFORM. " END_OF_PAGE
    Form ALV_VARIANT_EXISTENCE
    Reads ALV variant definition
    FORM alv_variant_existence USING iv_variant LIKE disvariant-variant
    CHANGING os_variant LIKE disvariant.
    CHECK NOT iv_variant IS INITIAL.
    os_variant-report = sy-repid.
    os_variant-variant = iv_variant.
    IF iv_variant CP '/*'. "user-specific variants begin with slash
    os_variant-username = sy-uname.
    ENDIF.
    CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
    EXPORTING
    i_save = 'A'
    CHANGING
    cs_variant = os_variant
    EXCEPTIONS
    wrong_input = 1
    not_found = 2
    program_error = 3
    OTHERS = 4.
    IF sy-subrc <> 0.
    MESSAGE e001(z9) WITH 'Please select a valid display variant.'.
    ENDIF.
    ENDFORM. " ALV_VARIANT_EXISTENCE
    FORM ALV_VARIANT_F4 *
    Display list of layout variants on report selection screen *
    FORM alv_variant_f4 CHANGING cv_varname LIKE disvariant-variant
    cs_variant LIKE disvariant.
    DATA: lv_exit(1) TYPE c.
    cs_variant-report = sy-repid.
    CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
    EXPORTING
    is_variant = cs_variant
    i_save = 'A'
    it_default_fieldcat =
    IMPORTING
    e_exit = lv_exit
    es_variant = cs_variant
    EXCEPTIONS
    not_found = 2.
    IF sy-subrc = 2.
    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.
    IF lv_exit = space.
    cv_varname = cs_variant-variant.
    ENDIF.
    ENDIF.
    here in output. if you will click on material. you can go to other transaction.
    also for drill down you can refer one standard program.
    DEMO_DYNPRO_DROPDOWN_LISTBOX
    Regards
    Anji

Maybe you are looking for