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 SAMPLE CODE.

Former Member
0 Likes
2,905

HI FRIENDS,

I am new to alv reports.can anyone give me some basic sample codes of alv hierarchial reports.please mail to my personal mail id simhadrimahesh@gmail.com.

points will be awarded.

8 REPLIES 8
Read only

Former Member
0 Likes
1,773

Hi,

Just refer to the below link

http://www.sap-img.com/abap-function.htm

Reward points if useful.

Regards,

Atish

Read only

Former Member
0 Likes
1,773

hi,

go through the following example----

----


  • GLOBAL TYPE DECLERATION

----


TYPE-POOLS : SLIS.

----


  • D A T A D E C L E R A T I O N

----


TYPES : BEGIN OF STRUCT,

LV_SYMB(4) TYPE C,

LV_ICON(4) TYPE C,

LV_BOX(1) TYPE C,

LV_LIGHTS(2) TYPE c,

MATNR LIKE MARA-MATNR, " MATERIAL NUMBER

MAKTX LIKE MAKT-MAKTX, " MATERIAL DESCRIPTION

LONG LIKE TLINE,

L_TEXT(132),

END OF STRUCT.

*-store report name--

DATA: LV_PROGNAME LIKE SY-REPID.

*-header title in grid---

DATA: LV_GRIDTITLE TYPE LVC_TITLE.

*declare variable--

DATA: LV_MATNR TYPE MARA-MATNR.

*variable for tdname--

DATA: LV_NAME1 LIKE THEAD-TDNAME.

----


  • I N T E R N A L T A B L E *

----


*-declare tline internal table for read text---

DATA: T_LINES LIKE TLINE OCCURS 0 WITH HEADER LINE.

DATA : WA LIKE TLINE.

*-for layout--

DATA: I_LAYOUT TYPE SLIS_LAYOUT_ALV.

*-for struct--

DATA : I_TAB TYPE STANDARD TABLE OF STRUCT WITH HEADER LINE.

*-for fieldcat-

DATA : I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

----


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

----


SELECT-OPTIONS : S_MATNR FOR I_TAB-MATNR.

----


  • INITIALIZATION

----


INITIALIZATION.

LV_PROGNAME = SY-REPID.

AT SELECTION-SCREEN.

----


  • V A L I D A T I O N

----


PERFORM SELECTION_SCREEN_ALV.

----


  • S T A R T - O F - S E L E C T I O N

----


START-OF-SELECTION.

  • PREPARE FIELDCATALOG FOR THE MAIN (BASIC LIST) REPORT.

PERFORM Z8_BUILD_FIELDCAT USING I_FIELDCAT.

  • PERFORM THE DATA FETCHING FROM MARA,MARC,MARD,MAKT.

PERFORM FETCHING_DATA.

  • DETERMINE THE LAYOUT OF THE ALV DISPLAY.

PERFORM Z8VIJAY_BUILD_LAYOUT.

  • INITIALIZE THE GRID TITLE.

PERFORM Z8VIJAY_BUILD_GRID_TITLE.

  • DISPLAY ALV GRID.

PERFORM Z8VIJAY_DISPLAY_ALV_GRID.

&----


*& Form SELECTION_SCREEN_ALV

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM SELECTION_SCREEN_ALV .

SELECT MATNR INTO LV_MATNR FROM MARA WHERE MATNR IN S_MATNR.

EXIT.

ENDSELECT.

IF SY-SUBRC <> 0.

MESSAGE E000.

ENDIF.

ENDFORM. " SELECTION_SCREEN_ALV

&----


*& Form Z8_BUILD_FIELDCAT

&----


  • text

----


  • -->P_I_FIELDCAT text

----


FORM Z8_BUILD_FIELDCAT USING P_I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

DATA : WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-COL_POS = '1'.

WA_FIELDCAT-FIELDNAME = 'V_BOX'.

WA_FIELDCAT-TABNAME = 'I_TAB'.

WA_FIELDCAT-OUTPUTLEN = 7.

WA_FIELDCAT-SELTEXT_S = 'CHK'.

WA_FIELDCAT-CHECKBOX = 'X'.

WA_FIELDCAT-EDIT = 'X'.

APPEND WA_FIELDCAT TO P_I_FIELDCAT.

CLEAR WA_FIELDCAT.

WA_FIELDCAT-COL_POS = '2' .

WA_FIELDCAT-FIELDNAME = 'MATNR'.

WA_FIELDCAT-TABNAME = 'I_TAB'.

WA_FIELDCAT-REF_TABNAME = 'MARA'.

WA_FIELDCAT-OUTPUTLEN = 20.

WA_FIELDCAT-SELTEXT_S = 'MATERIAL NO'.

APPEND WA_FIELDCAT TO P_I_FIELDCAT.

WA_FIELDCAT-COL_POS = '3'.

WA_FIELDCAT-FIELDNAME = 'MAKTX'.

WA_FIELDCAT-TABNAME = 'I_TAB'.

WA_FIELDCAT-REF_TABNAME = 'MAKT'.

WA_FIELDCAT-EMPHASIZE = 'C310'.

WA_FIELDCAT-OUTPUTLEN = 20.

WA_FIELDCAT-SELTEXT_L = 'MATERIAL DESCRIPTION'.

WA_FIELDCAT-SELTEXT_M = 'MATERIAL DESCRIPTION'.

WA_FIELDCAT-SELTEXT_S = 'MATERIAL DESCRIPTION'.

APPEND WA_FIELDCAT TO P_I_FIELDCAT.

WA_FIELDCAT-COL_POS = '4'.

WA_FIELDCAT-FIELDNAME = 'LONG'.

WA_FIELDCAT-TABNAME = 'I_TAB'.

WA_FIELDCAT-EMPHASIZE = 'C310'.

WA_FIELDCAT-OUTPUTLEN = 20.

WA_FIELDCAT-SELTEXT_L = 'LONGTEXT'.

WA_FIELDCAT-SELTEXT_M = 'LONGTEXT'.

WA_FIELDCAT-SELTEXT_S = 'LONGTEXT'.

WA_FIELDCAT-EDIT = 'X'.

APPEND WA_FIELDCAT TO P_I_FIELDCAT.

ENDFORM. " Z8_BUILD_FIELDCAT

&----


*& Form Z8VIJAY_BUILD_LAYOUT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM Z8VIJAY_BUILD_LAYOUT .

i_layout-zebra = 'X'.

i_layout-totals_text = 'Total'(a00).

i_layout-subtotals_text = 'SubTotal'(a01).

i_layout-lights_fieldname = 'V_LIGHTS'.

i_layout-lights_tabname = 'I_TAB'.

i_layout-box_fieldname = 'V_BOX'.

i_layout-box_tabname = 'I_TAB'.

ENDFORM. " Z8VIJAY_BUILD_LAYOUT

&----


*& Form FETCHING_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM FETCHING_DATA .

SELECT

A~MATNR

B~MAKTX

INTO CORRESPONDING FIELDS OF TABLE I_TAB

FROM MARA

AS A INNER JOIN MAKT AS B

ON AMATNR = BMATNR

WHERE A~MATNR IN S_MATNR.

IF SY-SUBRC <> 0.

WRITE:/5 'MATERIAL NUMBER DOES NOT EXIST'.

ENDIF.

ENDFORM. " FETCHING_DATA

&----


*& Form Z8VIJAY_BUILD_GRID_TITLE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM Z8VIJAY_BUILD_GRID_TITLE .

LV_GRIDTITLE = 'ALV REPORT FOR MATERIAL NUMBER AND LONGTEXT'.

ENDFORM. " Z8VIJAY_BUILD_GRID_TITLE

&----


*& Form Z8VIJAY_DISPLAY_ALV_GRID

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM Z8VIJAY_DISPLAY_ALV_GRID .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER = ' '

  • I_BUFFER_ACTIVE = ' '

I_CALLBACK_PROGRAM = LV_PROGNAME

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

  • I_CALLBACK_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_END_OF_LIST = ' '

I_STRUCTURE_NAME = 'STRUCT'

  • I_BACKGROUND_ID = ' '

I_GRID_TITLE = LV_GRIDTITLE

  • I_GRID_SETTINGS =

IS_LAYOUT = I_LAYOUT

IT_FIELDCAT = I_FIELDCAT

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

I_SAVE = 'A'

  • IS_VARIANT =

  • IT_EVENTS =

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • IT_ALV_GRAPHICS =

  • IT_HYPERLINK =

  • IT_ADD_FIELDCAT =

  • IT_EXCEPT_QINFO =

  • I_HTML_HEIGHT_TOP =

  • I_HTML_HEIGHT_END =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB = I_TAB

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

