Sorting for ALV hierarchy

Hi Experts,
I want sorting and subtotal on the item level in hierarchial alv. The report which iam using, when sorted on item level on hierarchy level, given a message like....subtotal not possible for item level field.
Is it possible to hve sort and subtotal on hierarchy alv..if so..could you tell me how?

Subtotal is not possible for character fields like name etc. otherwise subtotal works. to explicitly defining subtotal u can define in ur coding like
DATA SORTING AND SUBTOTAL
  data: gs_sort type slis_sortinfo_alv.
  CLEAR GS_SORT.
  GS_SORT-FIELDNAME = 'EBELN'.
GS_SORT-SPOS      = 1.
  GS_SORT-UP        = 'X'.
GS_SORT-SUBTOT    = 'X'.
  APPEND GS_SORT TO GT_SORT.
  CLEAR GS_SORT.
  GS_SORT-FIELDNAME = 'LIFNR'.
GS_SORT-SPOS      = 1.
  GS_SORT-UP        = 'X'.
GS_SORT-SUBTOT    = 'X'.
  APPEND GS_SORT TO GT_SORT.
like here subtotal on the basis ebeln & then lifnr.
anya

Similar Messages

  • Webi 4.0 Custom Sort for SSAS Hierarchy

    Hi,
    I'm using SSAS cube as a source for my webi report .Some report need custom sorting for hierarchy object , we are not able to apply sorting correctly in webi.
    What do i need to do in order to apply the custom sorting for hierarchy object?  Thanks.

    Hi, I've written a post on this:
    http://blog.davidg.com.au/2011/09/dynamic-measures-in-webi-on-any-data.html
    ...and a few people in the comments seemed to have the same problem as you, which seems to be a bug (clicking the ellipsis does not launch the custom values screen).
    Perhaps you could try the solution offered by Gallin, which was to create a second input control, then retry the steps to create another input control and click the ellipsis to enter custom values.
    Hope that helps.

  • How to disable sorting for some columns in a ALV GRID?

    Hi i have requirement where I have to disable sorting for some columns in a ALV GRID. i am using REUSE_ALV_GRID_DISPLAY function module.
    Can anybody help me. how to acieve this? Any code snippets will really be appreciated.

    Hi,
    I have tried this but not completely successful. I think this can be done using the OOPS method.
      DATA: it_event_exit TYPE  slis_t_event_exit.
      DATA: w_exit TYPE slis_event_exit.
      w_exit-ucomm = '&ODN'.
      w_exit-before = 'X'.
      CLEAR w_exit-after.
      APPEND w_exit TO it_event_exit.
      w_exit-ucomm = '&OUP'.
      w_exit-before = 'X'.
      CLEAR w_exit-after.
      APPEND w_exit TO it_event_exit.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program          = w_repid
          i_callback_top_of_page      = 'ALV_TOP_OF_PAGE'
          i_callback_html_top_of_page = 'ALV_HTML_TOP_OF_PAGE'
          i_callback_user_command     = 'USER_COMMAND'  <- User command form
          is_layout                   = wm_layout
          it_fieldcat                 = wt_fieldcat
          it_events                   = i_events
          it_event_exit               = it_event_exit    <- Need to fill
          it_sort                     = wt_sort
          i_default                   = 'X'
    Now you can capture this events in the user command
    FORM user_command  USING r_ucomm LIKE sy-ucomm
                             rs_selfield TYPE slis_selfield.
      IF r_ucomm = '&OUP' and rs_selfield-SEL_TAB_FIELD = 'Your field name'.
      ENDIF.
    ENDFORM.                    "user_command
    In this form you will get the function code in 'r_ucomm' and the field selected for sorting in 'rs_selfield-SEL_TAB_FIELD'. But reseting 'r_ucomm' will not work.
    May be somebody else can give some help on this.
    But this will work if you follow the oop method.
    Please see this document for more info.
    http://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/an easy reference for alv grid control.pdf
    Thanks
    Vinod

  • How to apply sorting for each level of a hierarchy?

    I'm using SSAS OLAP and I want to apply sorting of the levels of a hierarchy.
    I know that I can sort the whole hierarchy via ORDER function (I have some issues when I'm trying to apply DESC sorting
    on the whole hierarchy), but what I really want to achieve is sorting of a specific level. For example in the [Date].[Calendar] hierarchy (Adventure Works Cube), I want to have ASC sorting
    of years, DESC sorting of Quarter, ASC sorting
    of Months, etc. I do not want to break the hierarchy (using BASC or BDESC), I just need them sorted on the same level. Do you have an idea if this is possible at all?
    My idea is to sort the levels based on their key, not by the measure. For example if we have the following structure:
    -2009
     -Q1
       -Jan
       -Feb
     -Q2
       -May
       -June
    -2010
     -Q1
       -Jan
       -Feb
     -Q2
       -May
       -June
    I would like to be able to sort the data in the following order (DESC for years, ASC for Quarters, DESC for months):
    -2010
     -Q1
       -Feb
       -Jan
     -Q2
       -June
       -May
    -2009
     -Q1
       -Feb
       -Jan
     -Q2
       -June
       -May 
    Thanks in advance for your help!

    Hi Rosen,
    According to your description, you want to sort the different hierarchy members in different order, right? Generally SQL Server Analysis Services doesn't provide a way to sort dimension members in Descending order. SSAS provides only Ascending order. We
    can achieve this sort functionality by using a simple trick. However, the order is used for all the members of different hierarchy under this dimension. So I'm afraid that your requirement cannot be achieved. 
    Reference:Sort Dimension Members in DESCending order
    Thank you for your understanding.
    Regards,
    Charlie Liao
    TechNet Community Support

  • Custom Sort for nodes in a hierarchy

    Hi All,
    I would like to know how to sort nodes according to a specific order in a hierarchy. I know at the hierarchy level you can set the StandardHierSort property to a custom property i.e CustSortOrder.
    But for the custom property CustSortOrder, how do i set it up so the nodes in the hierarchy will be sorted according to the custom list?
    Thanks
    R

    This is right out of the MDM_User_guide (Look under Custom Sort Order)
    Custom Sort Order
    Nodes can also be sorted in any explicit custom sort order (although limbs are always sorted
    ahead of leaves.) The sort order can be defined by any property that has a property data type of
    SortOrder. (The SortOrder data type is special case of an Integer data type.) By default, any
    Hyperion MDM installation includes a property called Sort Order (assigned to the Default
    property category) that can be used for this purpose.
    To sort a hierarchy according to the value of a node-level sort order property, the hierarchylevel
    property StandardHierSort must have its value set to point to the appropriate node-level
    property that contains the sort order.
    A custom sort order can also be used that applies only to a specific Hyperion MDM user ID,
    enabling users to customize their display of Hyperion MDM data without impacting other users
    of the same hierarchy. This is controlled by the hierarchy-level property UserHierSort. If this
    property has been set to point to a node-level property that has a data type of Sort Order, then
    this sort order takes precedence over both the StandardHierSort property and the default sort
    order.
    If there is no value assigned to the hierarchy-level property StandardHierSort nor to
    UserHierSort, then the default sort order is applied.
    The value of a custom sort order property can be set in any of the following ways:
    1.Sort order values can be loaded into a node-level sort order property when data is initially
    imported into Hyperion MDM (see following for details.)
    2. Explicit values can be defined for the sort order property for any node.
    If a sort order property has been selected for a hierarchy’s StandardHierSort or UserHierSort
    properties, then the Order Children menu option is available by right-clicking on any node
    in a hierarchy. This opens a dialog box that enables the sort order of limbs and leaves to be
    set graphically.
    3. A node-level sort order property might be defined as Derived, and so might be automatically
    populated with a sort order.

  • ALV Hierarchy

    Hi Experts,
    I have Hierarchy report, but i took 2 tables header and item tables, but in my output item table is dispalying but heading is not displaying, is there any setting problem
    and header table heading is gone right side, not displaying properly.
    Please help in this regards.
    Thanks
    Rams

    Hi
    Here i am pasting the code.
    EPORT  /scl/rdfiarr_cust_ageanalys NO STANDARD PAGE HEADING
            LINE-SIZE 255
            LINE-COUNT 100
            MESSAGE-ID /scl/tin_rtr.
    *&  Include           /SCL/RDFIARR_CUST_AGEIANA_TOP
    *TYPE-POOLS declaration
    TYPE-POOLS: slis.
    *TYPES DECLARATION
    TYPES: BEGIN OF ty_bsid,
           kunnr TYPE kunnr,       "Customer Number
           bukrs TYPE bukrs,       "Company code
           zterm TYPE dzterm,       "Payment terms
           gjahr TYPE gjahr,       "Fiscal Year
           dmbtr TYPE dmbtr,       "Amount in Local Currency
           shkzg TYPE shkzg,       "Debit/Credit Indicator
           budat TYPE budat,       "Posting Date in the Document
           augdt TYPE augdt,       "Clearing Date
           bldat TYPE bldat,       "Document Date in Document
           augbl TYPE augbl,       "Document Number of the Clearing Document
           belnr TYPE belnr_d,     "Accounting Document Number
           rebzg TYPE rebzg,       "No.of the Invoice the Transaction Belongs to
           rebzj TYPE rebzj,       "Fiscal Year of the Relevant Invoice
           rebzz TYPE rebzz,       "Line Item in the Relevant Invoice
           waers TYPE waers,       "Currency Key
           gsber TYPE gsber,       "Business area
           vkorg TYPE vkorg,       "Sales Organization
          END OF ty_bsid.
    TYPES: BEGIN OF ty_bsad,
           kunnr TYPE kunnr,       "Customer Number
           bukrs TYPE bukrs,       "Company code
           zterm TYPE dzterm,       "Payment terms
           gjahr TYPE gjahr,       "Fiscal Year
           dmbtr TYPE dmbtr,       "Amount in Local Currency
           shkzg TYPE shkzg,       "Debit/Credit Indicator
           budat TYPE budat,       "Posting Date in the Document
           augdt TYPE augdt,       "Clearing Date
           bldat TYPE bldat,       "Document Date in Document
           augbl TYPE augbl,       "Document Number of the Clearing Doc
           belnr TYPE belnr_d,     "Accounting Document Number
           rebzg TYPE rebzg,       "No. of the Invoice the Trans Belongs to
           waers TYPE waers,       "Currency Key
           gsber TYPE gsber,       "Business area
           vkorg TYPE vkorg,       "Sales Organisation
          END OF ty_bsad.
    TYPES: BEGIN OF ty_cust,
           kunnr TYPE kunnr,        "Customer Number
           vkorg TYPE vkorg,        "Sales Organisaton
           name1 TYPE name1_gp,     "Customer Name
           zterm TYPE dzterm,       "Payment terms
           vwerk TYPE dwerk_ext,    "Delivery Plant
           sal_r TYPE pernr_d,      "Personnel Number (Sales)
           crd_r TYPE pernr_d,      "Personnel Number (Credit)
           ctlpc TYPE ctlpc_cm,     "Credit management: Risk category
           katr1 TYPE katr1,        "Customer Activity Cluster
           klimk TYPE klimk,        "Credit limit
           gsber TYPE gsber,        "Business Area
          END OF ty_cust.
    TYPES: BEGIN OF ty_data,
           bukrs TYPE bukrs,          "Company code
           gjahr TYPE gjahr,          "Fisacal year
           gsber TYPE gsber,          "Business area
           vwerk TYPE dwerk_ext,      "Delivery plant
           zterm TYPE dzterm,         "Payment terms
           bldat TYPE bldat,          "Document Date in Document
           kunnr TYPE kunnr,          "Customer Number
           dmbtr TYPE dmbtr,          "Amount in Local Currency
           name1 TYPE name1_gp,       "Customer name
           sal_r TYPE pernr_d,        "Salres representative
           crd_r TYPE pernr_d,        "Credit representative
           ctlpc TYPE ctlpc_cm,       "Credit management: Risk category
           katr1 TYPE katr1,          "Customer Activity Cluster
           waers TYPE waers,          "Currency Key
           vkorg TYPE vkorg,          "Sales organisation
          END OF ty_data.
    TYPES: BEGIN OF ty_knvv,
           kunnr TYPE kunnr,          "Customer number
           vwerk TYPE vwerk,          "Palnt
           vkorg TYPE vkorg,          "Sales organisation
           zterm TYPE dzterm,         "Payment terms
           END OF ty_knvv.
    TYPES: BEGIN OF ty_knvp,
           parvw  TYPE parvw,        "Partner Function
           pernr  TYPE pernr_d,      "Personnel Number
          END OF ty_knvp.
    TYPES: BEGIN OF ty_knb1,
           kunnr TYPE kunnr,          "Customer number
           bukrs TYPE bukrs,          "Company Code
           zterm TYPE dzterm,         "Payment terms
           END OF ty_knb1.
    TYPES: BEGIN OF ty_kna1,
           kunnr TYPE kunnr,          "Customer number
           name1 TYPE name1_gp,       "Customer name
           katr1 TYPE katr1,          "Customer Activity Cluster
           END OF ty_kna1.
    TYPES : BEGIN OF ty_klimk,
            kunnr TYPE kunnr,        "Customer number
            kkber TYPE kkber,        "Credit control area
            ctlpc TYPE ctlpc_cm,     "Credit management: Risk category
            klimk TYPE klimk,        "Customer's credit
            END OF ty_klimk.
    TYPES: BEGIN OF ty_zterm,
             zterm TYPE dzterm,   "Terms of Payment Key
             zfael TYPE dzfael,   "Calendar Day for the Baseline Date
                                            "for Payment
             zmona TYPE dzmona,   "Additional Months
             zstg1 TYPE dzstg1_052,
             ztag1 TYPE dztage,   "Days from Baseline Date for Payment
             ztag2 TYPE dztage,   "Days from Baseline Date for Payment
             ztag3 TYPE dztage,   "Days from Baseline Date for Payment
             ztag4 TYPE dztage,   "Days from Baseline Date for Payment
            END OF ty_zterm.
    TYPES: BEGIN OF ty_analyhead,
           kunnr   TYPE kunnr,    "customer number
           bukrs   TYPE bukrs,    "Company code
           zterm   TYPE dzterm,   "Payment terms
           total   TYPE dmbtr,    "Total
           expand(1) TYPE c,                "Expand
           END OF  ty_analyhead.
    TYPES: BEGIN OF ty_analysis,
           bukrs   TYPE bukrs,    "Company code
           vwerk   TYPE vwerk,    "Delivery Plant
           sal_r   TYPE pernr_d,  "Sales Representative
           crd_r   TYPE pernr_d,  "Credit Representative
           gsber   TYPE gsber,    "business area
           zterm   TYPE dzterm,   "Payment terms
           kunnr   TYPE kunnr,    "customer number
           name1   TYPE name1_gp, "Customer name
           total   TYPE dmbtr,    "Total
           dmbtr1  TYPE dmbtr,                                  "Bucket 1
           dmbtr2  TYPE dmbtr,                                  "Bucket 2
           dmbtr3  TYPE dmbtr,                                  "Bucket 3
           dmbtr4  TYPE dmbtr,                                  "Bucket 4
           dmbtr5  TYPE dmbtr,    "Bucket
           crlimit TYPE dmbtr,    "Credit limit
           waers   TYPE waers,    "Currency
           END OF   ty_analysis.
    *variable declaration
    DATA: v_bukrs TYPE bukrs,       "Company Code
          v_kunnr TYPE kunnr,       "Customer Number
          v_pernr TYPE pernr_d,     "Personnel Number
          v_zterm TYPE dzterm,      "Payment Terms
          v_ctlpc TYPE ctlpc_cm,    "Credit management: Risk category
          v_budat TYPE budat,       "Posting Date in the Document
          v_gjahr TYPE gjahr,       "Fiscal Year
          v_bldat TYPE bldat.       "Document Date in Document
    DATA: v_m1(2) TYPE c VALUE '-1',
          v_m2(2) TYPE c VALUE '-2',
          v_m3(2) TYPE c VALUE '-3',
          v_m4(2) TYPE c VALUE '-4'.
    DATA: v_current TYPE sy-datum,
          v_month1  TYPE sy-datum,
          v_month2  TYPE sy-datum,
          v_month3  TYPE sy-datum,
          v_month4  TYPE sy-datum.
    DATA: w_akont TYPE akont,
          cc_waers TYPE waers,
          cc_kkber TYPE kkber.
    DATA: wa_bsid1  TYPE ty_bsid,
          found TYPE c,
          idx TYPE sy-tabix.
    DATA: v_field(10) TYPE c,
          v_days(4)   TYPE c VALUE 'days',
          v_days2(3) TYPE c,
          v_days3(3) TYPE c,
          v_days4(3) TYPE c,
          v_days5(3) TYPE c.
    DATA: v_budat1 TYPE bsad-budat,
          v_bldat1 TYPE bsad-bldat,
          wa_bsad1 TYPE ty_bsad,
          idx1 TYPE sy-tabix,
          found1 TYPE c.
    CONSTANTS  DECLARATION
    CONSTANTS:  c_0       TYPE   c VALUE '0',
                c_1       TYPE   c VALUE '1',
                c_2       TYPE   c VALUE '2',
                c_3       TYPE   c VALUE '3',
                c_4       TYPE   c VALUE '4',
                c_5       TYPE   c VALUE '5',
                c_6       TYPE   c VALUE '6',
                c_7       TYPE   c VALUE '7',
                c_8       TYPE   c VALUE '8',
                c_9       TYPE   c VALUE '9',
                c_11(2)   TYPE   c VALUE '11',
                c_13(2)   TYPE   c VALUE '13',
                c_14(2)   TYPE   c VALUE '14',
                c_15(2)   TYPE   c VALUE '15',
                c_16(2)   TYPE   c VALUE '16',
                c_17(2)   TYPE   c VALUE '17',
                c_19(2)   TYPE   c VALUE '19',
                c_31(2)   TYPE   c VALUE '31',
                c_40(2)   TYPE   c VALUE '40',
                c_45(2)   TYPE   c VALUE '45',
                c_60(2)   TYPE   c VALUE '60',
                c_75(2)   TYPE   c VALUE '75',
                c_164(3)  TYPE   c VALUE '164',
                c_191(3)  TYPE   c VALUE '191',
                c_x       TYPE   c VALUE 'X',
                c_spc     TYPE   c VALUE ' ',
                c_hyp     TYPE   c VALUE '-',
                c_dot     TYPE   c VALUE '.',
                c_td      TYPE   c VALUE ':',
                c_h       TYPE   c VALUE 'H',
                c_zr(2)   TYPE   c VALUE 'ZR',
                c_kb(2)   TYPE   c VALUE 'KB',
                c_ic1(4) TYPE   c VALUE '&IC1'.
    *Internal table declaration
    DATA : i_bsid      TYPE STANDARD TABLE OF ty_bsid,
           i_bsad      TYPE STANDARD TABLE OF ty_bsad,
           i_cust      TYPE STANDARD TABLE OF ty_cust,
           i_data      TYPE STANDARD TABLE OF ty_data,
           i_knvp      TYPE STANDARD TABLE OF ty_knvp,
           i_zterm     TYPE STANDARD TABLE OF ty_zterm,
           i_analysis  TYPE STANDARD TABLE OF ty_analysis,
           i_analysis2  TYPE STANDARD TABLE OF ty_analysis,
           i_analyhead  TYPE STANDARD TABLE OF ty_analyhead,
           i_analytot  TYPE STANDARD TABLE OF ty_analysis,
           i_knvv      TYPE STANDARD TABLE OF ty_knvv,
           i_klimk     TYPE STANDARD TABLE OF ty_klimk,
           i_knb1      TYPE STANDARD TABLE OF ty_knb1,
           i_kna1      TYPE STANDARD TABLE OF ty_kna1.
    Work Area declaration
    DATA:
          wa_bsid     TYPE ty_bsid,
          wa_bsad     TYPE ty_bsad,
          wa_cust     TYPE ty_cust,
          wa_data     TYPE ty_data,
          wa_knvp     TYPE ty_knvp,
          wa_zterm    TYPE ty_zterm,
          wa_analysis TYPE ty_analysis,
          wa_analyhead TYPE ty_analyhead,
          wa_analysis2 TYPE ty_analysis,
          wa_analytot TYPE ty_analysis,
          wa_knvv     TYPE ty_knvv,
          wa_kna1     TYPE ty_kna1,
          wa_knb1     TYPE ty_knb1,
          wa_klimk    TYPE ty_klimk.
    *ALV declaration
    DATA:  i_fldcat    TYPE slis_t_fieldcat_alv,     "Field catalog for ALV
           wa_fldcat   TYPE slis_fieldcat_alv,       "Field catalog for ALV
           i_sort      TYPE slis_t_sortinfo_alv,     "SLIS
           wa_sort     TYPE slis_sortinfo_alv,   "Globale Typen für generische
           g_repid     TYPE sy-repid,
           rs_selfield TYPE slis_selfield.            "Cursor position
    DATA : wa_event    TYPE slis_alv_event, "Globale Typen für generische Listbausteine
          i_keyinfo   TYPE slis_keyinfo_alv,    "Globale Typen für generische Listbausteine
          i_layout    TYPE slis_layout_alv, "Globale Typen für generische Listbausteine
          v_repid TYPE sy-repid,
          i_event     TYPE slis_t_event,         "SLIS
          i_listhead  TYPE slis_t_listheader,    "SLIS
          wa_listhead TYPE slis_listheader.      "Globale Typen für generische Listbausteine
    SELECTION-SCREEN
    SELECTION-SCREEN BEGIN OF BLOCK bl11 WITH FRAME TITLE text-001 .
    SELECT-OPTIONS: s_bukrs FOR  v_bukrs OBLIGATORY,
                    s_akont FOR w_akont.
    SELECTION-SCREEN END OF BLOCK bl11.
    SELECTION-SCREEN BEGIN OF BLOCK bl12 WITH FRAME TITLE text-002 .
    SELECT-OPTIONS: s_kunnr FOR  v_kunnr,
                    s_sal_r FOR  v_pernr MATCHCODE OBJECT prem,
                    s_crd_r FOR  v_pernr MATCHCODE OBJECT prem,
                    s_zterm FOR  v_zterm,
                    s_ctlpc FOR  v_ctlpc.
    SELECTION-SCREEN END OF BLOCK bl12.
    SELECTION-SCREEN BEGIN OF BLOCK bl13 WITH FRAME TITLE text-003 .
    SELECT-OPTIONS:
                    s_budat FOR v_budat,             "Posting date
                    s_gjahr FOR v_gjahr.             "Fiscal year
    PARAMETERS      p_bldat LIKE v_bldat OBLIGATORY. "Document date
    SELECTION-SCREEN END OF BLOCK bl13.
    SELECTION-SCREEN BEGIN OF BLOCK bl14 WITH FRAME TITLE text-004 .
    PARAMETERS: pt_def RADIOBUTTON GROUP pmt,   "Default
                pt_man RADIOBUTTON GROUP pmt.   "Manual Override
    PARAMETERS: val1(3) TYPE n.                                 "Bucket1
    SELECTION-SCREEN COMMENT 60(10) text-006 FOR FIELD val1.
    PARAMETERS: val2(3) TYPE n,                                 "Bucket 2
                val3(3) TYPE n,                                 "Bucket 3
                val4(3) TYPE n.                                 "Bucket 4
    SELECTION-SCREEN END OF BLOCK bl14.
    SELECTION-SCREEN BEGIN OF BLOCK bl15 WITH FRAME TITLE text-005 .
    PARAMETERS: age_cc  AS CHECKBOX DEFAULT  'X',  "Compamy Code
                age_ccc AS CHECKBOX DEFAULT  'X',  "Companycode&Customer
                age_sp  AS CHECKBOX DEFAULT  'X',  "Sales Rep
                age_cr  AS CHECKBOX DEFAULT  'X',  "Credit Rep
                age_cu  AS CHECKBOX DEFAULT  'X'.  "Customer
    SELECTION-SCREEN END OF BLOCK bl15.
    *&   INITIALIZATION                                                    *
    INITIALIZATION.
      PERFORM initialization.
    *&   AT SELECTION-SCREEN OUTPUT.                                       *
    AT SELECTION-SCREEN.
    *&   PERFORM FOR FIELD VALIDATION.                                     *
    *****Validation for Compnay code
      PERFORM validate_company_code.
    *****Validation for Customer
      PERFORM validate_customer.
    *****Validation for check boxes
      PERFORM validate_options.
    EVENT  TOP-OF-PAGE                                                               *
    TOP-OF-PAGE.
    ***PERFORM TOPOFPAGE FROM BUILD_EVENT_TAB.
      PERFORM topofpage.
    *START-OF-SELECTION
    START-OF-SELECTION.
    ****Read data from t001,
      PERFORM read_t001.
    ****Get data from BSID
      PERFORM read_bsid.
    ****Get the vkorg from knvv knb1  into BSID(open items)
      IF NOT i_bsid[] IS INITIAL.
    Get data into Payment terms in I_BSID
        PERFORM get_data_payment_bsid.
      ENDIF.
    ****Data data from BSAD (cleared items)
      PERFORM read_bsad.
      IF NOT i_bsad[] IS INITIAL.
    Get data into Payment terms in I_BSAD
        PERFORM get_data_payment_bsad.
      ENDIF.
    *****Consolidation of data
      PERFORM consolidate_data.
    *****Buckets caliculations
      PERFORM print_age_analysis.
    Get the subtotals only
    PERFORM get_data_totals_KNB1.
      PERFORM get_data_totals.
    END-OF-SELECTION                                                  *
    *END-OF-SELECTION.
      IF NOT i_analysis IS INITIAL.
    ***PERFORM FOR FIELD CATALOG.
    ***PERFORM FOR BUILD KEYINFO.
          PERFORM build_keyinfo.
    ***PERFORM FOR BUILD EVENT
          PERFORM build_event_tab.
    ***PERFORM FOR BUILD LAYOUT
          PERFORM build_layout.
    ***PERFORM TO DISPLAY THE OUTPUT
        IF pt_def = c_x.
          PERFORM build_field_catlog_header.
          PERFORM build_field_catlog_item.
        ELSE.
          PERFORM build_field_catlog_header.
          PERFORM build_field_catlog_item2.
        ENDIF.
          PERFORM display_data.
      ELSE.
        MESSAGE i001.
       LEAVE LIST-PROCESSING.
      ENDIF.
    *&  Include           /SCL/RDFIARR_CUST_AGEIANA_FORM
    *&      Form  read_t001
    FORM read_t001.
      CLEAR cc_waers.
      READ TABLE s_bukrs INDEX 1 TRANSPORTING NO FIELDS.
      CLEAR cc_kkber.
      SELECT SINGLE waers kkber INTO (cc_waers, cc_kkber)
                                FROM t001 WHERE bukrs = s_bukrs-low.
    ENDFORM.                                                    "read_t001
    *&      Form  read_bsid - Read the data into I_BSID
    FORM read_bsid.
      SELECT kunnr
             name1
             katr1
             FROM kna1
             INTO TABLE i_kna1
             WHERE kunnr IN s_kunnr.
      IF sy-subrc = c_0.
        SORT i_kna1 BY kunnr.
        IF s_zterm IS INITIAL.
    **Get Payment term from KNB1
          SELECT kunnr
                 bukrs
                 zterm
                 FROM
                 knb1
                 INTO TABLE i_knb1
                 FOR ALL ENTRIES IN i_kna1
                 WHERE kunnr = i_kna1-kunnr
                   AND zterm  IN s_zterm
                   AND bukrs IN s_bukrs.
          IF sy-subrc = c_0.
            SELECT kunnr
                  bukrs
                  zterm
                  gjahr
                  dmbtr
                  shkzg
                  augdt
                  budat
                  bldat
                  augbl
                  belnr
                  rebzg
                  rebzz
                  rebzj
                  gsber
                  waers
                  INTO TABLE i_bsid FROM bsid
                  FOR ALL ENTRIES IN i_knb1
                   WHERE kunnr = i_knb1-kunnr
                     AND zterm = i_knb1-zterm
                     AND bukrs IN s_bukrs
                     AND gjahr IN s_gjahr
                     AND budat IN s_budat
                     AND hkont IN s_akont.
            IF sy-subrc = c_0.
              SORT i_bsid BY kunnr.
            ENDIF.
          ENDIF.
        ELSE.
    *Get the payment term from BSID
          SELECT kunnr
               bukrs
               zterm
               gjahr
               dmbtr
               shkzg
               augdt
               budat
               bldat
               augbl
               belnr
               rebzg
               rebzz
               rebzj
               gsber
               waers
               INTO TABLE i_bsid FROM bsid
               FOR ALL ENTRIES IN i_kna1
                WHERE kunnr = i_kna1-kunnr
                  AND zterm IN s_zterm
                  AND bukrs IN s_bukrs
                  AND gjahr IN s_gjahr
                  AND budat IN s_budat
                  AND hkont IN s_akont.
          IF sy-subrc = c_0.
            SORT i_bsid BY kunnr.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDFORM.                    " read_bsid
    *&      Form  Get_data_payment_BSID
          text
    -->  p1        text
    <--  p2        text
    FORM get_data_payment_bsid .
    ***get vkor from knvv
      SELECT   kunnr
               vwerk
               vkorg
               zterm
               FROM knvv INTO TABLE i_knvv
               FOR ALL ENTRIES IN i_bsid
               WHERE kunnr = i_bsid-kunnr
               AND   zterm IN s_zterm.
      SORT i_knvv BY kunnr zterm.
    *********15.1.2008.....
       IF s_zterm IS INITIAL.
         SORT i_knb1 BY kunnr zterm bukrs.
         READ TABLE i_knb1 INTO wa_knb1 WITH KEY
                                  kunnr = wa_bsid-kunnr
                                  zterm = wa_bsid-zterm
                                  bukrs = wa_bsid-bukrs
                                  BINARY SEARCH.
         IF sy-subrc = c_0.
           wa_bsid-zterm = wa_knb1-zterm.
           MODIFY i_bsid FROM wa_bsid INDEX sy-tabix.
    *else.
    ******end 15.1.2008
      LOOP AT i_bsid INTO wa_bsid.
        READ TABLE i_knvv INTO wa_knvv WITH KEY
                                   kunnr = wa_bsid-kunnr
                                   zterm = wa_bsid-zterm
                                   BINARY SEARCH.
        IF sy-subrc = c_0.
          wa_bsid-vkorg = wa_knvv-vkorg.
          MODIFY i_bsid FROM wa_bsid.
          CLEAR wa_knvv.
        ENDIF.
        CLEAR: wa_bsid, wa_knvv.
      ENDLOOP.
    endif.
    endif.
    ENDFORM.                    " Get_data_payment_BSID
    *&      Form  read_bsad  - Read the data into I_BSAD
    FORM read_bsad.
    **Get the customer from KNB1.
      IF s_zterm IS INITIAL.
        SELECT kunnr
               bukrs
               zterm
               FROM
               knb1
               INTO TABLE i_knb1
               FOR ALL ENTRIES IN i_kna1
               WHERE kunnr = i_kna1-kunnr
                 AND zterm  IN s_zterm
                 AND bukrs IN s_bukrs.
        IF sy-subrc =  c_0.
          SELECT kunnr
              bukrs
              zterm
              gjahr
              dmbtr
              shkzg
              budat
              bldat
              augdt
              augbl
              belnr
              rebzg
              waers
              gsber
              INTO TABLE i_bsad FROM bsad
              FOR ALL ENTRIES IN i_knb1
               WHERE kunnr = i_knb1-kunnr
                      AND zterm  = i_knb1-zterm
                      AND bukrs = i_knb1-bukrs.
        ENDIF.
      ELSE.
    *Get the payment term from BSID
        SELECT kunnr
               bukrs
               zterm
               gjahr
               dmbtr
               shkzg
               budat
               bldat
               augdt
               augbl
               belnr
               rebzg
               waers
               gsber
               INTO TABLE i_bsad FROM bsad
              FOR ALL ENTRIES IN i_knb1
              WHERE kunnr = i_knb1-kunnr
                 WHERE bukrs  IN s_bukrs
                AND zterm IN s_zterm
                  AND kunnr  IN s_kunnr
                  AND gjahr  IN s_gjahr
                  AND budat  IN s_budat
                  AND augdt  LE p_bldat
                  AND hkont  IN s_akont.
      ENDIF.
    *endif.
    ENDFORM.                    " read_bsad
    *&      Form  get_data_payment_bsad
          text
    -->  p1        text
    <--  p2        text
    FORM get_data_payment_bsad .
      SORT i_knvv BY kunnr zterm.
    ***********15.1.2008
    LOOP AT i_bsad INTO wa_bsad.
       IF s_zterm IS INITIAL.
         SORT i_knb1 BY kunnr zterm bukrs.
         READ TABLE i_knb1 INTO wa_knb1 WITH KEY
                                  kunnr = wa_bsad-kunnr
                                  zterm = wa_bsad-zterm
                                  bukrs = wa_bsad-bukrs
                                  BINARY SEARCH.
         IF sy-subrc = c_0.
           wa_bsad-zterm = wa_knb1-zterm.
           MODIFY i_bsad FROM wa_bsad INDEX sy-tabix.
    end 15.1.2008
    *else.
      LOOP AT i_bsad INTO wa_bsad.
        SORT i_knb1 BY kunnr zterm bukrs.
        READ TABLE i_knvv INTO wa_knvv WITH KEY
                   kunnr = wa_bsad-kunnr
                   zterm = wa_bsad-zterm
                   BINARY SEARCH.
        IF sy-subrc = c_0.
          wa_bsad-vkorg = wa_knvv-vkorg.
          MODIFY i_bsad FROM wa_bsad.
          CLEAR wa_knvv.
        ENDIF.
    *endif.
    *endif.
      ENDLOOP.
    ENDFORM.                    " get_data_payment_bsad
    *&      Form  consolidate_data
    FORM consolidate_data.
      REFRESH i_cust.
      LOOP AT i_bsid INTO wa_bsid.
        CLEAR wa_cust.
        wa_cust-kunnr = wa_bsid-kunnr.
        wa_cust-vkorg = wa_bsid-vkorg.
        COLLECT  wa_cust INTO i_cust.
      ENDLOOP.
      LOOP AT i_bsad INTO wa_bsad.
        CLEAR wa_cust.
        wa_cust-kunnr = wa_bsad-kunnr.
        wa_cust-vkorg = wa_bsad-vkorg.
        COLLECT wa_cust INTO i_cust.
      ENDLOOP.
      PERFORM customer_information.
      PERFORM customer_payment_terms.
      PERFORM change_payment_ageing_date.
      PERFORM collect_bsid.
      PERFORM collect_bsad.
      PERFORM exclude_from_data.
      PERFORM age_analysis.
    ENDFORM.                    " consolidate_data
    *&      Form  customer_payment_terms
    FORM customer_payment_terms.
      CLEAR wa_zterm.
      IF pt_man = c_x.
        wa_zterm-zterm = s_zterm-low.
        wa_zterm-ztag1 = val1.
        wa_zterm-ztag2 = val2.
        wa_zterm-ztag3 = val3.
        wa_zterm-ztag4 = val4.
        APPEND wa_zterm TO i_zterm.
      ELSE.
        SELECT zterm
               zfael
               zmona
               zstg1
               ztag1
               ztag2
               ztag3
               FROM t052 INTO TABLE i_zterm
               WHERE zterm IN s_zterm.
      ENDIF.
    ENDFORM.                    " customer_payment_terms
    *&      Form  customer_information
    FORM customer_information.
      SELECT kunnr ctlpc kkber klimk  INTO TABLE i_klimk
                                      FROM knkk
                                      WHERE kunnr IN s_kunnr
                                        AND kkber =  cc_kkber.
      REFRESH i_zterm.
      IF sy-subrc = c_0.
        SORT i_kna1 BY kunnr
                       name1
                       katr1.
        LOOP AT i_cust INTO wa_cust.
          CLEAR : wa_knvv, wa_kna1.
          READ TABLE i_kna1 INTO wa_kna1 WITH KEY
                              kunnr   = wa_cust-kunnr BINARY SEARCH.
          IF sy-subrc = c_0.
            wa_cust-name1 = wa_kna1-name1.
            wa_cust-katr1 = wa_kna1-katr1.
            MODIFY i_cust FROM wa_cust.
          ENDIF.
    **Get the payment term into i_cust into
          SORT i_bsid BY kunnr
                       zterm.
          CLEAR wa_bsid.
          READ TABLE i_bsid INTO wa_bsid WITH KEY
                                  kunnr = wa_cust-kunnr BINARY SEARCH.
          IF sy-subrc = c_0.
            wa_cust-zterm = wa_bsid-zterm.
            MODIFY i_cust FROM wa_cust.
          ENDIF.
          SORT i_knvv BY kunnr
                         vkorg
                         vwerk.
          READ TABLE i_knvv INTO wa_knvv WITH KEY
                                          vkorg   = wa_cust-vkorg
                                          kunnr   = wa_cust-kunnr
                                          zterm   = wa_cust-zterm
                                  BINARY SEARCH.
          IF sy-subrc = c_0.
            wa_cust-vwerk = wa_knvv-vwerk.
            MODIFY i_cust FROM wa_cust.
          ENDIF.
          SORT i_klimk BY kunnr
                          klimk.
          READ TABLE i_klimk INTO wa_klimk WITH KEY
                                                kunnr   = wa_cust-kunnr
                                        BINARY SEARCH.
          wa_cust-klimk = wa_klimk-klimk.
          MODIFY i_cust FROM wa_cust.
        ENDLOOP.
      ENDIF.
    ***get partner details
      SELECT parvw pernr INTO TABLE i_knvp
               FROM knvp FOR ALL ENTRIES IN i_cust
               WHERE  kunnr  = i_cust-kunnr
                 AND vkorg   = i_cust-vkorg
                 AND ( parvw = c_zr OR parvw = c_kb ).
      IF sy-subrc = c_0.
        LOOP AT i_knvp INTO wa_knvp.
          CASE wa_knvp-parvw.
            WHEN c_zr.
              wa_cust-sal_r = wa_knvp-pernr.
            WHEN c_kb.
              wa_cust-crd_r = wa_knvp-pernr.
          ENDCASE.
          APPEND wa_cust TO i_cust.
        ENDLOOP.
      ENDIF.
      REFRESH i_knvp.
    ENDFORM.                    " customer_information
    *&      Form  collect_bsid
    FORM collect_bsid.
      SORT i_cust BY kunnr
                     vkorg.
      LOOP AT i_bsid INTO wa_bsid.
        MOVE-CORRESPONDING wa_bsid TO wa_data.
        CLEAR wa_cust.
        READ TABLE i_cust INTO wa_cust WITH KEY kunnr = wa_bsid-kunnr
                                                zterm = wa_bsid-zterm
                                                vkorg = wa_bsid-vkorg
                                        BINARY SEARCH.
        "gsber = wa_bsid-gsber.
        IF sy-subrc = c_0.
          MOVE-CORRESPONDING wa_cust TO wa_data.
        ENDIF.
        IF wa_bsid-shkzg = c_h.
          wa_data-dmbtr = wa_data-dmbtr * - c_1.
        ENDIF.
       APPEND wa_data TO i_data.
        COLLECT wa_data INTO i_data.
        CLEAR: wa_bsid, wa_data.
      ENDLOOP.
    ENDFORM.                    " collect_bsid
    *&      Form  collect_bsad
    FORM collect_bsad.
      SORT i_cust BY kunnr
                     vkorg.
      LOOP AT i_bsad INTO wa_bsad.
        MOVE-CORRESPONDING wa_bsad TO wa_data.
        CLEAR wa_cust.
        READ TABLE i_cust INTO wa_cust WITH KEY  kunnr  = wa_bsad-kunnr
                                                 zterm  = wa_bsad-zterm
                                                 vkorg  = wa_bsad-vkorg
                                         BINARY SEARCH .
        IF sy-subrc = c_0.
          MOVE-CORRESPONDING wa_cust TO wa_data.
        ENDIF.
        IF wa_bsad-shkzg = c_h.
          wa_data-dmbtr = wa_data-dmbtr * - c_1.
        ENDIF.
       APPEND wa_data TO i_data.
        COLLECT wa_data INTO i_data.
        CLEAR: wa_bsad, wa_data.
      ENDLOOP.
    ENDFORM.                    " collect_bsad
    *&      Form  exclude_from_data
    FORM exclude_from_data.
      LOOP AT i_data INTO wa_data.
        IF NOT wa_data-zterm IN s_zterm.
          DELETE i_data INDEX sy-tabix.
          CONTINUE.
        ENDIF.
        IF wa_data-dmbtr = c_0.
          DELETE i_data INDEX sy-tabix.
          CONTINUE.
        ENDIF.
        IF NOT wa_data-sal_r IN s_sal_r.
          DELETE i_data INDEX sy-tabix.
          CONTINUE.
        ENDIF.
        IF NOT wa_data-crd_r IN s_crd_r.
          DELETE i_data INDEX sy-tabix.
          CONTINUE.
        ENDIF.
        IF NOT wa_data-ctlpc IN s_ctlpc.
          DELETE i_data INDEX sy-tabix.
          CONTINUE.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " exclude_from_data
    **&      Form  age_analysis
    FORM age_analysis.
      DATA: ztag(5) TYPE n.
      DATA: v_date LIKE sy-datum.
      PERFORM determine_bucket_dates.
      REFRESH i_analysis.
      LOOP AT i_data INTO wa_data.
        wa_data-waers = cc_waers.
        MODIFY i_data FROM wa_data.
        CLEAR wa_analysis.
        wa_analysis-zterm = wa_data-zterm.
        IF age_cc = c_x.
          wa_analysis-bukrs = wa_data-bukrs.
        ENDIF.
        IF age_sp = c_x.
          wa_analysis-sal_r = wa_data-sal_r.
        ENDIF.
        IF age_cr  = c_x.
          wa_analysis-crd_r = wa_data-crd_r.
        ENDIF.
        SORT i_kna1 BY kunnr.
        READ TABLE i_kna1 INTO wa_kna1 WITH KEY kunnr = wa_data-kunnr.
        IF sy-subrc = c_0.
          IF age_cu = c_x.
            wa_analysis-kunnr =  wa_data-kunnr.
            wa_analysis-name1 =  wa_kna1-name1.
          ENDIF.
          IF age_ccc = c_x.
            wa_analysis-kunnr =  wa_data-kunnr.
            wa_analysis-bukrs =  wa_data-bukrs.
            wa_analysis-name1 =  wa_kna1-name1.
          ENDIF.
        ENDIF.
    Age
        SORT i_zterm BY zterm.
        READ TABLE i_zterm INTO wa_zterm WITH KEY zterm = wa_data-zterm
                                         BINARY SEARCH.
    if the customer has a payment terms that is based on the end of the
    month, determine the "new" document date and then the new intervals.
        IF wa_zterm-zfael = c_31.
          CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH'
            EXPORTING
              day_in            = wa_data-bldat
            IMPORTING
              last_day_of_month = v_date.
          wa_zterm-ztag1 = v_date+6(2).
          v_date = wa_data-bldat + v_date+6(2).
          CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH'
            EXPORTING
              day_in            = v_date
            IMPORTING
              last_day_of_month = v_date.
          wa_zterm-ztag2 = v_date+6(2) + wa_zterm-ztag1.
          v_date = v_date + 1.
          CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH'
            EXPORTING
              day_in            = v_date
            IMPORTING
              last_day_of_month = v_date.
          wa_zterm-ztag3 = v_date+6(2) + wa_zterm-ztag2.
          v_date = v_date + 1.
          CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH'
            EXPORTING
              day_in            = v_date
            IMPORTING
              last_day_of_month = v_date.
          wa_zterm-ztag4 = v_date+6(2) + wa_zterm-ztag3.
        ENDIF.
        ztag = p_bldat - wa_data-bldat.
        IF wa_zterm-zfael <> c_31.
          IF ztag LE wa_zterm-ztag1.
            wa_analysis-dmbtr1 = wa_data-dmbtr.
          ELSEIF  ztag LE wa_zterm-ztag2.
            wa_analysis-dmbtr2 = wa_data-dmbtr.
          ELSEIF  ztag LE wa_zterm-ztag3.
            wa_analysis-dmbtr3 = wa_data-dmbtr.
          ELSEIF  ztag LE wa_zterm-ztag4.
            wa_analysis-dmbtr4 = wa_data-dmbtr.
          ELSE.
            wa_analysis-dmbtr5 = wa_data-dmbtr.
          ENDIF.
        ELSE.
        ZFAEL value 31 identifies the calendar month ageing
        for Y30/Y31 compare document dates to bucket dates
          IF wa_data-bldat GE v_current.
            wa_analysis-dmbtr1 = wa_data-dmbtr.
          ELSEIF  wa_data-bldat GE v_month1.
            wa_analysis-dmbtr2 = wa_data-dmbtr.
          ELSEIF  wa_data-bldat GE v_month2.
            wa_analysis-dmbtr3 = wa_data-dmbtr.
          ELSEIF  wa_data-bldat GE v_month3.
            wa_analysis-dmbtr4 = wa_data-dmbtr.
          ELSE.
            wa_analysis-dmbtr5 = wa_data-dmbtr.
          ENDIF.
        ENDIF.
        wa_analysis-total = wa_analysis-total + wa_data-dmbtr.
        wa_analysis-waers = wa_data-waers.
        APPEND wa_analysis TO i_analysis.
      ENDLOOP.
    ENDFORM.                    " age_analysis
    *&      Form  print_age_analysis
    FORM print_age_analysis.
      SORT i_analysis BY
             bukrs
             vwerk
             zterm
             kunnr.
    ***15.1.08
    IF NOT s_zterm IS INITIAL.
      LOOP AT i_analysis INTO wa_analysis.
        IF wa_analysis-dmbtr1 = c_0 AND
             wa_analysis-dmbtr2 = c_0 AND
             wa_analysis-dmbtr3 = c_0 AND
             wa_analysis-dmbtr4 = c_0 AND
             wa_analysis-dmbtr5 = c_0.
          DELETE i_analysis INDEX sy-tabix.
        ENDIF.
        CLEAR wa_cust.
        READ TABLE i_cust INTO wa_cust WITH KEY
                                       kunnr = wa_analysis-kunnr
                                       BINARY SEARCH.
        IF sy-subrc = c_0.
          wa_analysis-crlimit = wa_cust-klimk.
          MODIFY i_analysis FROM wa_analysis .
          DELETE i_cust INDEX sy-tabix.
        ELSE.
          wa_analysis-crlimit = c_0.
        ENDIF.
      ENDLOOP.
    *******15.1.08.
       DATA : v_sum TYPE dmbtr.
       DATA : v_zterm TYPE dzterm.
       SELECT SINGLE zterm table knb1 upto 1 row INTO v_zterm.
    ELSE.
       i_analysis2[] = i_analysis[].
       LOOP AT i_analysis2 INTO wa_analysis2.
         v_sum = v_sum + wa_analysis2-total.
       ENDLOOP.
       READ TABLE i_analysis2 INTO wa_analysis2
        endif.
    ENDFORM.                    " print_age_analysis
    *******FORM determine_bucket_dates.
    FORM determine_bucket_dates.
    determine 1st day of current period
      v_current = p_bldat.
      PERFORM get_last_day_of_month CHANGING v_current.
      ADD  1 TO v_current.
      PERFORM go_back_months CHANGING v_current v_m1.
    determine 1st day of month 1 (30)
      v_month1 = v_current.
      PERFORM go_back_months CHANGING v_month1 v_m1.
    determine 1st day of month 2 (60)
      v_month2 = v_current.
      PERFORM go_back_months CHANGING v_month2 v_m2.
    determine 1st day of month 3 (90)
      v_month3 = v_current.
      PERFORM go_back_months CHANGING v_month3 v_m3.
    determine 1st day of month 4 (120)
      v_month4 = v_current.
      PERFORM go_back_months CHANGING v_month4 v_m4.
    ENDFORM.                    "determine_bucket_dates
          FORM get_last_day_of_month                                    *
    FORM get_last_day_of_month CHANGING p_date TYPE any.
      CALL FUNCTION 'SG_PS_GET_LAST_DAY_OF_MONTH'
        EXPORTING
          day_in            = p_date
        IMPORTING
          last_day_of_month = p_date.
    ENDFORM.                    "get_last_day_of_month
          FORM go_back_months                                           *
    FORM go_back_months CHANGING p_date TYPE any
                                 months TYPE any.
      DATA: olddate TYPE sy-datum,
            newdate TYPE sy-datum.
      olddate = p_date.
      DATA:       BEGIN OF dat,
                  jjjj(4) TYPE c ,
                  mm(2) TYPE c,
                  tt(2) TYPE c ,
                  END OF dat,
                  BEGIN OF hdat,
                  jjjj(4) TYPE c ,
                  mm(2) TYPE c,
                  tt(2) TYPE c,
                  END OF hdat,
                  newmm TYPE p,
                  diffjjjj TYPE p.
      WRITE:  olddate+0(4) TO dat-jjjj,
              olddate+4(2) TO  dat-mm,
              olddate+6(2) TO  dat-tt.
      diffjjjj =   ( dat-mm + months - 1 ) DIV 12.
      newmm    =   ( dat-mm + months - 1 ) MOD 12 + 1.
      dat-jjjj = dat-jjjj +  diffjjjj.
      IF newmm < 10.
        WRITE '0' TO  dat-mm+0(1).
        WRITE newmm TO  dat-mm+1(1).
      ELSE.
        WRITE newmm TO  dat-mm.
      ENDIF.
      IF dat-tt > '28'.
        hdat-tt = '01'.
        newmm   = ( dat-mm  )  MOD 12 + 1.
        hdat-jjjj = dat-jjjj + ( (  dat-mm ) DIV 12 ).
        IF newmm < 10.
          WRITE '0' TO hdat-mm+0(1).
          WRITE newmm TO hdat-mm+1(1).
        ELSE.
          WRITE newmm TO hdat-mm.
        ENDIF.
        IF dat-tt = '31'.
          newdate = hdat.
          newdate = newdate - 1.
        ELSE.
          IF dat-mm = '02'.
            newdate = hdat.
            newdate = newdate - 1.
          ELSE.
            newdate = dat.
          ENDIF.
        ENDIF.
      ELSE.
        newdate = dat.
      ENDIF.
      p_date = newdate.
    ENDFORM.                    "go_back_months
    **********************************

  • HELP me in alv HIERARCHY

    HI,
    Can any one send some hierarchial alv progrms.
    with warm regards,
    khadar.

    Hi,
    report  zwmr_pick_status_report no standard page heading
                                    message-id zw.
    Type Pools                                                           *
    type-pools: icon, slis.
    Tables                                                               *
    tables: tvst,
            likp,
            t30b,
            vekp,
            zpallettr,
            zvantr.
    Types                                                                *
    types:
      begin of ty_data,
         lgtor       like likp-lgtor,             " door
         vbeln       like likp-vbeln,             " delivery
         wbstk       like vbuk-wbstk,             " Goods movement status
         kostk       like vbuk-kostk,             " Picking status
         posnr       like lips-posnr,             " item
         route       like likp-route,             " route
         wadat       like likp-wadat,             " goods issue date
         lvsta       like vbup-lvsta,             " warehouse status
         packvorschr like vekp-packvorschr,       " pack mnemonic
         exidv       like vekp-exidv,             " handling unit
         zpallet_no(10),  "like zpallettr-zpallet_no,   " pallet no
         zcount_check like zpallettr-zcount_check," count check flag
         zvan_no(10),     "like zvantr-zvan_no,         " van no
         zvan_print  like zvantr-zvan_print,      " van manifest print
         zeod_print  like zvantr-zeod_print,      " eod manifest print
         zzpackclass like vekp-zzpackclass,       " package class
         zzti        like vekp-zzti,              " T.I. value
      end of ty_data.
    Data                                                                 *
    ranges: r_del   for likp-vbeln,
            r_lgtor for likp-lgtor.
    ranges: r_vanno for zvantr-zvan_no,
            r_palno for zpallettr-zpallet_no.
    data: begin of number_range occurs 0,
             mark(1),
             id(3),
             num(10) type n,
             desc like zpalletmd-zdesc,
          end of number_range.
    data: t_disp_tab  type standard table of zpickdisp,
          t_data_tab  type ty_data  occurs 0 with header line,
          t_disp_head type standard table of zpickhead.
    data: w_numrnge like number_range,
          w_number(10) type n.
    data: t_likp     like likp      occurs 0 with header line,
          t_lips     like lips      occurs 0 with header line,
          t_vbuk     like vbuk      occurs 0 with header line,
          t_vbup     like vbup      occurs 0 with header line,
          t_vepo     like vepo      occurs 0 with header line,
          t_vekp     like vekp      occurs 0 with header line,
          t_vantr    like zvantr    occurs 0 with header line,
          t_pallettr like zpallettr occurs 0 with header line,
          w_likp     like likp,
          w_lips     like lips,
          w_vbuk     like vbuk,
          w_vbup     like vbup,
          w_vepo     like vepo,
          w_vekp     like vekp.
    ALV DATA *****
    data:
         g_grid             type ref to cl_gui_alv_grid,
         g_sort             type slis_t_sortinfo_alv,
         g_custom_container type ref to cl_gui_custom_container,
         g_layout           type slis_layout_alv,
         gt_fieldcat        type slis_t_fieldcat_alv,
         t_fldcat           like line of gt_fieldcat,
         g_keyinfo          type slis_keyinfo_alv,
         gt_events          type slis_t_event,
         gs_event           type slis_alv_event,
         w_sy_repid         like sy-repid.
    data: begin of seltab occurs 0.
            include structure rsparams.
    data: end of seltab.
    SYSTEM GENERATED TABLE CONTROL DATA ********
    DECLARATION OF TABLECONTROL 'TC_TABCON' ITSELF
    controls: tc_tabcon type tableview using screen 0100.
    LINES OF TABLECONTROL 'TC_TABCON'
    data:     g_tc_tabcon_lines  like sy-loopc.
    data:     ok_code like sy-ucomm.
    Constants                                                            *
    constants: c_data_class like klah-class value 'DG_DATA',
               c_mat_class  like rmclf-klart value '001',
               c_pack       like lips-mtart value 'VERP',
               c_a(1)            value 'A',
               c_b(1)            value 'B',
               c_c(1)            value 'C',
               c_yes(1)          value 'X',
               c_no(1)           value ' '.
    Selection screen                                                     *
    standard report select options block
    selection-screen begin of block a with frame title text-002.
    select-options:
      s_wadat for likp-wadat no-extension obligatory.  " Goods Issue Date
    *parameters:                                           "TR01-
    p_vstel like tvst-vstel obligatory. " Shipping Point "TR01-
    select-options:                                             "TR01+
      p_vstel for tvst-vstel.            " Shipping Point  "TR01+
    select-options:
      s_lfart for likp-lfart,            " Delivery type
      s_lgtor for t30b-lgtor,            " Door selection
      s_exidv for vekp-exidv,            " Handling Unit
      s_vbeln for likp-vbeln.            " Delivery
    parameters:
      p_exdata as checkbox.              " Show extra columns flag
    selection-screen end of block a.
    van/pallet specific select options block
    selection-screen begin of block b with frame title text-001.
    select-options:
      s_palno for zpallettr-zpallet_no, " no-extension,
      s_vanno for zvantr-zvan_no.       " no-extension.
    selection-screen end of block b.
    Value Request Events                                                 *
    at selection-screen on value-request for s_palno-low.
      clear: number_range, w_number .
      refresh number_range.
    select numbers and display pop up screen for selection
      perform select_pal_nos.
      s_palno-low = w_number.
    at selection-screen on value-request for s_palno-high.
      clear: number_range, w_number .
      refresh number_range.
    select numbers and display pop up screen for selection
      perform select_pal_nos.
      s_palno-high = w_number.
    at selection-screen on value-request for s_vanno-low.
      clear: number_range, w_number .
      refresh number_range.
    select numbers and display pop up screen for selection
      perform select_van_nos.
      s_vanno-low = w_number.
    at selection-screen on value-request for s_vanno-high.
      clear: number_range, w_number .
      refresh number_range.
    select numbers and display pop up screen for selection
      perform select_van_nos.
      s_vanno-high = w_number.
    At Selection Screen                                                  *
    at selection-screen.
      perform validate_selections.
    Initialization                                                       *
    initialization.
    Start of selection                                                   *
    start-of-selection.
    clear all data tables
      clear: t_likp,
             t_lips,
             t_vbuk,
             t_vbup,
             t_vepo,
             t_vantr,
             t_pallettr,
             w_likp,
             w_lips,
             w_vbuk,
             w_vbup,
             w_vepo,
             w_vekp.
      refresh: t_likp,
               t_lips,
               t_vbuk,
               t_vbup,
               t_vepo,
               t_vantr,
               t_pallettr.
    select data for ALV
    due to different input parameters being used, to streamline the data
    selection process, different selection methods are required
      if not s_vanno is initial
      or not s_palno is initial.
      if selecting by van/pallet number, need to select the data from the
      handling unit upwards to delivery
        perform select_data_up.
      else.
      otherwise the data can be selected from the delivery downwards
        perform select_data_down.
      endif.
    End of selection                                                     *
    end-of-selection.
    call hierarchical ALV display function module
      call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
           exporting
                i_callback_program       = 'ZWMR_PICK_STATUS_REPORT'
                i_callback_pf_status_set = 'SET_STATUS'
                i_callback_user_command =
                   'USER_COMMAND' "custom gui status form
                is_layout                = g_layout  "user command form
                it_fieldcat              = gt_fieldcat
                it_sort                  = g_sort
                it_events                = gt_events
                i_tabname_header         = 't_disp_head'
                i_tabname_item           = 't_disp_tab'
                i_structure_name_header  = 'ZPICKHEAD'
                i_structure_name_item    = 'ZPICKDISP'
                is_keyinfo               = g_keyinfo
           tables
                t_outtab_header          = t_disp_head
                t_outtab_item            = t_disp_tab.
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      endif.
                                FORMS                                    *
    Includes inserted by Screen Painter Wizard. DO NOT CHANGE THIS LINE!
      include zwmr_pick_status_reporto01 .
      include zwmr_pick_status_reporti01 .
      include zwmr_pick_status_reportf01 .
    *&      Form  select_pal_nos
          select pallet numbers for search help
    form select_pal_nos.
      data: begin of t_palno occurs 0,
              zpallet_no like zpallettr-zpallet_no,
            end of t_palno.
    select all available pallet numbers
      select distinct zpallet_no from zpallettr
                      into corresponding fields of table t_palno.
      loop at t_palno.
      get pallet id
        select single zpallet_id from zpallettr
                      into number_range-id
                      where zpallet_no = t_palno-zpallet_no.
      get pallet description
        select single zdesc from zpalletmd
                      into number_range-desc
                      where zpallet_id = number_range-id.
        number_range-num = t_palno-zpallet_no.
      append to search help table
        append number_range.
      endloop.
    call pop up dialog box
      call screen 0100 starting at 5 5.
    endform.                    " select_pal_nos
    *&      Form  select_van_nos
          select van numbers for search help
    form select_van_nos.
      data: begin of t_vanno occurs 0,
              zvan_no like zvantr-zvan_no,
            end of t_vanno.
    select available van numbers
      select distinct zvan_no from zvantr
                      into corresponding fields of table t_vanno.
      loop at t_vanno.
      select van id
        select single zvan_id from zvantr
                      into number_range-id
                      where zvan_no = t_vanno-zvan_no.
      select van description (maintained in pallet tables)
        select single zdesc from zpalletmd
                      into number_range-desc
                      where zpallet_id = number_range-id.
        number_range-num = t_vanno-zvan_no.
      append to search help table
        append number_range.
      endloop.
    call pop up dialog box
      call screen 0100 starting at 5 5.
    endform.                    " select_van_nos
    *&      Form  select_data_down
          select data if selecting from delivery down
    form select_data_down.
    select all deliveries from LIKP that fulfill selection criteria
      select * from likp into table t_likp
                         where vbeln in s_vbeln
                       and   vstel eq p_vstel                 "TR01-
                         and   vstel in p_vstel
                         and   lgtor in s_lgtor
                         and   wadat in s_wadat
                         and   lfart in s_lfart.
      if sy-subrc ne 0.
      no data found
        message i007.
        exit.
      endif.
      if not t_likp[] is initial.
      select sales document headers from VBUK
        select * from vbuk into table t_vbuk
                      for all entries in t_likp
                      where vbeln eq t_likp-vbeln.
      select all relevant delivery items from LIPS
        select * from lips into table t_lips
                      for all entries in t_likp
                      where vbeln eq t_likp-vbeln
                      and   pstyv ne 'ZPAC'
                      and   pstyv ne 'ZGDP'                     "TR02+
                      and   lfimg gt 0.                         "TR01+
      endif.
      if not t_lips[] is initial.
      select all sales document line items from VBUP
        select * from vbup into table t_vbup
                      for all entries in t_lips
                      where vbeln eq t_lips-vbeln
                      and   posnr = t_lips-posnr.
      select corresponding handling unit ID's (venum)
    TR03 Replace start
       select * from vepo appending corresponding fields of table t_vepo
                     for all entries in t_lips
                     where vbeln = t_lips-vbeln
                     and   posnr = t_lips-posnr
                     and   matnr = t_lips-matnr
                     and   charg = t_lips-charg.
        select * from vepo
                      inner join vekp on vepovenum = vekpvenum
                      appending corresponding fields of table t_vepo
                      for all entries in t_lips
                      where vepo~vbeln = t_lips-vbeln
                      and   vepo~posnr = t_lips-posnr
                      and   vepo~matnr = t_lips-matnr
                      and   vepo~charg = t_lips-charg
                      and   vekp~exidv in s_exidv.
    TR03 Replace end
      endif.
    build process table
      perform move_to_table.
    endform.   "select_data_down
    *&      Form  select_data_up
          select data if selecting from van/pallet up
    form select_data_up.
      if not s_vanno is initial.
      if van then select van numbers and hence pallet numbers
        select * from zvantr into table t_vantr
                              where zvan_no in s_vanno.
                            and   vstel   eq p_vstel."TR01-
        if not t_vantr[] is initial.
          select * from zpallettr into table t_pallettr
                                  for all entries in t_vantr
                                  where zpallet_no eq t_vantr-zpallet_no.
                                and   vstel      eq p_vstel."TR01-
        endif.
      else.
      otherwise can get pallet numbers directly
        select * from zpallettr into table t_pallettr
                                where zpallet_no in s_palno.
                              and   vstel      eq p_vstel."TR01-
      endif.
      if not t_pallettr[] is initial.
      from the pallet nos. we can select the handling units
        select * from vekp into table t_vekp
                           for all entries in t_pallettr
                           where exidv eq t_pallettr-exidv
                           and   exidv ne space
                           and   exidv in s_exidv               "TR03+
                           and ( exida = 'E'                    "TR01+
                           or    exida = 'F' ).                 "TR01+
      endif.
      if not t_vekp[] is initial.
      build vbeln range from t_vekp.
        loop at t_vekp.
          r_del-sign = 'I'.
          r_del-option = 'EQ'.
          r_del-low = t_vekp-vpobjkey.
          append r_del.
        endloop.
      select all deliveries from LIKP that correspond to HU's
        select * from likp into table t_likp
                           where vbeln in r_del
                           and   wadat in s_wadat
                           and   lfart in s_lfart.
      endif.
      if not t_likp[] is initial.
      select sales document headers from VBUK
        select * from vbuk into table t_vbuk
                      for all entries in t_likp
                      where vbeln eq t_likp-vbeln.
      select all relevant delivery items from LIPS
        select * from lips into table t_lips
                      for all entries in t_likp
                      where vbeln eq t_likp-vbeln
                      and   pstyv ne 'ZPAC'
                      and   pstyv ne 'ZGDP'                     "TR02+
                      and   lfimg gt 0.                         "TR01+
      endif.
      if not t_lips[] is initial.
      select all sales document line items from VBUP
        select * from vbup into table t_vbup
                      for all entries in t_lips
                      where vbeln eq t_lips-vbeln
                      and   posnr = t_lips-posnr.
      select corresponding handling unit ID's (venum)
        select * from vepo appending corresponding fields of table t_vepo
                      for all entries in t_lips
                      where vbeln = t_lips-vbeln
                      and   posnr = t_lips-posnr
                      and   matnr = t_lips-matnr
                      and   charg = t_lips-charg.
      endif.
    build process table
      perform move_to_table.
    endform.   "select_data_up
    *&      Form  move_to_table
          move data to processing table
    form move_to_table.
      loop at t_vepo.
        clear t_data_tab.
      delivery lines.
        clear w_lips.
        read table t_lips with key vbeln = t_vepo-vbeln
                                   posnr = t_vepo-posnr
                                   into w_lips.
        move-corresponding w_lips to t_data_tab.
      sales document line items
        clear w_vbup.
        read table t_vbup with key vbeln = t_vepo-vbeln
                                   posnr = t_vepo-posnr
                                   into w_vbup.
      if w_vbup-kosta = space.                   "TR01-
        not relevant for picking
        delete t_vepo.                           "TR01-
        continue.                                "TR01-
      else.                                      "TR01-
        move-corresponding w_vbup to t_data_tab.
      endif.                                     "TR01-
      sales doc header
        clear w_vbuk.
        read table t_vbuk with key vbeln = t_vepo-vbeln
                               into w_vbuk.
        move-corresponding w_vbuk to t_data_tab.
      delivery header
        clear w_likp.
        read table t_likp with key vbeln = t_vepo-vbeln
                               into w_likp.
        move-corresponding w_likp to t_data_tab.
      select handling unit info using vepo entry
        clear w_vekp.
        if t_vekp[] is initial.
          select single * from vekp into w_vekp
                                    where venum = t_vepo-venum.
        else.
          read table t_vekp with key venum = t_vepo-venum
                                     into w_vekp.
          if sy-subrc ne 0.
            select single * from vekp into w_vekp
                            where venum = t_vepo-venum.
          endif.
        endif.
        move-corresponding w_vekp to t_data_tab.
      select pallet / van load information
        select single zpallet_no zcount_check from zpallettr
                                 into (t_data_tab-zpallet_no,
                                       t_data_tab-zcount_check)
                                 where exidv eq w_vekp-exidv.
        if not t_data_tab-zpallet_no in s_palno.                "TR01+
          continue.                                             "TR01+
        endif.                                                  "TR01+
        if sy-subrc = 0.
          select single zvan_no zvan_print zeod_print from zvantr
                        into (t_data_tab-zvan_no,
                              t_data_tab-zvan_print,
                              t_data_tab-zeod_print)
                        where zpallet_no eq t_data_tab-zpallet_no.
          if not t_data_tab-zvan_no in s_vanno.                 "TR01+
            continue.                                           "TR01+
          endif.                                                "TR01+
        endif.
        append t_data_tab.
      endloop.
    *-----> TR01+ start
    If the delivery has yet to be packed, then need to include in report
    Thus delete t_lips here and if any entries left after looping through
    t_vepo, these will also need to be added to t_data_tab
    if the selection is by handling unit though we do not want these"TR03+
      if s_exidv is initial.                                          "TR03+
        loop at t_vepo.
          read table t_lips with key vbeln = t_vepo-vbeln
                                     posnr = t_vepo-posnr.
          if sy-subrc = 0.
            delete t_lips index sy-tabix.
          endif.
        endloop.
        if not t_lips[] is initial.
      move any unpacked items to the data table
          perform move_lips_to_table.
        endif.
      endif.                                                          "TR03+
    *<---- TR01+ End
    get relevant status icons
      perform select_icons.
    prepare ALV data
      perform prepare_alv.
    endform.                    " select_data
    *&      Form  select_icons
          select icons for display and move data to display table
    form select_icons.
      data: w_disp_tab like zpickdisp,
            w_disp_head like zpickhead,
            w_color like zpickdisp-color,
            ov_icon like zpickdisp-ov_icon,
            gi_icon like zpickdisp-gi_icon,
            to_icon like zpickdisp-to_icon,
            lp_icon like zpickdisp-lp_icon,
            pc_icon like zpickdisp-pc_icon,
            lv_icon like zpickdisp-lv_icon,
            vm_icon like zpickdisp-vm_icon,
            em_icon like zpickdisp-em_icon,
            t_ovst_tab like t_disp_tab with header line.
      constants: c_col1(3) value 'C10',
                 c_col2(3) value 'C20'.
      sort t_data_tab by lgtor vbeln.
      w_color = c_col2.
      loop at t_data_tab.
        at new lgtor.
        fill ALV header table
          clear w_disp_head.
          w_disp_head-lgtor = t_data_tab-lgtor.
          append w_disp_head to t_disp_head.
        endat.
      goods issue status & overall amber/green only
        case t_data_tab-wbstk.
          when c_c.
            move icon_green_light to gi_icon.
            move icon_green_light to ov_icon.
          when others.
            move icon_red_light to gi_icon.
            move icon_yellow_light to ov_icon.
        endcase.
      transfer order status
        case t_data_tab-lvsta.
          when c_a.
            move icon_red_light to to_icon.
          when c_b.
            move icon_yellow_light to to_icon.
          when c_c.
            move icon_green_light to to_icon.
          when space.
          write N/A
            to_icon = 'N/A'.
        endcase.
      loaded to pallet status
        if not t_data_tab-zpallet_no is initial.
          move icon_green_light to lp_icon.
        else.
          move icon_red_light to lp_icon.
        endif.
      pallet count status
        if not t_data_tab-zcount_check is initial.
          move icon_green_light to pc_icon.
        else.
          move icon_red_light to pc_icon.
        endif.
      loaded to van status
        if not t_data_tab-zvan_no is initial.
          move icon_green_light to lv_icon.
        else.
          move icon_red_light to lv_icon.
        endif.
      van manifest status
        if not t_data_tab-zvan_print is initial.
          move icon_green_light to vm_icon.
        else.
          move icon_red_light to vm_icon.
        endif.
      end of day manifest status
        if not t_data_tab-zeod_print is initial.
          move icon_green_light to em_icon.
        else.
          move icon_red_light to em_icon.
        endif.
      move working data table to display table
        move-corresponding t_data_tab to w_disp_tab.
        w_disp_tab-ov_icon = ov_icon.
        w_disp_tab-gi_icon = gi_icon.
        w_disp_tab-to_icon = to_icon.
        w_disp_tab-lp_icon = lp_icon.
        w_disp_tab-pc_icon = pc_icon.
        w_disp_tab-lv_icon = lv_icon.
        w_disp_tab-vm_icon = vm_icon.
        w_disp_tab-em_icon = em_icon.
        w_disp_tab-color = w_color.
      fill N/A values for initial fields for display
        if w_disp_tab-packvorschr is initial.
          w_disp_tab-packvorschr = 'N/A'.
        endif.
        if w_disp_tab-exidv is initial.
          w_disp_tab-exidv = 'N/A'.
        endif.
        if w_disp_tab-zpallet_no is initial.
          write 'N/A' to w_disp_tab-zpallet_no.
        endif.
        if w_disp_tab-zvan_no is initial.
          write 'N/A' to w_disp_tab-zvan_no.
        endif.
      display different color for new doc number
        at end of vbeln.
          if w_color = c_col1.
            w_color = c_col2.
          elseif w_color = c_col2.
            w_color = c_col1.
          endif.
        endat.
        append w_disp_tab to t_disp_tab.
        clear w_disp_tab.
      endloop.
    we have all the icons in display but need to check the overall status
    as this refers to the line items
    green and amber statuses already set and use the same criteria as the
    goods issue status unless detected as red here
      data: ov_stat_red(1).
      clear w_disp_tab.
      sort t_disp_tab by vbeln.
      loop at t_disp_tab into w_disp_tab.
        at new vbeln.
        check all line items for delivery
          loop at t_data_tab where vbeln = w_disp_tab-vbeln.
            if t_data_tab-lvsta = c_a.
            set overall status to red
              ov_stat_red = c_yes.
              exit.
            else.
            leave green/amber status icon as previosly determined
            endif.
          endloop.
          if ov_stat_red = c_yes.
          set overall status to red for all items in that delivery
            clear ov_stat_red.
            move icon_red_light to w_disp_tab-ov_icon.
            modify t_disp_tab from w_disp_tab transporting ov_icon
                              where vbeln = w_disp_tab-vbeln.
          endif.
        endat.
      endloop.
    endform.                    " select_icons
    *&      Form  fill_layout
          fill ALV layout parameters
    form fill_layout.
      clear g_layout.
      g_layout-colwidth_optimize = c_yes.   " column width optimisation
      g_layout-zebra = space.               " alternate line colors
      g_layout-box_fieldname = 'MARK'.      " checkbox fieldname
      g_layout-info_fieldname = 'COLOR'.    " highlight row indicator
      g_layout-no_vline = space.            " vertical line
      g_layout-key_hotspot = space.         " hotspot field
      g_layout-f2code = 'PICK'.             " F2 ok_code
      g_layout-numc_sum = c_yes.            " sum numc fields
      g_layout-box_tabname = 't_disp_head'. " checkbox table name
      g_layout-expand_fieldname = 'EXPAND'. " expand field name
    endform.                    " fill_layout
    *&      Form  fill_sort
          fill ALV sort table
    form fill_sort.
      data: w_g_sort type slis_sortinfo_alv.
      w_g_sort-spos      = 1.
      w_g_sort-fieldname = 'LGTOR'.
      w_g_sort-tabname   = 't_disp_tab'.
      w_g_sort-up        = c_yes.
      append w_g_sort to g_sort.
      w_g_sort-spos      = 2.
      w_g_sort-fieldname = 'VBELN'.
      w_g_sort-tabname   = 't_disp_tab'.
      w_g_sort-up        = c_yes.
      append w_g_sort to g_sort.
      w_g_sort-spos      = 3.
      w_g_sort-fieldname = 'POSNR'.
      w_g_sort-tabname   = 't_disp_tab'.
      w_g_sort-up        = c_yes.
      append w_g_sort to g_sort.
      w_g_sort-spos      = 4.
      w_g_sort-fieldname = 'WADAT'.
      w_g_sort-tabname   = 't_disp_tab'.
      w_g_sort-up        = c_yes.
      append w_g_sort to g_sort.
    endform.                    " fill_sort
    *&      Form  fill_fieldcat
          Fill field category structure for ALV
    form fill_fieldcat.
      clear t_fldcat.
    create field catalogue for header table
      call function 'REUSE_ALV_FIELDCATALOG_MERGE'
           exporting
                i_program_name         = 'ZWMR_PICK_STATUS_REPORT'
                i_internal_tabname     = 't_disp_head'
                i_structure_name       = 'ZPICKHEAD'
                i_client_never_display = c_yes
           changing
                ct_fieldcat            = gt_fieldcat[].
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      endif.
    ceate field catalogue for items table
      call function 'REUSE_ALV_FIELDCATALOG_MERGE'
           exporting
                i_program_name         = 'ZWMR_PICK_STATUS_REPORT'
                i_internal_tabname     = 't_disp_tab'
                i_structure_name       = 'ZPICKDISP'
                i_client_never_display = c_yes
           changing
                ct_fieldcat            = gt_fieldcat[].
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      endif.
    modify field catalogue for this report
    set no display flag if not requested on selection screen
      if p_exdata ne c_yes.
        t_fldcat-no_out    =  c_yes.
        modify gt_fieldcat from t_fldcat transporting no_out
                           where fieldname eq 'PACKVORSCHR'
                           or    fieldname eq 'EXIDV'
                           or    fieldname eq 'ZPALLET_NO'
                           or    fieldname eq 'ZVAN_NO'
                           or    fieldname eq 'ZZPACKCLASS'
                           or    fieldname eq 'ZZTI'.
      endif.
    set no display flag for item level LGTOR field
      t_fldcat-no_out    =  c_yes.
      modify gt_fieldcat from t_fldcat transporting no_out
                         where fieldname eq 'LGTOR'
                         and   tabname   eq 't_disp_tab'.
    prevent display of technical fields
      t_fldcat-tech = c_yes.
      modify gt_fieldcat from t_fldcat transporting tech
                         where fieldname eq 'EXPAND'
                         or    fieldname eq 'SELKZ'.
    set vbeln as key
      t_fldcat-key = c_yes.
      modify gt_fieldcat from t_fldcat transporting key
                         where fieldname eq 'VBELN'.
    prevent scrolling for info fields
      t_fldcat-fix_column = c_yes.
      modify gt_fieldcat from t_fldcat transporting fix_column
                         where fieldname eq 'VBELN'.
    endform.                    " fill_fieldcat
    *&      Form  prepare_ALV
          Fill ALV parameters
    form prepare_alv.
    fill ALV key info
      g_keyinfo-header01 = 'LGTOR'.
      g_keyinfo-item01   = 'LGTOR'.
    fill ALV events
      gs_event-name = 'TOP_OF_PAGE'.
      gs_event-form = 'TOP_OF_PAGE'.
      append gs_event to gt_events.
    fill ALV sort table
      perform fill_sort.
    fill ALV layout structure
      perform fill_layout.
    fill ALV field category
      perform fill_fieldcat.
    endform.                    " prepare_ALV
    *&      Form  user_command
          form called on user command from ALV list
    form user_command using r_ucomm     like sy-ucomm
                            rs_selfield type slis_selfield.
      data: index type i,
            w_disp_head like line of t_disp_head,
            w_door like likp-lgtor.
      clear r_lgtor. refresh r_lgtor.
      case r_ucomm.
        when 'PICK'. " Double click line
        when 'VANM'. " Van Manifest button
        read the header table where has been selected
          loop at t_disp_head into w_disp_head where mark = c_yes.
            r_lgtor-sign   = 'I'.
            r_lgtor-option = 'EQ'.
            r_lgtor-low    = w_disp_head-lgtor.
            append r_lgtor.
          endloop.
        print the van manifest
          perform print_van_manifest tables r_lgtor.
        when 'EODM'. " EOD Manifest button
        read the header table where has been selected
          loop at t_disp_head into w_disp_head where mark = c_yes.
            r_lgtor-sign   = 'I'.
            r_lgtor-option = 'EQ'.
            r_lgtor-low    = w_disp_head-lgtor.
            append r_lgtor.
          endloop.
        print the end of day manifest
          perform print_eod_manifest tables r_lgtor.
        when 'REFR'. "Refresh
        refresh display
          w_sy_repid = sy-repid.
          call function 'RS_REFRESH_FROM_SELECTOPTIONS'
               exporting
                    curr_report     = w_sy_repid
               tables
                    selection_table = seltab.
              exceptions
                  not_found       = 1
                  no_report       = 2
                  others          = 3.
      

  • Abt alv hierarchy

    my output like this,
         -> india                          123       123
              -->ap                        12          12
                 --->hyd                     24        24
                       @ ampet             1000     1000
                       @ kp                  50         50
                       @ begumpet        1234         1234
    output tree like this.
    plz send me alv hierarchy program blongs to this output.
    giv me reply asap
    thanks n regards
    satya

    Hi Murty please find the following code.If it is useful reward me points.
    TYPE-POOLS: slis.
    TABLES : ekko, ekpo.
    DATA : BEGIN OF i_ekko OCCURS 0,
    ebeln LIKE ekko-ebeln,
    ernam LIKE ekko-ernam,
    bsart LIKE ekko-bsart,
    var1,
    END OF i_ekko.
    DATA : BEGIN OF i_ekpo OCCURS 0,
    ebeln LIKE ekpo-ebeln,
    ebelp LIKE ekpo-ebelp,
    matnr LIKE ekpo-matnr,
    aedat LIKE ekpo-aedat,
    var2,
    END OF i_ekpo.
    DATA : BEGIN OF i_final OCCURS 0,
    ebeln LIKE ekko-ebeln,
    ernam LIKE ekko-ernam,
    bsart LIKE ekko-bsart,
    ebelp LIKE ekpo-ebelp,
    matnr LIKE ekpo-matnr,
    aedat LIKE ekpo-aedat,
    END OF i_final.
    SELECT-OPTIONS : S_EBELN FOR EKKO-EBELN.
    DATA : fcat TYPE slis_t_fieldcat_alv, "FIELDCATALOG(TABLE)
    fcat1 TYPE slis_t_fieldcat_alv, "FIELDCATALOG(TABLE)
    cat TYPE slis_fieldcat_alv. "FIELDCATALOG(WORK AREA)
    DATA : LAYOUT1 TYPE SLIS_LAYOUT_ALV, "LAYOUT 1
    LAYOUT2 TYPE SLIS_LAYOUT_ALV, "LAYOUT 2
    KEY TYPE SLIS_KEYINFO_ALV , "KEY INFORMATION
    GT_EVENT1 TYPE SLIS_T_EVENT.
    START-OF-SELECTION.
    PERFORM GETTING_DATA.
    PERFORM append_field.
    CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
    I_CALLBACK_PROGRAM = SY-CPROG
    IS_LAYOUT = LAYOUT1
    IT_FIELDCAT = FCAT
    IT_EVENTS = GT_EVENT1
    i_tabname_header = 'I_EKKO'
    i_tabname_item = 'I_EKPO'
    is_keyinfo = KEY
    tables
    t_outtab_header = I_EKKO
    t_outtab_item = I_EKPO.
    *& Form GETTING_DATA
    text
    --> p1 text
    <-- p2 text
    FORM GETTING_DATA .
    SELECT EBELN BSART ERNAM UP TO 100 ROWS
    INTO CORRESPONDING FIELDS OF TABLE I_EKKO
    FROM EKKO
    WHERE EBELN IN S_EBELN.
    SELECT EBELN EBELP MATNR AEDAT
    INTO CORRESPONDING FIELDS OF TABLE I_EKPO
    FROM EKPO
    FOR ALL ENTRIES IN I_EKKO
    WHERE EBELN = I_EKKO-EBELN .
    SORT I_EKKO BY EBELN.
    LOOP AT I_EKKO.
    READ TABLE I_EKPO WITH KEY EBELN = I_EKKO-EBELN.
    IF SY-SUBRC EQ 0.
    MOVE: I_EKKO-EBELN TO I_FINAL-EBELN,
    I_EKKO-BSART TO I_FINAL-BSART,
    I_EKKO-ERNAM TO I_FINAL-ERNAM,
    I_EKPO-EBELP TO I_FINAL-EBELP,
    I_EKPO-MATNR TO I_FINAL-MATNR,
    I_EKPO-AEDAT TO I_FINAL-AEDAT.
    APPEND I_FINAL.
    ENDIF.
    ENDLOOP.
    ENDFORM. " GETTING_DATA
    *& Form APPEND_FIELD
    text
    --> p1 text
    <-- p2 text
    FORM append_field .
    CLEAR cat.
    cat-col_pos = 1.
    cat-fieldname = 'EBELN'.
    cat-tabname = 'I_EKKO'.
    cat-ref_fieldname = 'EBELN'.
    cat-ref_tabname = 'EKKO'.
    cat-key = 'X'. "define field as key
    APPEND cat TO fcat.
    CLEAR cat.
    cat-col_pos = 2.
    cat-fieldname = 'BSART'.
    cat-tabname = 'I_EKKO'.
    cat-ref_fieldname = 'BSART'.
    cat-ref_tabname = 'EKKO'.
    APPEND cat TO fcat.
    CLEAR cat.
    cat-col_pos = 3.
    cat-fieldname = 'ERNAM'.
    cat-tabname = 'I_EKKO'.
    cat-ref_fieldname = 'ERNAM'.
    cat-ref_tabname = 'EKKO'.
    APPEND cat TO fcat.
    CLEAR cat.
    cat-col_pos = 4.
    cat-fieldname = 'EBELP'.
    cat-tabname = 'I_EKPO'.
    cat-ref_fieldname = 'EBELP'.
    cat-ref_tabname = 'EKPO'.
    cat-key = 'X'. "define field as key
    APPEND cat TO fcat.
    CLEAR cat.
    cat-col_pos = 5.
    cat-fieldname = 'MATNR'.
    cat-tabname = 'I_EKPO'.
    cat-ref_fieldname = 'MATNR'.
    cat-ref_tabname = 'EKPO'.
    APPEND cat TO fcat.
    CLEAR cat.
    cat-col_pos = 6.
    cat-fieldname = 'AEDAT'.
    cat-tabname = 'I_EKPO'.
    cat-ref_fieldname = 'AEDAT'.
    cat-ref_tabname = 'EKPO'.
    APPEND cat TO fcat.
    CLEAR cat.
    layout1-expand_fieldname = 'VAR1'.
    layout1-lights_fieldname = '3'.
    layout1-lights_tabname = 'I_EKPO'.
    key-header01 = 'EBELN'.
    key-item01 = 'EBELN'.
    ENDFORM. " APPEND_FIELD

  • ALV: Issue with double  click event after sorting the ALV

    Hello Experts,
    I have an internal table that populates an ALV grid. When the user doubleclicks a row, my method HANDLE_DOUBLE_CLICK returns the e_row-index value from the ALV Grid. I use this index value to read the internal table, then retrieve additional data.
    My problem is the user may sort the ALV grid before double clicking on a line. If this happens my internal table is not sorted to match the ALV grid, so reading the internal table with the e_row-index value returns the wrong information.
    When the double click event occurs, is it possible to capture the value in column 1 instead of a value for e_row-index?
    There is one more paramter in HANDLE_DOUBLE_CLICK for row id.   It is coming blank in debugging .  what is the purpose of this parameter and how i can make use of it ?
    Regards
    Vivek

    Hi,
    I am Posting The Code Which Uses Double Click Event.
    And This Code will provide the total information to you.
    REPORT  ZALVGRID_PG.
    TABLES: SSCRFIELDS.
    DATA: V_BELNR TYPE RBKP-BELNR.
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: IRNO FOR V_BELNR.
    PARAMETERS: P_GJAHR TYPE RBKP-GJAHR.
    SELECTION-SCREEN END OF BLOCK B1.
    DATA: WA TYPE ZALVGRID_DISPLAY,
          ITAB TYPE STANDARD TABLE OF ZALVGRID_DISPLAY.
    DATA: IDENTITY TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
    DATA: GRID TYPE REF TO CL_GUI_ALV_GRID.
    DATA: L_IDENTITY TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
    DATA: L_TREE TYPE REF TO CL_GUI_ALV_TREE_SIMPLE.
    TYPE-POOLS: SLIS,SDYDO.
    DATA: L_LOGO TYPE SDYDO_VALUE,
          L_LIST TYPE SLIS_T_LISTHEADER.
    END-OF-SELECTION.
    CLASS CL_LC DEFINITION.
      PUBLIC SECTION.
        METHODS: DC FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN.
    ENDCLASS.
    CLASS CL_LC IMPLEMENTATION.
      METHOD DC.
        DATA: WA1 TYPE ZALVGRID_DISPLAY.
        READ TABLE ITAB INTO WA1 INDEX E_ROW-INDEX.
        BREAK-POINT.
        SET PARAMETER ID 'BLN' FIELD WA1-BELNR.
        CALL TRANSACTION 'FB02'.
      ENDMETHOD.                    "DC
    ENDCLASS.
    DATA: OBJ_CL TYPE REF TO CL_LC.
    START-OF-SELECTION.
      PERFORM SELECT_DATA.
      IF SY-SUBRC = 0.
        CALL SCREEN 100.
      ELSE.
        MESSAGE E000(0) WITH 'DATA NOT FOUND'.
      ENDIF.
      INCLUDE ZALVGRID_PG_STATUS_0100O01.
      INCLUDE ZALVGRID_PG_LOGOSUBF01.
      INCLUDE ZALVGRID_PG_SELECT_DATAF01.
    INCLUDE ZALVGRID_PG_USER_COMMAND_01I01.
    ***INCLUDE ZALVGRID_PG_STATUS_0100O01 .
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS 'AB'.
    *  SET TITLEBAR 'xxx'.
      IF IDENTITY IS INITIAL.
        CREATE OBJECT IDENTITY
        EXPORTING
          CONTAINER_NAME = 'ALVCONTROL'.
        CREATE OBJECT GRID
        EXPORTING
          I_PARENT = IDENTITY.
        CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
          EXPORTING
             I_STRUCTURE_NAME              = 'ZALVGRID_DISPLAY'
          CHANGING
            IT_OUTTAB                     = ITAB.
        CREATE OBJECT OBJ_CL.
        SET HANDLER OBJ_CL->DC FOR GRID.
        ENDIF.
        IF L_IDENTITY IS INITIAL.
          CREATE OBJECT L_IDENTITY
          EXPORTING
            CONTAINER_NAME = 'LOGO'.
          CREATE OBJECT L_TREE
          EXPORTING
            I_PARENT = L_IDENTITY.
          PERFORM LOGOSUB USING L_LOGO.
          CALL METHOD L_TREE->CREATE_REPORT_HEADER
            EXPORTING
              IT_LIST_COMMENTARY    = L_LIST
              I_LOGO                = L_LOGO.
          ENDIF    .
    ENDMODULE.                 " STATUS_0100  OUTPUT
    ***INCLUDE ZALVGRID_PG_LOGOSUBF01 .
    FORM LOGOSUB  USING    P_L_LOGO.
      P_L_LOGO = 'ERPLOGO'.
    ENDFORM.                    " LOGOSUB
    ***INCLUDE ZALVGRID_PG_SELECT_DATAF01 .
    FORM SELECT_DATA .
      SELECT RBKP~BELNR
             RBKP~BLDAT
             RSEG~BUZEI
             RSEG~MATNR
             INTO TABLE ITAB
             FROM RBKP INNER JOIN RSEG
        ON RBKP~BELNR = RSEG~BELNR
        WHERE RBKP~BELNR IN IRNO
        AND RBKP~GJAHR = P_GJAHR.
    ENDFORM.                    " SELECT_DATA
    ***INCLUDE ZALVGRID_PG_USER_COMMAND_01I01 .
    MODULE USER_COMMAND_0100 INPUT.
      CASE SY-UCOMM.
        WHEN 'EXIT'.
          LEAVE PROGRAM.
        WHEN 'CANCEL'.
           EXIT.
           ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    Warm Regards,
    PavanKumar.G
    Edited by: pavankumar.g on Jan 19, 2012 5:30 AM

  • Top_of_page is not working in ALV hierarchy?

    Hi,
          I have written following code for top_of_page using event but which is not working...This report is developed for interactive report.
    Note: passed the it_events into ALV hierarchy functional module.
    FORM build_event_tab .
       CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
         EXPORTING
           i_list_type = 1
         IMPORTING
           et_events   = it_events[].
       READ TABLE it_events INTO wa_events WITH KEY form = 'TOP_OF_PAGE'.
       IF sy-subrc = 0.
         wa_events-form = 'TOP_OF_PAGE'.
         APPEND wa_events TO it_events.
       ENDIF.
    ENDFORM. "Get_events
    FORM top_of_page USING document TYPE REF TO cl_dd_document.
       DATA: dl_text(255) TYPE c,
             lv_cutime TYPE sy-uzeit,
             lv_cudt(20) TYPE c.
       lv_cudt = sy-datum.
    *--Passing Date----*
       WRITE  lv_cudt TO dl_text.
       CONCATENATE 'Date : ' lv_cudt+6(2) '-'
                             lv_cudt+4(2) '-'
                             lv_cudt+0(4) INTO dl_text.
       CALL METHOD document->add_text
         EXPORTING
           text = dl_text.
       CLEAR : dl_text.
       CALL METHOD document->add_gap
         EXPORTING
           width = 50.
       WRITE 'Company Name' TO dl_text.
       CALL METHOD document->add_text
         EXPORTING
           text         = dl_text
           sap_emphasis = cl_dd_area=>heading
           sap_style    = cl_dd_area=>heading
           sap_color    = cl_dd_area=>list_total_inv.
       CLEAR : dl_text.
       CALL METHOD document->add_gap
         EXPORTING
           width = 150.
       lv_cutime = sy-uzeit.
       CONCATENATE 'Time : ' lv_cutime+0(2) ':'
                             lv_cutime+2(2) ':'
                             lv_cutime+4(2) INTO dl_text.
       CALL METHOD document->add_text
         EXPORTING
           text = dl_text.
       CALL METHOD document->add_gap
         EXPORTING
           width = 60.
       WRITE 'Title' TO dl_text.
       CALL METHOD document->add_text
         EXPORTING
           text         = dl_text
           sap_emphasis = cl_dd_area=>heading
           sap_style    = cl_dd_area=>heading
           sap_color    = cl_dd_area=>list_total_inv.
       CLEAR : dl_text.
       CALL METHOD document->add_gap
         EXPORTING
           width = 50.
    ENDFORM.                    "html_top_of_page
    Thanks
    Shree

    PERFORM build_fieldcat.
      PERFORM build_event_tab.
      PERFORM alv_display.
    *---Build fieldcat
    FORM build_fieldcat.
      wa_fieldcat-tabname = 'IT_VENDOR'.
      wa_fieldcat-fieldname = 'LIFNR'.
      wa_fieldcat-col_pos   = '2'.
      wa_fieldcat-seltext_l = 'SUPPLIER'.
      wa_fieldcat-outputlen = 20.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-tabname = 'IT_VENDOR'.
      wa_fieldcat-fieldname = 'NAME1'.
      wa_fieldcat-col_pos   = '2'.
      wa_fieldcat-seltext_l = 'VENDOR NAME'.
      wa_fieldcat-outputlen = 40.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-tabname = 'IT_FINAL'.
      wa_fieldcat-fieldname = 'WERKS'.
      wa_fieldcat-col_pos   = '1'.
      wa_fieldcat-seltext_l = 'Plant'.
      wa_fieldcat-outputlen = 5.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-tabname = 'IT_FINAL'.
      wa_fieldcat-fieldname = 'AWKEY'.
      wa_fieldcat-col_pos   = '2'.
      wa_fieldcat-seltext_l = ' Document'.
      wa_fieldcat-hotspot = 'X'.
      wa_fieldcat-outputlen = 16.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-tabname = 'IT_FINAL'.
      wa_fieldcat-fieldname = 'BELNR'.
      wa_fieldcat-col_pos   = '3'.
      wa_fieldcat-seltext_l = 'A/c Document'.
      wa_fieldcat-hotspot = 'X'.
      wa_fieldcat-outputlen = 16.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-tabname = 'IT_FINAL'.
      wa_fieldcat-fieldname = 'BUDAT'.
      wa_fieldcat-col_pos   = '4'.
      wa_fieldcat-seltext_l = 'PJ Date'.
      wa_fieldcat-outputlen = 16.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-tabname = 'IT_FINAL'.
      wa_fieldcat-fieldname = 'XBLNR'.
      wa_fieldcat-col_pos   = '5'.
      wa_fieldcat-seltext_l = 'Inv'.
      wa_fieldcat-outputlen = 16.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-tabname = 'IT_FINAL'.
      wa_fieldcat-fieldname = 'BLDAT'.
      wa_fieldcat-col_pos   = '6'.
      wa_fieldcat-seltext_l = 'PJ Date'.
      wa_fieldcat-outputlen = 16.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-tabname = 'IT_FINAL'.
      wa_fieldcat-fieldname = 'DMBTR'.
      wa_fieldcat-col_pos   = '7'.
      wa_fieldcat-seltext_l = 'Bill.Amount'.
      wa_fieldcat-outputlen = 19.
      wa_fieldcat-do_sum   = 'X'.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
      wa_fieldcat-tabname = 'IT_FINAL'.
      wa_fieldcat-fieldname = 'HKONT'.
      wa_fieldcat-col_pos   = '8'.
      wa_fieldcat-seltext_l = 'Cost Ctr'.
      wa_fieldcat-outputlen = 16.
      APPEND wa_fieldcat TO it_fieldcat.
      CLEAR wa_fieldcat.
    ENDFORM.                    "Build_fieldcat
    *----ALV Display-----*
    FORM alv_display.
      key-header01 = 'LIFNR'.
      key-item01   = 'LIFNR'.
      DELETE ADJACENT DUPLICATES FROM it_vendor.
      DELETE ADJACENT DUPLICATES FROM it_final.
      CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        EXPORTING
          i_callback_program       = sy-repid
          i_callback_user_command  = 'USER_COMMAND'
          i_callback_pf_status_set = 'PFSTATUS'
          it_fieldcat              = it_fieldcat[]
          i_tabname_header         = 'IT_VENDOR'
          i_tabname_item           = 'IT_FINAL'
          it_events                = it_events[]
          is_keyinfo               = key
        TABLES
          t_outtab_header          = it_vendor[]
          t_outtab_item            = it_final[].
    ENDFORM.                    "alv_display
    *----interactive method--
    FORM user_command USING r_ucomm TYPE sy-ucomm
                            rs_selfield TYPE slis_selfield.
      CASE r_ucomm.
        WHEN '&IC1'.
          READ TABLE it_final INTO wa_final INDEX rs_selfield-tabindex.
          IF sy-subrc = 0.
            IF rs_selfield-fieldname = 'BELNR'.
              SET PARAMETER ID 'BLN' FIELD wa_final-belnr.
              SET PARAMETER ID 'BUK' FIELD pa_bukrs.
              SET PARAMETER ID 'GJA' FIELD pa_gjahr.
              CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
            ELSEIF rs_selfield-fieldname = 'AWKEY'.
              SET PARAMETER ID 'RBN' FIELD wa_final-awkey.
              SET PARAMETER ID 'GJR' FIELD pa_gjahr.
              CALL TRANSACTION 'MIR4' AND SKIP FIRST SCREEN.
            ELSEIF rs_selfield-fieldname = 'LFBNR'.
              SET PARAMETER ID 'BLN' FIELD it_bsak-lfbnr.
              SET PARAMETER ID 'BUK' FIELD pa_bukrs.
              SET PARAMETER ID 'GJA' FIELD pa_gjahr.
              CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
            ELSEIF rs_selfield-fieldname = 'EBELN'.
              SELECT SINGLE
                     ebeln
                     INTO wk_ebeln
                     FROM ekko
                     WHERE ebeln = it_bsak-ebeln
                     AND bstyp = 'F'.
              IF sy-subrc EQ 0.
                SET PARAMETER ID 'BES' FIELD it_bsak-ebeln.
                CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
              ELSE.
                SET PARAMETER ID 'VRT' FIELD it_bsak-ebeln.
                CALL TRANSACTION 'ME33' AND SKIP FIRST SCREEN.
              ENDIF.
            ENDIF.
          ENDIF.
      ENDCASE.
    ENDFORM.                    "user_command
    FORM pfstatus USING ut_extab TYPE slis_t_extab.
      SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'.
    ENDFORM.                    "pfstatus
    *---Authorization check---
    FORM bukrs_check.
      SELECT SINGLE
             butxt "Name of the Company Code / Company
             ort01 "City
             INTO (wk_company, wk_city) FROM t001
             WHERE  bukrs = pa_bukrs.
      IF sy-subrc <> 0.
        MESSAGE 'create your own message' TYPE 'I'.
      ENDIF.
    ENDFORM.                    " BUKRS_CHECK
    FORM build_event_tab.
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        EXPORTING
          i_list_type = 0
        IMPORTING
          et_events   = it_events[].
      READ TABLE it_events INTO wa_events
         WITH KEY name = 'SLIS_EV_TOP_OF_PAGE'.
      IF sy-subrc = 0.
        wa_events-form = 'TOP_OF_PAGE'.
        MODIFY it_events FROM wa_events INDEX sy-tabix.
      ENDIF.
      READ TABLE it_events INTO wa_events WITH KEY name =
                    'SLIS_EV_END_OF_PAGE'.
      IF sy-subrc = 0.
        wa_events-form = 'END_OF_PAGE'.
        MODIFY it_events FROM wa_events INDEX sy-tabix.
      ENDIF.
    ENDFORM. "Get_events
    FORM end_of_page.
      DATA: it_header TYPE slis_t_listheader,
            wa_header TYPE slis_listheader.
      wa_header-typ = 'S'.
      wa_header-key = 'MATERIAL'.
    *  wa_line-info = p1.
      APPEND wa_header TO it_header.
      CLEAR wa_header.
    *  READ TABLE it_maktx WITH KEY matnr = p1.
      wa_header-typ = 'S'.
      wa_header-key = 'DESCRIPTION'.
    *  wa_line-info = it_maktx-maktx.
      APPEND  wa_header TO it_header.
      CLEAR wa_header.
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
         EXPORTING
    *      i_logo             = 'ENJOYSAP_LOGO'
           it_list_commentary = it_header.
    ENDFORM.                    "END_OF_PAGE
    FORM top_of_page USING document TYPE REF TO cl_dd_document.
      DATA: dl_text(255) TYPE c,
            lv_cutime TYPE sy-uzeit,
            lv_cudt(20) TYPE c.
      lv_cudt = sy-datum.
    *--Passing Date----*
      WRITE  lv_cudt TO dl_text.
      CONCATENATE 'Date : ' lv_cudt+6(2) '-'
                            lv_cudt+4(2) '-'
                            lv_cudt+0(4) INTO dl_text.
      CALL METHOD document->add_text
        EXPORTING
          text = dl_text.
      CLEAR : dl_text.
      CALL METHOD document->add_gap
        EXPORTING
          width = 50.
      WRITE 'INCAP CON MFG SER (P) LTD' TO dl_text.
      CALL METHOD document->add_text
        EXPORTING
          text         = dl_text
          sap_emphasis = cl_dd_area=>heading
          sap_style    = cl_dd_area=>heading
          sap_color    = cl_dd_area=>list_total_inv.
      CLEAR : dl_text.
      CALL METHOD document->add_gap
        EXPORTING
          width = 150.
      lv_cutime = sy-uzeit.
      CONCATENATE 'Time : ' lv_cutime+0(2) ':'
                            lv_cutime+2(2) ':'
                            lv_cutime+4(2) INTO dl_text.
      CALL METHOD document->add_text
        EXPORTING
          text = dl_text.
      CALL METHOD document->add_gap
        EXPORTING
          width = 60.
      WRITE 'Purchase Journal' TO dl_text.
      CALL METHOD document->add_text
        EXPORTING
          text         = dl_text
          sap_emphasis = cl_dd_area=>heading
          sap_style    = cl_dd_area=>heading
          sap_color    = cl_dd_area=>list_total_inv.
      CLEAR : dl_text.
      CALL METHOD document->add_gap
        EXPORTING
          width = 50.
    ENDFORM.                    "html_top_of_page

  • Why this code is not working for alv

    Dear
    Regards,
    i have implemented the same program for ALV which i have used earlier in the reports. but now it is showing no output:
    *& Report  ZTCT1_ALV2                                                  *
    REPORT  ztct1_alv2                              .
    CLASS lcl_event_receiver DEFINITION DEFERRED.
    * INCLUDING TABLES.
    TABLES: vbrk,
            vbrp,
            kna1,
            t001w,
            makt.
    * DECLARATION OF INTERNAL TABLES.
    DATA: BEGIN OF itab OCCURS 0,  "Including the fields of VBRK and VBRP
            kunag LIKE vbrk-kunag, "Customer Code
            name1 LIKE kna1-name1, "Customer Name
            vbeln LIKE vbrk-vbeln, "Invoice #
            fkdat LIKE vbrk-fkdat, "Invoice Date
            werks LIKE vbrp-werks, "Plant
            name2 LIKE t001w-name1,"Plant Description
            matnr LIKE vbrp-matnr, "Material #
            maktx LIKE makt-maktx, "Material Description
            meins LIKE vbrp-meins, "Unit of Measure
            fklmg LIKE vbrp-fklmg, "Quantity
            netwr LIKE vbrp-netwr, "Amount
          END OF itab,
          BEGIN OF itnm OCCURS 0,  "Including the fields of VBRK and KNA1
            kunag LIKE vbrk-kunag, "Customer Code
            name1 LIKE kna1-name1, "Customer Name
          END OF itnm,
          BEGIN OF itpt OCCURS 0,  "Including the fields of VBRP and T001W
            werks LIKE vbrp-werks, "Plant
            name1 LIKE t001w-name1,"Plant Description
          END OF itpt,
          BEGIN OF itmt OCCURS 0,  "Including the fields of VBRP and MAKT
            matnr LIKE vbrp-matnr, "Material #
            maktx LIKE makt-maktx, "Material description
          END OF itmt,
          BEGIN OF itsm OCCURS 0,
            kunag LIKE kna1-kunnr,
            name1 LIKE kna1-name1,
            fklmg LIKE vbrp-fklmg,
            netwr LIKE vbrp-netwr,
          END OF itsm,
          ok_code            LIKE sy-ucomm,
          save_ok            LIKE sy-ucomm,
          g_max              TYPE i VALUE 100,
          g_repid            LIKE sy-repid,
          gs_layout          TYPE lvc_s_layo,
          g_container        TYPE scrfname VALUE 'CUST_CONT',
          grid1              TYPE REF TO cl_gui_alv_grid,
          g_custom_container TYPE REF TO cl_gui_custom_container,
          grid2              TYPE REF TO cl_gui_alv_grid,
          gt_sort            TYPE lvc_t_sort,
          gt_fieldcatalog    TYPE lvc_t_fcat,
          w_tot_qty          LIKE vbrp-fklmg,
          w_tot_amt          LIKE vbrp-netwr,
    * Reference to Dialogbox Container.
          dialogbox_container TYPE REF TO cl_gui_dialogbox_container,
    * Reference to local class that handles events of GRID1 and
    * DIALOGBOX_CONTAINER
          event_receiver TYPE REF TO lcl_event_receiver.
    * SELECT-OPTIONS
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN BEGIN OF BLOCK input WITH FRAME TITLE text-000.
    SELECT-OPTIONS: s_werks FOR vbrp-werks, "Plant
                    s_kunag FOR vbrk-kunag, "Customer
                    s_matnr FOR vbrp-matnr, "Material Number
                    s_fkdat FOR vbrk-fkdat. "Invoice Date
    SELECTION-SCREEN END OF BLOCK input .
    SELECTION-SCREEN SKIP 1.
    * START-OF-SELECTION
    START-OF-SELECTION.
      SET SCREEN 100.
    * CLEARING INTERNAL TABLES.
      CLEAR: itab,
             itnm,
             itmt,
             itpt.
    * QUERY FOR JOINING TABLES VBRK AND VBRP
      SELECT vbrk~kunag
             vbrk~vbeln
             vbrk~fkdat
             vbrp~werks
             vbrp~matnr
             vbrp~meins
             vbrp~fklmg
             vbrp~netwr
             INTO CORRESPONDING FIELDS OF TABLE itab
             FROM vbrk
             INNER JOIN vbrp
                 ON vbrk~vbeln = vbrp~vbeln
             WHERE vbrk~kunag IN s_kunag
               AND vbrk~fkdat IN s_fkdat
               AND vbrp~matnr IN s_matnr
               AND vbrp~werks IN s_werks.
    * QUERY FOR JOINING TABLES VBRK AND KNA1
      SELECT kna1~kunnr AS kunag
             kna1~name1
             INTO TABLE itnm
             FROM kna1
             WHERE kna1~kunnr IN s_kunag.
    * QUERY FOR JOINING TABLES VBRP AND T001W
      SELECT t001w~werks
             t001w~name1
             INTO TABLE itpt
             FROM t001w
             WHERE t001w~werks IN s_werks.
    * QUERY FOR JOINING TABLES VBRP AND MAKT
      SELECT makt~matnr
             makt~maktx
             INTO TABLE itmt
             FROM makt
             WHERE makt~matnr IN s_matnr.
    * SORTING INTERNAL TABLES.
      SORT itab BY kunag.
    *    LOOP AT itab.
    *      CLEAR: itmt, itnm, itpt.
    *      READ TABLE itnm WITH KEY kunag = itab-kunag.
    *      READ TABLE itmt WITH KEY matnr = itab-matnr.
    *      READ TABLE itpt WITH KEY werks = itab-werks.
    *      itab-name1 = itnm-name1.
    *      itab-maktx = itmt-maktx.
    *      itab-name2 = itpt-name1.
    *      MODIFY itab.
    *    ENDLOOP.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'KUNAG' 'C' 'Customer Code'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'NAME1' 'C' 'Customer Name'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'VBELN' 'C' 'Invoice #'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'FKDAT' 'DATS' 'Invoice Date'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'WERKS' 'C' 'Plant'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'NAME2' 'C' 'Plant Description'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'MATNR' 'C' 'Material #'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'MAKTX' 'C' 'Material Description'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'MEINS' 'C' 'UoM'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'FKLMG' 'QUAN' 'Quantity'.
    *    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'NETWR' 'CURR' 'Amount'.
        LOOP AT itab.
          CLEAR itsm.
          READ TABLE itnm WITH KEY kunag = itab-kunag.
          itsm-kunag = itab-kunag.
          itsm-name1 = itnm-name1.
          itsm-fklmg = itab-fklmg.
          itsm-netwr = itab-netwr.
          COLLECT itsm.
        ENDLOOP.
        PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'KUNAG' 'C' 'Customer Code'.
        PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'NAME1' 'C' 'Customer Name'.
        PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'FKLMG' 'QUAN' 'Quantity'.
        PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'NETWR' 'CURR' 'Amount'.
      PERFORM sort_build USING gt_sort[].
      PERFORM layout_init USING gs_layout.
    *   LOCAL CLASSES: Definition
    CLASS lcl_event_receiver DEFINITION.
      PUBLIC SECTION.
        METHODS:
        handle_double_click
            FOR EVENT double_click OF cl_gui_alv_grid
                IMPORTING e_row e_column,
        handle_close
            FOR EVENT close OF cl_gui_dialogbox_container
                IMPORTING sender.
      PRIVATE SECTION.
        DATA: dialogbox_status TYPE c.  "'X': does exist, SPACE: does not ex.
    ENDCLASS.                    "lcl_event_receiver DEFINITION
    *   LOCAL CLASSES: Implementation
    CLASS lcl_event_receiver IMPLEMENTATION.
    *   §3.At doubleclick(1): The event DOUBLE_CLICK provides
    *      parameters of the clicked row and column.
    *      Use row parameter to select a line of the
    *      corresponding internal table.
      METHOD handle_double_click.
        DATA: ls_sm LIKE LINE OF itsm,
              wa_itab LIKE ITAB.
    *   read selected row from internal table gt_sflight
        READ TABLE itsm INDEX e_row-index INTO ls_sm.
    *   §4.At Doubleclick(2): Select booking data
    *    READ TABLE ITAB WITH KEY KUNAG = LS_SM-KUNAG.    .
        READ TABLE ITAB INTO WA_ITAB WITH KEY KUNAG = LS_SM-KUNAG.
    *   §5.At doubleclick(3): Create dialogbox to show detail list
    *     (if not already existent)
        IF dialogbox_status IS INITIAL.
          dialogbox_status = 'X'.
          PERFORM create_detail_list.
        ELSE.
          CALL METHOD dialogbox_container->set_visible
            EXPORTING
              visible = 'X'.
          CALL METHOD grid2->refresh_table_display.
        ENDIF.
      ENDMETHOD.                    "handle_double_click
      METHOD handle_close.
    *   §6.Handle the CLOSE-button of the dialogbox
    *   set dialogbox invisible
    *   (the dialogbox is destroyed outomatically when the user
    *   switches to another dynpro).
        CALL METHOD sender->set_visible
          EXPORTING
            visible = space.
    *   In this example closing the dialogbox leads
    *   to make it invisible. It is also conceivable to destroy it
    *   and recreate it if the user doubleclicks a line again.
    *   Displaying a great amount of data has a greater impact on performance.
      ENDMETHOD.                    "handle_close
    ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
    *   lcl_event_receiver (Implementation)
    *=====================================================================
    *       FORM EXIT_PROGRAM                                             *
    FORM exit_program.
      CALL METHOD g_custom_container->free.
      CALL METHOD cl_gui_cfw=>flush.
      IF sy-subrc NE 0.
    * add your handling, for example
        CALL FUNCTION 'POPUP_TO_INFORM'
          EXPORTING
            titel = g_repid
            txt2  = sy-subrc
            txt1  = 'Error in FLush'(500).
      ENDIF.
      LEAVE TO SCREEN 0.
    ENDFORM.                    "exit_program
    *  MODULE PBO_ALV OUTPUT
    MODULE pbo_alv OUTPUT.
      SET PF-STATUS 'MAIN'.
      SET TITLEBAR 'MAIN100'.
      g_repid = sy-repid.
      IF g_custom_container IS INITIAL.
        READ TABLE itsm.
        CREATE OBJECT g_custom_container
          EXPORTING
            container_name = g_container
          EXCEPTIONS
            cntl_error = 1
            cntl_system_error = 2
            create_error = 3
            lifetime_error = 4
            lifetime_dynpro_dynpro_link = 5.
        IF sy-subrc NE 0.
          CALL FUNCTION 'POPUP_TO_INFORM'
            EXPORTING
              titel = g_repid
              txt2  = sy-subrc
              txt1  = 'The control could not be created'(510).
        ENDIF.
        CREATE OBJECT grid1
          EXPORTING
            i_parent = g_custom_container.
        gs_layout-grid_title = 'Invoice Summary'.
        CALL METHOD grid1->set_table_for_first_display
          EXPORTING
            is_layout       = gs_layout
          CHANGING
            it_outtab       = itsm[]
            it_fieldcatalog = gt_fieldcatalog
            it_sort         = gt_sort.
        CREATE OBJECT event_receiver.
        SET HANDLER event_receiver->handle_double_click FOR grid1.
      ENDIF.
      CALL METHOD cl_gui_control=>set_focus
        EXPORTING
          control = grid1.
    ENDMODULE.                    "PBO_ALV OUTPUT
    *  MODULE PAI_ALV INPUT
    MODULE pai_alv INPUT.
      CALL METHOD cl_gui_cfw=>dispatch.
      CASE sy-ucomm.
        WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
          LEAVE TO SCREEN 0.
      ENDCASE.
    ENDMODULE.                    "PAI_ALV INPUT
    *&      Form  fieldcatalog_init
    *       text
    *      -->LT_FIELDCATtext
    *      -->VALUE(FIELDtextE)
    *      -->VALUE(FIELDtextE)
    *      -->VALUE(FIELDtextT)
    FORM fieldcatalog_init USING lt_fieldcatalog TYPE lvc_t_fcat
                           value(field_name) value(field_type) value(field_text).
      DATA: ls_fieldcatalog TYPE lvc_s_fcat.
      CLEAR ls_fieldcatalog.
      ls_fieldcatalog-fieldname = field_name.
      ls_fieldcatalog-datatype  = field_type.
      ls_fieldcatalog-reptext   = field_text.
      ls_fieldcatalog-coltext  =  field_text.
      ls_fieldcatalog-seltext  =  field_text.
      ls_fieldcatalog-tooltip  =  field_text.
      APPEND ls_fieldcatalog TO lt_fieldcatalog.
    ENDFORM.                    "fieldcatalog_init
    *&      Form  sort_build
    *       text
    *      -->LT_SORT    text
    FORM sort_build USING lt_sort TYPE lvc_t_sort.
      DATA: ls_sort TYPE lvc_s_sort.
      ls_sort-fieldname = 'KUNAG'.    "Fieldname on which to sort
      ls_sort-up        = 'X'.        "Sort Ascending
      APPEND ls_sort TO lt_sort.
      ls_sort-fieldname = 'NAME1'.    "Fieldname on which to sort
      ls_sort-up        = 'X'.        "Sort Ascending
      APPEND ls_sort TO lt_sort.
    ENDFORM.                    "sort_build
    *&      Form  layout_init
    *       text
    *      -->LS_LAYOUT  text
    FORM layout_init USING ls_layout TYPE lvc_s_layo.
      ls_layout-zebra      = 'X'.
      ls_layout-grid_title = 'Customer Details'.
      ls_layout-sel_mode   = 'A'.
      ls_layout-cwidth_opt = 'X'.
    ENDFORM.                    "layout_init
    *&      Form  create_detail_list
    *         text
    *    -->  p1        text
    *    <--  p2        text
    FORM create_detail_list.
    *   create dialogbox container as dynpro-instance
    *   When the user switches to another screen, it is
    *   destroyed by lifetime mangagement of CFW
      CREATE OBJECT dialogbox_container
          EXPORTING
            top = 150
            left = 150
            lifetime = cntl_lifetime_dynpro
            caption = 'INVOICE DETAILS'(200)
            width = 800
            height = 200.
      CREATE OBJECT grid2
          EXPORTING i_parent = dialogbox_container.
    *   Register ABAP OO event 'CLOSE'. It is not necessary to register this
    *   event at the frontend (this is done during creation).
      SET HANDLER event_receiver->handle_close FOR dialogbox_container.
    *   display data
      gs_layout-grid_title = 'Invoice Details'(100).
      CALL METHOD grid2->set_table_for_first_display
        EXPORTING
          i_structure_name = 'itab'
          is_layout        = gs_layout
        CHANGING
          it_outtab        = itab[]
          it_fieldcatalog  = gt_fieldcatalog
          it_sort          = gt_sort.
      CALL METHOD cl_gui_control=>set_focus
        EXPORTING
          control = grid2.
    ENDFORM.                    " create_detail_list[code][/
    code]

    Hi,
    I also copied and pasted the same code check once again by copying this code and create screens by double clicking on 100.
    CLASS lcl_event_receiver DEFINITION DEFERRED.
    * INCLUDING TABLES.
    TABLES: vbrk,
            vbrp,
            kna1,
            t001w,
            makt.
    * DECLARATION OF INTERNAL TABLES.
    DATA: BEGIN OF itab OCCURS 0,  "Including the fields of VBRK and VBRP
            kunag LIKE vbrk-kunag, "Customer Code
            name1 LIKE kna1-name1, "Customer Name
            vbeln LIKE vbrk-vbeln, "Invoice #
            fkdat LIKE vbrk-fkdat, "Invoice Date
            werks LIKE vbrp-werks, "Plant
            name2 LIKE t001w-name1,"Plant Description
            matnr LIKE vbrp-matnr, "Material #
            maktx LIKE makt-maktx, "Material Description
            meins LIKE vbrp-meins, "Unit of Measure
            fklmg LIKE vbrp-fklmg, "Quantity
            netwr LIKE vbrp-netwr, "Amount
          END OF itab,
          BEGIN OF itnm OCCURS 0,  "Including the fields of VBRK and KNA1
            kunag LIKE vbrk-kunag, "Customer Code
            name1 LIKE kna1-name1, "Customer Name
          END OF itnm,
          BEGIN OF itpt OCCURS 0,  "Including the fields of VBRP and T001W
            werks LIKE vbrp-werks, "Plant
            name1 LIKE t001w-name1,"Plant Description
          END OF itpt,
          BEGIN OF itmt OCCURS 0,  "Including the fields of VBRP and MAKT
            matnr LIKE vbrp-matnr, "Material #
            maktx LIKE makt-maktx, "Material description
          END OF itmt,
          BEGIN OF itsm OCCURS 0,
            kunag LIKE kna1-kunnr,
            name1 LIKE kna1-name1,
            fklmg LIKE vbrp-fklmg,
            netwr LIKE vbrp-netwr,
          END OF itsm,
          ok_code            LIKE sy-ucomm,
          save_ok            LIKE sy-ucomm,
          g_max              TYPE i VALUE 100,
          g_repid            LIKE sy-repid,
          gs_layout          TYPE lvc_s_layo,
          g_container        TYPE scrfname VALUE 'CUST_CONT',
          grid1              TYPE REF TO cl_gui_alv_grid,
          g_custom_container TYPE REF TO cl_gui_custom_container,
          grid2              TYPE REF TO cl_gui_alv_grid,
          gt_sort            TYPE lvc_t_sort,
          gt_fieldcatalog    TYPE lvc_t_fcat,
          w_tot_qty          LIKE vbrp-fklmg,
          w_tot_amt          LIKE vbrp-netwr,
    * Reference to Dialogbox Container.
          dialogbox_container TYPE REF TO cl_gui_dialogbox_container,
    * Reference to local class that handles events of GRID1 and
    * DIALOGBOX_CONTAINER
          event_receiver TYPE REF TO lcl_event_receiver.
    * SELECT-OPTIONS
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN BEGIN OF BLOCK input WITH FRAME TITLE text-000.
    SELECT-OPTIONS: s_werks FOR vbrp-werks, "Plant
                    s_kunag FOR vbrk-kunag, "Customer
                    s_matnr FOR vbrp-matnr, "Material Number
                    s_fkdat FOR vbrk-fkdat. "Invoice Date
    SELECTION-SCREEN END OF BLOCK input .
    SELECTION-SCREEN SKIP 1.
    * START-OF-SELECTION
    START-OF-SELECTION.
    SET SCREEN 100.
    * CLEARING INTERNAL TABLES.
      CLEAR: itab,
             itnm,
             itmt,
             itpt.
    * QUERY FOR JOINING TABLES VBRK AND VBRP
      SELECT vbrk~kunag
             vbrk~vbeln
             vbrk~fkdat
             vbrp~werks
             vbrp~matnr
             vbrp~meins
             vbrp~fklmg
             vbrp~netwr
             INTO CORRESPONDING FIELDS OF TABLE itab
             FROM vbrk
             INNER JOIN vbrp
                 ON vbrk~vbeln = vbrp~vbeln
             WHERE vbrk~kunag IN s_kunag
               AND vbrk~fkdat IN s_fkdat
               AND vbrp~matnr IN s_matnr
               AND vbrp~werks IN s_werks.
    * QUERY FOR JOINING TABLES VBRK AND KNA1
      SELECT kna1~kunnr AS kunag
             kna1~name1
             INTO TABLE itnm
             FROM kna1
             WHERE kna1~kunnr IN s_kunag.
    * QUERY FOR JOINING TABLES VBRP AND T001W
      SELECT t001w~werks
             t001w~name1
             INTO TABLE itpt
             FROM t001w
             WHERE t001w~werks IN s_werks.
    * QUERY FOR JOINING TABLES VBRP AND MAKT
      SELECT makt~matnr
             makt~maktx
             INTO TABLE itmt
             FROM makt
             WHERE makt~matnr IN s_matnr.
    * SORTING INTERNAL TABLES.
      SORT itab BY kunag.
        LOOP AT itab.
          CLEAR itsm.
          READ TABLE itnm WITH KEY kunag = itab-kunag.
          itsm-kunag = itab-kunag.
          itsm-name1 = itnm-name1.
          itsm-fklmg = itab-fklmg.
          itsm-netwr = itab-netwr.
          COLLECT itsm.
        ENDLOOP.
    * END-OF-SELECTION.
    * If not itsm[] is initial.
    *    CALL SCREEN 100.
    * endif.
    *   LOCAL CLASSES: Definition
    CLASS lcl_event_receiver DEFINITION.
      PUBLIC SECTION.
        METHODS:
        handle_double_click
            FOR EVENT double_click OF cl_gui_alv_grid
                IMPORTING e_row e_column,
        handle_close
            FOR EVENT close OF cl_gui_dialogbox_container
                IMPORTING sender.
      PRIVATE SECTION.
        DATA: dialogbox_status TYPE c.  "'X': does exist, SPACE: does not ex
    ENDCLASS.                    "lcl_event_receiver DEFINITION
    *   LOCAL CLASSES: Implementation
    CLASS lcl_event_receiver IMPLEMENTATION.
    *   §3.At doubleclick(1): The event DOUBLE_CLICK provides
    *      parameters of the clicked row and column.
    *      Use row parameter to select a line of the
    *      corresponding internal table.
      METHOD handle_double_click.
        DATA: ls_sm LIKE LINE OF itsm,
              wa_itab LIKE ITAB.
    *   read selected row from internal table gt_sflight
        READ TABLE itsm INDEX e_row-index INTO ls_sm.
    *   §4.At Doubleclick(2): Select booking data
    *    READ TABLE ITAB WITH KEY KUNAG = LS_SM-KUNAG.    .
        READ TABLE ITAB INTO WA_ITAB WITH KEY KUNAG = LS_SM-KUNAG.
    *   §5.At doubleclick(3): Create dialogbox to show detail list
    *     (if not already existent)
        IF dialogbox_status IS INITIAL.
          dialogbox_status = 'X'.
          PERFORM create_detail_list.
        ELSE.
          CALL METHOD dialogbox_container->set_visible
            EXPORTING
              visible = 'X'.
          CALL METHOD grid2->refresh_table_display.
        ENDIF.
      ENDMETHOD.                    "handle_double_click
      METHOD handle_close.
    *   §6.Handle the CLOSE-button of the dialogbox
    *   set dialogbox invisible
    *   (the dialogbox is destroyed outomatically when the user
    *   switches to another dynpro).
        CALL METHOD sender->set_visible
          EXPORTING
            visible = space.
    *   In this example closing the dialogbox leads
    *   to make it invisible. It is also conceivable to destroy it
    *   and recreate it if the user doubleclicks a line again.
    *   Displaying a great amount of data has a greater impact on
    *performance.
      ENDMETHOD.                    "handle_close
    ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION
    *   lcl_event_receiver (Implementation)
    *=====================================================================
    *       FORM EXIT_PROGRAM                                             *
    FORM exit_program.
      CALL METHOD g_custom_container->free.
      CALL METHOD cl_gui_cfw=>flush.
      IF sy-subrc NE 0.
    * add your handling, for example
        CALL FUNCTION 'POPUP_TO_INFORM'
          EXPORTING
            titel = g_repid
            txt2  = sy-subrc
            txt1  = 'Error in FLush'(500).
      ENDIF.
      LEAVE TO SCREEN 0.
    ENDFORM.                    "exit_program
    *&      Module  STATUS_0100  OUTPUT
    *       text
    module STATUS_0100 output.
      SET PF-STATUS 'MAIN'.
      SET TITLEBAR 'MAIN100'.
      g_repid = sy-repid.
      IF g_custom_container IS INITIAL.
        READ TABLE itsm.
        CREATE OBJECT g_custom_container
          EXPORTING
            container_name = g_container
          EXCEPTIONS
            cntl_error = 1
            cntl_system_error = 2
            create_error = 3
            lifetime_error = 4
            lifetime_dynpro_dynpro_link = 5.
        IF sy-subrc NE 0.
          CALL FUNCTION 'POPUP_TO_INFORM'
            EXPORTING
              titel = g_repid
              txt2  = sy-subrc
              txt1  = 'The control could not be created'(510).
        ENDIF.
        CREATE OBJECT grid1
          EXPORTING
            i_parent = g_custom_container.
        gs_layout-grid_title = 'Invoice Summary'.
    PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'KUNAG' 'C'
    'Customer Code'.
        PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'NAME1' 'C'
    'Customer Name'.
        PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'FKLMG' 'QUAN'
    'Quantity'.
        PERFORM fieldcatalog_init USING gt_fieldcatalog[] 'NETWR' 'CURR'
    'Amount'.
      PERFORM sort_build USING gt_sort[].
      PERFORM layout_init USING gs_layout.
        CALL METHOD grid1->set_table_for_first_display
          EXPORTING
            is_layout       = gs_layout
          CHANGING
            it_outtab       = itsm[]
            it_fieldcatalog = gt_fieldcatalog
            it_sort         = gt_sort.
        CREATE OBJECT event_receiver.
        SET HANDLER event_receiver->handle_double_click FOR grid1.
      ENDIF.
      CALL METHOD cl_gui_control=>set_focus
        EXPORTING
          control = grid1.
    endmodule.                 " STATUS_0100  OUTPUT
    *  MODULE PAI_ALV INPUT
    MODULE USER_COMMAND_0100.
    CALL METHOD cl_gui_cfw=>dispatch.
      CASE sy-ucomm.
        WHEN 'BACK' OR 'EXIT' OR 'CANC'.
          LEAVE TO SCREEN 0.
      ENDCASE.
    ENDMODULE.                    "PAI_ALV INPUT
    *&      Form  fieldcatalog_init
    *       text
    *      -->LT_FIELDCATtext
    *      -->VALUE(FIELDtextE)
    *      -->VALUE(FIELDtextE)
    *      -->VALUE(FIELDtextT)
    FORM fieldcatalog_init USING lt_fieldcatalog TYPE lvc_t_fcat
                           value(field_name) value(field_type)
    value(field_text).
      DATA: ls_fieldcatalog TYPE lvc_s_fcat.
      CLEAR ls_fieldcatalog.
      ls_fieldcatalog-fieldname = field_name.
      ls_fieldcatalog-datatype  = field_type.
      ls_fieldcatalog-reptext   = field_text.
      ls_fieldcatalog-coltext  =  field_text.
      ls_fieldcatalog-seltext  =  field_text.
      ls_fieldcatalog-tooltip  =  field_text.
      APPEND ls_fieldcatalog TO lt_fieldcatalog.
    ENDFORM.                    "fieldcatalog_init
    *&      Form  sort_build
    *       text
    *      -->LT_SORT    text
    FORM sort_build USING lt_sort TYPE lvc_t_sort.
      DATA: ls_sort TYPE lvc_s_sort.
      ls_sort-fieldname = 'KUNAG'.    "Fieldname on which to sort
      ls_sort-up        = 'X'.        "Sort Ascending
      APPEND ls_sort TO lt_sort.
      ls_sort-fieldname = 'NAME1'.    "Fieldname on which to sort
      ls_sort-up        = 'X'.        "Sort Ascending
      APPEND ls_sort TO lt_sort.
    ENDFORM.                    "sort_build
    *&      Form  layout_init
    *       text
    *      -->LS_LAYOUT  text
    FORM layout_init USING ls_layout TYPE lvc_s_layo.
      ls_layout-zebra      = 'X'.
      ls_layout-grid_title = 'Customer Details'.
      ls_layout-sel_mode   = 'A'.
      ls_layout-cwidth_opt = 'X'.
    ENDFORM.                    "layout_init
    *&      Form  create_detail_list
    *         text
    *    -->  p1        text
    *    <--  p2        text
    FORM create_detail_list.
    *   create dialogbox container as dynpro-instance
    *   When the user switches to another screen, it is
    *   destroyed by lifetime mangagement of CFW
      CREATE OBJECT dialogbox_container
          EXPORTING
            top = 150
            left = 150
            lifetime = cntl_lifetime_dynpro
            caption = 'INVOICE DETAILS'(200)
            width = 800
            height = 200.
      CREATE OBJECT grid2
          EXPORTING i_parent = dialogbox_container.
    *   Register ABAP OO event 'CLOSE'. It is not necessary to register this
    *   event at the frontend (this is done during creation).
      SET HANDLER event_receiver->handle_close FOR dialogbox_container.
    *   display data
      gs_layout-grid_title = 'Invoice Details'(100).
      CALL METHOD grid2->set_table_for_first_display
        EXPORTING
          i_structure_name = 'itab'
          is_layout        = gs_layout
        CHANGING
          it_outtab        = itab[]
          it_fieldcatalog  = gt_fieldcatalog
          it_sort          = gt_sort.
      CALL METHOD cl_gui_control=>set_focus
        EXPORTING
          control = grid2.
    ENDFORM.                    " create_detail_list
    Nothing wrong in the code i am able to see the output with five records and the pop-up screen on double clicking a value.
    Kindly close the thread or revert back

  • Can somebody give some real time questions for alv report

    hi guru
    can somebody give some real time questions for alv report.
    answers also.
    regards
    subhasis.

    hi,
    The ALV is a set of function modules and classes and their methods which are added to program code. Developers can use the functionality of the ALV in creating new reports,  saving time which might otherwise have been spent on report enhancement
    The common features of report are column    alignment, sorting, filtering, subtotals, totals etc. <b>To implement these, a lot of coding and logic is to be put. To avoid that we can use a concept called ABAP List Viewer (ALV).</b>
    Using ALV, we can have three types of reports:
       1. Simple Report
       2. Block Report
       3. Hierarchical Sequential Report
    <b>Reward useful points</b>
    Siva

  • Displaying ALV hierarchy at a certain level

    Hi all,
    I have an ALV report that shows a hierarchy. This ALV hierarchy is created using std class CL_GUI_ALV_TREE.
    The number of hierarchy levels is dynamic and only determined during run time. However I would like to be able to either display all nodes expanded or only the last node unexpanded. In other words I would like to control which hierarhcy level is expanded when the report is first displayed.
    Can anyone suggest a way to do this please?
    Thanks

    If you want to display the sum for a given hierarchy level, you should use CUBESET function.
     e.g.
    =IF(B2="all",CUBESET("mycube","[Location].[Location Hierarchy].[Department].&[DEPT 07]","all"),Cubemember("MyCube","[Location].[Location Hierarchy].[Department].&[DEPT 07].&["&B1&"]"))
    Hope it helps.

  • Column headings are missing in the output for ALV?

    Hi all,
    i have coded a small report in ALV mode. i am getting the data but the column headings are missing.
    iam not getting the column headings in the output. it is coming as blank. Could you all please help me out in this?
    below is the code of my program:
                     Includes                                            *
    *---Standard header and footer routines
    INCLUDE zsrepthd.
    *--- ALV Routines
    INCLUDE zvsdi_alv_routines_ver3.
    *--- Authorization Check
    INCLUDE z_selection_auth_check.
                     Types Declarations                                  *
    tables : ekpo.
                     Types Declarations                                  *
    TYPES: BEGIN OF ty_ekpo,
            EBELN(18) TYPE C,
            EBELP(20) TYPE C,
            MATNR(18) TYPE C,
            WERKS(11) TYPE C,
          END OF ty_ekpo.
    *-Output field name
    TYPES: BEGIN OF ty_output,
            EBELN(18) TYPE C,
            EBELP(20) TYPE C,
            MATNR(18) TYPE C,
            WERKS(11) TYPE C,
          END OF ty_output.
    *-Output field name
    TYPES: BEGIN OF ty_fields,
            fname(60) TYPE c,
           END OF ty_fields.
                     Internal Table Declarations                         *
    DATA:it_ekpo TYPE STANDARD TABLE OF ty_ekpo,
    *--- Alv parameters
        it_out_alvp TYPE typ_alv_form_params, "for alv parameters
    *-Field catalog  for ALV display
        it_fcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
    *-Field names for Excel column headings
    it_ekpo_fields TYPE STANDARD TABLE OF ty_fields WITH HEADER LINE.
    **--To store output for Principial Pegging data
    DATA: BEGIN OF it_output occurs 0,
            EBELN(18) TYPE C,
            EBELP(20) TYPE C,
            MATNR(18) TYPE C,
            WERKS(11) TYPE C,
          END OF it_output.
    **--To store output for 2nd
    DATA: BEGIN OF it_output1 occurs 0,
            text(2000),
           END OF it_output1.
                     Data Declarations                                   *
    data: v_ebeln TYPE ekpo-ebeln,
          v_ebelp TYPE ekpo-ebelp,
          v_matnr TYPE ekpo-matnr,
          v_werks TYPE ekpo-werks.
                     Constants Declarations                              *
    CONSTANTS:
         c_0    TYPE i     VALUE  0,
         c_x    TYPE char1 VALUE  'X',
         c_i    TYPE char1 VALUE  'I',
         c_eq   TYPE char2 VALUE  'EQ',
         c_ekpo  TYPE char4 VALUE 'EKPO',
         c_hyfn  TYPE char1 VALUE '-'.
                     Work Area Declarations                              *
    DATA: x_output_ekpo type ty_output,
          x_ekpo type ty_ekpo.
                     Selection Screen                                    *
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-f01.
    SELECT-OPTIONS:
          s_ebeln FOR v_ebeln OBLIGATORY,
          s_ebelp FOR v_ebelp,
          s_matnr FOR v_matnr,
          s_werks FOR v_werks.
    SELECTION-SCREEN END OF BLOCK b1.
                     At Selection Screen                                 *
    AT SELECTION-SCREEN.
                     Start-of-Selection                                  *
    START-OF-SELECTION.
    *--- Check Authorizations for Selection-screen
      PERFORM  z_selection_auth_check.
    *--- Fetch Purchasing Document Item data
      PERFORM  fetch_status_pp.
                     End-of-Selection                                    *
    END-OF-SELECTION.
    **-- Download data to final internal table.
      PERFORM data_output.
      IF NOT it_output[] IS INITIAL.
    *--- Fill the structure for calling the ALV form
        PERFORM initialize_alv_params.
    **-- Display ALV Report
        PERFORM setup_and_display_alv_ver2
           USING
         it_out_alvp        "Parameter structure
         it_output[]        "Internal Data table(header table)
         it_output[].       "Dummy table for Hierarchical ALV!!(item table)
        ENDIF.
      IF it_output[] IS INITIAL.
        MESSAGE i999(zi) WITH 'No data found for selection'(i02).
      ENDIF.
    *&      Form  FETCH_STATUS_PP
    Get data from ekpo table
    FORM FETCH_STATUS_PP .
    *-Fetch PP Data from ekpo table
      REFRESH it_ekpo.
      SELECT EBELN
             EBELP
             MATNR
             WERKS
             FROM ekpo
             INTO TABLE it_ekpo
             WHERE ebeln IN s_ebeln
               AND ebelp IN s_ebelp.
      IF sy-subrc = c_0.
        SORT it_ekpo BY ebeln ebelp.
      ENDIF.
    ENDFORM.                    " FETCH_STATUS_PP
    *&      Form  f_top_of_page
    *This is to write the top of page
    FORM top_of_page.
      DATA:  lt_list TYPE slis_t_listheader,
             lx_list TYPE slis_listheader.
    *--- Title name
      CLEAR lx_list.
      lx_list-typ  = 'S'.
      lx_list-key  = 'Title name'(t13).
      lx_list-info = sy-title.
      APPEND lx_list TO lt_list.
      IF NOT lt_list IS INITIAL.
        CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
          EXPORTING
            it_list_commentary = lt_list.
      ENDIF.
    ENDFORM.                    "top_of_page
    *&      Form  init_page_head
    Description : This subroutine initializes the fields in table BHDGD  *
                  for printing the report heading.                       *
    FORM init_page_head.
      bhdgd-line1  = 'SLA Status Report'(h04).
      bhdgd-line2  = sy-title.
      bhdgd-lines  = sy-linsz.
      bhdgd-fcpyrt = sy-uline.
      bhdgd-inifl  = '0'.
    ENDFORM.                    "init_page_head
    *&      Form  initialize_alv_params
    Description : Form to initialize ALV Params
    FORM initialize_alv_params.
      CONSTANTS: lc_alv_grid  TYPE char1 VALUE 'G',  "Grid
                 lc_u         TYPE char1 VALUE 'U'.
      MOVE 'IT_OUTPUT' TO   it_out_alvp-tablname.   "final table
      MOVE sy-repid    TO   it_out_alvp-repid.
      MOVE lc_alv_grid TO   it_out_alvp-alvtype.
      MOVE c_x         TO   it_out_alvp-bringdefaultvar.
      MOVE lc_u        TO   it_out_alvp-variantsavetype.
    ENDFORM.                    " initialize_alv_params
          FORM it_out_init_events                                       *
    -->this is form is to modify the events
    FORM it_out_init_events
          CHANGING
           alevnts TYPE slis_t_event.
      FIELD-SYMBOLS <alevnt> TYPE slis_alv_event.
      LOOP AT alevnts ASSIGNING <alevnt>.
        CASE <alevnt>-name.
          WHEN  slis_ev_top_of_page.
            MOVE 'TOP_OF_PAGE'  TO <alevnt>-form.
        ENDCASE.
      ENDLOOP.
    ENDFORM.                    "it_out_init_events
    *&      Form  DATA_OUTPUT
    Download data to final internal table
    FORM DATA_OUTPUT .
      loop at it_ekpo into x_ekpo.
        x_output_ekpo-ebeln = x_ekpo-ebeln.
        x_output_ekpo-ebelp = x_ekpo-ebelp.
        x_output_ekpo-matnr = x_ekpo-matnr.
        x_output_ekpo-werks = x_ekpo-werks.
        append x_output_ekpo to it_output.
      endloop.
    ENDFORM.                    " DATA_OUTPUT
          FORM it_out_alv_fieldcat_before                               *
    -->  PT_FCAT                                                       *
    -->  ALVP                                                          *
    FORM it_out_alv_fieldcat_before  CHANGING
        pt_fcat TYPE slis_t_fieldcat_alv
        alvp TYPE typ_alv_form_params.
      DATA: lx_fcat TYPE slis_fieldcat_alv.
      CLEAR lx_fcat.
      lx_fcat-tabname        = 'IT_OUTPUT'.
      lx_fcat-fieldname      = 'EBELN'.
      lx_fcat-col_pos        = '1'.
      lx_fcat-ddictxt        = 'M'.
      lx_fcat-seltext_l      = 'Purchasing Doc No'(018).
      lx_fcat-seltext_m      = 'Purchasing Doc No'(018).
      lx_fcat-seltext_s      = 'Purchasing Doc No'(018).
      lx_fcat-reptext_ddic   = 'Purchasing Doc No'(018).
      APPEND lx_fcat TO pt_fcat.
      CLEAR lx_fcat.
      lx_fcat-tabname        = 'IT_OUTPUT'.
      lx_fcat-fieldname      = 'EBELP'.
      lx_fcat-col_pos        = '1'.
      lx_fcat-ddictxt        = 'M'.
      lx_fcat-seltext_l      = 'Item No Purchasing Doc'(020).
      lx_fcat-seltext_m      = 'Item No Purchasing Doc'(020).
      lx_fcat-seltext_s      = 'Item No Purchasing Doc'(020).
      lx_fcat-reptext_ddic   = 'Item No Purchasing Doc'(020).
      APPEND lx_fcat TO pt_fcat.
      CLEAR lx_fcat.
      lx_fcat-tabname        = 'IT_OUTPUT'.
      lx_fcat-fieldname      = 'MATNR'.
      lx_fcat-col_pos        = '1'.
      lx_fcat-ddictxt        = 'M'.
      lx_fcat-seltext_l      = 'Material'(010).
      lx_fcat-seltext_m      = 'Material'(010).
      lx_fcat-seltext_s      = 'Material'(010).
      lx_fcat-reptext_ddic   = 'Material'(010).
      APPEND lx_fcat TO pt_fcat.
      CLEAR lx_fcat.
      lx_fcat-tabname        = 'IT_OUTPUT'.
      lx_fcat-fieldname      = 'WERKS'.
      lx_fcat-col_pos        = '1'.
      lx_fcat-ddictxt        = 'M'.
      lx_fcat-seltext_l      = 'Supply plant'(013).
      lx_fcat-seltext_m      = 'Supply plant'(013).
      lx_fcat-seltext_s      = 'Supply plant'(013).
      lx_fcat-reptext_ddic   = 'Supply plant'(013).
      APPEND lx_fcat TO pt_fcat.
    ENDFORM.                    " it_out_alv_fieldcat_before.
    Regards,
    Shalini
    Edited by: shalini reddy on Oct 7, 2008 5:08 PM

    Hi,
    The heading are in the table pt_fcat - you don't seem to be passing that in form....
    PERFORM setup_and_display_alv_ver2
    USING
    it_out_alvp "Parameter structure
    it_output[] "Internal Data table(header table)
    it_output[]. "Dummy table for Hierarchical ALV!!(item table)
    which I guessing in in one of the includes?
    Saying that the extract pof code does not show where you are calling form it_out_alv_fieldcat_before ...which populates the headings...
    Regards
    Stu

  • How to sort the alv

    what is the process to sort in alvs report  the output is in  decending and accending order without using standard buttenens in the output list .
             i am asking how to sort bydefault when we are executing the report ,
             output list  will automatically in sort order.
    could u plz explalin clearly with comments
    and code

    Hi
    Add this to your alv reporting
    Add Default Sorting to ALVgrid report  
    In order to display an ALV report with specific columns already sorted by default you will need to build a
    sort catalogue. This is fairly straight forward and is done in the following way:
            Step 1. Add data declaration for sort catalogue
            Step 2. Add code to build sort catalogue table 
            Step 3. Update 'REUSE_ALV_GRID_DISPLAY' FM call to include parameter 'it_sort'
    ALV data declarations
      data: it_sortcat   type slis_sortinfo_alv occurs 1,
            wa_sort like line of it_sortcat.
    perform build_sortcat.
    *&      Form  build_sortcat
          Build Sort catalog
    FORM build_sortcat .
      wa_sort-spos      = 1.
      wa_sort-fieldname = 'EBELN'.
    gd_sortcat-tabname
      APPEND wa_sort TO it_sortcat.
      wa_sort-spos      = 2.
      wa_sort-fieldname = 'EBELP'.
    gd_sortcat-tabname
      APPEND wa_sort TO it_sortcat.
    ENDFORM.                    " build_sortcat
    call function 'REUSE_ALV_GRID_DISPLAY'
           exporting
                i_callback_program      = gd_repid
                i_callback_top_of_page   = 'TOP-OF-PAGE' 
                is_layout               = gd_layout
                it_fieldcat             = fieldcatalog[]
                it_sort                 = it_sortcat
                i_save                  = 'X'
           tables
                t_outtab                = it_ekko
           exceptions
                program_error           = 1
                others                  = 2.
    Thanks
    Shiva

Maybe you are looking for