ALV HIERARCHIAL REPORT

Dear Experts,
Can anyone tell me how to create a ALV Hierarchial report with one HEADER table and multiple ITEM(child) tables.
thanks & regards,
gautam

Hi you can tray review this code for a example i found in the web and help me:
REPORT Z_TEST_HIESEQ_REPORT.
TABLES: ekko,ekpo.
* selection option
SELECT-OPTIONS s_ebeln FOR ekko-ebeln.
TYPE-POOLS:slis.
    * define header table and item table
DATA: BEGIN OF headertab OCCURS 0,
          ebeln LIKE ekko-ebeln,
          bstyp LIKE ekko-bstyp,
         bsart LIKE ekko-bsart,
         statu LIKE ekko-statu,
         END OF headertab.
    DATA: BEGIN OF itemtab OCCURS 0,
    ebeln LIKE ekpo-ebeln,
    ebelp LIKE ekpo-ebelp,
    matnr LIKE ekpo-matnr,
    werks LIKE ekpo-werks,
    menge LIKE ekpo-menge,
    netpr LIKE ekpo-netpr,
    peinh LIKE ekpo-peinh,
    netwr LIKE ekpo-netwr,
    END OF itemtab.
    DATA: i_fieldcat TYPE slis_t_fieldcat_alv.
    DATA: v_repid LIKE sy-repid.u201Ccurrent program name
    DATA: g_tabname_header TYPE slis_tabname,
    g_tabname_item TYPE slis_tabname.
    * data connect header table and item table
    * we can set 5 field as foreign key at same time
    DATA: gs_keyinfo TYPE slis_keyinfo_alv.
    INITIALIZATION.
    v_repid = sy-repid.
    START-OF-SELECTION.
    PERFORM get_data.
    END-OF-SELECTION.
    * get field catalog of header table
    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
    i_program_name = v_repid
    i_internal_tabname = 'HEADERTAB'
    i_inclname = v_repid
    i_bypassing_buffer = 'X'
    i_buffer_active = "
    CHANGING
    ct_fieldcat = i_fieldcat
    EXCEPTIONS
    inconsistent_interface = 1
    program_error = 2
    OTHERS = 3.
    IF sy-subrc <;>; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
    sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    * get field catalog of item table
    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
    i_program_name = sy-repid
    i_internal_tabname = 'ITEMTAB'
    i_inclname = v_repid
    i_bypassing_buffer = 'X'
    i_buffer_active = "
    CHANGING
    ct_fieldcat = i_fieldcat
    EXCEPTIONS
    inconsistent_interface = 1
    program_error = 2
    OTHERS = 3.
    IF sy-subrc <;>; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
    sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    * set the header and item table are connected by pur doc number
    gs_keyinfo-header01 = 'EBELN'.
    gs_keyinfo-item01 = 'EBELN'.
    g_tabname_header = 'HEADERTAB'.
    g_tabname_item = 'ITEMTAB'.
    CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
    i_callback_program = v_repid
    it_fieldcat = i_fieldcat
    i_save = 'A'
    i_tabname_header = g_tabname_header
    i_tabname_item = g_tabname_item
    is_keyinfo = gs_keyinfo
    i_bypassing_buffer = 'X'
    i_buffer_active = ' '
    TABLES
    t_outtab_header = headertab
    t_outtab_item = itemtab
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    IF sy-subrc <;>; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    FORM get_data.
    SELECT ebeln bstyp bsart statu
    INTO TABLE headertab
    FROM ekko
    UP TO 100 ROWS
    WHERE ebeln IN s_ebeln.
    IF NOT headertab[] IS INITIAL.
    SELECT ebeln ebelp matnr werks menge netpr peinh netwr
    INTO TABLE itemtab
    FROM ekpo
    FOR ALL ENTRIES IN headertab
    WHERE ebeln = headertab-ebeln.
    ENDIF.
    ENDFORM. "get_data
Edited by: Juan Manuel Garcia on Aug 17, 2010 11:29 PM
Edited by: Juan Manuel Garcia on Aug 17, 2010 11:36 PM

