Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ALV Hierarchical Sequential Report

Former Member
0 Likes
3,601

Please tell me the process which steps i have to follow to create ALV Hieracrchical report.If possible send me example also.

Please tell me the process which steps i have to follow to create ALV Hieracrchical report.If possible send me example also.

8 REPLIES 8
Read only

Laxmana_Appana_
Active Contributor
0 Likes
1,648

Hi,

Check this example report : BALVHD01

Laxman

Read only

Former Member
0 Likes
1,648

Hi,

Check this code..

report  ZTEST_HIER line-count 65
                             line-size 200
                             no standard page heading
                             message-id zz.
type-pools: slis.

types: begin of ty_head,
      vbeln like vbak-vbeln,
      kunnr like vbak-kunnr,
      name  like kna1-name1,
      end of ty_head.

types: begin of ty_item,
       vbeln like vbap-vbeln,
       posnr like vbap-posnr,
       matnr like vbap-matnr,
       maktx like makt-maktx,
       check(1),
       end of ty_item.
data: it_item type table of ty_item.
data: it_header type table of ty_head,
       it_events type slis_t_event,          "Events.
       it_fieldcat      type slis_t_fieldcat_alv.

data: x_layout         type slis_layout_alv,
      x_fieldcat       type slis_fieldcat_alv,
      x_key           type slis_keyinfo_alv,
      x_events type slis_alv_event,      "Event
      x_vbeln like vbak-vbeln,
      x_item type ty_item.
constants: c_s(1) value '/'.
data: v_flag.
*---------------------------------------------------------------------*
*                   SELECTION-SCREEN                                  *
*---------------------------------------------------------------------*
selection-screen begin of block blk with frame title text-001.
parameters: p_vbeln like vbak-vbeln.      "Sales order Number
selection-screen end of block blk.

at selection-screen.
  if not p_vbeln is initial.
    select single vbeln
           into x_vbeln
           from vbak
           where vbeln = p_vbeln.
    if sy-subrc <> 0.
      message e002 with 'Please enter valid Sales Order'(020).
    endif.
  endif.
*----------------------------------------------------------------------*
*       CLASS lcl_bill_complete DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_bill_complete definition.
  public section.
    methods:get_header_data,
            get_item_data,
            show_data,
            fill_fieldcat,
            fill_events,
            top_of_page.
endclass.                    "lcl_bill_complete DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_bill_complete IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_bill_complete implementation.
  method get_header_data.
    select vbak~vbeln
           vbak~kunnr
           kna1~name1
           into table it_header
           from vbak join kna1
           on vbak~kunnr = kna1~kunnr
           where vbak~vbeln = p_vbeln.
  endmethod.                    "get_header_data
  method get_item_data.
    select vbap~vbeln
           vbap~posnr
           vbap~matnr
           makt~maktx
           into corresponding fields of table it_item
           from vbap join makt
           on vbap~matnr = makt~matnr
           where vbap~vbeln = p_vbeln
            and  makt~spras = 'EN'.
  endmethod.                    "get_item_data

  method show_data.
    x_key-header01 = 'VBELN'.
*  x_key-header02 = 'TKNUM'.

    x_key-item01   = 'VBELN'.
    x_key-item02   = 'POSNR'.


    call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
      exporting
        i_callback_program       = sy-repid
        is_layout                = x_layout
        it_fieldcat              = it_fieldcat[]
        i_tabname_header         = 'IT_HEADER'
        i_tabname_item           = 'IT_ITEM'
        i_callback_pf_status_set = 'STATUS'
        i_callback_user_command  = 'USER_COMMAND'
        is_keyinfo               = x_key
        it_events                = it_events
      tables
        t_outtab_header          = it_header
        t_outtab_item            = it_item
      exceptions
        program_error            = 1
        others                   = 2.
  endmethod.                    "show_data
  method fill_fieldcat.
    data: l_pos type i.
    x_layout-header_text      = 'HEADER'.
    x_layout-item_text        = 'ITEM'.
    x_layout-default_item     = ' '.
    x_layout-no_keyfix        = 'X'.
    x_layout-box_tabname      = 'IT_ITEM'.

    l_pos = l_pos + 1.
*- Sales Order Number
    x_fieldcat-fieldname   = 'VBELN'.
    x_fieldcat-tabname    = 'IT_HEADER'.
    x_fieldcat-seltext_m   = 'Sales Order'(017).
    x_fieldcat-outputlen  = 11.
    x_fieldcat-col_pos     = l_pos.
    append x_fieldcat to it_fieldcat.
    clear  x_fieldcat.
    l_pos = l_pos + 1.

    x_fieldcat-fieldname   = 'KUNNR'.
    x_fieldcat-tabname    = 'IT_HEADER'.
    x_fieldcat-seltext_m   = 'Sold-to Party'(010).
    x_fieldcat-outputlen  = 13.
    x_fieldcat-col_pos     = l_pos.
    append x_fieldcat to it_fieldcat.
    clear  x_fieldcat.
    l_pos = l_pos + 1.

    x_fieldcat-fieldname   = 'NAME'.
    x_fieldcat-tabname    = 'IT_HEADER'.
    x_fieldcat-outputlen  = 15.
    x_fieldcat-seltext_m   = 'Sold-to name'(011).
    x_fieldcat-col_pos     = l_pos.
    append x_fieldcat to it_fieldcat.
    clear  x_fieldcat.
    l_pos = l_pos + 1.

    x_fieldcat-fieldname   = 'CHECK'.
    x_fieldcat-tabname    = 'IT_ITEM'.
    x_fieldcat-checkbox   = 'X'.
    x_fieldcat-input  = 'X'.
    x_fieldcat-edit  = 'X'.
    x_fieldcat-seltext_m   = ' '.
    x_fieldcat-outputlen  = 2.
    x_fieldcat-col_pos     = l_pos.
    append x_fieldcat to it_fieldcat.
    clear  x_fieldcat.
    l_pos = l_pos + 1.
    x_fieldcat-fieldname   = 'VBELN'.
    x_fieldcat-tabname    = 'IT_ITEM'.
    x_fieldcat-seltext_m   = 'Sales Order'(017).
    x_fieldcat-outputlen  = 11.
    x_fieldcat-tech = 'X'.
    x_fieldcat-col_pos     = l_pos.
    append x_fieldcat to it_fieldcat.
    clear  x_fieldcat.
    l_pos = l_pos + 1.
*- Sales Order Item
    x_fieldcat-fieldname   = 'POSNR'.
    x_fieldcat-tabname    = 'IT_ITEM'.
    x_fieldcat-seltext_m   = 'SO Item'(018).
    x_fieldcat-outputlen  = 7.
    x_fieldcat-col_pos     = l_pos.
    append x_fieldcat to it_fieldcat.
    clear  x_fieldcat.
    l_pos = l_pos + 1.

    x_fieldcat-fieldname   = 'MATNR'.
    x_fieldcat-tabname    = 'IT_ITEM'.
    x_fieldcat-outputlen  = 18.
    x_fieldcat-seltext_m   = 'Material number'(012).
    x_fieldcat-col_pos     = l_pos.
    append x_fieldcat to it_fieldcat.
    clear  x_fieldcat.
    l_pos = l_pos + 1.

    x_fieldcat-fieldname   = 'MAKTX'.
    x_fieldcat-tabname    = 'IT_ITEM'.
    x_fieldcat-outputlen  = 40.
    x_fieldcat-seltext_m   = 'Material Description'(013).
    x_fieldcat-col_pos     = l_pos.
    append x_fieldcat to it_fieldcat.
    clear  x_fieldcat.

  endmethod.                    "fill_fieldcat
*--Fill the events table
  method fill_events.
*-  Top of page
    x_events-name =  'TOP_OF_PAGE'.
    x_events-form =  'TOP_OF_PAGE'.
    append x_events to it_events.
  endmethod.                    "fill_events
"fill_events
  method top_of_page.
*-  Call Steelcase Standard Header
write 'top_of_page here'.
  endmethod.                    "top_of_page
endclass.                    "lcl_bill_complete IMPLEMENTATION

start-of-selection.
  data: obj type ref to lcl_bill_complete.
  create object obj.
  call method obj->get_header_data.
  call method obj->get_item_data.
  call method obj->fill_fieldcat.
  call method obj->fill_events.
  call method obj->show_data.
*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*      TOP_OF_PAGE
*----------------------------------------------------------------------*
form top_of_page.
*-To show the top of page
  call method obj->top_of_page.
endform.                    "top_of_page

Regards

vijay

Read only

Former Member
0 Likes
1,648

Hi,

The data in hierarchical-sequential lists is displayed by calling function module

REUSE_ALV_HIERSEQ_LIST_DISPLAY.

Two (only) hierarchy levels - header and item - can be represented.

Minimum parameters to be transferred to the function:

An internal table with the header information to output

An internal table with the item information to output

A structure with general layout information for list design (optional)

A field catalogue in the form of an internal table.

A structure with links between the fields in the header and item tables.


CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'                                 
   EXPORTING                                                      
        I_TABNAME_HEADER 	    	= 'GT_OUTTAB_HEADER'
	I_TABNAME_ITEM  	    	= 'GT_OUTTAB_ITEM' 
	I_STRUCTURE_NAME_HEADER = 'SCARR'
  	I_STRUCTURE_NAME_ITEM	= 'SPFLI'
	IT_FIELDCAT		= GT_FIELDCAT
	IS_KEYINFO		= GS_KEYINFO