****do rewards if usefull

regards,

vijay

Read only

Former Member
0 Likes
1,773

g_repid = sy-repid.

data g_keyinfo type SLIS_KEYINFO_ALV.

g_keyinfo-HEADER01 = 'VBELV'.

g_keyinfo-ITEM01 = 'VBELV'.

g_keyinfo-HEADER02 = 'POSNV'.

g_keyinfo-ITEM02 = 'POSNV'.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

i_interface_check = 'I'

i_callback_program = g_repid

i_callback_pf_status_set = 'SET_STATUS'

i_callback_user_command = 'USER_COMMAND'

  • is_layout = gs_layout

it_fieldcat = t_fieldcat[]

i_default = ' '

i_save = 'A'

i_tabname_header = 'T_HEAD'

i_tabname_item = 'T_OUTPUT'

  • i_structure_name_header = v_headers_table

  • i_structure_name_item = v_items_table

is_keyinfo = g_keyinfo

  • i_bypassing_buffer = 'X'

TABLES

t_outtab_header = t_head[]

  • t_outtab_item = i_result

t_outtab_item = t_output[]

EXCEPTIONS

program_error = 1

OTHERS = 2.

Read only

Former Member
0 Likes
1,773

Hi Mahesh

I had forwarded you some documents on alv pzl check it outand here are some sample reports on alv

<b><u>Simple alv report</u></b>

 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.

<u><b>coloring in alv</b></u>

*&---------------------------------------------------------------------*
*& Report  ZALVCOLOR                                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZALVCOLOR                               .

DATA : mara TYPE mara.                 " General Material Data

TYPE-POOLS: slis.                      " ALV Global types

FIELD-SYMBOLS :
  <data> TYPE table.                   " Data to display

SELECT-OPTIONS :
  s_matnr FOR mara-matnr.              " Material number

SELECTION-SCREEN :
  SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max.    "#EC NEEDED
PARAMETERS p_max(2) TYPE n DEFAULT '50' OBLIGATORY.
SELECTION-SCREEN END OF LINE.

*---------------------------------------------------------------------*
INITIALIZATION.

  v_1 = 'Maximum of lines to display'.

*---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM f_read_data.

  PERFORM f_display_data.

*---------------------------------------------------------------------*
*      Form  f_read_data
*---------------------------------------------------------------------*
FORM f_read_data.

  FIELD-SYMBOLS :
    <field>    TYPE ANY,
    <field2>   TYPE ANY,
    <header>   TYPE ANY,
    <header2>  TYPE ANY,
    <lt_data>  TYPE table.             " Data read from DB

  DATA:
    lp_struct  TYPE REF TO data,
    lp_struct2 TYPE REF TO data,
    lp_table   TYPE REF TO data,       " Pointer to dynamic table
    lp_table2  TYPE REF TO data,       " Pointer to dynamic table
    ls_lvc_cat TYPE lvc_s_fcat,
    lt_lvc_cat TYPE lvc_t_fcat.        " Field catalog

* First column
  CLEAR ls_lvc_cat.
  ls_lvc_cat-fieldname = 'MATNR'.
  ls_lvc_cat-ref_table = 'MARA'.
  APPEND ls_lvc_cat TO lt_lvc_cat.

* 2nd column
  CLEAR ls_lvc_cat.
  ls_lvc_cat-fieldname = 'MAKTX'.
  ls_lvc_cat-ref_table = 'MAKT'.
  APPEND ls_lvc_cat TO lt_lvc_cat.

* 3rd column
  CLEAR ls_lvc_cat.
  ls_lvc_cat-fieldname = 'MATKL'.
  ls_lvc_cat-ref_table = 'MARA'.
  APPEND ls_lvc_cat TO lt_lvc_cat.

* Create 1st internal table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING it_fieldcatalog = lt_lvc_cat
    IMPORTING ep_table = lp_table.

  ASSIGN lp_table->* TO <lt_data>.

* Read data into 1st internal table
  SELECT matnr maktx matkl
    INTO TABLE <lt_data>
    FROM v_matnr
      UP TO p_max ROWS
   WHERE matnr IN s_matnr.

* Create 2nd internal table
* Checkbox
  CLEAR ls_lvc_cat.
  ls_lvc_cat-fieldname = 'CHECKBOX'.
  APPEND ls_lvc_cat TO lt_lvc_cat.

* Table color
  CLEAR ls_lvc_cat.
  ls_lvc_cat-fieldname = 'TABCOLOR'.
  ls_lvc_cat-ref_table = 'CALENDAR_TYPE'.
  ls_lvc_cat-ref_field = 'COLTAB'.
  APPEND ls_lvc_cat TO lt_lvc_cat.

* Create 2nd internal table
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING it_fieldcatalog = lt_lvc_cat
    IMPORTING ep_table = lp_table2.

  ASSIGN lp_table2->* TO <data>.

* Create structure = structure of the 1st internal table
  CREATE DATA lp_struct LIKE LINE OF <lt_data>.
  ASSIGN lp_struct->* TO <header>.

* Create structure = structure of the 2nd internal table
  CREATE DATA lp_struct2 LIKE LINE OF <data>.
  ASSIGN lp_struct2->* TO <header2>.

* Move data from 1st internal table --> 2nd internal table
  LOOP AT <lt_data> ASSIGNING <header>.

    DESCRIBE TABLE lt_lvc_cat.
    CLEAR <header2>.

*   Fill the internal to display <data>
    DO sy-tfill TIMES.
      READ TABLE lt_lvc_cat INTO ls_lvc_cat INDEX sy-index.
*     For each field of lt_lvc_cat.
      ASSIGN COMPONENT ls_lvc_cat-fieldname OF STRUCTURE <header>
                    TO <field>.
      IF sy-subrc NE 0. EXIT .ENDIF.
      ASSIGN COMPONENT ls_lvc_cat-fieldname OF STRUCTURE <header2>
                    TO <field2>.
      IF sy-subrc NE 0. EXIT .ENDIF.
      <field2> = <field>.
    ENDDO.

*   Modify color
    ASSIGN COMPONENT 'TABCOLOR' OF STRUCTURE <header2>
                  TO <field2>.
    IF sy-subrc EQ 0.
      PERFORM f_modify_color USING 'MAKTX' <field2>.
      PERFORM f_modify_color USING 'MATKL' <field2>.
    ENDIF.

    APPEND <header2> TO <data> .
  ENDLOOP.

ENDFORM.                    " f_read_data
*---------------------------------------------------------------------*
*      Form  F_DISPLAY_DATA
*---------------------------------------------------------------------*
FORM f_display_data.

* Macro definition
  DEFINE m_sort.
    add 1 to ls_sort-spos.
    ls_sort-fieldname = &1.
    ls_sort-down      = 'X'.
    append ls_sort to lt_sort.
  END-OF-DEFINITION.

  DATA:
    ls_layout   TYPE slis_layout_alv,
    lt_sort     TYPE slis_t_sortinfo_alv,
    ls_sort     TYPE slis_sortinfo_alv,
    ls_fieldcat TYPE slis_fieldcat_alv,
    lt_fieldcat TYPE slis_t_fieldcat_alv.  " Field catalog

* Build Fieldcatalog - First column
  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'MATNR'.
  ls_fieldcat-ref_tabname = 'MARA'.
  ls_fieldcat-key  = 'X'.
  APPEND ls_fieldcat TO lt_fieldcat.

* Build Fieldcatalog - 2nd column
  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'MAKTX'.
  ls_fieldcat-ref_tabname = 'MAKT'.
  APPEND ls_fieldcat TO lt_fieldcat.

* Build Fieldcatalog - 3rd column
  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname   = 'MATKL'.
  ls_fieldcat-ref_tabname = 'MARA'.
  APPEND ls_fieldcat TO lt_fieldcat.

* Layout
  ls_layout-zebra = 'X'.
  ls_layout-colwidth_optimize = 'X'.
  ls_layout-box_fieldname = 'CHECKBOX'.
  ls_layout-coltab_fieldname = 'TABCOLOR'.

  m_sort 'MATNR'.                      " Sort by creation date

* Display data
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            is_layout   = ls_layout
            it_fieldcat = lt_fieldcat
            it_sort     = lt_sort
       TABLES
            t_outtab    = <data>.

ENDFORM.                               " F_DISPLAY_DATA
*---------------------------------------------------------------------*
*      Form  F_modify_color
*---------------------------------------------------------------------*
FORM f_modify_color USING u_fieldname TYPE lvc_fname
                          ut_tabcolor TYPE table.

  DATA:
    l_rnd_value TYPE datatype-integer2,
    ls_tabcolor TYPE lvc_s_scol.