Similar Messages

  • ALV hierarchy report

    Hi,
    I am trying to create ALV report using FM: REUSE_ALV_HIERSEQ_LIST_DISPLAY
    My Report format is as follows:
    Shipto1 <Level 1>
         Shipping plant1  <Level 2>
             VBELN POSNR  <Level 3>
             VBELN POSNR  <Level 3>
             VBELN POSNR  <Level 3>
         Shipping plant2  <Level 2>
             VBELN POSNR  <Level 3>
             VBELN POSNR  <Level 3>
             VBELN POSNR  <Level 3>
    Shipto2  <Level 1>
         Shipping plant1  <Level 2>
             VBELN POSNR  <Level 3>
             VBELN POSNR  <Level 3>
             VBELN POSNR  <Level 3>
         Shipping plant2  <Level 2>
             VBELN POSNR  <Level 3>
             VBELN POSNR  <Level 3>
             VBELN POSNR  <Level 3>
    But I am not able to get 3 levels.
    Is it possible to get this format using this function module?
    Please advice.
    Thanks in advance.
    Regards,
    Umesh Patil

    Hi Umesh,
    Please transfer your Report format to as:
    Shipto1 <Level 1> Shipping plant1 <Level 1>
    VBELN POSNR <Level 2>
    VBELN POSNR <Level 2>
    VBELN POSNR <Level 2>
    Shipto1 <Level 1> Shipping plant2 <Level 1>
    VBELN POSNR <Level 2>
    VBELN POSNR <Level 2>
    VBELN POSNR <Level 3>
    Shipto2 <Level 1> Shipping plant1 <Level 1>
    VBELN POSNR <Level 2>
    VBELN POSNR <Level 2>
    VBELN POSNR <Level 2>
    Shipto2 <Level 1> Shipping plant2 <Level 1>
    VBELN POSNR <Level 2>
    VBELN POSNR <Level 2>
    VBELN POSNR <Level 2>
    Now u r able to use FM: REUSE_ALV_HIERSEQ_LIST_DISPLAY
    Above format also able to help u in making Header and Detail Internal Table.
    Regards,
    Digesh.P

  • 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

  • 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.

  • Alv interactive report  for secondary list

    Hi All,
    This is my code for ALV interactive report. Its working Properly for me when i select material number iam able to display the secondary list properly . if i sorted the basic list other than material number for ex . created date . iam uable to display correct secondary list . Can any one help me in this issue?
    REPORT  ZWRLOMDMM_PMG_PHWEB_PLD   NO STANDARD PAGE HEADING
            LINE-SIZE 120
            LINE-COUNT 65
            MESSAGE-ID 00.
    TABLES                                                              *
    TABLES: MARA ,      "General Material Data
            ZWPBPH.     " Published Product Hierarchy
    TYPE-POOLS                                                          *
    TYPE-POOLS:SLIS .
    DATA:FIELDCATALOG_BASIC TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
         FIELDCATALOG_SECONDARY TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
         GD_TAB_GROUP TYPE SLIS_T_SP_GROUP_ALV,
         GD_LAYOUT TYPE SLIS_LAYOUT_ALV,
         GD_REPID LIKE SY-REPID.
    INTERNAL TABLES                                                     *
    *Internal Tables to Get Data.
    *Internal Table For MARA Table.
    DATA:BEGIN OF T_MARA OCCURS 0 ,
            MATNR LIKE MARA-MATNR,
            MTART LIKE MARA-MTART,
            ERSDA LIKE MARA-ERSDA,
            ERNAM LIKE MARA-ERNAM,
            AENAM LIKE MARA-AENAM,
            SPART LIKE MARA-SPART,
         END OF T_MARA.
    *Internal Table For ZWPBPH Table.
    DATA:BEGIN OF T_ZWPBPH OCCURS 0 ,
           PBPINO LIKE ZWPBPH-PBPINO,
           PBPAPINO LIKE ZWPBPH-PBPAPINO,
         END OF T_ZWPBPH.
    *Internal Table For Basic List Field Catalog.
    DATA:BEGIN OF T_ALV OCCURS 0 ,
           MATNR LIKE MARA-MATNR,
           MTART LIKE MARA-MTART,
           ERSDA LIKE MARA-ERSDA,
           ERNAM LIKE MARA-ERNAM,
           SPART LIKE MARA-SPART,
           SPART1(3),
         END OF T_ALV.
    *Internal Table For Secondary List Field Catalog.
    DATA: BEGIN OF T_ALVS OCCURS 0 ,
            MATNR LIKE MARA-MATNR,
            AENAM LIKE MARA-AENAM,
            LAEDA LIKE MARA-LAEDA,
          END OF T_ALVS.
    *Internal Table For Model
    DATA:T_MODEL LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.
    *Internal Table For Product
    DATA:T_PRODUCT LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.
    *Internal Table For Family
    DATA:T_FAMILY LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.
    *Internal Table For Line
    DATA:T_LINE LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.
    *Internal Table For Type
    DATA:T_TYPE LIKE T_ZWPBPH OCCURS 0 WITH HEADER LINE.
    SELECTION SCREEN                                                    *
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    PARAMETERS: P_MATN RADIOBUTTON GROUP R1  USER-COMMAND run default 'X'.
    SELECT-OPTIONS: P_MATNR FOR MARA-MATNR MODIF ID SC1 .
    PARAMETERS: P_DAT RADIOBUTTON GROUP R1  .
    SELECT-OPTIONS: : P_DATE FOR MARA-LAEDA  MODIF ID SC2.
    PARAMETERS: P_DIV RADIOBUTTON GROUP R1  .
    SELECT-OPTIONS: : P_DIVIS for mara-spart  MODIF ID SC3.
    SELECTION-SCREEN END OF BLOCK b1.
    INITIALIZATION                                                      *
    INITIALIZATION.
      REFRESH: T_MARA,
               T_ZWPBPH,
               T_ALV,
               T_ALVS,
               T_MODEL,
               T_PRODUCT,
               T_FAMILY,
               T_LINE,
               T_TYPE.
      CLEAR:   T_MARA,
               T_ZWPBPH,
               T_ALV,
               T_ALVS,
               T_MODEL,
               T_PRODUCT,
               T_FAMILY,
               T_LINE,
               T_TYPE.
      GD_REPID = SY-REPID.
    *AT SELECTION-SCREEN OUTPUT.
    AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
        IF P_MATN = 'X'.
          FREE : P_DIVIS,P_DATE.
          IF SCREEN-GROUP1 = 'SC2' or SCREEN-GROUP1 = 'SC3'.
            SCREEN-INPUT  = 0.
            MODIFY SCREEN.
            CONTINUE.
          ENDIF .
        ENDIF.
        IF P_DAT = 'X'.
          FREE : P_MATNR,P_DIVIS.
          IF SCREEN-GROUP1 = 'SC1' or  SCREEN-GROUP1 = 'SC3'.
            SCREEN-INPUT  = 0.
            MODIFY SCREEN.
            CONTINUE.
          ENDIF .
        ENDIF.
        IF P_DIV = 'X'.
          FREE : P_DATE,P_MATNR.
          IF SCREEN-GROUP1 = 'SC1' or SCREEN-GROUP1 = 'SC2'.
            SCREEN-INPUT = 0.
            MODIFY SCREEN.
            CONTINUE.
          ENDIF .
        ENDIF.
      ENDLOOP.
    START-OF-SELECTION                                                  *
    START-OF-SELECTION.
      PERFORM GET_FIELDCATALOG_BASIC.
      PERFORM GET_FIELDCATALOG_SECONDARY.
      PERFORM POPULATE_DATA.
    END-OF-SELECTION                                                    *
    END-OF-SELECTION.
    *&      FORM GET_FIELDCATALOG_BASIC.
    Get Fieldcatalog For Basic List
    FORM GET_FIELDCATALOG_BASIC.
      FIELDCATALOG_BASIC-FIELDNAME = 'MATNR'.
      FIELDCATALOG_BASIC-SELTEXT_M = 'Material Number'.
      FIELDCATALOG_BASIC-COL_POS   = 0.
      FIELDCATALOG_BASIC-OUTPUTLEN = 20.
      FIELDCATALOG_BASIC-HOTSPOT   = 'X'.
      FIELDCATALOG_BASIC-EMPHASIZE = 'X'.
      FIELDCATALOG_BASIC-KEY       = 'X'.
      APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.
      CLEAR FIELDCATALOG_BASIC.
      FIELDCATALOG_BASIC-FIELDNAME = 'MTART'.
      FIELDCATALOG_BASIC-SELTEXT_M = 'Material Type'.
      FIELDCATALOG_BASIC-COL_POS   = 0.
      FIELDCATALOG_BASIC-OUTPUTLEN = 20.
      FIELDCATALOG_BASIC-EMPHASIZE = 'X'.
      FIELDCATALOG_BASIC-KEY       = 'X'.
      APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.
      CLEAR FIELDCATALOG_BASIC.
      FIELDCATALOG_BASIC-FIELDNAME = 'ERSDA'.
      FIELDCATALOG_BASIC-SELTEXT_M = 'Created Date'.
      FIELDCATALOG_BASIC-COL_POS   = 0.
      FIELDCATALOG_BASIC-OUTPUTLEN = 12.
      FIELDCATALOG_BASIC-EMPHASIZE = 'X'.
      FIELDCATALOG_BASIC-KEY       = 'X'.
      APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.
      CLEAR FIELDCATALOG_BASIC.
      FIELDCATALOG_BASIC-FIELDNAME = 'ERNAM'.
      FIELDCATALOG_BASIC-SELTEXT_M = 'Created By'.
      FIELDCATALOG_BASIC-COL_POS   = 0.
      FIELDCATALOG_BASIC-OUTPUTLEN = 15.
      FIELDCATALOG_BASIC-EMPHASIZE = 'X'.
      FIELDCATALOG_BASIC-KEY       = 'X'.
      APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.
      CLEAR FIELDCATALOG_BASIC.
      FIELDCATALOG_BASIC-FIELDNAME = 'SPART'.
      FIELDCATALOG_BASIC-SELTEXT_M = 'Division PMG'.
      FIELDCATALOG_BASIC-COL_POS   = 0.
      FIELDCATALOG_BASIC-OUTPUTLEN = 14.
      FIELDCATALOG_BASIC-EMPHASIZE = 'X'.
      FIELDCATALOG_BASIC-KEY       = 'X'.
      APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.
      CLEAR FIELDCATALOG_BASIC.
      FIELDCATALOG_BASIC-FIELDNAME = 'SPART1'.
      FIELDCATALOG_BASIC-SELTEXT_M = 'Division PhWEB'.
      FIELDCATALOG_BASIC-COL_POS   = 0.
      FIELDCATALOG_BASIC-OUTPUTLEN = 14.
      FIELDCATALOG_BASIC-EMPHASIZE = 'X'.
      FIELDCATALOG_BASIC-KEY       = 'X'.
      APPEND FIELDCATALOG_BASIC TO FIELDCATALOG_BASIC.
      CLEAR FIELDCATALOG_BASIC.
    ENDFORM.                    "GET_FIELDCATALOG_BASIC
    *&      FORM GET_FIELDCATALOG_SECONDARY
    Get Fieldcatalog For Secondary List
    FORM GET_FIELDCATALOG_SECONDARY.
      FIELDCATALOG_SECONDARY-FIELDNAME = 'MATNR'.
      FIELDCATALOG_SECONDARY-SELTEXT_M = 'Material Number'.
      FIELDCATALOG_SECONDARY-COL_POS   = 0.
      FIELDCATALOG_SECONDARY-OUTPUTLEN = 20.
      FIELDCATALOG_SECONDARY-EMPHASIZE = 'X'.
      FIELDCATALOG_SECONDARY-KEY       = 'X'.
      APPEND FIELDCATALOG_SECONDARY TO FIELDCATALOG_SECONDARY.
      CLEAR FIELDCATALOG_SECONDARY.
      FIELDCATALOG_SECONDARY-FIELDNAME = 'AENAM'.
      FIELDCATALOG_SECONDARY-SELTEXT_M = 'Changed By'.
      FIELDCATALOG_SECONDARY-COL_POS   = 0.
      FIELDCATALOG_SECONDARY-OUTPUTLEN = 20.
      FIELDCATALOG_SECONDARY-EMPHASIZE = 'X'.
      FIELDCATALOG_SECONDARY-KEY       = 'X'.
      APPEND FIELDCATALOG_SECONDARY TO FIELDCATALOG_SECONDARY.
      CLEAR FIELDCATALOG_SECONDARY.
      FIELDCATALOG_SECONDARY-FIELDNAME = 'LAEDA'.
      FIELDCATALOG_SECONDARY-SELTEXT_M = 'Changed ON'.
      FIELDCATALOG_SECONDARY-COL_POS   = 0.
      FIELDCATALOG_SECONDARY-OUTPUTLEN = 20.
      FIELDCATALOG_SECONDARY-EMPHASIZE = 'X'.
      FIELDCATALOG_SECONDARY-KEY       = 'X'.
      APPEND FIELDCATALOG_SECONDARY TO FIELDCATALOG_SECONDARY.
      CLEAR FIELDCATALOG_SECONDARY.
    ENDFORM.                    "GET_FIELDCATALOG_SECONDARY
    *&      FORM POPULATE_DATA
    FORM POPULATE_DATA.
    *Get Data From MARA And ZWPBPH Tables
      IF P_MATN = 'X'.
    SELECT MATNR MTART ERSDA ERNAM AENAM SPART FROM MARA INTO TABLE T_MARA
    where MATNR IN P_MATNR .
        IF SY-SUBRC <> 0.
          MESSAGE E001(0) WITH 'Invalid Material Number'.
        ENDIF.
      ELSEIF P_DAT = 'X'.
    SELECT MATNR MTART ERSDA ERNAM AENAM SPART FROM MARA INTO TABLE T_MARA
    where LAEDA IN P_DATE .
        IF SY-SUBRC <> 0.
          MESSAGE E001(0) WITH 'Invalid Date Range'.
        ENDIF.
      ELSEIF P_DIV = 'X'.
    SELECT MATNR MTART ERSDA ERNAM AENAM SPART FROM MARA INTO TABLE T_MARA
    where SPART IN P_DIVIS .
        IF SY-SUBRC <> 0.
          MESSAGE E001(0) WITH 'Invalid Division'.
        ENDIF.
      ELSEIF P_MATN = ' ' AND P_DAT = ' ' AND  P_DIV = ' '.
    SELECT MATNR MTART ERSDA ERNAM AENAM SPART FROM MARA INTO TABLE T_MARA.
      ENDIF.
      DELETE ADJACENT DUPLICATES FROM T_MARA COMPARING MATNR.
      SORT T_MARA BY MATNR.
      IF T_MARA[] IS NOT INITIAL .
    SELECT PBPINO PBPAPINO FROM ZWPBPH INTO TABLE T_ZWPBPH FOR ALL ENTRIES
    IN T_MARA WHERE PBPINO = T_MARA-MATNR.
      ENDIF.
      IF SY-SUBRC = 0.
        LOOP AT  T_ZWPBPH.
          SELECT SINGLE PBPINO PBPAPINO FROM ZWPBPH INTO  T_MODEL   WHERE
          PBPINO = T_ZWPBPH-PBPAPINO.
          IF SY-SUBRC = 0.
          SELECT SINGLE PBPINO PBPAPINO FROM ZWPBPH  INTO T_PRODUCT   WHERE
          PBPINO
          = T_MODEL-PBPAPINO.
          ENDIF.
          IF SY-SUBRC = 0.
           SELECT SINGLE PBPINO PBPAPINO FROM ZWPBPH  INTO T_FAMILY   WHERE
           PBPINO = T_PRODUCT-PBPAPINO.
          ENDIF.
          IF SY-SUBRC = 0.
            SELECT SINGLE PBPINO PBPAPINO FROM ZWPBPH  INTO T_LINE   WHERE
            PBPINO = T_FAMILY-PBPAPINO.
          ENDIF.
          IF SY-SUBRC = 0.
       SELECT SINGLE PBPINO PBPAPINO FROM ZWPBPH INTO T_TYPE   WHERE PBPINO
        = T_LINE-PBPAPINO.
          ENDIF.
          IF SY-SUBRC = 0.
         SELECT SINGLE MTART ERSDA ERNAM SPART FROM MARA INTO CORRESPONDING
          FIELDS OF T_ALV WHERE MATNR = T_ZWPBPH-PBPINO AND SPART <>
        T_TYPE-PBPAPINO+1(2).
          ENDIF.
          IF SY-SUBRC = 0.
            MOVE T_ZWPBPH-PBPINO TO T_ALV-MATNR.
            MOVE T_TYPE-PBPAPINO+1(2) TO T_ALV-SPART1.
            APPEND T_ALV.
            SELECT SINGLE MATNR AENAM LAEDA FROM MARA INTO CORRESPONDING
            FIELDS OF T_ALVS WHERE MATNR = T_ZWPBPH-PBPINO.
            APPEND T_ALVS.
            CLEAR T_ALVS.
          ENDIF.
        ENDLOOP.
      ENDIF.
      SORT T_ALV BY MATNR.
      SORT T_ALVS BY MATNR.
      call function 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program      = GD_REPID
          i_callback_user_command = 'DISPLAY_DETAIL'
          it_fieldcat             = FIELDCATALOG_BASIC[]
          i_save                  = 'X'
        TABLES
          t_outtab                = T_ALV
        EXCEPTIONS
          program_error           = 1
          others                  = 2.
    ENDFORM.                    "POPULATE_DATA
    *&      Form  DISPLAY_DETAIL
          text
         -->UCOMM      text
         -->SELFIELD   text
    FORM DISPLAY_DETAIL USING UCOMM LIKE SY-UCOMM
    SELFIELD TYPE SLIS_SELFIELD.
    Select Material Number For Secondary List
      DATA: T_ALV_TEMP LIKE T_ALVS OCCURS 0 WITH HEADER LINE.
      IF UCOMM = '&IC1'.
        READ TABLE T_ALVS INDEX SELFIELD-TABINDEX.
        IF SY-SUBRC = 0.
          MOVE T_ALVS TO T_ALV_TEMP.
          APPEND T_ALV_TEMP.
        ENDIF.
        CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
          EXPORTING
            i_callback_program = GD_REPID
            it_fieldcat        = FIELDCATALOG_SECONDARY[]
          TABLES
            t_outtab           = T_ALV_TEMP.
      ENDIF.
    ENDFORM.                    "DISPLAY_DETAIL

    Hi,
    Try this in the routine display details
    READ TABLE T_ALV INDEX SELFIELD-TABINDEX.
    READ TABLE T_ALVS with key matnr = T_ALV-MATNR
    thanks

  • 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
    **********************************

  • ALV Tree Report without using ABAP Objects

    Hi all,
    I want to know the name of a function module to create ALV Tree in SE38 as a report. I am required to create this ALV Tree Report without using ABAP OBJECTS. Can u pls help me as early as possible.

    Hi
    see this link
    http://www.sapdev.co.uk/reporting/alv/alvtree.htm
    *& Report  ZBCALV_TREE
    REPORT  ZBCALV_TREE.
    class cl_gui_column_tree definition load.
    class cl_gui_cfw definition load.
    data tree1  type ref to cl_gui_alv_tree.
    data mr_toolbar type ref to cl_gui_toolbar.
    include <icon>.
    include bcalv_toolbar_event_receiver.
    include bcalv_tree_event_receiver.
    data: toolbar_event_receiver type ref to lcl_toolbar_event_receiver.
    data: gt_VBAK  type VBAK occurs 0,      "Output-Table
          gt_fieldcatalog type lvc_t_fcat, "Fieldcatalog
          ok_code like sy-ucomm.           "OK-Code
    start-of-selection.
    end-of-selection.
      call screen 100.
    *&      Module  STATUS_0100  OUTPUT
          text
    module STATUS_0100 output.
      SET PF-STATUS 'MAIN'.
    if tree1 is initial.
        perform Zinit_tree.
      endif.
      call method cl_gui_cfw=>flush.
    endmodule.                 " STATUS_0100  OUTPUT
    *&      Form  Zinit_tree
          text
    -->  p1        text
    <--  p2        text
    form Zinit_tree .
    perform Zbuild_fieldcatalog.
    create container for alv-tree
    data: l_tree_container_name(30) type c,
            l_custom_container type ref to cl_gui_custom_container.
      l_tree_container_name = 'TREE1'.
    if sy-batch is initial.
        create object l_custom_container
          exporting
                container_name = l_tree_container_name
          exceptions
                cntl_error                  = 1
                cntl_system_error           = 2
                create_error                = 3
                lifetime_error              = 4
                lifetime_dynpro_dynpro_link = 5.
        if sy-subrc <> 0.
          message x208(00) with 'ERROR'.                        "#EC NOTEXT
        endif.
      endif.
    create tree control
      create object tree1
        exporting
            parent              = l_custom_container
            node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
            item_selection      = 'X'
            no_html_header      = ''
            no_toolbar          = ''
        exceptions
            cntl_error                   = 1
            cntl_system_error            = 2
            create_error                 = 3
            lifetime_error               = 4
            illegal_node_selection_mode  = 5
            failed                       = 6
            illegal_column_name          = 7.
      if sy-subrc <> 0.
        message x208(00) with 'ERROR'.                          "#EC NOTEXT
      endif.
    create Hierarchy-header
      data l_hierarchy_header type treev_hhdr.
      perform zbuild_hierarchy_header changing l_hierarchy_header.
    create info-table for html-header
      data: lt_list_commentary type slis_t_listheader,
            l_logo             type sdydo_value.
      perform Zbuild_comment using
                     lt_list_commentary
                     l_logo.
    repid for saving variants
      data: ls_variant type disvariant.
      ls_variant-report = sy-repid.
    create emty tree-control
      call method tree1->set_table_for_first_display
        exporting
          is_hierarchy_header = l_hierarchy_header
          it_list_commentary  = lt_list_commentary
          i_logo              = l_logo
          i_background_id     = 'ALV_BACKGROUND'
          i_save              = 'A'
          is_variant          = ls_variant
        changing
          it_outtab           = gt_VBAK "table must be emty !!
          it_fieldcatalog     = gt_fieldcatalog.
    create hierarchy
      perform Zcreate_hierarchy.
    add own functioncodes to the toolbar
      perform zchange_toolbar.
    register events
      perform zregister_events.
    endform.                    " Zinit_tree
    *&      Form  Zbuild_fieldcatalog
          text
    -->  p1        text
    <--  p2        text
    form Zbuild_fieldcatalog .
    get fieldcatalog
      call function 'LVC_FIELDCATALOG_MERGE'
        exporting
          i_structure_name = 'VBAK'
        changing
          ct_fieldcat      = gt_fieldcatalog.
      sort gt_fieldcatalog by scrtext_l.
    change fieldcatalog
      data: ls_fieldcatalog type lvc_s_fcat.
      loop at gt_fieldcatalog into ls_fieldcatalog.
        case ls_fieldcatalog-fieldname.
          when 'AUART' .
            ls_fieldcatalog-no_out = 'X'.
            ls_fieldcatalog-key    = ''.
        endcase.
        modify gt_fieldcatalog from ls_fieldcatalog.
      endloop.
    endform.                    " Zbuild_fieldcatalog
    *&      Form  zbuild_hierarchy_header
          text
         <--P_L_HIERARCHY_HEADER  text
    form zbuild_hierarchy_header changing
                                   p_hierarchy_header type treev_hhdr.
      p_hierarchy_header-heading = 'Hierarchy Header'.          "#EC NOTEXT
      p_hierarchy_header-tooltip =
                             'This is the Hierarchy Header !'.  "#EC NOTEXT
      p_hierarchy_header-width = 30.
      p_hierarchy_header-width_pix = ''.
    endform.                    " zbuild_hierarchy_header
    *&      Form  Zbuild_comment
          text
         -->P_LT_LIST_COMMENTARY  text
         -->P_L_LOGO  text
    form Zbuild_comment   using
                           pt_list_commentary type slis_t_listheader
                           p_logo             type sdydo_value.
    data: ls_line type slis_listheader.
    LIST HEADING LINE: TYPE H
      clear ls_line.
      ls_line-typ  = 'H'.
    LS_LINE-KEY:  NOT USED FOR THIS TYPE
      ls_line-info = 'ALV-tree-demo: flight-overview'.          "#EC NOTEXT
      append ls_line to pt_list_commentary.
    STATUS LINE: TYPE S
      clear ls_line.
      ls_line-typ  = 'S'.
      ls_line-key  = 'valid until'.                             "#EC NOTEXT
      ls_line-info = 'January 29 1999'.                         "#EC NOTEXT
      append ls_line to pt_list_commentary.
      ls_line-key  = 'time'.
      ls_line-info = '2.00 pm'.                                 "#EC NOTEXT
      append ls_line to pt_list_commentary.
    ACTION LINE: TYPE A
      clear ls_line.
      ls_line-typ  = 'A'.
    LS_LINE-KEY:  NOT USED FOR THIS TYPE
      ls_line-info = 'actual data'.                             "#EC NOTEXT
      append ls_line to pt_list_commentary.
      p_logo = 'ENJOYSAP_LOGO'.
    endform.                    " Zbuild_comment
    *&      Form  Zcreate_hierarchy
          text
    -->  p1        text
    <--  p2        text
    form Zcreate_hierarchy .
    data: ls_vbak type vbak,
          lt_vbak  type vbak occurs 0.
    get data
      select * from vbak into table lt_vbak
                            up to 200 rows .                "#EC CI_NOWHERE
      sort lt_vbak by AUART.
    add data to tree
      data: l_AUART_key type lvc_nkey.
    loop at lt_vbak into ls_vbak.
        on change of ls_vbak-AUART.
          perform Zadd_AUART_line using   ls_vbak
                                  changing l_AUART_key.
        endon.
      endloop.
    calculate totals
      call method tree1->update_calculations.
    this method must be called to send the data to the frontend
      call method tree1->frontend_update.
    endform.                    " Zcreate_hierarchy
    *&      Form  Zadd_AUART_line
          text
         -->P_LS_vbak  text
         -->P_0379   text
         <--P_L_AUART_KEY  text
    form Zadd_AUART_line  using    p_ls_vbak type vbak
                                   p_relat_key type lvc_nkey
                         changing  p_node_key type lvc_nkey.
      data: l_node_text type lvc_value,
            ls_vbak type vbak.
    set item-layout
      data: lt_item_layout type lvc_t_layi,
            ls_item_layout type lvc_s_layi.
      ls_item_layout-t_image = '@3P@'.
      ls_item_layout-fieldname = tree1->c_hierarchy_column_name.
      ls_item_layout-style   =
                            cl_gui_column_tree=>style_intensifd_critical.
      append ls_item_layout to lt_item_layout.
    add node
      l_node_text =  p_ls_vbak-AUART.
      data: ls_node type lvc_s_layn.
      ls_node-n_image   = space.
      ls_node-exp_image = space.
      call method tree1->add_node
        exporting
          i_relat_node_key = p_relat_key
          i_relationship   = cl_gui_column_tree=>relat_last_child
          i_node_text      = l_node_text
          is_outtab_line   = ls_vbak
          is_node_layout   = ls_node
          it_item_layout   = lt_item_layout
        importing
          e_new_node_key   = p_node_key .
    endform.                    " Zadd_AUART_line
    *&      Form  zchange_toolbar
          text
    -->  p1        text
    <--  p2        text
    form zchange_toolbar .
    get toolbar control
      call method tree1->get_toolbar_object
        importing
          er_toolbar = mr_toolbar.
      check not mr_toolbar is initial.
    add seperator to toolbar
      call method mr_toolbar->add_button
        exporting
          fcode     = ''
          icon      = ''
          butn_type = cntb_btype_sep
          text      = ''
          quickinfo = 'This is a Seperator'.                    "#EC NOTEXT
    add Standard Button to toolbar (for Delete Subtree)
      call method mr_toolbar->add_button
        exporting
          fcode     = 'DELETE'
          icon      = '@18@'
          butn_type = cntb_btype_button
          text      = ''
          quickinfo = 'Delete subtree'.                         "#EC NOTEXT
    add Dropdown Button to toolbar (for Insert Line)
      call method mr_toolbar->add_button
        exporting
          fcode     = 'INSERT_LC'
          icon      = '@17@'
          butn_type = cntb_btype_dropdown
          text      = ''
          quickinfo = 'Insert Line'.                            "#EC NOTEXT
    set event-handler for toolbar-control
      create object toolbar_event_receiver.
      set handler toolbar_event_receiver->on_function_selected
                                                          for mr_toolbar.
      set handler toolbar_event_receiver->on_toolbar_dropdown
                                                          for mr_toolbar.
    endform.                    " zchange_toolbar
    *&      Form  zregister_events
          text
    -->  p1        text
    <--  p2        text
    form zregister_events .
    define the events which will be passed to the backend
      data: lt_events type cntl_simple_events,
              l_event type cntl_simple_event.
    define the events which will be passed to the backend
      l_event-eventid = cl_gui_column_tree=>eventid_expand_no_children.
      append l_event to lt_events.
      l_event-eventid = cl_gui_column_tree=>eventid_checkbox_change.
      append l_event to lt_events.
      l_event-eventid = cl_gui_column_tree=>eventid_header_context_men_req.
      append l_event to lt_events.
      l_event-eventid = cl_gui_column_tree=>eventid_node_context_menu_req.
      append l_event to lt_events.
      l_event-eventid = cl_gui_column_tree=>eventid_item_context_menu_req.
      append l_event to lt_events.
      l_event-eventid = cl_gui_column_tree=>eventid_header_click.
      append l_event to lt_events.
      l_event-eventid = cl_gui_column_tree=>eventid_item_keypress.
      append l_event to lt_events.
      call method tree1->set_registered_events
        exporting
          events                    = lt_events
        exceptions
          cntl_error                = 1
          cntl_system_error         = 2
          illegal_event_combination = 3.
      if sy-subrc <> 0.
        message x208(00) with 'ERROR'.                          "#EC NOTEXT
      endif.
    set Handler
      data: l_event_receiver type ref to lcl_tree_event_receiver.
      create object l_event_receiver.
      set handler l_event_receiver->handle_node_ctmenu_request
                                                            for tree1.
      set handler l_event_receiver->handle_node_ctmenu_selected
                                                            for tree1.
      set handler l_event_receiver->handle_item_ctmenu_request
                                                            for tree1.
      set handler l_event_receiver->handle_item_ctmenu_selected
                                                            for tree1.
    endform.                    " zregister_events
    *&      Module  USER_COMMAND_0100  INPUT
          text
    module USER_COMMAND_0100 input.
    ok_code  = sy-ucomm.
    clear sy-ucomm.
    case ok_code.
        when 'EXIT' or 'BACK' or 'CANC'.
          perform Zexit_program.
        when others.
          call method cl_gui_cfw=>dispatch.
      endcase.
      clear ok_code.
      call method cl_gui_cfw=>flush.
    endmodule.                 " USER_COMMAND_0100  INPUT
    *&      Form  Zexit_program
          text
    -->  p1        text
    <--  p2        text
    form Zexit_program .
      call method tree1->free.
      leave program.
    endform.                    " Zexit_program
    <b>Reward if usefull</b>

  • ALV Tree Report--clicking on a row....

    Hello Experts,
    i have a alv tree report.my requirement is,
    "Selecting a row means clicking on record  and then click on a another button called YES ,For other functionality i need to capture the row '.
    How can i solve this  problem.
    Thanks,
    Sridhar.

    hi check this..
    REPORT  z_simpletree.
    type pool declarations for tree
    TYPE-POOLS : fibs,stree.
    *Data declaration for additional node information
    DATA : t_node TYPE snodetext.
    *Internal table and wa decl for nodes
    DATA : it_node LIKE TABLE OF t_node INITIAL SIZE 0,
           wa_node LIKE t_node.
    *Internal table and wa decl for Education table PA0022
    DATA : it_0022 TYPE STANDARD TABLE OF pa0022 INITIAL SIZE 0,
           wa_0022 TYPE pa0022.
    *Internal table and wa decl for text table t517x
    DATA : it_517x TYPE STANDARD TABLE OF t517x INITIAL SIZE 0,
           wa_517x TYPE t517x.
    *Internal table and wa decl for text table t517T
    DATA : it_517t TYPE STANDARD TABLE OF t517t INITIAL SIZE 0,
           wa_517t TYPE t517t.
    *Internal table and wa decl for text table t519T
    DATA : it_519t TYPE STANDARD TABLE OF t519t INITIAL SIZE 0,
           wa_519t TYPE t519t.
    *initialization event
    INITIALIZATION.
    *Start of selection  event
    START-OF-SELECTION.
    *Select the data for tree
      PERFORM fetch_data.
    *Build the hierarchy for tree
      PERFORM build_hierarchy.
    *Build Tree for display
      PERFORM build_tree.
    *&      Form  fetch_data
          text
    -->  p1        text
    <--  p2        text
    FORM fetch_data .
    *select data from PA0022
      SELECT * FROM pa0022 INTO CORRESPONDING FIELDS OF TABLE it_0022
       UP TO 50 ROWS.
    *select data from T517x
      SELECT * FROM t517x INTO CORRESPONDING FIELDS OF TABLE it_517x
       WHERE langu = 'E'.
    *select data from T517T
      SELECT * FROM t517t INTO CORRESPONDING FIELDS OF TABLE it_517t
       WHERE sprsl = 'E'.
    *select data from T519t
      SELECT * FROM t519t INTO CORRESPONDING FIELDS OF TABLE it_519t
       WHERE sprsl = 'E'.
      ENDFORM.                    " fetch_data
    *&      Form  build_hierarchy
          text
    -->  p1        text
    <--  p2        text
    FORM build_hierarchy .
    *Building the nodes and hierarchy for tree
      CLEAR : it_node[],
      wa_node.
      wa_node-type = 'T'.
      wa_node-name = 'Education'.
      wa_node-tlevel = '01'.
      wa_node-nlength = '15'.
      wa_node-color = '4'.
      wa_node-text = 'Infotype 0022'.
      wa_node-tlength ='20'.
      wa_node-tcolor = 3.
      APPEND wa_node TO it_node.
      CLEAR wa_node.
    *Filling the values of internal table into tree
      LOOP AT it_0022 INTO wa_0022.
        wa_node-type = 'P'.
        wa_node-name = 'PERNR'.
        wa_node-tlevel = '02'.
        wa_node-nlength = '8'.
        wa_node-color = '1'.
        wa_node-text = wa_0022-pernr.
        wa_node-tlength ='20'.
        wa_node-tcolor = 4.
        APPEND wa_node TO it_node.
        CLEAR wa_node.
    *Filling the text of T517t
        READ TABLE it_517t INTO wa_517t WITH KEY slart = wa_0022-slart.
        wa_node-type = 'P'.
        wa_node-name = wa_0022-slart.
        wa_node-tlevel = '03'.
        wa_node-nlength = '8'.
        wa_node-color = '1'.
        wa_node-text = wa_517t-stext.
        wa_node-tlength ='40'.
        wa_node-tcolor = 4.
        APPEND wa_node TO it_node.
        CLEAR wa_node.
    *Filling the text of T519t
        READ TABLE it_519t INTO wa_519t WITH KEY slabs = wa_0022-slabs.
        wa_node-type = 'P'.
        wa_node-name = wa_0022-slabs.
        wa_node-tlevel = '04'.
        wa_node-nlength = '8'.
        wa_node-color = '2'.
        wa_node-text = wa_519t-stext.
        wa_node-tlength ='40'.
        wa_node-tcolor = 4.
        APPEND wa_node TO it_node.
        CLEAR wa_node.
    *Filling the text of T517x
        READ TABLE it_517x INTO wa_517x WITH KEY faart = wa_0022-sltp1.
        wa_node-type = 'P'.
        wa_node-name = wa_0022-sltp1.
        wa_node-tlevel = '05'.
        wa_node-nlength = '8'.
        wa_node-color = '1'.
        wa_node-text = wa_517x-ftext.
        wa_node-tlength ='40'.
        wa_node-tcolor = 4.
        APPEND wa_node TO it_node.
        CLEAR wa_node.
        wa_node-type = 'P'.
        wa_node-tlevel = '06'.
        wa_node-nlength = '8'.
        wa_node-color = '1'.
        wa_node-text = '% Completed'.
        wa_node-tlength ='15'.
        wa_node-tcolor = 4.
        APPEND wa_node TO it_node.
        CLEAR wa_node.
        ENDLOOP.
        ENDFORM.                    " build_hierarchy
    *&      Form  build_tree
          text
    -->  p1        text
    <--  p2        text
    FORM build_tree .
    *Fm for constructing the tree
      CALL FUNCTION 'RS_TREE_CONSTRUCT'
        TABLES
         nodetab = it_node.
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    *FM for displaying the tree
      CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
        EXPORTING
          callback_program     = sy-repid
          check_duplicate_name = '1'
          color_of_node        = '3'
          color_of_mark        = '3'
          color_of_link        = '1'
          color_of_match       = '5'
          node_length          = 30
          text_length          = 75
          use_control          = 'L'.ENDFORM.                    " build_tree
    regards,
    venkat

  • ALV hierarchy with Smartform

    How can I do a Smartform from an ALV hierarchy? Is this possible?
    Please give me any help...
    Regards.
    Hugo

    Hi, thank for your reply.
    Well... I've a hierarchy alv report with a status bar... It's working properly.
    Now, I want to print a smarform from this report...
    this show the alv ************
    call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        exporting
          i_callback_program = vl_repid
          is_layout                = st_layout
          it_fieldcat               = t_fieldcat[]
          i_tabname_header  = 'T_AUX'
          i_tabname_item     = 'T_OUTPUT'
          is_keyinfo              = st_key
        tables
          t_outtab_header    = t_aux[]
          t_outtab_item       = t_output[]
        exceptions
          program_error      = 1
          others                 = 2.
    My doubt is in the smartform... I can pass 2 tables as parameters???
    -->
      call function l_fm_name
        exporting
          p_gjahr   = p_gjahr
          p_form    = p_form
          p_date_d  = p_date_d
          p_date_h  = p_date_h
          p_nom     = p_nom
        tables
          gt_salida = gt_salida ????  "Table 1
        exceptions
          formatting_error           = 1
          internal_error             = 2
          send_error                 = 3
          user_canceled              = 4
          others                     = 5.
    I'm sorry for my poor english...

  • Hierarchial report

    Dear All,
    I would like to display the report like below
    Hotel name                       01-May-09     02-May-09    03-May-09    04-May-09
    + Bangalor
        Single                           1000                  2000         3000            500
        Double                          2000                  4000         6000            1000    
    + Mumbai
    +PUNE
    IIf i click on this + Symbol of Bagalor then  tree should open and sub details should display like above
    single and double. If i click again on + symbol tree should close. 
                   Please help me how i can achieve this.
    Thanks in advance,
    Kumar.

    Dear ravi,
    Check the below code
       report  zalv_hierarchical.
    ALV Report for simple hierarchical sequential list display(single child)
    List of SAP tables and their characteristics are displayed as the header
    table  and the list of fields and their characteristics *& form the item table(child table)
    type-pools declarations for alv and icon
    type-pools: slis,icon.
    *structure declaration for table details
    types : begin of ty_dd02l,
    icon type icon_d,
    tabname type tabname,
    tabclass type tabclass,
    contflag type contflag,
    actflag type actflag,
    mainflag type maintflag,
    buffered type buffered,
    as4user type as4user,
    as4date type as4date,
    as4time type as4time,
    expand,
    end of ty_dd02l.
    *internal table and wa decln for table details
    data : it_dd02l type standard table of ty_dd02l,
    wa_dd02l type ty_dd02l.
    *structure declarations for field details
    types : begin of ty_dd03l,
    tabname type tabname,
    fieldname type fieldname,
    keyflag type keyflag,
    mandatory type mandatory,
    checktable type checktable,
    rollname type rollname,
    end of ty_dd03l.
    *Internal table and wa declaration  for field details
    data : it_dd03l type standard table of ty_dd03l,
    wa_dd03l type ty_dd03l.
    *data declarations for ALV
    data : it_fieldcat type slis_t_fieldcat_alv,
    wa_fieldcat type slis_fieldcat_alv,
    it_layout type slis_layout_alv,
    key type slis_keyinfo_alv.
    *Input the tables.User cannot enter a range but can enter any number
    *of tables one by one in this select-options
    select-options : s_table for wa_dd02l-tabname no intervals.
    *initializatin event
    initialization.
    *start-of-selection event
    start-of-selection.
    *subroutine to fetch the data from the tables
      perform fetch_tabledata.
    *subroutine to build alv hierarchy output
      perform hierarchyalv_build.
    *& Form hierarchyalv_build
    text
    --> p1 text
    <-- p2 text
    form hierarchyalv_build .
    *field catalogue
      perform build_fieldcat.
    *layout
      perform build_layout.
    *key information for hierarchy
      perform build_key.
    *output
      perform list_display.
    endform. " hierarchyalv_build
    *& Form build_fieldcat
    text
    --> p1 text
    <-- p2 text
    form build_fieldcat .
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 1.
      wa_fieldcat-fieldname = 'TABNAME'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'Tablename'.
      wa_fieldcat-key = 'X'.
      wa_fieldcat-emphasize = 'C610'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 2.
      wa_fieldcat-fieldname = 'TABCLASS'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'Tablecategory'.
      wa_fieldcat-emphasize = 'C600'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 3.
      wa_fieldcat-fieldname = 'CONTFLAG'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'DeliveryClass'.
      wa_fieldcat-emphasize = 'C510'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 4.
      wa_fieldcat-fieldname = 'ACTFLAG'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'Activationstatus'.
      wa_fieldcat-emphasize = 'C500'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 5.
      wa_fieldcat-fieldname = 'MAINFLAG'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'MaintainenceFlag'.
      wa_fieldcat-emphasize = 'C410'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 6.
      wa_fieldcat-fieldname = 'BUFFERED'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'BufferFlag'.
      wa_fieldcat-emphasize = 'C400'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 7.
      wa_fieldcat-fieldname = 'AS4USER'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'User'.
      wa_fieldcat-emphasize = 'C310'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 8.
      wa_fieldcat-fieldname = 'AS4DATE'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'Date'.
      wa_fieldcat-emphasize = 'C300'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 9.
      wa_fieldcat-fieldname = 'AS4TIME'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'Time'.
      wa_fieldcat-emphasize = 'C210'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 10.
      wa_fieldcat-fieldname = 'ICON'.
      wa_fieldcat-tabname = 'IT_DD02L'.
      wa_fieldcat-seltext_m = 'ICON'.
      wa_fieldcat-icon = 'X'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 11.
      wa_fieldcat-fieldname = 'FIELDNAME'.
      wa_fieldcat-tabname = 'IT_DD03L'.
      wa_fieldcat-key = 'X'.
      wa_fieldcat-seltext_m = 'Field'.
      wa_fieldcat-emphasize = 'C600'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 12.
      wa_fieldcat-fieldname = 'KEYFLAG'.
      wa_fieldcat-tabname = 'IT_DD03L'.
      wa_fieldcat-seltext_m = 'Key'.
      wa_fieldcat-emphasize = 'C500'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 13.
      wa_fieldcat-fieldname = 'CHECKTABLE'.
      wa_fieldcat-tabname = 'IT_DD03L'.
      wa_fieldcat-seltext_m = 'Checktable'.
      wa_fieldcat-emphasize = 'C400'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 14.
      wa_fieldcat-fieldname = 'MANDATORY'.
      wa_fieldcat-tabname = 'IT_DD03L'.
      wa_fieldcat-seltext_m = 'Mandatory'.
      wa_fieldcat-emphasize = 'C300'.
      append wa_fieldcat to it_fieldcat.
      clear wa_fieldcat.
      wa_fieldcat-col_pos = 15.
      wa_fieldcat-fieldname = 'ROLLNAME'.
      wa_fieldcat-tabname = 'IT_DD03L'.
      wa_fieldcat-seltext_m = 'Dataelement'.
      wa_fieldcat-emphasize = 'C200'.
      append wa_fieldcat to it_fieldcat.
    endform. " build_fieldcat
    *& Form build_layout
    text
    --> p1 text
    <-- p2 text
    form build_layout .
    *to expand the header table for item details
      it_layout-expand_fieldname = 'EXPAND'.
      it_layout-window_titlebar = 'Hierarchical ALV list display'.
      it_layout-lights_tabname = 'IT_DD03L'.
      it_layout-colwidth_optimize = 'X'.
    endform. " build_layout
    *& Form build_key
    text
    --> p1 text
    <-- p2 text
    form build_key .
    **key infomation for the header and item table
      key-header01 = 'TABNAME'.
      key-item01 = 'TABNAME'.
    endform. " build_key
    *& Form list_display
    text
    --> p1 text
    <-- p2 text
    form list_display .
    *ALV output
      call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
        exporting
          i_callback_program = sy-cprog
          is_layout          = it_layout
          it_fieldcat        = it_fieldcat
          i_tabname_header   = 'IT_DD02L'
          i_tabname_item     = 'IT_DD03L'
          is_keyinfo         = key
        tables
          t_outtab_header    = it_dd02l
          t_outtab_item      = it_dd03l.
    endform. " list_display
    *& Form fetch_tabledata
    text
    --> p1 text
    <-- p2 text
    form fetch_tabledata .
    *select table data
      select tabname
      tabclass
      contflag
      actflag
      mainflag
      buffered
      as4user
      as4date
      as4time
      from dd02l
      into corresponding fields of table it_dd02l
      where tabname in s_table.
    *select field data
      if it_dd02l[] is not initial.
        select tabname
        fieldname
        keyflag
        mandatory
        checktable
        rollname
        from dd03l
        into corresponding fields of table it_dd03l
        for all entries in it_dd02l
        where tabname eq it_dd02l-tabname.
      endif.
    *adding icon to the header table
      loop at it_dd02l into wa_dd02l.
        at new tabname.
          wa_dd02l-icon = '@3M@'.
          modify it_dd02l from wa_dd02l transporting icon where tabname eq wa_dd02l-tabname.
          clear : wa_dd02l.
        endat.
      endloop.
    endform.                    "fetch_tabledata

  • ALV Hierarchial

    Hi,
    I have a requirement like, when we click on one of the records in the grid display (first screen) I have to call a screen with 2 alv screens in the same screen. Among this 2 screens one is Hierarchial alv. I am using 'REUSE_ALV_GRID_DISPLAY' in the first screen and when double click I am calling a screen with 2 custom containers in it. For the first custom container I am using 'CL_GUI_ALV_GRID' to fill the data. Now I have to fill second container with Hierarchial alv. I have tried to find a class for hierarchial ALV. If anybody know how to do this, Please suggest me.
    Thanks,
    Ram

    hi...
    i am giving an example program for ALV hierarchical reports. i hope it helpful to u.
    it is working will. try it.
    REPORT  ZABAP_EX1                               .
    *TYPEPOOLS DECLARATION
    for field catalog
    TYPE-POOLS SLIS.
    *TABLE DECLARATION
    TABLES : KNA1,VBAK.
    *INTERNAL TABLES DECLAREATION
    DATA ITAB_KNA1 LIKE KNA1 OCCURS 0 WITH HEADER LINE.
    DATA ITAB_VBAK LIKE VBAK OCCURS 0 WITH HEADER LINE.
    *FIELD CATALOG DECLARATION
    DATA FCAT_HIRC TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
    *EVENTS DECLARATION
    DATA EVENTS TYPE SLIS_T_EVENT WITH HEADER LINE.
    *LAYOUT DECLARATION
    DATA LAYOUT TYPE SLIS_LAYOUT_ALV .
    *FIELD CATLOG INTIALIZATION FOR CUSTOMER INFORMATION
    FCAT_HIRC-COL_POS = 1.
    FCAT_HIRC-FIELDNAME = 'KUNNR'.
    FCAT_HIRC-REF_TABNAME = 'KNA1'.
    FCAT_HIRC-TABNAME = 'ITAB_KNA1'.
    APPEND FCAT_HIRC.
    FCAT_HIRC-COL_POS = 2.
    FCAT_HIRC-FIELDNAME = 'NAME1'.
    FCAT_HIRC-REF_TABNAME = 'KNA1'.
    FCAT_HIRC-TABNAME = 'ITAB_KNA1'.
    APPEND FCAT_HIRC.
    FCAT_HIRC-COL_POS = 3.
    FCAT_HIRC-FIELDNAME = 'ORT01'.
    FCAT_HIRC-REF_TABNAME = 'KNA1'.
    FCAT_HIRC-TABNAME = 'ITAB_KNA1'.
    APPEND FCAT_HIRC.
    *FIELD CATLOG INTIALIZATION FOR SALES DOCUMENT HEADER
    FCAT_HIRC-COL_POS = 1.
    FCAT_HIRC-FIELDNAME = 'VBELN'.
    FCAT_HIRC-REF_TABNAME = 'VBAK'.
    FCAT_HIRC-TABNAME = 'ITAB_VBAK'.
    APPEND FCAT_HIRC.
    FCAT_HIRC-COL_POS = 2.
    FCAT_HIRC-FIELDNAME = 'VKBUR'.
    FCAT_HIRC-REF_TABNAME = 'VBAK'.
    FCAT_HIRC-TABNAME = 'ITAB_VBAK'.
    APPEND FCAT_HIRC.
    FCAT_HIRC-COL_POS = 3.
    FCAT_HIRC-FIELDNAME = 'NETWR'.
    FCAT_HIRC-REF_TABNAME = 'VBAK'.
    FCAT_HIRC-TABNAME = 'ITAB_VBAK'.
    APPEND FCAT_HIRC.
    DATA KEYINFO TYPE SLIS_KEYINFO_ALV.
    SELECT * FROM KNA1 INTO TABLE ITAB_KNA1.
    SELECT * FROM VBAK INTO TABLE ITAB_VBAK.
    EVENTS-FORM = 'TOP_FORM'.
    EVENTS-NAME = 'TOP_OF_PAGE'.
    APPEND EVENTS.
    *Customer's account number with credit limit reference
    KEYINFO-HEADER01 = 'KUNNR'.
    KEYINFO-ITEM01 = 'KUNNR'.
    KEYINFO-HEADER02 = 'KNKLI'.
    KEYINFO-ITEM02 = 'KNKLI'.
    CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
         EXPORTING
              I_CALLBACK_PROGRAM       = SY-CPROG
            I_CALLBACK_PF_STATUS_SET = ' '
            I_CALLBACK_USER_COMMAND  = ' '
            IT_EXCLUDING             =
    CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_HS_APPEND'
         EXPORTING
              IS_LAYOUT                  = LAYOUT
              IT_FIELDCAT                = FCAT_HIRC[]
              IS_KEYINFO                 = KEYINFO
              I_HEADER_TABNAME           = 'ITAB_KNA1'
              I_ITEM_TABNAME             = 'ITAB_VBAK'
              IT_EVENTS                  = EVENTS[]
            IT_SORT                    =
            I_TEXT                     = ' '
         TABLES
              T_OUTTAB_HEADER            = ITAB_KNA1
              T_OUTTAB_ITEM              = ITAB_VBAK
       EXCEPTIONS
            PROGRAM_ERROR              = 1
            MAXIMUM_OF_APPENDS_REACHED = 2
            OTHERS                     = 3
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
       EXPORTING
            I_INTERFACE_CHECK       = ' '
            IS_PRINT                =
            I_SCREEN_START_COLUMN   = 0
            I_SCREEN_START_LINE     = 0
            I_SCREEN_END_COLUMN     = 0
            I_SCREEN_END_LINE       = 0
       IMPORTING
            E_EXIT_CAUSED_BY_CALLER =
            ES_EXIT_CAUSED_BY_USER  =
       EXCEPTIONS
            PROGRAM_ERROR           = 1
            OTHERS                  = 2
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    FORM TOP_FORM.
    WRITE :/25 'CUSTOMER WISE SALES ORDER INFORMATION ' COLOR 3.
    ENDFORM.

  • How to enable excel downloading in ALV grid report.

    Hi all,
    How to enable excal downing in ALV grid report?
    Thanks in Advance.
    Siva Sankar.

    hi
    check the following code
    Example of a Simple ALV Grid Report
    REPORT  ZTUFI091                                .
    *& Report  ZDEMO_ALVGRID                                               *
    *& Example of a simple ALV Grid Report                                 *
    *& The basic requirement for this demo is to display a number of       *
    *& fields from the EKKO table.                                         *
    *REPORT  zdemo_alvgrid                 .
    TABLES:     ekko.
    type-pools: slis.                                 "ALV Declarations
    *Data Declaration
    TYPES: BEGIN OF t_ekko,
      ebeln TYPE ekpo-ebeln,
      ebelp TYPE ekpo-ebelp,
      statu TYPE ekpo-statu,
      aedat TYPE ekpo-aedat,
      matnr TYPE ekpo-matnr,
      menge TYPE ekpo-menge,
      meins TYPE ekpo-meins,
      netpr TYPE ekpo-netpr,
      peinh TYPE ekpo-peinh,
    END OF t_ekko.
    DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
          wa_ekko TYPE t_ekko.
    *ALV data declarations
    data: fieldcatalog type slis_t_fieldcat_alv with header line,
          gd_tab_group type slis_t_sp_group_alv,
          gd_layout    type slis_layout_alv,
          gd_repid     like sy-repid,
          gt_events     type slis_t_event,
          gd_prntparams type slis_print_alv.
    *Start-of-selection.
    START-OF-SELECTION.
    perform data_retrieval.
    perform build_fieldcatalog.
    perform build_layout.
    perform build_events.
    perform build_print_params.
    perform display_alv_report.
    *&      Form  BUILD_FIELDCATALOG
          Build Fieldcatalog for ALV Report
    form build_fieldcatalog.
    There are a number of ways to create a fieldcat.
    For the purpose of this example i will build the fieldcatalog manualy
    by populating the internal table fields individually and then
    appending the rows. This method can be the most time consuming but can
    also allow you  more control of the final product.
    Beware though, you need to ensure that all fields required are
    populated. When using some of functionality available via ALV, such as
    total. You may need to provide more information than if you were
    simply displaying the result
                  I.e. Field type may be required in-order for
                       the 'TOTAL' function to work.
      fieldcatalog-fieldname   = 'EBELN'.
      fieldcatalog-seltext_m   = 'Purchase Order'.
      fieldcatalog-col_pos     = 0.
      fieldcatalog-outputlen   = 10.
      fieldcatalog-emphasize   = 'X'.
      fieldcatalog-key         = 'X'.
    fieldcatalog-do_sum      = 'X'.
    fieldcatalog-no_zero     = 'X'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
      fieldcatalog-fieldname   = 'EBELP'.
      fieldcatalog-seltext_m   = 'PO Item'.
      fieldcatalog-col_pos     = 1.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
      fieldcatalog-fieldname   = 'STATU'.
      fieldcatalog-seltext_m   = 'Status'.
      fieldcatalog-col_pos     = 2.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
      fieldcatalog-fieldname   = 'AEDAT'.
      fieldcatalog-seltext_m   = 'Item change date'.
      fieldcatalog-col_pos     = 3.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
      fieldcatalog-fieldname   = 'MATNR'.
      fieldcatalog-seltext_m   = 'Material Number'.
      fieldcatalog-col_pos     = 4.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
      fieldcatalog-fieldname   = 'MENGE'.
      fieldcatalog-seltext_m   = 'PO quantity'.
      fieldcatalog-col_pos     = 5.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
      fieldcatalog-fieldname   = 'MEINS'.
      fieldcatalog-seltext_m   = 'Order Unit'.
      fieldcatalog-col_pos     = 6.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
      fieldcatalog-fieldname   = 'NETPR'.
      fieldcatalog-seltext_m   = 'Net Price'.
      fieldcatalog-col_pos     = 7.
      fieldcatalog-outputlen   = 15.
      fieldcatalog-datatype     = 'CURR'.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
      fieldcatalog-fieldname   = 'PEINH'.
      fieldcatalog-seltext_m   = 'Price Unit'.
      fieldcatalog-col_pos     = 8.
      append fieldcatalog to fieldcatalog.
      clear  fieldcatalog.
    endform.                    " BUILD_FIELDCATALOG
    *&      Form  BUILD_LAYOUT
          Build layout for ALV grid report
    form build_layout.
      gd_layout-no_input          = 'X'.
      gd_layout-colwidth_optimize = 'X'.
      gd_layout-totals_text       = 'Totals'(201).
    gd_layout-totals_only        = 'X'.
    gd_layout-f2code            = 'DISP'.  "Sets fcode for when double
                                            "click(press f2)
    gd_layout-zebra             = 'X'.
    gd_layout-group_change_edit = 'X'.
    gd_layout-header_text       = 'helllllo'.
    endform.                    " BUILD_LAYOUT
    *&      Form  DISPLAY_ALV_REPORT
          Display report using ALV grid
    form display_alv_report.
      gd_repid = sy-repid.
      call function 'REUSE_ALV_GRID_DISPLAY'
           exporting
                i_callback_program      = gd_repid
                i_callback_top_of_page   = 'TOP-OF-PAGE'  "see FORM
                i_callback_user_command = 'USER_COMMAND'
               i_grid_title           = outtext
                is_layout               = gd_layout
                it_fieldcat             = fieldcatalog[]
               it_special_groups       = gd_tabgroup
                it_events               = gt_events
                is_print                = gd_prntparams
                i_save                  = 'X'
               is_variant              = z_template
           tables
                t_outtab                = it_ekko
           exceptions
                program_error           = 1
                others                  = 2.
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
    endform.                    " DISPLAY_ALV_REPORT
    *&      Form  DATA_RETRIEVAL
          Retrieve data form EKPO table and populate itab it_ekko
    form data_retrieval.
    select ebeln ebelp statu aedat matnr menge meins netpr peinh
    up to 10 rows
      from ekpo
      into table it_ekko.
    endform.                    " DATA_RETRIEVAL
    Form  TOP-OF-PAGE                                                 *
    ALV Report Header                                                 *
    Form top-of-page.
    *ALV Header declarations
    data: t_header type slis_t_listheader,
          wa_header type slis_listheader,
          t_line like wa_header-info,
          ld_lines type i,
          ld_linesc(10) type c.
    Title
      wa_header-typ  = 'H'.
      wa_header-info = 'EKKO Table Report'.
      append wa_header to t_header.
      clear wa_header.
    Date
      wa_header-typ  = 'S'.
      wa_header-key = 'Date: '.
      CONCATENATE  sy-datum+6(2) '.'
                   sy-datum+4(2) '.'
                   sy-datum(4) INTO wa_header-info.   "todays date
      append wa_header to t_header.
      clear: wa_header.
    Total No. of Records Selected
      describe table it_ekko lines ld_lines.
      ld_linesc = ld_lines.
      concatenate 'Total No. of Records Selected: ' ld_linesc
                        into t_line separated by space.
      wa_header-typ  = 'A'.
      wa_header-info = t_line.
      append wa_header to t_header.
      clear: wa_header, t_line.
      call function 'REUSE_ALV_COMMENTARY_WRITE'
           exporting
                it_list_commentary = t_header.
               i_logo             = 'Z_LOGO'.
    endform.
          FORM USER_COMMAND                                          *
          --> R_UCOMM                                                *
          --> RS_SELFIELD                                            *
    FORM user_command USING r_ucomm LIKE sy-ucomm
                      rs_selfield TYPE slis_selfield.
    Check function code
      CASE r_ucomm.
        WHEN '&IC1'.
      Check field clicked on within ALVgrid report
        IF rs_selfield-fieldname = 'EBELN'.
        Read data table, using index of row user clicked on
          READ TABLE it_ekko INTO wa_ekko INDEX rs_selfield-tabindex.
        Set parameter ID for transaction screen field
          SET PARAMETER ID 'BES' FIELD wa_ekko-ebeln.
        Sxecute transaction ME23N, and skip initial data entry screen
          CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
        ENDIF.
      ENDCASE.
    ENDFORM.
    *&      Form  BUILD_EVENTS
          Build events table
    form build_events.
      data: ls_event type slis_alv_event.
      call function 'REUSE_ALV_EVENTS_GET'
           exporting
                i_list_type = 0
           importing
                et_events   = gt_events[].
      read table gt_events with key name =  slis_ev_end_of_page
                               into ls_event.
      if sy-subrc = 0.
        move 'END_OF_PAGE' to ls_event-form.
        append ls_event to gt_events.
      endif.
        read table gt_events with key name =  slis_ev_end_of_list
                               into ls_event.
      if sy-subrc = 0.
        move 'END_OF_LIST' to ls_event-form.
        append ls_event to gt_events.
      endif.
    endform.                    " BUILD_EVENTS
    *&      Form  BUILD_PRINT_PARAMS
          Setup print parameters
    form build_print_params.
      gd_prntparams-reserve_lines = '3'.   "Lines reserved for footer
      gd_prntparams-no_coverpage = 'X'.
    endform.                    " BUILD_PRINT_PARAMS
    *&      Form  END_OF_PAGE
    form END_OF_PAGE.
      data: listwidth type i,
            ld_pagepos(10) type c,
            ld_page(10)    type c.
      write: sy-uline(50).
      skip.
      write:/40 'Page:', sy-pagno .
    endform.
    *&      Form  END_OF_LIST
    form END_OF_LIST.
      data: listwidth type i,
            ld_pagepos(10) type c,
            ld_page(10)    type c.
      skip.
      write:/40 'Page:', sy-pagno .
    endform.
    hope it will help you
    regards
    sreelatha gullapalli

  • Functionality of Checkbox in ALV Grid Report

    Hi Experts,
    I created a ALV grid report with the checkbox as my first coloum and other fields as shown below. Initially, my ALV report displays as below. It is working fine till here.
    checkbox       customer     material      quantity       UOM         Sales Order    Delivery
                           C1                  M1           1                  KG
                           C1                   M2           2                  KG
                            C2                   M1          1                   KG
                            C2                  M2           2                   KG
                           C3                   M1          1                   KG
                           C3                   M2          2                   KG
                           C3                   M3           3                 KG
                            C4                  M1           1                  KG
                           C5                   M5           1                  KG
    I have created a push button on application toolbar for creating sales order and delivery using bapi's. When I click on my pushbutton, as of now it creates the SO and delivery for the first customer C1 and updates my Internal table with the sales order number and delivery number. If I need to create sales order for the second customer I need to run my ALV report again and so on for 3rd, 4th and 5th customers. It is also working fine till here.
    checkbox       customer     material      quantity       UOM     Sales Order     Delivery
                           C1                  M1           1                  KG          SO1               DEL1
                           C1                   M2           2                  KG         SO1               DEL1
                            C2                   M1          1                   KG
                            C2                  M2           2                   KG
                           C3                   M1          1                   KG
                           C3                   M2          2                   KG
                           C3                   M3           3                 KG
                            C4                  M1           1                  KG
                           C5                   M5           1                  KG
    Need help on this:
    When I select the check boxes as shown below and when I click the push button to create SO and Delivery then my program should create sales order and delivery for all the checked ones as shown below. What is the condition do I need to put here for selecting the checkbox.
    checkbox       customer     material      quantity       UOM     Sales Order     Delivery
    X                      C1                  M1           1                  KG         SO1               DEL1
    X                     C1                   M2           2                  KG         SO1               DEL1
                            C2                   M1          1                   KG
                            C2                  M2           2                   KG
    X                     C3                   M1          1                   KG        SO3             DEL3
    X                     C3                   M2          2                   KG        SO3             DEL3
    X                     C3                   M3           3                 KG          SO3            DEL3
                            C4                  M1           1                  KG
    X                     C5                   M5           1                  KG          SO5            DEL5
    I would really appreciate if somebody could help me / guide me on this. I will also post my code if someone needs to understand what I am doing exactly.
    Thanks.

    You need to use OO ABAP
    Use Class the class  1)  CL_GUI_ALV_GRID, 2) CL_GUI_CUSTOM_CONTAINER
    Create Sceen and container on same screen.
    Check following COde it used for printing purpose.
    Using AFTER_USER_COMMAND  Event you will find Check box selected entries.
    Capture those in another internal Table and use it for SO Creation
    DATA:  O_GRID TYPE REF TO CL_GUI_ALV_GRID,
           O_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
           T_FCAT TYPE LVC_T_FCAT,
           CONTAINER(15) TYPE C VALUE 'ET_CONTAINER'.
          CLASS EVENT_CLASS DEFINITION
    CLASS EVENT_CLASS DEFINITION.
      PUBLIC SECTION.
        METHODS: BEFORE_COMMAND FOR EVENT AFTER_USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM,
                 DOUBLE_CLICK_N  FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN,
                 TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID IMPORTING E_OBJECT.
    ENDCLASS.                    "EVENT_CLASS DEFINITION
          CLASS EVENT_CLASS IMPLEMENTATION
    CLASS EVENT_CLASS IMPLEMENTATION.
      METHOD BEFORE_COMMAND.
        IF E_UCOMM = 'PRINT'.
          CLEAR : W_FLAG.
          T_FINAL2 = T_FINAL.
          SORT T_FINAL2 BY COL_CHK .
          DELETE   T_FINAL2 WHERE COL_CHK = ' '.
          IF NOT T_FINAL2 IS INITIAL.
            LOOP AT T_FINAL2 INTO WA_FINAL.
              IF W_FLAG IS INITIAL.
      Does some of modification/s in control parameters
                W_CONTROL_PARAM-NO_OPEN   = 'X'.
                W_CONTROL_PARAM-NO_CLOSE  = 'X'.
                W_CONTROL_PARAM-PREVIEW   = 'X'.
                W_CONTROL_PARAM-NO_DIALOG = SPACE.
                W_OUTPUT_OPTIONS-TDNEWID = 'X'.
                W_OUTPUT_OPTIONS-TDIMMED = SPACE.
      Opens the smartform print-job
                CALL FUNCTION 'SSF_OPEN'
                  EXPORTING
                    OUTPUT_OPTIONS     = W_OUTPUT_OPTIONS
                    CONTROL_PARAMETERS = W_CONTROL_PARAM
                  EXCEPTIONS
                    FORMATTING_ERROR   = 1
                    INTERNAL_ERROR     = 2
                    SEND_ERROR         = 3
                    USER_CANCELED      = 4
                    OTHERS             = 5.
                IF SY-SUBRC EQ 0.
                  W_FLAG = 'X'.
                ELSE.
                 LEAVE LIST-PROCESSING.
                ENDIF.
              ENDIF.
              IF W_FLAG = 'X'.
                CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
                  EXPORTING
                    FORMNAME           = 'ZFORM_BIW_PRINT'
                  IMPORTING
                    FM_NAME            = LF_FM_NAME
                  EXCEPTIONS
                    NO_FORM            = 1
                    NO_FUNCTION_MODULE = 2
                    OTHERS             = 3.
                IF SY-SUBRC <> 0.
                ENDIF.
                IF SY-SUBRC = 0.
                  CALL FUNCTION LF_FM_NAME
                    EXPORTING
                      CONTROL_PARAMETERS = W_CONTROL_PARAM
                     V_VBELN            = WA_FINAL-VBELN
                      WA_FINAL           = WA_FINAL.
                   TABLES
                     T_FINAL            = T_FINAL.
                ELSE.
                  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
                ENDIF.
              ENDIF.
            ENDLOOP.
           * Close the smartform print job
            IF W_FLAG EQ 'X'.
              CALL FUNCTION 'SSF_CLOSE'
                EXCEPTIONS
                  FORMATTING_ERROR = 1
                  INTERNAL_ERROR   = 2
                  SEND_ERROR       = 3
                  OTHERS           = 4.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDMETHOD.                    "BEFORE_COMMAND

  • Short dump when exporting the ALV grid report in to spread sheet

    HI,
    I am facing a problem when downloading ALV grid report in to spread sheet LIST>EXPORT>LOCAL FILE -->SPREADSHEET.
    in shotdump the cursor shows : "assign cline+cbegin(clength) to <field_cont>."
    In SAP internal table LIST,in the first record the value of the filed LENG is 0. when i have changed this value ex:10 etc it is coming properly.
    Kindly help me
    Nagendra

    Is this a standard SAP report, or your own? Can you tell what your report does, if it is a custom ALV report?

  • ALV Grid Report spool problem with column with no data

    Hello All,
    I have created a simple alv grid report the report has a description field of 40 ch for which I have made the display length as 20 ch . This works fine in the foreground but when I run the report in background when there is no data in this column this being overwritten with the next column. Which is causing a mismatch between the header and the data below it.
    Also when I try to download the report in foreground into excel the columns are not matching with the headers this again happens for columns when there is no data.
    Kindly please suggest what is going wrong.
    Thanks,
    ranjan

    Hi,
    For checking the output from background job, check the job and enter JDBG in the command bar and execute.
    Check the field catalog and the table contents in debugging just before display.
    Edited by: Jayanthi Jayaraman on Dec 2, 2010 4:09 AM

Maybe you are looking for

  • How to install ORAESB and ORAWSM schema

    I installed oracle database 10.2. I'm not clear as to how to install ORAESB and ORAWSM schemas which are required for SOA Suite 10.1.3 installation.

  • Need to create a block based on view

    We can create a block based on procedure...but whats the need to do so...please can anybody explain.

  • Display half black and half white.. help please?

    Hi there, I was wondering if anyone can help me with this. Recently, (sometimes) after i start my powerbook up or awake it from sleep.. the display instead of white... it's half white and half black. Top half is white and I can see the apple logo (st

  • Problem Navigating Apple Support Discussions

    Whenever Safari 2.0.3 loads a web page in the Apple Support Discussions, all of the items beginning with "https://ssl.apple.com" return the error message "bad server certificate" in the Activity window.  Once a page loads, some of the navigation butt

  • Muse Preview Doesn't Match Browser Preview

    I have a vertical rectangle on my pages (custom menu on top) that appears appropriately when I preview the pages in Muse.  However, when I preview the site in a browser the rectangle cuts off halfway down on 2 of the 3 pages.  I've grouped the elemen