TABLES   
   	T_OUTTAB_HEADER 	    	= GT_OUTTAB_HEADER
	T_OUTTAB_ITEM     	    	= GT_OUTTAB_ITEM.                        

<b>Linking Header and Item Fields</b>

is_keyinfo forms the link between the header table and the item table.

This structure contains the corresponding field names of the common keys between the header and item tables.

The foreign keys are recorded in fields is_keyinfo-headerxx and is_keyinfo-itemxx (where xx can be 01 to 05).

Thus the key between the header and the detail can be specified with upto 5 fields.

<b>Example</b>


TYPE-POOLS : slis.

DATA: i_VBRK TYPE STANDARD TABLE OF YVBRK_LIST
      INITIAL SIZE 0 WITH HEADER LINE.
DATA: i_VBRP TYPE STANDARD TABLE OF YVBRP_LIST
      INITIAL SIZE 0 WITH HEADER LINE.

DATA: KEY_INFO             TYPE SLIS_KEYINFO_ALV,
      REPORT_ID            LIKE SY-REPID,
      TABLE_FIELDCAT       TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GT_EVENTS            TYPE SLIS_T_EVENT,
      GT_SORT              TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE,
      GS_LAYOUT            TYPE SLIS_LAYOUT_ALV,
      GT_LIST_TOP_OF_PAGE  TYPE SLIS_T_LISTHEADER,
      G_TOP_OF_PAGE        TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
      G_TOP_OF_LIST        TYPE SLIS_FORMNAME VALUE 'TOP_OF_LIST'.

INITIALIZATION.
  REPORT_ID = SY-REPID.

  KEY_INFO-HEADER01 = 'VBELN'.  
  KEY_INFO-ITEM01   = 'VBELN'.
  KEY_INFO-HEADER02 = SPACE.
  KEY_INFO-ITEM02   = 'NETWR'.

  GS_LAYOUT-GROUP_CHANGE_EDIT = 'X'.

  GT_SORT-FIELDNAME = 'VBELN'.
  GT_SORT-TABNAME   = '1'.
  GT_SORT-SPOS      = 1.
  GT_SORT-UP        = 'X'.
  GT_SORT-SUBTOT    = 'X'.
  GT_SORT-GROUP     = '*'.
  APPEND GT_SORT.
GT_SORT-FIELDNAME = 'POSNR'.
GT_SORT-TABNAME   = '2'.
GT_SORT-SPOS      = 2.
GT_SORT-UP        = 'X'.
GT_SORT-SUBTOT    = 'X'.
GT_SORT-GROUP     = ''.
APPEND GT_SORT.

TABLE_FIELDCAT-FIELDNAME = 'VBELN'.
TABLE_FIELDCAT-TABNAME   = '1'.
TABLE_FIELDCAT-COL_POS   = '1'.
TABLE_FIELDCAT-OUTPUTLEN = 17.
TABLE_FIELDCAT-DO_SUM    = ' '.
APPEND TABLE_FIELDCAT.

TABLE_FIELDCAT-FIELDNAME = 'POSNR'.
TABLE_FIELDCAT-TABNAME   = '2'.
TABLE_FIELDCAT-COL_POS   = '1'.
TABLE_FIELDCAT-OUTPUTLEN = 14. 

TABLE_FIELDCAT-DO_SUM      = ' '.
APPEND TABLE_FIELDCAT.

  TABLE_FIELDCAT-FIELDNAME = 'NETWR'.
  TABLE_FIELDCAT-TABNAME   = '2'.
  TABLE_FIELDCAT-COL_POS   = '2'.
  TABLE_FIELDCAT-OUTPUTLEN = 15.
  TABLE_FIELDCAT-DO_SUM    = 'X'.
  APPEND TABLE_FIELDCAT.

  PERFORM EVENTTAB_BUILD USING GT_EVENTS[].

START-OF-SELECTION.
        Select VBELN
               FKART
               BELNR
               into CORRESPONDING FIELDS OF table i_vbrk
               from vbrk
               where vbeln > '0090000121' and  vbeln < '0090000135'.

      Select VBELN
             POSNR
             NETWR
             into CORRESPONDING FIELDS OF table i_vbrp
             from vbrp
             for all entries in i_vbrk
             where vbeln = i_vbrk-vbeln.

      PERFORM write_report.

FORM EVENTTAB_BUILD USING RT_EVENTS TYPE SLIS_T_EVENT.

*"Registration of events to happen during list display
  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
            I_LIST_TYPE = 0
       IMPORTING
            ET_EVENTS   = RT_EVENTS.
  READ TABLE RT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
                           INTO LS_EVENT.
  IF SY-SUBRC = 0.
    MOVE G_TOP_OF_PAGE TO LS_EVENT-FORM.
    APPEND LS_EVENT TO RT_EVENTS.
  ENDIF.
ENDFORM.

FORM TOP_OF_PAGE.
  DATA: LS_LINE TYPE SLIS_LISTHEADER.
* Header Data
  REFRESH GT_LIST_TOP_OF_PAGE.
  CLEAR LS_LINE.
  LS_LINE-TYP  = 'H'.
  LS_LINE-INFO = 'Hierarchical Lists'.
  APPEND LS_LINE TO GT_LIST_TOP_OF_PAGE.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
       EXPORTING
            IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
ENDFORM.

Form write_report.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
      EXPORTING
         I_CALLBACK_PROGRAM             = REPORT_ID
	     IS_LAYOUT                      = GS_LAYOUT
         IT_FIELDCAT                    = TABLE_FIELDCAT[]
         IT_SORT                        = GT_SORT[]
         IT_EVENTS                      = GT_EVENTS[]
         I_TABNAME_HEADER               = '1'
         I_TABNAME_ITEM                 = '2'
         I_STRUCTURE_NAME_HEADER        = 'YVBRK_LIST'
         I_STRUCTURE_NAME_ITEM          = 'YVBRP_LIST'
         IS_KEYINFO                     = KEY_INFO
    TABLES
        T_OUTTAB_HEADER                = I_VBRK
        T_OUTTAB_ITEM                  = I_VBRP.
ENDFORM.

<b>Reward Points and Mark helpful Answers</b>

Read only

Former Member
0 Likes
1,648

Hi praveen kumar ,

here is a sample hierarchial Tree Programming .

REPORT ZVVMUR12 .

TABLES: KNVH.

TYPES: BEGIN OF WORKTYPE,

LEVEL(2),

HKUNNR LIKE KNVH-KUNNR,

KUNNR LIKE KNVH-HKUNNR,

END OF WORKTYPE.

DATA: IT_KNVH TYPE TABLE OF WORKTYPE,

WA_KNVH LIKE LINE OF IT_KNVH,

IT_TEMP TYPE TABLE OF WORKTYPE,

WA_TEMP LIKE LINE OF IT_TEMP,

IT_WORK TYPE TABLE OF WORKTYPE,

WA_WORK LIKE LINE OF IT_WORK.

DATA : BEGIN OF IT_NODES OCCURS 0.

INCLUDE STRUCTURE SNODETEXT.

DATA : END OF IT_NODES.

CONSTANTS: NUMBER_OF_LEVELS TYPE I VALUE 6.

PARAMETER: P_HKUNNR LIKE KNVH-HKUNNR.

START-OF-SELECTION.

  • Parent = 1. hierarchy node

WA_TEMP-KUNNR = P_HKUNNR.

APPEND WA_TEMP TO IT_TEMP.

WA_WORK-KUNNR = WA_TEMP-KUNNR.

WA_WORK-LEVEL = 1.

APPEND WA_WORK TO IT_WORK.

  • Reading customer hierarchy (max. 6 level)

DO NUMBER_OF_LEVELS TIMES.

CHECK NOT IT_TEMP IS INITIAL.

SELECT KUNNR HKUNNR

FROM KNVH

INTO CORRESPONDING FIELDS OF TABLE IT_KNVH

FOR ALL ENTRIES IN IT_TEMP

WHERE HKUNNR = IT_TEMP-KUNNR.

LOOP AT IT_KNVH INTO WA_KNVH.

WA_KNVH-LEVEL = SY-INDEX + 1.

APPEND WA_KNVH TO IT_WORK.

ENDLOOP.

IT_TEMP[] = IT_KNVH[].

ENDDO.

  • Hierarchy nodes -> tree control

LOOP AT IT_WORK INTO WA_WORK WHERE LEVEL = 1.

PERFORM MAKE_NODE.

LOOP AT IT_WORK INTO WA_WORK WHERE LEVEL = 2 AND

HKUNNR = WA_WORK-KUNNR.

PERFORM MAKE_NODE.

LOOP AT IT_WORK INTO WA_WORK WHERE LEVEL = 3 AND

HKUNNR = WA_WORK-KUNNR.

PERFORM MAKE_NODE.

LOOP AT IT_WORK INTO WA_WORK WHERE LEVEL = 4 AND

HKUNNR = WA_WORK-KUNNR.

PERFORM MAKE_NODE.

LOOP AT IT_WORK INTO WA_WORK WHERE LEVEL = 5 AND

HKUNNR = WA_WORK-KUNNR.