* Random value
  CALL FUNCTION 'RANDOM_I2'
       EXPORTING
            rnd_min   = 0
            rnd_max   = 3
       IMPORTING
            rnd_value = l_rnd_value.

  CLEAR ls_tabcolor.
  ls_tabcolor-fname = u_fieldname.

  CASE l_rnd_value.
    WHEN 0.
      ls_tabcolor-color-col = 1.       " Blue.
      ls_tabcolor-color-int = 0.
      ls_tabcolor-color-inv = 0.
    WHEN 1.
      ls_tabcolor-color-col = 3.       " Yellow.
      ls_tabcolor-color-int = 0.
      ls_tabcolor-color-inv = 0.
    WHEN 2.
      ls_tabcolor-color-col = 5.       " Green.
      ls_tabcolor-color-int = 0.
      ls_tabcolor-color-inv = 0.
    WHEN 3.
      ls_tabcolor-color-col = 6.       " Red.
      ls_tabcolor-color-int = 0.
      ls_tabcolor-color-inv = 0.
  ENDCASE.

  INSERT ls_tabcolor INTO TABLE ut_tabcolor.

ENDFORM.                               " F_MODIFY_COLOR

<b><u>alv tree structure</u></b>

*&---------------------------------------------------------------------*
*& Report  ZALV1                                                       *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZALV1                                   .


type-pools: slis.

data: begin of head occurs 0,
       matnr type ekpo-matnr,
       maktx type makt-maktx,
       EXPAND type c,
      end of head.

data: begin of detail occurs 0,
       aufnr type afpo-aufnr,
       matnr type afpo-matnr,
       werks type aufk-werks,
       pwerk type afpo-pwerk,
       psmng type afpo-psmng,
      end of detail.

start-of-selection.

  select * into corresponding fields of table detail
               from afpo
                  inner join aufk
                    on afpo~aufnr = aufk~aufnr
                  inner join afko
                    on afpo~aufnr = afko~aufnr
                              up to 500 rows
                                    where aufk~auart = 'G2P1'.

  if not detail[] is initial.
    sort detail ascending by matnr.
    select distinct * into corresponding fields of table head
              from makt
                 for all entries in detail
                    where matnr = detail-matnr
                      and spras = sy-langu.
  endif.

  perform call_alv.

*---------------------------------------------------------------------*
*       FORM call_alv                                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
form call_alv.


  data: gt_fieldcat type slis_t_fieldcat_alv,
        gs_keyinfo  type slis_keyinfo_alv,
        gs_layout   type slis_layout_alv.
  .
  data: ls_fieldcat type slis_fieldcat_alv.

  clear gs_keyinfo.
  gs_keyinfo-header01 = 'MATNR'.
  gs_keyinfo-item01   = 'MATNR'.


  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'MATNR'.
  ls_fieldcat-reptext_ddic = 'Material'.
  ls_fieldcat-tabname      = 'HEAD'.
  ls_fieldcat-outputlen    = 18.
  append ls_fieldcat to gt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'MAKTX'.
  ls_fieldcat-reptext_ddic = 'Description'.
  ls_fieldcat-tabname      = 'HEAD'.
  ls_fieldcat-outputlen    = 40.
  append ls_fieldcat to gt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'AUFNR'.
  ls_fieldcat-reptext_ddic = 'Production Order'.
  ls_fieldcat-tabname      = 'DETAIL'.
  ls_fieldcat-outputlen    = 12.
  append ls_fieldcat to gt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'WERKS'.
  ls_fieldcat-reptext_ddic = 'Production Plant'.
  ls_fieldcat-tabname      = 'DETAIL'.
  ls_fieldcat-outputlen    = 4.
  append ls_fieldcat to gt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'PWERK'.
  ls_fieldcat-reptext_ddic = 'Planning Plant'.
  ls_fieldcat-tabname      = 'DETAIL'.
  ls_fieldcat-outputlen    = 4.
  append ls_fieldcat to gt_fieldcat.

  clear ls_fieldcat.
  ls_fieldcat-fieldname    = 'PSMNG'.
  ls_fieldcat-reptext_ddic = 'Quantity'.
  ls_fieldcat-tabname      = 'DETAIL'.
  ls_fieldcat-outputlen    = 20.
  append ls_fieldcat to gt_fieldcat.


  gs_layout-expand_fieldname = 'EXPAND'.


  call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
       exporting
            it_fieldcat      = gt_fieldcat[]
            is_layout        = gs_layout
            i_tabname_header = 'HEAD'
            i_tabname_item   = 'DETAIL'
            is_keyinfo       = gs_keyinfo
       tables
            t_outtab_header  = head
            t_outtab_item    = detail.

endform.

Reward all helpfull answers

Regards

Pavan

Read only

Former Member
0 Likes
1,773

Hi.

refer this code.

*&----


*

*& Include Z_TABLE_DISPLAY

*&----


*

  • VERSION 2

*

*********************************************************************

  • HOW TO

*

  • Display an ALV grid :

  • CALL METHOD lcl_table_display=>display_grid( 'tabname' ).

*

  • Display a hierarchical list with header and detail :

  • CALL METHOD lcl_table_display=>display_hier( in_header = 'table1'

  • in_detail = 'table2' ).

*

  • Display a block list with two tables :

  • CALL METHOD lcl_table_display=>set_block_mode( 'X' ).

  • CALL METHOD lcl_table_display=>display_grid( 'table1' ).

  • CALL METHOD lcl_table_display=>display_grid( 'table2' ).

  • CALL METHOD lcl_table_display=>end_block_list( ).

*

  • You never have to deal with field catalog of tables !!

*

  • What if field catalog has to be changed anyway ?

*

  • ob_table = lcl_table_display=>create_table( 'tabname' ).

  • CALL METHOD ob_table->set_alv_fieldtext( in_field = field

  • in_ftext = 'text' ).

  • CALL METHOD lcl_table_display=>display_grid( 'tabname' ).

*********************************************************************

type-pools: abap, slis.

*----


*

  • LCL_TABLE_DISPLAY DEFINITION

*----


*

class lcl_table_display definition.

public section.

class-methods: display_list importing in_tabname type any,

display_grid importing in_tabname type any,

display_hier importing in_header type any

in_detail type any

in_level type i optional,

set_block_mode importing in_mode type c,

set_block_text importing in_text type any,

end_block_list importing in_print

type slis_print_alv optional

exceptions display_error,

create_table

importing

in_tabname type tabname

returning

value(out_table) type ref to lcl_table_display

exceptions

create_error,

get_existing_table

importing

in_tabname type any optional

in_repid type any optional

in_struc type any optional

returning

value(out_table) type ref to lcl_table_display

exceptions

no_parameter

not_found,

refresh_objects.

methods: constructor importing in_data type standard table

exceptions casting_error

empty_fieldcat.

methods: get_alv_fieldcat returning value(out_fieldcat)

type slis_t_fieldcat_alv.

methods: set_table_name importing in_tabname type any,

set_alv_title importing in_title type any,

set_alv_fieldcat importing in_fieldcat

type slis_t_fieldcat_alv,

set_alv_fieldnoout importing in_field type any

in_noout type c optional

in_tech type c optional,

set_alv_fieldedit importing in_field type any

in_edit type c optional,

set_alv_fieldtext importing in_field type any

in_ftext type any,

set_alv_fieldsum importing in_field type any

in_dosum type c optional,

set_alv_linebreak importing in_field type any,

set_alv_settings importing in_settings type any,

set_alv_layout importing in_layout type any,

set_alv_print importing in_print type any,

set_alv_sorting importing in_field type any

in_desc type c optional

in_group type any optional

in_subtot type c optional,

set_alv_keys importing in_level type i

in_key type c optional,

set_alv_event importing in_name type any

in_form type any,

set_all_events.

protected section.

data: g_table_type type slis_list_type.

data: g_title type lvc_title,

gt_fcat type slis_t_fieldcat_alv,

gs_sett type lvc_s_glay,

gs_layo type slis_layout_alv,

gt_sort type slis_t_sortinfo_alv,

gt_evnt type slis_t_event,

gs_prin type slis_print_alv.

class-methods: output_hierarchy exceptions display_error.

methods: output_table importing mode type c

exceptions display_error,

output_list,

output_grid.

private section.

class-data: gt_table_obj type table of ref to lcl_table_display,

g_header_table type ref to lcl_table_display,

g_detail_table type ref to lcl_table_display.