PERFORM MAKE_NODE.

LOOP AT IT_WORK INTO WA_WORK WHERE LEVEL = 6 AND

HKUNNR = WA_WORK-KUNNR.

PERFORM MAKE_NODE.

ENDLOOP.

ENDLOOP.

ENDLOOP.

ENDLOOP.

ENDLOOP.

ENDLOOP.

  • Making the tree control

CALL FUNCTION 'RS_TREE_CONSTRUCT'

TABLES

NODETAB = IT_NODES

EXCEPTIONS

TREE_FAILURE = 1.

  • Display the tree control

DATA : F15 TYPE C.

CALL FUNCTION 'RS_TREE_LIST_DISPLAY'

EXPORTING

CALLBACK_PROGRAM = SY-REPID

IMPORTING

F15 = F15 .

FORM MAKE_NODE.

IT_NODES-NAME = WA_WORK-KUNNR.

IT_NODES-COLOR = 1.

IT_NODES-INTENSIV = 1.

IT_NODES-TEXT = WA_WORK-KUNNR.

IT_NODES-TLENGTH = 16.

IT_NODES-TLEVEL = WA_WORK-LEVEL.

IT_NODES-TCOLOR = 1.

IT_NODES-TINTENSIV = 1.

APPEND IT_NODES.

ENDFORM.

Regards,

kiran B

Read only

Former Member
0 Likes
1,648

See this report,

Rgds,

TM

REPORT  z_alv NO STANDARD PAGE HEADING LINE-SIZE 220
                                           MESSAGE-ID zsree.

TYPE-POOLS: slis.  " SAP standard type pools

TYPES: BEGIN OF t_tab,
        vbeln TYPE vbak-vbeln, " Sales and distribution document number
        erdat TYPE vbak-erdat, " Date on which the record was created
        kunnr TYPE vbak-kunnr, " Sold-to party 1
        vdatu TYPE vbak-vdatu, " Requested delivery date
       END OF t_tab.

TYPES: BEGIN OF t_tab1,
        vbeln TYPE vbap-vbeln,   " Sales and distribution
                                         " document number
        posnr TYPE vbap-posnr,   " Sales document item
        matnr TYPE vbap-matnr,   " Material number
        arktx TYPE vbap-arktx,   " Short text for sales order item
        kwmeng TYPE vbap-kwmeng, " Cumulative order quantity
                                              " in sales units
       END OF t_tab1.

TYPES: BEGIN OF t_tab2,
        bstkd TYPE vbkd-bstkd, " Customer purchase order number
        vbeln TYPE vbkd-vbeln, " Sales and distribution document number
       END OF t_tab2.

TYPES: BEGIN OF t_tab3,
        vbeln TYPE vbep-vbeln, " Sales and distribution document number
        posnr TYPE vbep-posnr, " Sales document item
        etenr TYPE vbep-etenr, " Schedule line
        bddat TYPE vbep-bddat, " Requirement date
                                   " (deadline for procurement)
        bmeng TYPE vbep-bmeng, " Confirmed quantity
        vrkme TYPE vbep-vrkme, " Sales unit
       END OF t_tab3.

TYPES: BEGIN OF t_tab4,
        kunnr TYPE kna1-kunnr,  " Customer number
        name1 TYPE kna1-name1,                              " Name
       END OF t_tab4.

TYPES: BEGIN OF t_tab5,
        vbeln TYPE vbuk-vbeln,  " Sales and distribution document number
        lfgsk TYPE vbuk-lfgsk,  " Overall delivery status for all items
       END OF t_tab5.

TYPES: BEGIN OF t_tab6,
        vbeln TYPE vbup-vbeln, " Sales and distribution document number
        posnr TYPE vbup-posnr, " Item number of the SD document
       END OF t_tab6.

TYPES: BEGIN OF t_tab8,
        vbeln TYPE vbak-vbeln, " Sales and distribution document number
       END OF t_tab8.

***********************************************************************
*               G L O B A L   V A R I A B L E S
***********************************************************************

DATA: v_repid          TYPE sy-repid,  " Program name
*---  To store the internal table name
      v_tabname        TYPE slis_tabname,
*---  Internal table to get PO catalog details
      it_fieldcat1     TYPE slis_t_fieldcat_alv,
*---  Internal table to get SO catalog details
      it_fieldcat2     TYPE slis_t_fieldcat_alv,
*---  Internal table to get SE catalog details
      it_fieldcat3     TYPE slis_t_fieldcat_alv,
*---  Work area to change field catalog.
      wa_fieldcat1     TYPE slis_fieldcat_alv,
*---  Internal table to get Events
      it_events        TYPE slis_t_event,
*---  Internal table to get Events
      it_events1       TYPE slis_t_event,
*---  Internal table to get Events
      it_events2       TYPE slis_t_event,
*---  Work area for Events
      wa_events        TYPE slis_alv_event,
*---  Work area for Layout
      wa_layout        TYPE slis_layout_alv,
*---  Internal table for Keyinfo
      it_keyinfo       TYPE slis_keyinfo_alv,
*---  To store the selected field value
      v_selfield_value TYPE slis_selfield-value,
*---  To store the variant types
      i_variant        LIKE disvariant,
*---  To store the hierarchical layout types
      i_variant1       LIKE disvariant,
*---  To get the total lines of table IT_VBEP1
      v_linc TYPE i.


***********************************************************************
*       V A R I A B L E S   F O R   S E L E C T -  O P T I O N S
***********************************************************************

DATA: v_auart  TYPE vbak-auart,  " Sales document
      v_erdat  TYPE vbak-erdat,  " Date on which the record was created
      v_ernam  TYPE vbak-ernam,  " Name of person who created the object
      v_vkorg  TYPE vbak-vkorg,  " Sales organization
      v_vtweg  TYPE vbak-vtweg,  " Distribution channel
      v_spart  TYPE vbak-spart,  " Division
      v_vbeln  TYPE vbak-vbeln,  " Sales document
      v_bstkd  TYPE vbkd-bstkd,  " Customer purchase order number
      v_kunnr  TYPE vbak-kunnr,  " Customer number 1
      v_werks  TYPE vbap-werks,  " Plant (own or external)
      v_lifsk  TYPE vbak-lifsk,  " Delivery block
      v_lfgsk  TYPE vbuk-lfgsk,  " Delivery block (Document Header)
      v_lfgsa  TYPE vbup-lfgsa,  " Overall delivery status of the item
      v_spart1 TYPE vbap-spart,  " Division
      v_prctr  TYPE vbap-prctr.  " Profit Center

***********************************************************************
*              F L A G S   D E C L A R A T I O N
***********************************************************************
DATA: fg_error.        " Flag to check whether the data populated or not

***********************************************************************
*      I N T E R N A L   T A B L E S   D E C L A R A T I O N
***********************************************************************

*---Declaring Internal Table IT_VBAK Of type T_TAB
DATA: it_vbak TYPE STANDARD TABLE OF t_tab WITH HEADER LINE.

*---Declaring Internal Table IT_VBAP Of type T_TAB1
DATA: it_vbap TYPE STANDARD TABLE OF t_tab1 WITH HEADER LINE.

*---Declaring Internal Table IT_VBKD Of type T_TAB2
DATA: it_vbkd TYPE STANDARD TABLE OF t_tab2 WITH HEADER LINE.

*---Declaring Internal Table IT_VBEP Of type T_TAB3
DATA: it_vbep TYPE STANDARD TABLE OF t_tab3 WITH HEADER LINE.

*---Declaring Internal Table IT_VBEP1 Of Type T_TAB3
DATA: it_vbep1 TYPE STANDARD TABLE OF t_tab3 WITH HEADER LINE.

*---Declaring Internal Table IT_KNA1 Of type T_TAB4
DATA: it_kna1 TYPE STANDARD TABLE OF t_tab4 WITH HEADER LINE.

*---Declaring Internal Table IT_VBUK Of type T_TAB5
DATA: it_vbuk TYPE STANDARD TABLE OF t_tab5 WITH HEADER LINE.

*---Declaring Internal Table IT_VBUP Of type T_TAB6
DATA: it_vbup TYPE STANDARD TABLE OF t_tab6 WITH HEADER LINE.

*---Declaring Internal Table of type VBAK
DATA: it_vbak1 TYPE STANDARD TABLE OF t_tab8 WITH HEADER LINE.

*---Declaring a final internal table which contains PO details
DATA: BEGIN OF it_final1 OCCURS 0,
        bstkd LIKE vbkd-bstkd,  " Customer purchase order number
        kunnr LIKE vbak-kunnr,  " Customer number
        name1 LIKE kna1-name1,  " Name
        vdatu LIKE vbak-vdatu,  " Requested delivery date
      END OF it_final1.

*---Declaring a final internal table which contains SO details
DATA: BEGIN OF it_final2 OCCURS 0,
        vbeln LIKE vbak-vbeln,  " Sales and distribution document number
        vdatu LIKE vbak-vdatu,  " Requested delivery date
        erdat LIKE vbak-erdat,  " Date on which the record was created
        lfgsk LIKE vbuk-lfgsk,  " Overall delivery status for all items
        check,
      END OF it_final2.