class-data: g_variant_level type i.

class-data: g_block_mode type c,

g_block_text type slis_text40.

types: begin of ty_defin,

fieldname type fieldname,

ref_tabname type tabname,

ref_fieldname type fieldname,

end of ty_defin.

data: g_repid type repid,

g_struc type tabname,

g_table type tabname.

data: gt_data type ref to data.

data: gt_defin type table of ty_defin,

g_level type tabname.

methods: init_block_list,

fill_fieldcat importing repid type repid

struc type tabname

changing fcat type slis_t_fieldcat_alv

exceptions no_definition,

get_definition importing repid type repid

struc type tabname

changing abap type rsfb_source,

recursive_definition importing repid type repid

changing abap type rsfb_source,

map_structure importing source type any

changing destin type any,

get_default_variant changing out_variant type disvariant.

endclass. "lcl_table_display DEFINITION

*----


*

  • LCL_TABLE_DISPLAY IMPLEMENTATION

*----


*

class lcl_table_display implementation.

***

  • Display table in ALV list

***

method display_list.

data: l_object type ref to lcl_table_display,

l_tabname type tabname,

l_found type c.

l_tabname = in_tabname.

loop at gt_table_obj into l_object.

if l_object->g_table = l_tabname.

l_found = 'X'.

exit.

endif.

endloop.

if l_found is initial.

l_object = lcl_table_display=>create_table( l_tabname ).

if g_block_mode is initial.

l_object->g_table_type = 4.

else.

l_object->g_table_type = 2.

endif.

call method l_object->set_all_events.

endif.

call method l_object->output_list.

endmethod. "display_list

***

  • Display table in ALV grid

***

method display_grid.

data: l_object type ref to lcl_table_display,

l_tabname type tabname,

l_found type c.

l_tabname = in_tabname.

loop at gt_table_obj into l_object.

if l_object->g_table = l_tabname.

l_found = 'X'.

exit.

endif.

endloop.

if l_found is initial.

l_object = lcl_table_display=>create_table( l_tabname ).

if g_block_mode is initial.

l_object->g_table_type = 4.

else.

l_object->g_table_type = 2.

endif.

call method l_object->set_all_events.

endif.

if g_block_mode is initial.

call method l_object->output_grid.

else.

call method l_object->output_list.

endif.

endmethod. "display_grid

***

  • Display tables in ALV hierarchy

***

method display_hier.

data: l_tabnam1 type tabname,

l_tabnam2 type tabname,

lt_fcat1 type slis_t_fieldcat_alv,

lt_fcat2 type slis_t_fieldcat_alv,

ls_fcat1 type slis_fieldcat_alv,

ls_fcat2 type slis_fieldcat_alv.

l_tabnam1 = in_header.

l_tabnam2 = in_detail.

call method lcl_table_display=>get_existing_table

exporting

in_tabname = l_tabnam1

receiving

out_table = g_header_table

exceptions

not_found = 1.

if sy-subrc ne 0.

g_header_table = lcl_table_display=>create_table( l_tabnam1 ).

if g_block_mode is initial.

g_header_table->g_table_type = 1.

else.

g_header_table->g_table_type = 3.

endif.

call method g_header_table->set_all_events.

endif.

call method lcl_table_display=>get_existing_table

exporting

in_tabname = l_tabnam2

receiving

out_table = g_detail_table

exceptions

not_found = 1.

if sy-subrc ne 0.

g_detail_table = lcl_table_display=>create_table( l_tabnam2 ).

endif.

  • Set key fields

if in_level is initial.

lt_fcat1 = g_header_table->get_alv_fieldcat( ).

lt_fcat2 = g_detail_table->get_alv_fieldcat( ).

loop at lt_fcat1 into ls_fcat1.

ls_fcat1-key = space.

loop at lt_fcat2 into ls_fcat2

where fieldname = ls_fcat1-fieldname.

ls_fcat2-key = space.

ls_fcat2-key_sel = 'X'.

ls_fcat2-tech = 'X'.

modify lt_fcat2 from ls_fcat2 transporting key.

endloop.

if sy-subrc = 0.

ls_fcat1-key = 'X'.

endif.

modify lt_fcat1 from ls_fcat1 transporting key.

endloop.

call method g_header_table->set_alv_fieldcat

exporting

in_fieldcat = lt_fcat1.

call method g_detail_table->set_alv_fieldcat

exporting

in_fieldcat = lt_fcat2.

else.

call method g_header_table->set_alv_keys

exporting

in_level = in_level.

call method g_detail_table->set_alv_keys

exporting

in_level = in_level

in_key = space.

endif.

call method output_hierarchy.

endmethod. "display_hier

***

  • Set block mode

***

method set_block_mode.

g_block_mode = in_mode.

endmethod. "set_block_mode

***

  • Set block text

***

method set_block_text.

g_block_text = in_text.

endmethod. "set_block_text

***

  • Create new table

***

method create_table.

data: l_object type ref to lcl_table_display.

field-symbols: set_table_name

exporting

in_tabname = in_tabname.

  • Default print options

l_object->gs_prin-no_print_selinfos = 'X'.

l_object->gs_prin-no_coverpage = 'X'.

l_object->gs_prin-no_print_listinfos = 'X'.

out_table = l_object.

endmethod. "create_table

***

  • Get existing table

***

method get_existing_table.

data: l_object type ref to lcl_table_display,

l_tabname type tabname,

l_repid type repid,

l_struc type tabname,

l_found type c.

l_tabname = in_tabname.

l_repid = in_repid.

l_struc = in_struc.

if l_tabname is initial.

if l_repid is initial and

l_struc is initial.

raise no_parameter.

else.

  • Get last existing table with same definition

loop at gt_table_obj into l_object.

if l_object->g_repid = l_repid and

l_object->g_struc = l_struc.

l_found = 'X'.

exit.

endif.

endloop.

endif.

else.

  • Get last existing table with same name

loop at gt_table_obj into l_object.

if l_object->g_table = l_tabname.

l_found = 'X'.

exit.

endif.

endloop.

endif.

if l_found is initial.

raise not_found.

else.

out_table = l_object.

endif.

endmethod. "get_existing_table

***

  • Create table display

***

method constructor.

data: l_object type ref to lcl_table_display.

data: ls_data type ref to data.

data: ob_desc type ref to cl_abap_structdescr.

data: l_found type c,

l_absol type char200,

l_repid type repid,

l_struc type tabname.

field-symbols: type any.

  • Get data and store it into attribute

create data me->gt_data like in_data.

assign me->gt_data->* to .

= in_data.

  • Get global data definition

create data ls_data like line of ).

endcatch.

if sy-subrc = 1.

raise casting_error.

endif.

  • Get program name and main type used to define table

l_absol = ob_desc->absolute_name.

split l_absol at 'TYPE=' into l_repid l_struc.

shift l_repid up to '='.

shift l_repid.

check l_struc np '%_*'.

  • Set attributes

me->g_repid = l_repid.

me->g_struc = l_struc.

me->g_table = l_struc.

replace 'TY' with 'WT' into me->g_table.

  • Field catalog

call method lcl_table_display=>get_existing_table

exporting

in_repid = l_repid

in_struc = l_struc

receiving

out_table = l_object

exceptions

not_found = 1.

if sy-subrc = 0.

me->gt_fcat = l_object->get_alv_fieldcat( ).

call method set_table_name

exporting

in_tabname = me->g_table.

else.

call method fill_fieldcat

exporting

repid = l_repid

struc = l_struc

changing

fcat = me->gt_fcat.

if me->gt_fcat is initial.

raise empty_fieldcat.

endif.

endif.

  • Keep list of tables

append me to gt_table_obj.

endmethod. "constructor

***

  • Output list

***

method output_list.

call method output_table

exporting

mode = 'L'.

endmethod. "output_list

***

  • Output grid

***

method output_grid.

call method output_table

exporting

mode = 'G'.

endmethod. "output_grid

***

  • Output table

***

method output_table.

data: l_object type ref to lcl_table_display.

data: ls_vari type disvariant.

field-symbols: type standard table.

assign me->gt_data->* to .

if not g_block_mode is initial.
read table gt_table_obj into l_object index 1.
if sy-subrc = 0.
if l_object->g_table = me->

g_table.

call method init_block_list.

endif.

endif.

endif.

  • Get default user variant

call method get_default_variant

changing

out_variant = ls_vari.

  • Display table contents

if mode = 'G'.

call function 'REUSE_ALV_GRID_DISPLAY'

exporting

i_callback_program = me->g_repid

i_grid_title = me->g_title

i_grid_settings = me->gs_sett

is_layout = me->gs_layo

it_fieldcat = me->gt_fcat

it_sort = me->gt_sort

i_save = 'U'

is_variant = ls_vari

it_events = me->gt_evnt

is_print = me->gs_prin

tables

t_outtab =
exceptions
program_error = 1
others = 2.
if sy-subrc <> 0.
raise display_error.
endif.
call method refresh_objects.
else.
if g_block_mode is initial.
call function 'REUSE_ALV_LIST_DISPLAY'
exporting
i_callback_program = me->g_repid
is_layout = me->gs_layo
it_fieldcat = me->gt_fcat
it_sort = me->gt_sort
i_save = 'U'
is_variant = ls_vari
it_events = me->gt_evnt
is_print = me->gs_prin
tables
t_outtab =
exceptions
others = 0.
if sy-subrc <> 0.
raise display_error.
endif.
call method refresh_objects.
else.
call function 'REUSE_ALV_BLOCK_LIST_APPEND'
exporting
is_layout = me->gs_layo
it_fieldcat = me->gt_fcat
i_tabname = me->g_table
it_events = me->gt_evnt
it_sort = me->gt_sort
i_text = g_block_text
tables
t_outtab =
exceptions
program_error = 1
maximum_of_appends_reached = 2
others = 3.
if sy-subrc <>

0.

raise display_error.

endif.

endif.

endif.

endmethod. "output_table

***

  • Output hierarchy

***

method output_hierarchy.

data: l_object type ref to lcl_table_display.

data: lt_fcat type slis_t_fieldcat_alv,

lt_sort type slis_t_sortinfo_alv,

ls_fcat type slis_fieldcat_alv,

ls_vari type disvariant,

ls_keyi type slis_keyinfo_alv.

data: l_index type numc2,

l_field type fieldname.

field-symbols: .

  • Set key fields as common fields between header and detail

loop at g_header_table->gt_fcat into ls_fcat

where key = 'X'.

l_index = l_index + 1.

  • Create link

concatenate 'HEADER' l_index into l_field.

assign component l_field of structure ls_keyi to init_block_list.

endif.

endif.

endif.

  • Get default user variant

call method g_header_table->get_default_variant

changing

out_variant = ls_vari.

if g_block_mode is initial.

call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

exporting

i_callback_program = g_header_table->g_repid

is_layout = g_header_table->gs_layo

it_fieldcat = lt_fcat

it_sort = lt_sort

i_save = 'U'

is_variant = ls_vari

it_events = g_header_table->gt_evnt

i_tabname_header = g_header_table->g_table

i_tabname_item = g_detail_table->g_table

is_keyinfo = ls_keyi

is_print = g_header_table->gs_prin

tables

t_outtab_header = 0.

raise display_error.

endif.

endif.

endmethod. "output_hierarchy

***

  • Init block list

***

method init_block_list.

data: ls_evnt1 type slis_alv_event,

ls_evnt2 type slis_alv_event.

  • Events for whole list display

concatenate 'F_' slis_ev_pf_status_set '_BLOCK'

into ls_evnt1-form.

concatenate 'F_' slis_ev_user_command '_BLOCK'

into ls_evnt2-form.

  • Initialization of block list

call function 'REUSE_ALV_BLOCK_LIST_INIT'

exporting

i_callback_program = me->g_repid

i_callback_pf_status_set = ls_evnt1-form

i_callback_user_command = ls_evnt2-form.

endmethod. "init_block_list

***

  • End of block list

***

method end_block_list.

data: l_object type ref to lcl_table_display,

ls_print type slis_print_alv.

check not g_block_mode is initial.

if in_print is supplied.

ls_print = in_print.

else.

read table gt_table_obj into l_object index 1.

ls_print = l_object->gs_prin.

endif.

call function 'REUSE_ALV_BLOCK_LIST_DISPLAY'

exporting

is_print = ls_print

exceptions

program_error = 1

others = 2.

if sy-subrc <> 0.

raise display_error.

endif.

call method refresh_objects.

endmethod. "end_block_list

***

  • Refresh table of objects

***

method refresh_objects.

free: gt_table_obj.

endmethod.

***

  • Fill field catalog

***

method fill_fieldcat.

data: lt_abap type rsfb_source.

data: ls_defin type ty_defin.

data: lt_dfies type table of dfies,

ls_dfies type dfies,

ls_dd04v type dd04v,

ls_dd01v type dd01v,

l_flong type dfies-lfieldname,

l_dname type dfies-domname.

data: ls_fcat type slis_fieldcat_alv,

ls_fcat2 type slis_fieldcat_alv.

data: l_index type i,

l_nbfld type i.

free: me->gt_defin.

  • Process data definition

call method get_definition

exporting

repid = repid

struc = struc

changing

abap = lt_abap.

  • Process sub levels if required

call method recursive_definition

exporting

repid = repid

changing

abap = lt_abap.

if me->gt_defin is initial.

raise no_definition.

endif.

loop at me->gt_defin into ls_defin.

clear: ls_fcat.

move-corresponding ls_defin to ls_fcat.

  • Retrieve info about this field

free: ls_dfies, ls_dd04v, ls_dd01v, l_dname.

l_flong = ls_fcat-ref_fieldname.

set locale language 'E'.

translate: ls_fcat-ref_tabname to upper case,

ls_fcat-ref_fieldname to upper case,

l_flong to upper case.

if not ls_fcat-ref_tabname is initial.

  • Try to get info about field in table

call function 'DDIF_FIELDINFO_GET'

exporting

tabname = ls_fcat-ref_tabname

fieldname = ls_fcat-ref_fieldname

lfieldname = l_flong

importing

dfies_wa = ls_dfies

exceptions

not_found = 1

internal_error = 2

others = 3.

if sy-subrc = 0.

move-corresponding ls_dfies to ls_fcat.

ls_fcat-fieldname = ls_defin-fieldname.

move: ls_dfies-keyflag to ls_fcat-key,

ls_dfies-scrtext_m to ls_fcat-seltext_l,

ls_dfies-domname to l_dname.

endif.

else.

  • Try to get info about structure

ls_defin-ref_tabname = ls_defin-ref_fieldname.

call function 'DDIF_FIELDINFO_GET'

exporting

tabname = ls_defin-ref_tabname

tables

dfies_tab = lt_dfies

exceptions

others = 0.

if not lt_dfies is initial.

  • Process fields of this structure

loop at lt_dfies into ls_dfies.

clear: ls_fcat.

move-corresponding ls_dfies to ls_fcat.

if ls_defin-fieldname ne 'INCLUDE'.

concatenate ls_defin-fieldname ls_fcat-fieldname

into ls_fcat-fieldname

separated by '-'.

endif.

move ls_dfies-keyflag to ls_fcat-key.

move ls_dfies-scrtext_m to ls_fcat-seltext_l.

ls_fcat-tabname = me->g_table.

clear: ls_fcat-col_pos,

ls_fcat-offset.

if ls_fcat-ref_tabname is initial.

ls_fcat-ddictxt = 'L'.

endif.

  • Display Yes/No fields as checkboxes

if ls_dfies-domname = 'XFELD'.

ls_fcat-checkbox = 'X'.

endif.

  • Add field to field catalog

append ls_fcat to fcat.

endloop.

continue.

else.

  • Try to get info about data element

call function 'DDIF_DTEL_GET'

exporting

name = ls_fcat-ref_fieldname

langu = sy-langu

importing

dd04v_wa = ls_dd04v

exceptions

illegal_input = 1

others = 2.

if sy-subrc = 0.

move-corresponding ls_dd04v to ls_fcat.

move: ls_dd04v-scrtext_m to ls_fcat-seltext_l,

ls_dd04v-domname to l_dname.

else.

  • Finally try to get info about domain

call function 'DDIF_DOMA_GET'

exporting

name = ls_fcat-ref_fieldname

langu = sy-langu

importing

dd01v_wa = ls_dd01v

exceptions

illegal_input = 1

others = 2.

if sy-subrc = 0.

move-corresponding ls_dd01v to ls_fcat.

move: ls_dd01v-ddtext to ls_fcat-seltext_l,

ls_dd01v-domname to l_dname.

endif.

endif.

endif.

endif.

  • Table name must be internal table containing data

ls_fcat-tabname = g_table.

  • No offset

clear: ls_fcat-offset.

  • Default text is stored in long text

if ls_fcat-ref_tabname is initial.

ls_fcat-ddictxt = 'L'.

endif.

  • Display Yes/No fields as checkboxes

if l_dname = 'XFELD'.