*---Declaring a final internal table which contains SE details
DATA: BEGIN OF it_final3 OCCURS 0,
        vbeln  LIKE vbep-vbeln,  " Sales and distribution
                                           " document number
        posnr  LIKE vbep-posnr,  " Sales document item
        etenr  LIKE vbep-etenr,  " Schedule line
        matnr  LIKE vbap-matnr,  " Material number
        arktx  LIKE vbap-arktx,  " Short text for sales order item
        bddat  LIKE vbep-bddat,  " Requirement date
                                   " (deadline for procurement)
        kwmeng LIKE vbap-kwmeng, " Cumulative order quantity
                                   " in sales units
        bmeng  LIKE vbep-bmeng,  " Confirmed quantity
      END OF it_final3.

*---Declaring an internal table which contains SO details of selected PO
DATA: BEGIN OF it_final4 OCCURS 0,
        vbeln LIKE vbak-vbeln,  " Sales and distribution
                                  " document number
        vdatu LIKE vbak-vdatu,  " Requested delivery date
        erdat LIKE vbak-erdat,  " Date on which the record was created
        lfgsk LIKE vbuk-lfgsk,  " Overall delivery status for all items
        check,
      END OF it_final4.

*---Declaring an internal table which contains SE details of selected PO
DATA: BEGIN OF it_final5 OCCURS 0,
        vbeln  LIKE vbep-vbeln, " Sales and distribution
                                  " document number
        posnr  LIKE vbep-posnr, " Item number of the SD document
        etenr  LIKE vbep-etenr, " Schedule line
        matnr  LIKE vbap-matnr, " Material number
        arktx  LIKE vbap-arktx, " Short text for sales order item
        bddat  LIKE vbep-bddat, " Requirement date
                                  " (deadline for procurement)
        kwmeng LIKE vbap-kwmeng, " Cumulative order quantity in
                                   " sales unit
        bmeng  LIKE vbep-bmeng, "  Confirmed quantity
      END OF it_final5.


***********************************************************************
*                S E L E C T I O N    S C R E E N
***********************************************************************

*---Selection screen tab 1
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:  s_auart FOR v_auart,  " Sales document type
                 s_erdat FOR v_erdat,  " Date on which the
                                              " record was created
                 s_ernam FOR v_ernam NO INTERVALS NO-EXTENSION.
" Name of Person who Created the Object
SELECTION-SCREEN END OF BLOCK b1.

*---Selection screen tab 2
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS:  s_vkorg FOR v_vkorg,  " Sales organization
                 s_vtweg FOR v_vtweg,  " Distribution channel
                 s_spart FOR v_spart.  " Division
SELECTION-SCREEN END OF BLOCK b2.

*---Subscreen 1
SELECTION-SCREEN BEGIN OF SCREEN 110 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME.
SELECT-OPTIONS:  s_vbeln FOR v_vbeln,  " Sales document
                 s_bstkd FOR v_bstkd,  " Customer purchase
                                                 " order number
                 s_kunnr FOR v_kunnr,  " Customer number
                 s_werks FOR v_werks,  " Plant (Own or External)
                 s_lifsk FOR v_lifsk.  " Delivery block
" (document header)
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN END OF SCREEN 110.

*---Subscreen 2
SELECTION-SCREEN BEGIN OF SCREEN 120 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME.
SELECT-OPTIONS:  s_lfgsk FOR v_lfgsk,  " Delivery block
                                               " (document header)
                 s_lfgsa FOR v_lfgsa,  " Overall delivery
                                               " status of the item
                 s_spart1 FOR v_spart1, " Division
                 s_prctr FOR v_prctr.  " Profit center
SELECTION-SCREEN END OF BLOCK b4.
SELECTION-SCREEN END OF SCREEN 120.

*---Tab 3 for Selection screen
SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 7 LINES,
                  TAB (20) button1 USER-COMMAND push1,
                  TAB (20) button2 USER-COMMAND push2,
                  END OF BLOCK mytab.

*---Selection screen to choose the type of the list to be displayed
SELECTION-SCREEN BEGIN OF BLOCK b6 WITH FRAME TITLE text-005.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(18) text-006 FOR FIELD p_radio1.
PARAMETERS: p_radio1 RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND sree.
SELECTION-SCREEN COMMENT 35(20) text-007 FOR FIELD p_radio2.
PARAMETERS: p_radio2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b6.

*---Selection screen to choose the list typr from a variant
SELECTION-SCREEN BEGIN OF BLOCK b7 WITH FRAME TITLE text-008.
PARAMETERS: p_var TYPE disvariant-variant MODIF ID abc.
SELECTION-SCREEN END OF BLOCK b7.

***********************************************************************
*                I N I T I A L I Z A T I O N
***********************************************************************

INITIALIZATION.

  PERFORM initialization. " Initializes different fields

***********************************************************************
*            A T   S E L E C T I O N   S C R E E N
***********************************************************************

AT SELECTION-SCREEN.

  PERFORM at_selection_screen. " At selection screen validations


***********************************************************************
*       A T   S E L E C T I O N   S C R E E N   O U T P U T
***********************************************************************

AT SELECTION-SCREEN OUTPUT.

*---If radio button 1 is clicked disables the parameter P_VAR
  IF p_radio1 = 'X'.
    LOOP AT SCREEN.
      CHECK screen-group1 = 'ABC'.
      screen-active = 0.
      MODIFY SCREEN.
    ENDLOOP.
  ENDIF.

***********************************************************************
* A T  S E L E C T I O N   S C R E E N   O N   V A L U E  R E Q U E S T
***********************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.

  PERFORM f4_for_variant. " Gets the variant to select the layout


***********************************************************************
*             S T A R T   O F   S E L E C T I O N
***********************************************************************

START-OF-SELECTION.

  PERFORM get_data. " Gets the data into the internal tables
  PERFORM get_final_data. " Gets the final data to be displayed

  IF it_vbkd[] IS INITIAL.  " If no data found gives an information msg
    MESSAGE i003.
    fg_error = 'X'.
    STOP.
  ENDIF.

***********************************************************************
*             E N D   O F   S E L E C T I O N
***********************************************************************
END-OF-SELECTION.

  PERFORM key_info. " Gets the header and item key info

  IF NOT fg_error = 'X'.

    IF p_radio1 = 'X'.

      PERFORM get_events. " Gets the events

      v_tabname = 'IT_FINAL1'.
*---  Populates the field catalog for PO details using table IT_FINAL1
      PERFORM fieldcatalog_merge1 USING v_tabname
                                       it_fieldcat1.
*---  Modifies the field catalog for PO details
      PERFORM modify_fldcat.

      v_tabname = 'IT_FINAL2'.
*---  Populates the field catalog for SO details using table IT_FINAL2
      PERFORM fieldcatalog_merge1 USING v_tabname
                                        it_fieldcat2.
      v_tabname = 'IT_FINAL3'.
*---  Populates the field catalog for SE details using table IT_FINAL3
      PERFORM fieldcatalog_merge1 USING v_tabname
                                        it_fieldcat2.
*---  Gets the User command and sets the pf-status
      PERFORM alv_init.

*---  Modifies the layout into alternative colors
      wa_layout-zebra = 'X'.

      v_tabname = 'IT_FINAL1'.
*---  Populates the Blocked List info for PO details
      PERFORM block_list USING  wa_layout
                                it_fieldcat1
                                v_tabname
                                it_events.
*---  Gets the events for the Hierarchical list of SO and SE details
      PERFORM get_events1.

*---  Modifies the field catalog for Hierarchical list
      PERFORM modify_fieldcat_hirarchical.

*---  Appends the Hierarchical list to the Blocked list
      PERFORM block_list_hs.

*---  Displays the Blocked list
      PERFORM block_display.

    ELSEIF p_radio2 = 'X'.

*---  Makes the hierarchical list in expand all mode
      wa_layout-expand_fieldname = 'CHECK'.

*---  Gets the events of the Hierarchical list
      PERFORM get_events2.

      v_tabname = 'IT_FINAL2'.
*---  Populates the field catalog for SO details using table IT_FINAL2
      PERFORM fieldcatalog_merge1 USING v_tabname
                                        it_fieldcat2.
      v_tabname = 'IT_FINAL3'.
*---  Populates the field catalog for SE details using table IT_FINAL3
      PERFORM fieldcatalog_merge1 USING v_tabname
                                        it_fieldcat2.
*---  Modifies the field catalog for Hierarchical list
      PERFORM modify_fieldcat_hirarchical.

*---  Displays SO and SE details in a Hierarchical list format
      PERFORM hierarchical_display TABLES it_final2
                                          it_final3
                                   USING  it_fieldcat2
                                          it_events2
                                          'IT_FINAL2'
                                          'IT_FINAL3'.


    ENDIF.

  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  INITIALIZATION
*&---------------------------------------------------------------------*
*       Initializes the selection screen
*----------------------------------------------------------------------*
FORM initialization .

  button1 = text-003.            " Button1 Text
  button2 = text-004.            " Button2 Text
  mytab-prog = sy-repid.         " Program Name
  mytab-dynnr = 110.             " Default Screen
  mytab-activetab = 'BUTTON1'.   " Default Tab

  PERFORM variant_init.

ENDFORM.                    " INITIALIZATION