ls_fcat-checkbox = 'X'.

endif.

  • Add field to field catalog

append ls_fcat to fcat.

endloop.

  • Positions

loop at fcat into ls_fcat.

ls_fcat-row_pos = 1.

ls_fcat-col_pos = sy-tabix.

modify fcat from ls_fcat transporting row_pos col_pos.

endloop.

  • Link between fields

describe table fcat lines l_nbfld.

loop at fcat into ls_fcat.

if sy-tabix ne l_nbfld.

l_index = sy-tabix + 1.

read table fcat into ls_fcat2 index l_index.

if sy-subrc = 0.

if ls_fcat-datatype = 'CURR'.

  • Currency unit

if ls_fcat2-datatype = 'CUKY'.

ls_fcat-cfieldname = ls_fcat2-fieldname.

ls_fcat-ctabname = ls_fcat2-tabname.

modify fcat from ls_fcat.

else.

loop at fcat into ls_fcat2

from l_index

where datatype = 'CUKY'.

  • First currency unit after field

ls_fcat-cfieldname = ls_fcat2-fieldname.

ls_fcat-ctabname = ls_fcat2-tabname.

modify fcat from ls_fcat.

exit.

endloop.

if sy-subrc ne 0.

  • No currency unit after field, try before

read table fcat into ls_fcat2

with key datatype = 'CUKY'.

if sy-subrc = 0.

ls_fcat-cfieldname = ls_fcat2-fieldname.

ls_fcat-ctabname = ls_fcat2-tabname.

modify fcat from ls_fcat.

else.

  • Default is EURO

ls_fcat-currency = 'EUR'.

endif.

endif.

endif.

endif.

if ls_fcat-datatype = 'QUAN'.

  • Quantity unit

if ls_fcat2-datatype = 'UNIT'.

ls_fcat-cfieldname = ls_fcat2-fieldname.

ls_fcat-ctabname = ls_fcat2-tabname.

modify fcat from ls_fcat.

endif.

endif.

endif.

endif.

endloop.

endmethod. "fill_fieldcat

***

  • Get definition of type from code source

***

method get_definition.

data: l_strng type rssource,

ls_abap type rssource,

l_fdpos type i,

l_first type i,

l_lastr type i.

data: lt_incl type table of repid,

ls_incl type repid.

  • Get program code

read report repid into abap.

check sy-subrc eq 0.

  • Get first line of definition

concatenate 'BEGIN OF' struc into l_strng

separated by space.

loop at abap into ls_abap.

if ls_abap cs l_strng.

l_fdpos = strlen( l_strng ) + sy-fdpos.

if ls_abap(1) = '*' or ls_abap(sy-fdpos) cs '"'.

continue.

endif.

if ls_abap+l_fdpos(1) ca ',. "'.

l_first = sy-tabix.

exit.

endif.

endif.

endloop.

if l_first is initial.

  • Table is defined in an include

call function 'RS_GET_ALL_INCLUDES'

exporting

program = repid

tables

includetab = lt_incl

exceptions

others = 1.

if sy-subrc = 0.

loop at lt_incl into ls_incl.

  • Try to find definition in this include

read report ls_incl into abap.

loop at abap into ls_abap.

if ls_abap cs l_strng.

l_fdpos = strlen( l_strng ) + sy-fdpos.

if ls_abap(1) = '*' or ls_abap(sy-fdpos) cs '"'.

continue.

endif.

if ls_abap+l_fdpos(1) ca ',. "'.

l_first = sy-tabix.

exit.

endif.

endif.

endloop.

if not l_first is initial.

exit.

endif.

endloop.

endif.

endif.

  • Get last line of definition

concatenate 'END OF' struc into l_strng

separated by space.

loop at abap into ls_abap.

if ls_abap cs l_strng.

l_fdpos = strlen( l_strng ) + sy-fdpos.

if ls_abap(1) = '*' or ls_abap(sy-fdpos) cs '"'.

continue.

endif.

if ls_abap+l_fdpos(1) ca ',. "'.

l_lastr = sy-tabix - l_first.

exit.

endif.

endif.

endloop.

  • Keep only relevant code lines

if l_first le 0

or l_lastr le 0.

refresh abap.

else.

delete abap to l_first.

delete abap from l_lastr.

endif.

endmethod. "get_definition

***

  • Get definition of type recursively

***

method recursive_definition.

data: lt_token type table of stokex,

ls_token type stokex,

lt_state type table of sstmnt,

ls_state type sstmnt.

data: ls_defin type ty_defin,

l_reffld type fieldname.

data: lt_recu type rsfb_source.

  • Retrieve tokens

scan abap-source abap

tokens into lt_token

statements into lt_state.

loop at lt_state into ls_state.

clear: ls_defin.

  • Field name

read table lt_token into ls_token

index ls_state-from.

ls_defin-fieldname = ls_token-str.

  • Reference type

read table lt_token into ls_token

index ls_state-to.

l_reffld = ls_token-str.

  • Check if this type is defined in program

free: lt_recu.

call method get_definition

exporting

repid = repid

struc = l_reffld

changing

abap = lt_recu.

if lt_recu is initial.

if not g_level is initial.

concatenate g_level ls_defin-fieldname

into ls_defin-fieldname separated by '-'.

condense ls_defin-fieldname.

endif.

if l_reffld cs '-'.

split l_reffld at '-'

into ls_defin-ref_tabname

ls_defin-ref_fieldname.

if ls_defin-ref_tabname = 'SY'.

ls_defin-ref_tabname = 'SYST'.

endif.

else.

ls_defin-ref_fieldname = ls_token-str.

endif.

append ls_defin to me->gt_defin.

else.

  • Process sub levels

if me->g_level is initial.

me->g_level = ls_defin-fieldname.

else.

concatenate me->g_level ls_defin-fieldname into me->g_level

separated by '-'.

endif.

call method recursive_definition

exporting

repid = repid

changing

abap = lt_recu.

if me->g_level cs '-'.

shift me->g_level right up to '-'.

shift me->g_level right.

shift me->g_level left deleting leading space.

else.

clear: me->g_level.

endif.

endif.

endloop.

endmethod. "recursive_definition

***

  • Get fieldcat

***

method get_alv_fieldcat.

out_fieldcat = me->gt_fcat.

endmethod. "get_alv_fieldcat

***

  • Set table name

***

method set_table_name.

data: l_fcat type slis_fieldcat_alv.

loop at me->gt_fcat into l_fcat.

l_fcat-tabname = in_tabname.

modify me->gt_fcat from l_fcat.

endloop.

me->g_table = in_tabname.

endmethod. "set_table_name

***

  • Set title

***

method set_alv_title.

me->g_title = in_title.

endmethod. "set_alv_title

***

  • Set fieldcat

***

method set_alv_fieldcat.

me->gt_fcat = in_fieldcat.

endmethod. "set_alv_fieldcat

***

  • Set field invisible

***

method set_alv_fieldnoout.

data: l_field type fieldname,

l_noout type c,

l_tech type c,

ls_fcat type slis_fieldcat_alv.

l_field = in_field.

if in_noout is supplied.

l_noout = in_noout.

else.

l_noout = 'X'.

endif.

if in_tech is supplied.

l_tech = in_tech.

endif.

loop at me->gt_fcat into ls_fcat

where fieldname = l_field.

ls_fcat-no_out = l_noout.

ls_fcat-tech = l_tech.

modify gt_fcat from ls_fcat transporting no_out tech.

endloop.

endmethod. "set_alv_fieldnoout

***

  • Set field editable

***

method set_alv_fieldedit.

data: l_field type fieldname,

l_edit type c,

ls_fcat type slis_fieldcat_alv.

l_field = in_field.

if in_edit is supplied.

l_edit = in_edit.

else.

l_edit = 'X'.

endif.

loop at me->gt_fcat into ls_fcat

where fieldname = l_field.

ls_fcat-edit = l_edit.

modify gt_fcat from ls_fcat transporting edit.

endloop.

endmethod. "set_alv_fieldedit

***

  • Set field text

***

method set_alv_fieldtext.

data: l_field type fieldname,

ls_fcat type slis_fieldcat_alv.

l_field = in_field.

loop at me->gt_fcat into ls_fcat

where fieldname = l_field.

ls_fcat-seltext_m = in_ftext.

ls_fcat-ddictxt = 'M'.

modify gt_fcat from ls_fcat transporting seltext_m ddictxt.

endloop.

endmethod. "set_alv_fieldtext

***

  • Set field sum

***

method set_alv_fieldsum.

data: l_field type fieldname,

l_dosum type c,