*&---------------------------------------------------------------------*
*&      Form  AT_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*   Chooses a particular screen when clicking on a particular button
*----------------------------------------------------------------------*
FORM at_selection_screen .

  CASE sy-ucomm.
    WHEN 'PUSH1'.
      mytab-dynnr = 110.
      mytab-activetab = 'BUTTON1'.
    WHEN 'PUSH2'.
      mytab-dynnr = 120.
      mytab-activetab = 'BUTTON2'.
  ENDCASE.

ENDFORM.                    " AT_SELECTION_SCREEN

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       Populates the Internal tables
*----------------------------------------------------------------------*
FORM get_data .

*---Selecting the VBELN from VBAK into a temporary table to reduce
*---                                             database access
  SELECT vbeln " Sales and distribution document number
    FROM vbak
    INTO TABLE it_vbak1
   WHERE vbeln IN s_vbeln
     AND erdat IN s_erdat
     AND ernam IN s_ernam
     AND auart IN s_auart
     AND lifsk IN s_lifsk
     AND vkorg IN s_vkorg
     AND vtweg IN s_vtweg
     AND spart IN s_spart
     AND kunnr IN s_kunnr.

*---Selecting VBELN POSNR ETENR BDDAT WMENG BMENG VRKME from VBEP Into
*---                                                             IT_VBEP
  IF NOT it_vbak1[] IS INITIAL.
    SELECT vbeln  " Sales and distribution document number
           posnr  " Sales document item
           etenr  " Schedule line
           bddat  " Requirement date (Deadline for procurement)
           bmeng  " Confirmed quantity
           vrkme  " Sales unit
      FROM vbep
        INTO TABLE it_vbep
    FOR ALL ENTRIES IN it_vbak1
     WHERE vbeln = it_vbak1-vbeln.
  ENDIF.
*---Selecting VBELN POSNR MATNR ARKTX from VBAP Into IT_VBAP
  IF NOT it_vbep[] IS INITIAL.
    SELECT vbeln  " Sales and distribution document number
           posnr  " Sales document item
           matnr  " Material number
           arktx  " Short text for sales order item
           kwmeng " Cumulative order quantity in sales units
      FROM vbap
      INTO TABLE it_vbap
       FOR ALL ENTRIES IN it_vbep
     WHERE vbeln = it_vbep-vbeln
       AND posnr = it_vbep-posnr
       AND werks IN s_werks
       AND spart IN s_spart1
       AND prctr IN s_prctr.
  ENDIF.

*---Selecting VBELN POSNR from VBUP Into IT_VBUP
  IF NOT it_vbap[] IS INITIAL.
    SELECT vbeln  " Sales and distribution document number
           posnr  " Item number of the SD document
      FROM vbup
      INTO TABLE it_vbup
       FOR ALL ENTRIES IN it_vbap
     WHERE vbeln = it_vbap-vbeln
       AND posnr = it_vbap-posnr
       AND lfgsa IN s_lfgsa.
  ENDIF.

*---Selecting VBELN ERDAT VDATU KUNNR from VBAK Into IT_VBAK
  IF NOT it_vbup[] IS INITIAL.
    SELECT vbeln
           erdat
           kunnr
           vdatu
      FROM vbak
      INTO TABLE it_vbak
       FOR ALL ENTRIES IN it_vbup
     WHERE vbeln = it_vbup-vbeln
       AND erdat IN s_erdat
       AND ernam IN s_ernam
       AND auart IN s_auart
       AND vkorg IN s_vkorg
       AND vtweg IN s_vtweg
       AND spart IN s_spart
       AND kunnr IN s_kunnr
       AND lifsk IN s_lifsk.
    IF sy-subrc = 0.
      SORT it_vbak BY vbeln DESCENDING.
    ENDIF.
  ENDIF.

*---Selecting VBELN LFGSK from VBUK Into IT_VBUK
  IF NOT it_vbak[] IS INITIAL.
    SELECT vbeln
           lfgsk
      FROM vbuk
      INTO TABLE it_vbuk
       FOR ALL ENTRIES IN it_vbak
     WHERE vbeln = it_vbak-vbeln
       AND lfgsk IN s_lfgsk.

    SELECT kunnr
           name1
      FROM kna1
      INTO TABLE it_kna1
       FOR ALL ENTRIES IN it_vbak
     WHERE kunnr = it_vbak-kunnr.
  ENDIF.

*---Selecting BSTKD VBELN from VBKD Into IT_VBKD
  IF NOT it_vbuk[] IS INITIAL.
    SELECT bstkd
           vbeln
      FROM vbkd
      INTO TABLE it_vbkd
       FOR ALL ENTRIES IN it_vbuk
     WHERE vbeln = it_vbuk-vbeln
       AND bstkd IN s_bstkd.
    IF sy-subrc = 0.
      SORT it_vbkd BY vbeln bstkd DESCENDING.
      DELETE ADJACENT DUPLICATES FROM it_vbkd COMPARING vbeln.
      SORT it_vbkd BY bstkd DESCENDING.
    ENDIF.
  ENDIF.

ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*
*&      Form  GET_FINAL_DATA
*&---------------------------------------------------------------------*
*    Populates the final data to be displayed into internal tables
*----------------------------------------------------------------------*
FORM get_final_data .

*---Moving the PO details into a final table IT_FINAL1
  DATA: lv_tabix TYPE sy-tabix.
  LOOP AT it_vbkd.
    AT NEW bstkd.
      lv_tabix = sy-tabix.
      CLEAR it_vbkd.
      READ TABLE it_vbkd INDEX lv_tabix.
      IF sy-subrc = 0.
        CLEAR it_vbak.
        READ TABLE it_vbak WITH KEY vbeln = it_vbkd-vbeln.
        CLEAR it_kna1.
        READ TABLE it_kna1 WITH KEY kunnr = it_vbak-kunnr.
        IF sy-subrc = 0.
          it_final1-bstkd = it_vbkd-bstkd.
          it_final1-kunnr = it_vbak-kunnr.
          it_final1-name1 = it_kna1-name1.
          it_final1-vdatu = it_vbak-vdatu.
          APPEND it_final1.
          CLEAR it_final1.
        ENDIF.
      ENDIF.
    ENDAT.
  ENDLOOP.

*---Moving the SO details into a final table IT_FINAL2
  LOOP AT it_vbkd.
    LOOP AT it_vbak WHERE vbeln = it_vbkd-vbeln.
      CLEAR it_vbuk.
      READ TABLE it_vbuk WITH KEY vbeln = it_vbak-vbeln.
      it_final2-vbeln = it_vbak-vbeln.
      it_final2-vdatu = it_vbak-vdatu.
      it_final2-erdat = it_vbak-erdat.
      it_final2-lfgsk = it_vbuk-lfgsk.
      it_final2-check = 'X'.
      APPEND it_final2.
      CLEAR it_final2.
    ENDLOOP.
  ENDLOOP.

*---Moving the SE details into a final table IT_FINAL3
  REFRESH it_vbep1.
  CLEAR it_vbep1.
  LOOP AT it_vbap.
    LOOP AT it_vbep WHERE vbeln = it_vbap-vbeln
                      AND posnr = it_vbap-posnr.
      it_vbep1 = it_vbep.
      APPEND it_vbep1.
      CLEAR it_vbep1.
    ENDLOOP.

    DESCRIBE TABLE it_vbep1 LINES v_linc.
    IF v_linc = 1.
      CLEAR it_vbep1.
      READ TABLE it_vbep1 INDEX 1.
      it_final3-vbeln  = it_vbep-vbeln.
      it_final3-posnr  = it_vbep1-posnr.
      it_final3-etenr  = it_vbep1-etenr.
      it_final3-matnr  = it_vbap-matnr.
      it_final3-arktx  = it_vbap-arktx.
      it_final3-bddat  = it_vbep1-bddat.
      it_final3-kwmeng = it_vbap-kwmeng.
      it_final3-bmeng  = it_vbep1-bmeng.
      APPEND it_final3.
      CLEAR it_final3.

    ELSE.
      LOOP AT it_vbep1 WHERE bmeng <> 0.
        it_final3-vbeln  = it_vbep-vbeln.
        it_final3-posnr  = it_vbep1-posnr.
        it_final3-etenr  = it_vbep1-etenr.
        it_final3-matnr  = it_vbap-matnr.
        it_final3-arktx  = it_vbap-arktx.
        it_final3-bddat  = it_vbep1-bddat.
        it_final3-kwmeng = it_vbap-kwmeng.
        it_final3-bmeng  = it_vbep1-bmeng.
        APPEND it_final3.
        CLEAR it_final3.

      ENDLOOP.
    ENDIF.
    REFRESH it_vbep1.
    CLEAR it_vbep1.

  ENDLOOP.

ENDFORM.                    " GET_FINAL_DATA


*&---------------------------------------------------------------------*
*&      Form  FIELDCATALOG_MERGE1
*&---------------------------------------------------------------------*
*      Fills the field catalog by depending on the tables given
*----------------------------------------------------------------------*
FORM fieldcatalog_merge1 USING v_tab TYPE slis_tabname
                               v_field TYPE slis_t_fieldcat_alv.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
            i_program_name         = v_repid
            i_internal_tabname     = v_tab
            i_inclname             = v_repid
       CHANGING
            ct_fieldcat            = v_field
       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.

ENDFORM.                    " FIELDCATALOG_MERGE1

*&---------------------------------------------------------------------*
*&      Form  KEY_INFO
*&---------------------------------------------------------------------*
*       Gets the Header and Item key into details
*----------------------------------------------------------------------*
FORM key_info .

  it_keyinfo-header01 = 'VBELN'.
  it_keyinfo-item01 = 'VBELN'.

ENDFORM.                    " KEY_INFO


*&---------------------------------------------------------------------*
*&      Form  HIERARCHICAL_DISPLAY
*&---------------------------------------------------------------------*
*       Displays the SO & SE details in a hierarchical list format
*----------------------------------------------------------------------*
FORM hierarchical_display   TABLES p_tab1 p_tab2
                            USING  p_fieldcat TYPE slis_t_fieldcat_alv
                                   p_events   TYPE slis_t_event
                                   p_table1   TYPE slis_tabname
                                   p_table2   TYPE slis_tabname.

  i_variant1-variant = p_var.

  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
      i_callback_program       = v_repid
      i_callback_pf_status_set = 'PF_STATUS'
      is_layout                = wa_layout
*     I_CALLBACK_USER_COMMAND  = ' '
      it_fieldcat              = p_fieldcat
      i_save                   = 'X'
      is_variant               = i_variant1
      it_events                = p_events
      i_tabname_header         = p_table1
      i_tabname_item           = p_table2
      is_keyinfo               = it_keyinfo
    TABLES
      t_outtab_header          = p_tab1
      t_outtab_item            = p_tab2
    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.                    " HIERARCHICAL_DISPLAY


*&---------------------------------------------------------------------*
*&      Form  ALV_INIT
*&---------------------------------------------------------------------*
*       Gets the User command and sets the pf-status
*----------------------------------------------------------------------*
FORM alv_init .

  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
       EXPORTING
            i_callback_program       = v_repid
            i_callback_pf_status_set = 'PF_STATUS'
            i_callback_user_command  = 'PO_USER_COMMAND'.

ENDFORM.                    " ALV_INIT

*&---------------------------------------------------------------------*
*&      Form  BLOCK_LIST
*&---------------------------------------------------------------------*
*       Appends the PO details into the Blocked list
*----------------------------------------------------------------------*
FORM block_list  USING    p_wa_layout TYPE slis_layout_alv
                          p_it_fieldcat1 TYPE slis_t_fieldcat_alv
                          p_v_tabname TYPE slis_tabname
                          p_it_events TYPE slis_t_event.

  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
       EXPORTING
            is_layout                  = p_wa_layout
            it_fieldcat                = p_it_fieldcat1
            i_tabname                  = p_v_tabname
            it_events                  = p_it_events
       TABLES
            t_outtab                   = it_final1
       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.

  wa_layout-expand_fieldname = 'CHECK'.

ENDFORM.                    " BLOCK_LIST

*&---------------------------------------------------------------------*
*&      Form  BLOCK_LIST_HS
*&---------------------------------------------------------------------*
*       Appends the SO & SE details to the blocked list
*----------------------------------------------------------------------*
FORM block_list_hs .

  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_HS_APPEND'
       EXPORTING
            is_layout                  = wa_layout
            it_fieldcat                = it_fieldcat2
            is_keyinfo                 = it_keyinfo
            i_header_tabname           = 'IT_FINAL2'
            i_item_tabname             = 'IT_FINAL3'
            it_events                  = it_events1
       TABLES
            t_outtab_header            = it_final2
            t_outtab_item              = it_final3
       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.


ENDFORM.                    " BLOCK_LIST_HS

*&---------------------------------------------------------------------*
*&      Form  BLOCK_DISPLAY
*&---------------------------------------------------------------------*
*       Displays the Blocked list
*----------------------------------------------------------------------*
FORM block_display .

  CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
       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.                    " BLOCK_DISPLAY


*&---------------------------------------------------------------------*
*&      Form  MODIFY_FLDCAT
*&---------------------------------------------------------------------*
*       Modifies the field catalog of PO details
*----------------------------------------------------------------------*

FORM modify_fldcat .

  LOOP AT it_fieldcat1 INTO wa_fieldcat1 .
    CASE wa_fieldcat1-fieldname .
      WHEN 'BSTKD' .
        wa_fieldcat1-seltext_l = 'PO Number'(010).
        wa_fieldcat1-outputlen = 35 .
        wa_fieldcat1-ddictxt = 'L' .
      WHEN 'KUNNR' .
        wa_fieldcat1-outputlen = 15 .
        wa_fieldcat1-seltext_l = 'Sold-To Pt.'(011).
        wa_fieldcat1-ddictxt = 'L' .
      WHEN 'NAME1' .
        wa_fieldcat1-outputlen = 35 .
        wa_fieldcat1-seltext_l = 'Name1'(012).
        wa_fieldcat1-ddictxt = 'L' .
      WHEN 'VDATU' .
        wa_fieldcat1-outputlen = 15 .
        wa_fieldcat1-seltext_l = 'Req.Dlv.Dt.'(013).
        wa_fieldcat1-ddictxt = 'L' .
    ENDCASE .
    MODIFY it_fieldcat1 FROM wa_fieldcat1 .
  ENDLOOP.

ENDFORM.                    " MODIFY_FLDCAT

*&---------------------------------------------------------------------*
*&      Form  MODIFY_FIELDCAT_HIRARCHICAL
*&---------------------------------------------------------------------*
*       Modifies the field catalog of SO & SE details
*----------------------------------------------------------------------*

FORM modify_fieldcat_hirarchical.

  LOOP AT it_fieldcat2 INTO wa_fieldcat1.
    CASE wa_fieldcat1-fieldname.
      WHEN 'VBELN' .
        wa_fieldcat1-outputlen = 20.
        wa_fieldcat1-seltext_m = 'SD Doc'(014).
        wa_fieldcat1-ddictxt   = 'M'.
      WHEN 'VDATU' .
        wa_fieldcat1-outputlen = 20.
        wa_fieldcat1-seltext_m = 'Req.Dlv.Dt'(015).
        wa_fieldcat1-ddictxt   = 'M'.
      WHEN 'ERDAT' .
        wa_fieldcat1-outputlen = 20.
        wa_fieldcat1-seltext_m = 'Rec Created Date'(016).
        wa_fieldcat1-ddictxt   = 'M'.
      WHEN 'LFGSK' .
        wa_fieldcat1-outputlen = 20.
        wa_fieldcat1-seltext_m = 'Dlv Status'(017).
        wa_fieldcat1-ddictxt   = 'M'.
      WHEN 'CHECK'.
        wa_fieldcat1-no_out    = 'X'.
    ENDCASE .
    MODIFY it_fieldcat2 FROM wa_fieldcat1.
  ENDLOOP.

ENDFORM.                    " MODIFY_FIELDCAT_HIRARCHICAL

*&---------------------------------------------------------------------*
*&      Form  GET_EVENTS
*&---------------------------------------------------------------------*
*       Gets the events for the list
*----------------------------------------------------------------------*
FORM get_events.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
            i_list_type     = 2
       IMPORTING
            et_events       = it_events
       EXCEPTIONS
            list_type_wrong = 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.

  READ TABLE it_events INTO wa_events
                       WITH KEY name = slis_ev_top_of_list.
  IF sy-subrc = 0.
    wa_events-form = 'TOP_OF_LIST'.
    MODIFY it_events FROM wa_events INDEX sy-tabix.
  ENDIF.

  READ TABLE it_events INTO wa_events
                     WITH KEY name = slis_ev_user_command.
  IF sy-subrc = 0.
    wa_events-form = 'PO_USER_COMMAND'.
    MODIFY it_events FROM wa_events INDEX sy-tabix.
  ENDIF.

ENDFORM.                    " GET_EVENTS

*&---------------------------------------------------------------------*
*&      Form  GET_EVENTS1
*&---------------------------------------------------------------------*
*     Gets the events for the list
*----------------------------------------------------------------------*
FORM get_events1 .

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
            i_list_type     = 3
       IMPORTING
            et_events       = it_events1
       EXCEPTIONS
            list_type_wrong = 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.

  CLEAR wa_events.
  READ TABLE it_events1 INTO wa_events
                       WITH KEY name = slis_ev_top_of_list.
  IF sy-subrc = 0.
    wa_events-form = 'TOP_OF_LIST1'.
    MODIFY it_events1 FROM wa_events INDEX sy-tabix.
  ENDIF.

ENDFORM.                    " GET_EVENTS1

*---------------------------------------------------------------------*
*     T O P  -  O F  -  L I S T
*---------------------------------------------------------------------*
*     Displays the Top of list of PO details
*----------------------------------------------------------------------*

FORM top_of_list.

  SKIP.
  WRITE 'SYRATECH CORPORATION'(025).
  SKIP.
  WRITE:/ 'System  :'(021), sy-mandt,
        / 'User    :'(022), sy-uname,
        / 'Date    :'(023), sy-datum,
        / 'Time    :'(024), sy-uzeit.
  SKIP.
  WRITE:/ 'PO DETAILS'(019).

ENDFORM.                    "TOP_OF_LIST

*---------------------------------------------------------------------*
*     T O P   O F   L I S T 1
*---------------------------------------------------------------------*
*     Displays the Top of list of SO & SE details
*----------------------------------------------------------------------*

FORM top_of_list1.

  WRITE:/ 'SO & SE DETAILS'(020).