ls_fcat type slis_fieldcat_alv.

l_field = in_field.

if in_dosum is supplied.

l_dosum = in_dosum.

else.

l_dosum = 'X'.

endif.

loop at me->gt_fcat into ls_fcat

where fieldname = l_field.

ls_fcat-do_sum = l_dosum.

modify gt_fcat from ls_fcat transporting do_sum.

endloop.

endmethod. "set_alv_fieldsum

***

  • Set line break in field catalog

***

method set_alv_linebreak.

data: l_field type fieldname,

ls_fcat type slis_fieldcat_alv,

l_tabix type i.

l_field = in_field.

read table me->gt_fcat into ls_fcat

with key fieldname = l_field.

if sy-subrc = 0.

l_tabix = sy-tabix.

else.

exit.

endif.

loop at me->gt_fcat into ls_fcat

from l_tabix.

ls_fcat-row_pos = ls_fcat-row_pos + 1.

modify gt_fcat from ls_fcat transporting row_pos.

endloop.

endmethod. "set_alv_linebreak

***

  • Set settings

***

method set_alv_settings.

call method map_structure

exporting

source = in_settings

changing

destin = me->gs_sett.

endmethod. "set_alv_settings

***

  • Set layout

***

method set_alv_layout.

call method map_structure

exporting

source = in_layout

changing

destin = me->gs_layo.

endmethod. "set_alv_layout

***

  • Set printing options

***

method set_alv_print.

call method map_structure

exporting

source = in_print

changing

destin = me->gs_prin.

endmethod. "set_alv_print

***

  • Set sortings

***

method set_alv_sorting.

data: l_desc type alvdynp-sortdown,

l_group type alvdynp-grouplevel,

l_subtot type alvdynp-subtotals.

data: ls_sort type slis_sortinfo_alv,

l_index type i.

if in_desc is supplied.

l_desc = in_desc.

endif.

if in_group is supplied.

l_group = in_group.

else.

l_group = '*'.

endif.

if in_subtot is supplied.

l_subtot = in_subtot.

else.

l_subtot = 'X'.

endif.

describe table me->gt_sort lines l_index.

l_index = l_index + 1.

ls_sort-spos = l_index.

ls_sort-fieldname = in_field.

ls_sort-tabname = me->g_table.

if l_desc is initial.

ls_sort-up = 'X'.

else.

ls_sort-down = 'X'.

endif.

ls_sort-group = l_group.

ls_sort-subtot = l_subtot.

append ls_sort to me->gt_sort.

endmethod. "set_alv_sorting

***

  • Set key fields

***

method set_alv_keys.

data: l_key type c,

ls_fcat type slis_fieldcat_alv.

if in_key is supplied.

l_key = in_key.

else.

l_key = 'X'.

endif.

loop at me->gt_fcat into ls_fcat from 1 to in_level.

ls_fcat-key = l_key.

modify gt_fcat from ls_fcat transporting key.

endloop.

endmethod. "set_alv_keys

***

  • Add event

***

method set_alv_event.

data: ls_evnt type slis_alv_event.

loop at gt_evnt into ls_evnt

where name = in_name.

ls_evnt-form = in_form.

modify gt_evnt from ls_evnt transporting form.

endloop.

if sy-subrc ne 0.

ls_evnt-name = in_name.

ls_evnt-form = in_form.

append ls_evnt to gt_evnt.

endif.

endmethod. "set_alv_event

***

  • Add event

***

method set_all_events.

data: lt_trig type table of rtrig,

ls_evnt type slis_alv_event.

call function 'REUSE_ALV_EVENTS_GET'

exporting

i_list_type = g_table_type

importing

et_events = gt_evnt

exceptions

list_type_wrong = 1

others = 2.

if sy-subrc = 0.

  • Get program form routines

load report g_repid part 'TRIG' into lt_trig.

  • List of valid form routines

loop at gt_evnt into ls_evnt.

concatenate 'F_' ls_evnt-name into ls_evnt-form.

if not g_block_mode is initial.

concatenate ls_evnt-form me->g_table into ls_evnt-form

separated by '_'.

endif.

read table lt_trig with key exto = ls_evnt-form

fform = 'X'

transporting no fields.

if sy-subrc = 0.

modify gt_evnt from ls_evnt transporting form.

else.

delete gt_evnt.

endif.

endloop.

endif.

endmethod. "set_all_events

***

  • Map fields from incoming structure into attribute

***

method map_structure.

data: ob_desc type ref to cl_abap_structdescr,

ls_compo type abap_compdescr.

field-symbols: .

endif.

endloop.

endmethod. "map_structure

***

  • Get default variant

***

method get_default_variant.

g_variant_level = g_variant_level + 1.

out_variant-report = me->g_repid.

out_variant-handle = me->g_variant_level.

out_variant-username = sy-uname.

call function 'REUSE_ALV_VARIANT_DEFAULT_GET'

exporting

i_save = 'U'

changing

cs_variant = out_variant

exceptions

others = 0.

endmethod. "get_default_variant

endclass. "lcl_table_display IMPLEMENTATION

Reward all helpfull answers.

Regards.

Jay

Read only

Former Member
0 Likes
1,773

Hi,

Check this sample code:

REPORT ZALV_HIERSEQ_LIST.

TYPE-POOLS: SLIS. " ALV Global types

----


CONSTANTS :

C_X VALUE 'X',

C_GT_VBAP TYPE SLIS_TABNAME VALUE 'GT_VBAP',

C_GT_VBAK TYPE SLIS_TABNAME VALUE 'GT_VBAK'.

----


SELECTION-SCREEN :

SKIP,

BEGIN OF LINE,COMMENT 5(27) V_1 FOR FIELD P_MAX. "#EC NEEDED

PARAMETERS P_MAX(02) TYPE N DEFAULT '10' OBLIGATORY.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN :

SKIP, BEGIN OF LINE,COMMENT 5(27) V_2 FOR FIELD P_EXPAND. "#EC NEEDED

PARAMETERS P_EXPAND AS CHECKBOX DEFAULT C_X.

SELECTION-SCREEN END OF LINE.

----


TYPES :

  • 1st Table

BEGIN OF TY_VBAK,

VBELN TYPE VBAK-VBELN, " Sales document

KUNNR TYPE VBAK-KUNNR, " Sold-to party

NETWR TYPE VBAK-NETWR, " Net Value of the Sales Order

ERDAT TYPE VBAK-ERDAT, " Creation date

WAERK TYPE VBAK-WAERK, " SD document currency

EXPAND TYPE XFELD,

END OF TY_VBAK,

  • 2nd Table

BEGIN OF TY_VBAP,

VBELN TYPE VBAP-VBELN, " Sales document

POSNR TYPE VBAP-POSNR, " Sales document

MATNR TYPE VBAP-MATNR, " Material number

NETWR TYPE VBAP-NETWR, " Net Value of the Sales Order

WAERK TYPE VBAP-WAERK, " SD document currency

END OF TY_VBAP.

----


DATA :

  • 1st Table

GT_VBAK TYPE TABLE OF TY_VBAK,

  • 2nd Table

GT_VBAP TYPE TABLE OF TY_VBAP.

----


INITIALIZATION.

V_1 = 'Maximum of records to read'.

V_2 = 'With ''EXPAND'' field'.

----


START-OF-SELECTION.

  • Read Sales Document: Header Data

SELECT VBELN KUNNR NETWR WAERK ERDAT

FROM VBAK

UP TO P_MAX ROWS

INTO CORRESPONDING FIELDS OF TABLE GT_VBAK.

IF NOT GT_VBAK[] IS INITIAL.

  • Read Sales Document: Item Data

SELECT VBELN POSNR MATNR NETWR WAERK

FROM VBAP

INTO CORRESPONDING FIELDS OF TABLE GT_VBAP

FOR ALL ENTRIES IN GT_VBAK

WHERE VBELN = GT_VBAK-VBELN.

ENDIF.

PERFORM F_DISPLAY.

----


  • Form F_DISPLAY

----


FORM F_DISPLAY.

  • Macro definition

DEFINE M_FIELDCAT.

LS_FIELDCAT-TABNAME = &1.

LS_FIELDCAT-FIELDNAME = &2.

LS_FIELDCAT-REF_TABNAME = &3.

LS_FIELDCAT-CFIELDNAME = &4. " Field with currency unit

APPEND LS_FIELDCAT TO LT_FIELDCAT.

END-OF-DEFINITION.

DEFINE M_SORT.

LS_SORT-TABNAME = &1.

LS_SORT-FIELDNAME = &2.

LS_SORT-UP = C_X.