ENDFORM.                    "TOP_OF_LIST1

*---------------------------------------------------------------------*
*     P F - S T A T U S
*---------------------------------------------------------------------*
*     Sets the Pf-Status
*----------------------------------------------------------------------*

FORM pf_status USING rt_extab TYPE slis_t_extab.

  SET PF-STATUS 'ZSREEPO'.

ENDFORM.                    "PF_STATUS

*---------------------------------------------------------------------*
*     U S E R   C O M M A N D
*---------------------------------------------------------------------*
*     Gets the user command and perform different operations
*----------------------------------------------------------------------*

FORM po_user_command USING p_ucomm    TYPE sy-ucomm
                           p_selfield TYPE slis_selfield.

  CASE p_selfield-tabname.

    WHEN 'IT_FINAL1'.
*---If user clicks on PO number, displays the SO and SE details of that
*---                                               particular PO number
      v_selfield_value = p_selfield-value.
*--- Gets the current layout details and process appropriate action
      PERFORM display_secondary_list.

    WHEN 'IT_FINAL2'.
*---If user clicks on the sales order number in the SO level the
*---                      transaction VA03 will open in a new window
      IF p_selfield-fieldname = 'VBELN'.
        PERFORM call_transaction_va03. " Calls the transaction in a
        " separate window
      ENDIF.

    WHEN 'IT_FINAL3'.
*---If user clicks on the sales order number in the Line Item the
*---               Intelligroup home page will open in a new browser
      IF p_selfield-fieldname = 'VBELN'.
        PERFORM open_browser. " Opens the Browser in a new window
      ENDIF.

  ENDCASE.

ENDFORM.                    "USER_COMMAND


*&---------------------------------------------------------------------*
*&      Form  CALL_TRANSACTION_VA03
*&---------------------------------------------------------------------*
*       Calls the transaction VA03 in a new session
*----------------------------------------------------------------------*
FORM call_transaction_va03 .

  CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'TEST'
    DESTINATION 'NONE'
    EXPORTING
      tcode                   = 'VA03'
    EXCEPTIONS
      call_transaction_denied = 1
      tcode_invalid           = 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.

ENDFORM.                    " CALL_TRANSACTION_VL10

*&---------------------------------------------------------------------*
*&      Form  GET_EVENTS2
*&---------------------------------------------------------------------*
*       Gets the events for SO & SE details
*----------------------------------------------------------------------*
FORM get_events2 .

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
            i_list_type     = 1
       IMPORTING
            et_events       = it_events2
       EXCEPTIONS
            list_type_wrong = 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.

  CLEAR wa_events.
  READ TABLE it_events2 INTO wa_events
                        WITH KEY name = slis_ev_top_of_list.
  IF sy-subrc = 0.
    wa_events-form = 'TOP_OF_LIST1'.
    MODIFY it_events2 FROM wa_events INDEX sy-tabix.
  ENDIF.

  READ TABLE it_events2 INTO wa_events
                        WITH KEY name = slis_ev_user_command.
  IF sy-subrc = 0.
    wa_events-form = 'PO_USER_COMMAND'.
    MODIFY it_events2 FROM wa_events INDEX sy-tabix.
  ENDIF.

ENDFORM.                    " GET_EVENTS2

*&---------------------------------------------------------------------*
*&      Form  OPEN_BROWSER
*&---------------------------------------------------------------------*
*       Opens the Intelligroup home page in a new browser
*----------------------------------------------------------------------*
FORM open_browser .

  CALL FUNCTION 'CALL_BROWSER'
       EXPORTING
            url                    = 'WWW.INTELLIGROUP.COM'
            new_window             = 'X'
       EXCEPTIONS
            frontend_not_supported = 1
            frontend_error         = 2
            prog_not_found         = 3
            no_batch               = 4
            unspecified_error      = 5
            OTHERS                 = 6.

  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.                    " OPEN_BROWSER

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_SO_SE_DETAILS
*&---------------------------------------------------------------------*
*       Displays the
*----------------------------------------------------------------------*
FORM display_so_se_details USING p_selfield TYPE slis_selfield-value.

  REFRESH: it_final4, it_final5.
*---Moving the SO details into a final table IT_FINAL4
  LOOP AT it_vbkd WHERE bstkd = p_selfield.
    LOOP AT it_vbak WHERE vbeln = it_vbkd-vbeln.
      CLEAR it_vbuk.
      READ TABLE it_vbuk WITH KEY vbeln = it_vbak-vbeln.
      it_final4-vbeln = it_vbak-vbeln.
      it_final4-vdatu = it_vbak-vdatu.
      it_final4-erdat = it_vbak-erdat.
      it_final4-lfgsk = it_vbuk-lfgsk.
      it_final4-check = 'X'.
      APPEND it_final4.
      CLEAR it_final4.
    ENDLOOP.
  ENDLOOP.

  LOOP AT it_final4.
    LOOP AT it_vbap WHERE vbeln = it_final4-vbeln.
      LOOP AT it_vbep WHERE vbeln = it_vbap-vbeln
                        AND posnr = it_vbap-posnr.
        it_vbep1 = it_vbep.
        APPEND it_vbep1.
        CLEAR it_vbep1.
      ENDLOOP.

*---Moving the SE details into a final table IT_FINAL5

      DESCRIBE TABLE it_vbep1 LINES v_linc.
      IF v_linc = 1.
        CLEAR it_vbep1.
        READ TABLE it_vbep1 INDEX 1.
        it_final5-vbeln  = it_vbep-vbeln.
        it_final5-posnr  = it_vbep1-posnr.
        it_final5-etenr  = it_vbep1-etenr.
        it_final5-matnr  = it_vbap-matnr.
        it_final5-arktx  = it_vbap-arktx.
        it_final5-bddat  = it_vbep1-bddat.
        it_final5-kwmeng = it_vbap-kwmeng.
        it_final5-bmeng  = it_vbep1-bmeng.
        APPEND it_final5.
        CLEAR it_final5.

      ELSE.
        LOOP AT it_vbep1 WHERE bmeng <> 0.
          it_final5-vbeln  = it_vbep-vbeln.
          it_final5-posnr  = it_vbep1-posnr.
          it_final5-etenr  = it_vbep1-etenr.
          it_final5-matnr  = it_vbap-matnr.
          it_final5-arktx  = it_vbap-arktx.
          it_final5-bddat  = it_vbep1-bddat.
          it_final5-kwmeng = it_vbap-kwmeng.
          it_final5-bmeng  = it_vbep1-bmeng.
          APPEND it_final5.
          CLEAR it_final5.
        ENDLOOP.
      ENDIF.
      REFRESH it_vbep1.
      CLEAR it_vbep1.
    ENDLOOP.
  ENDLOOP.

  v_tabname = 'IT_FINAL4'.
*---Populates the field catalog for SO details
  PERFORM fieldcatalog_merge1 USING v_tabname
                                    it_fieldcat3.

  v_tabname = 'IT_FINAL5'.
*---Populates the field catalog for SE details
  PERFORM fieldcatalog_merge1 USING v_tabname
                                    it_fieldcat3.

  PERFORM modify_fieldcat_hirarchical2.

*---Displays the SO & SE details in a hierarchical format
  PERFORM hierarchical_display TABLES it_final4
                                      it_final5
                               USING  it_fieldcat3
                                      it_events2
                                     'IT_FINAL4'
                                     'IT_FINAL5'.

ENDFORM.                    " GET_SECLIST_DATA

*&---------------------------------------------------------------------*
*&      Form  VARIANT_INIT
*&---------------------------------------------------------------------*
*       Gets the variant
*----------------------------------------------------------------------*
FORM variant_init.

  v_repid = sy-repid.
  CLEAR i_variant.
  i_variant-report = v_repid.

ENDFORM.                    " VARIANT_INIT

*&---------------------------------------------------------------------*
*&      Form  F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*     Gets the variant to select the layout
*----------------------------------------------------------------------*
FORM f4_for_variant.

  DATA: lv_save(1)        TYPE c, " To save the variant
        lv_exit(1)        TYPE c. " To get Dialog cancelled by user

  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
       EXPORTING
            is_variant    = i_variant
            i_save        = lv_save
       IMPORTING
            e_exit        = lv_exit
            es_variant    = i_variant1
       EXCEPTIONS
            not_found     = 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.
  ELSE.
    IF lv_exit = space.
      p_var = i_variant1-variant.
    ENDIF.
  ENDIF.

ENDFORM.                    " F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_SECONDARY_LIST
*&---------------------------------------------------------------------*
*       Gets the current layout and process appropriate action
*----------------------------------------------------------------------*
FORM display_secondary_list .

  DATA: i_fieldcat1 TYPE slis_t_fieldcat_alv, " Internal table for
                                               "temporary field catalog
        lv_fieldcat TYPE slis_fieldcat_alv, " Work area for temporary
                                               " field catalog
        lv_colpos   TYPE i, " To store the column position
        lv_colpos1  TYPE i, " To store the column position
        lv_layout1  TYPE slis_layout_alv. " Work Area for Layout

  CLEAR i_fieldcat1.
  REFRESH i_fieldcat1.

  CALL FUNCTION 'REUSE_ALV_LIST_LAYOUT_INFO_GET'
       IMPORTING
            es_layout     = lv_layout1
            et_fieldcat   = i_fieldcat1
       EXCEPTIONS
            no_infos      = 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.

  CLEAR: lv_colpos1, lv_colpos.
  lv_colpos1 = 2.
  lv_colpos  = 2.

*--- After changing the field catalog of PO details, user can get the
*---  list of SO & Line item details  in Hierarchical list form by
*---  clicking only on the Purchase Order number.
  LOOP AT i_fieldcat1 INTO lv_fieldcat.
    IF lv_fieldcat-no_out <> 'X'.
      lv_colpos1 = lv_colpos1 + lv_fieldcat-outputlen + 1.
      IF lv_fieldcat-fieldname = 'BSTKD'.
        IF  sy-cucol >= lv_colpos AND sy-cucol <= lv_colpos1.
          PERFORM display_so_se_details USING v_selfield_value.
          CLEAR v_selfield_value.
          EXIT.
        ENDIF.
      ENDIF.
      lv_colpos = lv_colpos + lv_fieldcat-outputlen + 1.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " DISPLAY_SECONDARY_LIST

*&---------------------------------------------------------------------*
*&      Form  MODIFY_FIELDCAT_HIRARCHICAL2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM modify_fieldcat_hirarchical2 .

  LOOP AT it_fieldcat3 INTO wa_fieldcat1.
    CASE wa_fieldcat1-fieldname.
      WHEN 'VBELN' .
        wa_fieldcat1-outputlen = 20.
        wa_fieldcat1-seltext_m = 'SD Doc'(014).
        wa_fieldcat1-ddictxt   = 'M'.
      WHEN 'VDATU' .
        wa_fieldcat1-outputlen = 20.
        wa_fieldcat1-seltext_m = 'Req.Dlv.Dt'(015).
        wa_fieldcat1-ddictxt   = 'M'.
      WHEN 'ERDAT' .
        wa_fieldcat1-outputlen = 20.
        wa_fieldcat1-seltext_m = 'Rec Created Date'(016).
        wa_fieldcat1-ddictxt   = 'M'.
      WHEN 'LFGSK' .
        wa_fieldcat1-outputlen = 20.
        wa_fieldcat1-seltext_m = 'Dlv Status'(017).
        wa_fieldcat1-ddictxt   = 'M'.
      WHEN 'CHECK'.
        wa_fieldcat1-no_out    = 'X'.
    ENDCASE .
    MODIFY it_fieldcat3 FROM wa_fieldcat1.
  ENDLOOP.

ENDFORM.                    " MODIFY_FIELDCAT_HIRARCHICAL2

Read only

Former Member
0 Likes
1,648

Hi praveen,

check this code. hope this helps u.

REPORT ZKEERTHI_ALV4 .

&----


*& tables declaration

&----


tables: vbak.

&----


*& type-pools declaration

&----


type-pools: slis.

&----


*& data declaration

&----


data: g_repid type sy-repid.

DATA : IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, "mara

WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,

X_KEYINFO TYPE SLIS_KEYINFO_ALV,

IT_HEADER TYPE SLIS_TABNAME,

IT_ITEM TYPE SLIS_TABNAME. .

DATA: BEGIN OF IT_VBAK occurs 0,

VBELN LIKE VBAK-VBELN,

AUDAT LIKE VBAK-AUDAT,

AUART LIKE VBAK-AUART,

NETWR LIKE VBAK-NETWR,

END OF IT_VBAK.

DATA: BEGIN OF IT_VBAP OCCURS 0,

VBELN LIKE VBAP-VBELN,

POSNR LIKE VBAP-POSNR,

MATNR LIKE VBAP-MATNR,

CHARG LIKE VBAP-CHARG,

PSTYV LIKE VBAP-PSTYV,

END OF IT_VBAP.

&----


*& initialisation

&----


initialization.

g_repid = sy-repid.

IT_HEADER = 'IT_VBAK'.

IT_ITEM = 'IT_VBAP'.

CLEAR X_KEYINFO.

X_KEYINFO-HEADER01 = 'VBELN'.

" comparing the keys and relating the header and item internal tables

X_KEYINFO-ITEM01 = 'VBELN'.

X_KEYINFO-HEADER02 = SPACE.

X_KEYINFO-ITEM02 = 'POSNR'.

&----


*& selection screen

&----


selection-screen begin of block b with frame title text-001.

select-options: s_vbeln for vbak-vbeln,

s_auart for vbak-auart.

selection-screen end of block b.

&----


*& start of selection

&----


start-of-selection.

perform get_vbak.

perform get_vbap.

&----


*& Form get_vbak

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_vbak .

select vbeln

audat

auart

netwr from vbak

into table it_vbak

where vbeln in s_vbeln and

auart in s_auart.

ENDFORM. " get_vbak

&----


*& Form get_vbap

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_vbap .

select vbeln

posnr

matnr

charg

pstyv from vbap

into table it_vbap

for all entries in it_vbak

where vbeln = it_vbak-vbeln.

ENDFORM. " get_vbap

&----


*& end of selection

&----


end-of-selection.

perform modify_fieldcat.

PERFORM HIERARCHICAL_LIST.

&----


*& Form modify_fieldcat

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM modify_fieldcat .

clear wa_fieldcat.

WA_FIELDCAT-TABNAME = 'IT_VBAK'.

WA_FIELDCAT-FIELDNAME = 'VBELN'.

WA_FIELDCAT-SELTEXT_L = 'DOC NO'.

WA_FIELDCAT-COL_POS = 1.

WA_FIELDCAT-OUTPUTLEN = 10.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_VBAK'.

WA_FIELDCAT-FIELDNAME = 'AUDAT'.

WA_FIELDCAT-SELTEXT_L = 'DOC DATE'.

WA_FIELDCAT-COL_POS = 2.

WA_FIELDCAT-OUTPUTLEN = 8.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_VBAK'.

WA_FIELDCAT-FIELDNAME = 'AUART'.

WA_FIELDCAT-SELTEXT_L = 'DOC TYPE'.

WA_FIELDCAT-COL_POS = 3.

WA_FIELDCAT-OUTPUTLEN = 4.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_VBAK'.

WA_FIELDCAT-FIELDNAME = 'NETWR'.

WA_FIELDCAT-SELTEXT_L = 'DOC NO'.

WA_FIELDCAT-COL_POS = 4.

WA_FIELDCAT-OUTPUTLEN = 15.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_VBAP'.

WA_FIELDCAT-FIELDNAME = 'VBELN'.

WA_FIELDCAT-SELTEXT_L = 'DOC NO'.

WA_FIELDCAT-OUTPUTLEN = 10.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_VBAP'.

WA_FIELDCAT-FIELDNAME = 'POSNR'.

WA_FIELDCAT-SELTEXT_L = 'SALES ITEM'.

WA_FIELDCAT-OUTPUTLEN = 6.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_VBAP'.

WA_FIELDCAT-FIELDNAME = 'MATNR'.

WA_FIELDCAT-SELTEXT_L = 'MAT NO'.

WA_FIELDCAT-OUTPUTLEN = 18.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_VBAP'.

WA_FIELDCAT-FIELDNAME = 'CHARG'.

WA_FIELDCAT-SELTEXT_L = 'BATCH NO'.

WA_FIELDCAT-OUTPUTLEN = 10.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-TABNAME = 'IT_VBAP'.

WA_FIELDCAT-FIELDNAME = 'PSTYV'.

WA_FIELDCAT-SELTEXT_L = 'ITEM CAT'.

WA_FIELDCAT-OUTPUTLEN = 4.

APPEND WA_FIELDCAT TO IT_FIELDCAT.

CLEAR WA_FIELDCAT.

ENDFORM. " modify_fieldcat

&----


*& Form HIERARCHICAL_LIST

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM HIERARCHICAL_LIST .

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

I_CALLBACK_PROGRAM = G_REPID

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

  • IS_LAYOUT =

IT_FIELDCAT = IT_FIELDCAT

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

  • IT_EVENTS =

  • IT_EVENT_EXIT =

I_TABNAME_HEADER = IT_HEADER

I_TABNAME_ITEM = IT_ITEM

  • I_STRUCTURE_NAME_HEADER =

  • I_STRUCTURE_NAME_ITEM =

IS_KEYINFO = X_KEYINFO

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB_HEADER = it_vbak

T_OUTTAB_ITEM = it_vbap

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

reward if helpful.

regards,

keerthi.

Read only

Former Member
0 Likes
1,648

Thanx

Read only

venkat_o
Active Contributor
0 Likes
1,648

Hi Praveen,

<b>1</b>.

<b>Hierarchical ALV</b> :Displaying Output header records and corresponding item records.

<b>2</b>.

Ex:U want to display for every Plant and Storage location and materials and their quantities.

<b>1000 1000</b>

mat1 20

mat2 30

mat3 40

<b>1000 10001</b>

mat11 20

mat22 30

mat33 40

<b>1000 1002</b>

mat111 20

mat222 30

mat333 40

<b>3</b>.

For this take 2 ITABs one for HEADER and seccond for ITEMS records.

Both should have common key .

That common key should be specified in is_keyinfo = x_key in the Function module

REUSE_ALV_HIERSEQ_LIST_DISPLAY.

<b>4</b>.

have a look at above example given by members.

I hope that u get some idea

<b>Thanks,

Venkat.O</b>