APPEND LS_SORT TO LT_SORT.

END-OF-DEFINITION.

DATA:

LS_LAYOUT TYPE SLIS_LAYOUT_ALV,

LS_KEYINFO TYPE SLIS_KEYINFO_ALV,

LS_SORT TYPE SLIS_SORTINFO_ALV,

LT_SORT TYPE SLIS_T_SORTINFO_ALV," Sort table

LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,

LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV." Field catalog

LS_LAYOUT-GROUP_CHANGE_EDIT = C_X.

LS_LAYOUT-COLWIDTH_OPTIMIZE = C_X.

LS_LAYOUT-ZEBRA = C_X.

LS_LAYOUT-DETAIL_POPUP = C_X.

LS_LAYOUT-GET_SELINFOS = C_X.

IF P_EXPAND = C_X.

LS_LAYOUT-EXPAND_FIELDNAME = 'EXPAND'.

ENDIF.

  • Build field catalog and sort table

M_FIELDCAT C_GT_VBAK 'VBELN' 'VBAK' ''.

M_FIELDCAT C_GT_VBAK 'KUNNR' 'VBAK' ''.

M_FIELDCAT C_GT_VBAK 'NETWR' 'VBAK' 'WAERK'.

M_FIELDCAT C_GT_VBAK 'WAERK' 'VBAK' ''.

M_FIELDCAT C_GT_VBAK 'ERDAT' 'VBAK' ''.

M_FIELDCAT C_GT_VBAP 'POSNR' 'VBAP' ''.

M_FIELDCAT C_GT_VBAP 'MATNR' 'VBAP' ''.

M_FIELDCAT C_GT_VBAP 'NETWR' 'VBAP' 'WAERK'.

M_FIELDCAT C_GT_VBAP 'WAERK' 'VBAP' ''.

M_SORT C_GT_VBAK 'KUNNR'.

M_SORT C_GT_VBAP 'NETWR'.

LS_KEYINFO-HEADER01 = 'VBELN'.

LS_KEYINFO-ITEM01 = 'VBELN'.

LS_KEYINFO-ITEM02 = 'POSNR'.

  • Dipslay Hierarchical list

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

I_CALLBACK_PROGRAM = SY-CPROG

I_CALLBACK_USER_COMMAND = 'USER_COMMAND'

IS_LAYOUT = LS_LAYOUT

IT_FIELDCAT = LT_FIELDCAT

IT_SORT = LT_SORT

I_TABNAME_HEADER = C_GT_VBAK

I_TABNAME_ITEM = C_GT_VBAP

IS_KEYINFO = LS_KEYINFO

TABLES

T_OUTTAB_HEADER = GT_VBAK

T_OUTTAB_ITEM = GT_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. " F_LIST_DISPLAY

----


  • Form USER_COMMAND *

----


FORM USER_COMMAND USING I_UCOMM TYPE SY-UCOMM

IS_SELFIELD TYPE SLIS_SELFIELD. "#EC CALLED

DATA LS_VBAK TYPE TY_VBAK.

CASE I_UCOMM.

WHEN '&IC1'. " Pick

CASE IS_SELFIELD-TABNAME.

WHEN C_GT_VBAP.

WHEN C_GT_VBAK.

READ TABLE GT_VBAK INDEX IS_SELFIELD-TABINDEX INTO LS_VBAK.

IF SY-SUBRC EQ 0.

  • Sales order number

SET PARAMETER ID 'AUN' FIELD LS_VBAK-VBELN.

  • Display Sales Order

CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

ENDIF.

ENDCASE.

ENDCASE.

ENDFORM. " USER_COMMAND

Read only

Former Member
0 Likes
1,773

hi mahesh,

try this code it will help u

REPORT ZTESTASH_ALV01 LINE-COUNT 20.

TYPE-POOLS: SLIS.

TABLES MSEG.

*DATA: I_MSEG LIKE MSEG OCCURS 0 WITH HEADER LINE.

DATA: I_MCHB LIKE MCHB OCCURS 0 WITH HEADER LINE.

DATA: I_FTAB TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE .

DATA: I_FTAB1 TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE .

DATA: BEGIN OF I_MSEG OCCURS 0,

ZEILE LIKE MSEG-ZEILE,

MENGE LIKE MSEG-MENGE,

MEINS LIKE MSEG-MEINS,

MATNR LIKE MSEG-MATNR,

WERKS LIKE MSEG-WERKS,

CHARG LIKE MSEG-CHARG,

BWART LIKE MSEG-BWART,

END OF I_MSEG.

DATA: MATNR_NO(10),

X TYPE I.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TIT1.

SELECT-OPTIONS DOC_NO FOR MSEG-MBLNR.

PARAMETER: DOC_YEAR TYPE MSEG-MJAHR.

SELECTION-SCREEN END OF BLOCK B1.

******************START OF SELECTION BLOCK******************

START-OF-SELECTION.

SELECT * FROM MSEG

INTO CORRESPONDING FIELDS OF TABLE I_MSEG

WHERE MBLNR IN DOC_NO

AND MJAHR = DOC_YEAR.

*====================CALLING OF FUNCTION =================

I_FTAB-COL_POS = 1.

I_FTAB-TABNAME = I_MSEG.

I_FTAB-FIELDNAME = 'ZEILE'.

I_FTAB-SELTEXT_M = 'ITEM'.

I_FTAB-HOTSPOT = 'X'.

APPEND I_FTAB.

I_FTAB-HOTSPOT = ' '.

*i_ftab-EMPHASIZE = 'X'.

I_FTAB-COL_POS = 2.

I_FTAB-TABNAME = I_MSEG.

I_FTAB-FIELDNAME = 'MENGE'.

I_FTAB-SELTEXT_M = 'QUANTITY'.

APPEND I_FTAB.

I_FTAB-COL_POS = 3.

  • I_FTAB-TABNAME = I_MSEG.

I_FTAB-FIELDNAME = 'MEINS'.

I_FTAB-SELTEXT_M = 'U-M-O'.

APPEND I_FTAB.

I_FTAB-COL_POS = 4.

  • I_FTAB-TABNAME = I_MSEG.

I_FTAB-FIELDNAME = 'MATNR'.

I_FTAB-SELTEXT_M = 'MATERIAL NO'.

APPEND I_FTAB.

I_FTAB-COL_POS = 5.

  • I_FTAB-TABNAME = I_MSEG.

I_FTAB-FIELDNAME = 'WERKS'.

I_FTAB-SELTEXT_M = 'PLANT'.

APPEND I_FTAB.

I_FTAB-COL_POS = 6.

  • I_FTAB-TABNAME = I_MSEG.

I_FTAB-FIELDNAME = 'CHARG'.

I_FTAB-SELTEXT_M = 'BATCH'.

APPEND I_FTAB.

I_FTAB-COL_POS = 7.

  • I_FTAB-TABNAME = I_MSEG.

I_FTAB-FIELDNAME = 'BWART'.

I_FTAB-SELTEXT_M = 'MOVEMENT TYPE'.

APPEND I_FTAB.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

IT_FIELDCAT = I_FTAB[]

I_CALLBACK_PROGRAM = SY-REPID

TABLES

T_OUTTAB = I_MSEG

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.

remember to reward the points if helpfull..

Read only

Former Member
0 Likes
1,773

Hi,

look at this DEMO/TEST-Reports in SAP:

SALV_DEMO_HIERSEQ_COLUMN

SALV_DEMO_HIERSEQ_EVENTS

SALV_DEMO_HIERSEQ_FORM_EVENTS

SALV_DEMO_HIERSEQ_FUNCTIONS

SALV_DEMO_HIERSEQ_LAYOUT

SALV_DEMO_HIERSEQ_POPUP

SALV_DEMO_HIERSEQ_RECURSION

SALV_DEMO_HIERSEQ_REFRESH

SALV_DEMO_HIERSEQ_SELECTIONS

SALV_DEMO_HIERSEQ_SIMPLE

SALV_TEST_HIERSEQ_COLUMNS

SALV_TEST_HIERSEQ_EVENTS

SALV_TEST_HIERSEQ_FORM_EVENTS

SALV_TEST_HIERSEQ_FUNCTIONS

SALV_TEST_HIERSEQ_LAYOUT

SALV_TEST_HIERSEQ_POPUP

SALV_TEST_HIERSEQ_RECURSION

SALV_TEST_HIERSEQ_REFRESH

SALV_TEST_HIERSEQ_SELECTIONS

BCALV_TEST_HIERSEQ_LIST

BCALV_TEST_HIERSEQ_LIST_EVENTS

Regards, Dieter