Application Development 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: 

ALV in heirarchy format

Former Member
0 Kudos

Please help me with the code. I am getting error dump and the error is 'field symbol has not been assigned'.

I am using two tables spfli and scarr to display data using ALV in heirarchy format.

TABLES:

spfli.

TYPE-POOLS:

slis.

DATA:

it_scarr TYPE STANDARD TABLE OF scarr,

it_spfli TYPE STANDARD TABLE OF spfli,

gt_fieldcat TYPE STANDARD TABLE OF slis_fieldcat_alv.

data:

wa_keyinfo type slis_keyinfo_alv.

SELECT-OPTIONS:

s_carrid FOR spfli-carrid,

s_connid FOR spfli-connid.

START-OF-SELECTION.

PERFORM get_spfli.

PERFORM fill_fieldcat.

END-OF-SELECTION.

PERFORM display_data.

FORM display_data .

wa_keyinfo-header01 = 'CARRID'.

wa_keyinfo-item01 = 'CARRID'.

wa_keyinfo-header02 = SPACE.

wa_keyinfo-item02 = 'CONNID'.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

IT_FIELDCAT = gt_fieldcat[]

i_tabname_header = 'SCARR'

i_tabname_item = 'SPFLI'

is_keyinfo = wa_keyinfo

tables

t_outtab_header = IT_SCARR[]

t_outtab_item = IT_SPFLI[].

IF sy-subrc <> 0.

ENDIF.

ENDFORM.

FORM get_spfli .

SELECT *

INTO TABLE it_spfli[]

FROM spfli

WHERE carrid in s_carrid

AND connid in s_connid.

if sy-subrc <> 0.

message i000(ydn) with 'no records found'.

leave list-processing.

endif.

SELECT *

INTO TABLE it_scarr[]

FROM scarr

FOR ALL ENTRIES IN it_spfli

WHERE carrid = it_spfli-carrid.

ENDFORM.

FORM fill_fieldcat .

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_internal_tabname = 'IT_SCARR'

i_structure_name = 'SCARR'

CHANGING

ct_fieldcat = gt_fieldcat[]

.

IF sy-subrc <> 0.

ENDIF.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_internal_tabname = 'IT_SPFLI'

i_structure_name = 'SPFLI'

CHANGING

ct_fieldcat = gt_fieldcat[]

.

IF sy-subrc <> 0.

ENDIF.

ENDFORM.

Please tell me what is wrong with the code.

Thanks in advance.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi, try this example and change this according to ur requirement.

HIERARCHICAL ALV REPORT.

TYPE-POOLS: SLIS.

DATA: BEGIN OF I_VBAK OCCURS 0,

VBELN LIKE VBAK-VBELN,

ERNAM LIKE VBAK-ERNAM,

ERDAT LIKE VBAK-ERDAT,

AUDAT LIKE VBAK-AUDAT,

VAR1,

END OF I_VBAK.

DATA: BEGIN OF I_VBAP OCCURS 0,

VBELN LIKE VBAP-VBELN,

POSNR LIKE VBAP-POSNR,

MATNR LIKE VBAP-MATNR,

CHARG LIKE VBAP-CHARG,

END OF I_VBAP.

DATA: FLDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,

LAYOUT TYPE SLIS_LAYOUT_ALV,

KEY TYPE SLIS_KEYINFO_ALV.

SELECT VBELN ERNAM ERDAT AUDAT FROM VBAK

INTO CORRESPONDING FIELDS OF TABLE I_VBAK

UP TO 20 ROWS.

SELECT VBELN POSNR MATNR CHARG FROM VBAP

INTO CORRESPONDING FIELDS OF TABLE I_VBAP

UP TO 20 ROWS.

FLDCAT-FIELDNAME = 'VBELN'.

FLDCAT-TABNAME = 'I_VBAK'.

FLDCAT-REF_FIELDNAME = 'VBELN'.

FLDCAT-REF_TABNAME = 'VBAK'.

FLDCAT-SELTEXT_M = 'SALES DOC.'.

FLDCAT-COL_POS = 0.

FLDCAT-KEY = 'X'.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'ERNAM'.

FLDCAT-TABNAME = 'I_VBAK'.

FLDCAT-REF_FIELDNAME = 'ERNAM'.

FLDCAT-REF_TABNAME = 'VBAK'.

FLDCAT-SELTEXT_M = 'NAME OF PERSON'.

FLDCAT-COL_POS = 1.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'ERDAT'.

FLDCAT-TABNAME = 'I_VBAK'.

FLDCAT-REF_FIELDNAME = 'ERDAT'.

FLDCAT-REF_TABNAME = 'VBAK'.

FLDCAT-SELTEXT_M = 'RECORD DATE'.

FLDCAT-COL_POS = 2.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'AUDAT'.

FLDCAT-TABNAME = 'I_VBAK'.

FLDCAT-REF_FIELDNAME = 'AUDAT'.

FLDCAT-REF_TABNAME = 'VBAK'.

FLDCAT-SELTEXT_M = 'DOCUMENT DATE'.

FLDCAT-COL_POS = 3.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'POSNR'.

FLDCAT-TABNAME = 'I_VBAP'.

FLDCAT-REF_FIELDNAME = 'POSNR'.

FLDCAT-REF_TABNAME = 'VBAP'.

FLDCAT-SELTEXT_M = 'SALES DOC ITEM'.

FLDCAT-COL_POS = 4.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'MATNR'.

FLDCAT-TABNAME = 'I_VBAP'.

FLDCAT-REF_FIELDNAME = 'MATNR'.

FLDCAT-REF_TABNAME = 'VBAP'.

FLDCAT-SELTEXT_M = 'MATERIAL NO'.

FLDCAT-COL_POS = 5.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'CHARG'.

FLDCAT-TABNAME = 'I_VBAP'.

FLDCAT-REF_FIELDNAME = 'CHARG'.

FLDCAT-REF_TABNAME = 'VBAP'.

FLDCAT-SELTEXT_M = 'BATCH NUMBER'.

FLDCAT-COL_POS = 6.

APPEND FLDCAT.

CLEAR FLDCAT.

LAYOUT-EXPAND_FIELDNAME = 'VAR1'.

KEY-HEADER01 = 'VBELN'.

KEY-ITEM01 = 'VBELN'.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

I_CALLBACK_PROGRAM = SY-REPID

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

IS_LAYOUT = LAYOUT

IT_FIELDCAT = FLDCAT[]

  • 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 = 'I_VBAK'

I_TABNAME_ITEM = 'I_VBAP'

  • I_STRUCTURE_NAME_HEADER =

  • I_STRUCTURE_NAME_ITEM =

IS_KEYINFO = KEY

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE =

  • IR_SALV_HIERSEQ_ADAPTER =

  • IT_EXCEPT_QINFO =

  • I_SUPPRESS_EMPTY_DATA = ABAP_FALSE

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB_HEADER = I_VBAK

T_OUTTAB_ITEM = I_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.

Reward points,if it is useful.

Thanks,

chandu.

3 REPLIES 3

Former Member
0 Kudos

Hi, try this example and change this according to ur requirement.

HIERARCHICAL ALV REPORT.

TYPE-POOLS: SLIS.

DATA: BEGIN OF I_VBAK OCCURS 0,

VBELN LIKE VBAK-VBELN,

ERNAM LIKE VBAK-ERNAM,

ERDAT LIKE VBAK-ERDAT,

AUDAT LIKE VBAK-AUDAT,

VAR1,

END OF I_VBAK.

DATA: BEGIN OF I_VBAP OCCURS 0,

VBELN LIKE VBAP-VBELN,

POSNR LIKE VBAP-POSNR,

MATNR LIKE VBAP-MATNR,

CHARG LIKE VBAP-CHARG,

END OF I_VBAP.

DATA: FLDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,

LAYOUT TYPE SLIS_LAYOUT_ALV,

KEY TYPE SLIS_KEYINFO_ALV.

SELECT VBELN ERNAM ERDAT AUDAT FROM VBAK

INTO CORRESPONDING FIELDS OF TABLE I_VBAK

UP TO 20 ROWS.

SELECT VBELN POSNR MATNR CHARG FROM VBAP

INTO CORRESPONDING FIELDS OF TABLE I_VBAP

UP TO 20 ROWS.

FLDCAT-FIELDNAME = 'VBELN'.

FLDCAT-TABNAME = 'I_VBAK'.

FLDCAT-REF_FIELDNAME = 'VBELN'.

FLDCAT-REF_TABNAME = 'VBAK'.

FLDCAT-SELTEXT_M = 'SALES DOC.'.

FLDCAT-COL_POS = 0.

FLDCAT-KEY = 'X'.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'ERNAM'.

FLDCAT-TABNAME = 'I_VBAK'.

FLDCAT-REF_FIELDNAME = 'ERNAM'.

FLDCAT-REF_TABNAME = 'VBAK'.

FLDCAT-SELTEXT_M = 'NAME OF PERSON'.

FLDCAT-COL_POS = 1.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'ERDAT'.

FLDCAT-TABNAME = 'I_VBAK'.

FLDCAT-REF_FIELDNAME = 'ERDAT'.

FLDCAT-REF_TABNAME = 'VBAK'.

FLDCAT-SELTEXT_M = 'RECORD DATE'.

FLDCAT-COL_POS = 2.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'AUDAT'.

FLDCAT-TABNAME = 'I_VBAK'.

FLDCAT-REF_FIELDNAME = 'AUDAT'.

FLDCAT-REF_TABNAME = 'VBAK'.

FLDCAT-SELTEXT_M = 'DOCUMENT DATE'.

FLDCAT-COL_POS = 3.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'POSNR'.

FLDCAT-TABNAME = 'I_VBAP'.

FLDCAT-REF_FIELDNAME = 'POSNR'.

FLDCAT-REF_TABNAME = 'VBAP'.

FLDCAT-SELTEXT_M = 'SALES DOC ITEM'.

FLDCAT-COL_POS = 4.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'MATNR'.

FLDCAT-TABNAME = 'I_VBAP'.

FLDCAT-REF_FIELDNAME = 'MATNR'.

FLDCAT-REF_TABNAME = 'VBAP'.

FLDCAT-SELTEXT_M = 'MATERIAL NO'.

FLDCAT-COL_POS = 5.

APPEND FLDCAT.

CLEAR FLDCAT.

FLDCAT-FIELDNAME = 'CHARG'.

FLDCAT-TABNAME = 'I_VBAP'.

FLDCAT-REF_FIELDNAME = 'CHARG'.

FLDCAT-REF_TABNAME = 'VBAP'.

FLDCAT-SELTEXT_M = 'BATCH NUMBER'.

FLDCAT-COL_POS = 6.

APPEND FLDCAT.

CLEAR FLDCAT.

LAYOUT-EXPAND_FIELDNAME = 'VAR1'.

KEY-HEADER01 = 'VBELN'.

KEY-ITEM01 = 'VBELN'.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

I_CALLBACK_PROGRAM = SY-REPID

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

IS_LAYOUT = LAYOUT

IT_FIELDCAT = FLDCAT[]

  • 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 = 'I_VBAK'

I_TABNAME_ITEM = 'I_VBAP'

  • I_STRUCTURE_NAME_HEADER =

  • I_STRUCTURE_NAME_ITEM =

IS_KEYINFO = KEY

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE =

  • IR_SALV_HIERSEQ_ADAPTER =

  • IT_EXCEPT_QINFO =

  • I_SUPPRESS_EMPTY_DATA = ABAP_FALSE

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB_HEADER = I_VBAK

T_OUTTAB_ITEM = I_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.

Reward points,if it is useful.

Thanks,

chandu.

Former Member
0 Kudos

I have modified your program and it is not giving dump now.



*&---------------------------------------------------------------------*
*& Report  ZTEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ztest.
TABLES:
spfli.
TYPE-POOLS:
slis.
DATA:
it_scarr TYPE STANDARD TABLE OF scarr,
it_spfli TYPE STANDARD TABLE OF spfli,
gt_fieldcat TYPE STANDARD TABLE OF slis_fieldcat_alv.
DATA:
wa_keyinfo TYPE slis_keyinfo_alv.
SELECT-OPTIONS:
s_carrid FOR spfli-carrid,
s_connid FOR spfli-connid.

START-OF-SELECTION.
  PERFORM get_spfli.
  PERFORM fill_fieldcat.

END-OF-SELECTION.
  PERFORM display_data.
*&---------------------------------------------------------------------*
*&      Form  display_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM display_data .
  wa_keyinfo-header01 = 'CARRID'.
  wa_keyinfo-item01 = 'CARRID'.
  wa_keyinfo-header02 = space.
  wa_keyinfo-item02 = 'CONNID'.
  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
    EXPORTING
      it_fieldcat      = gt_fieldcat[]
      i_tabname_header = 'SCARR'
      i_tabname_item   = 'SPFLI'
      is_keyinfo       = wa_keyinfo
    TABLES
      t_outtab_header  = it_scarr[]
      t_outtab_item    = it_spfli[].
  IF sy-subrc EQ 0.
  ENDIF.
ENDFORM.                    "display_data
*&---------------------------------------------------------------------*
*&      Form  get_spfli
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_spfli .
  SELECT *
  INTO TABLE it_spfli[]
  FROM spfli
  WHERE carrid IN s_carrid
  AND connid IN s_connid.
  IF sy-subrc EQ 0.
    MESSAGE i000(ydn) WITH 'no records found'.
    LEAVE LIST-PROCESSING.
  ENDIF.
  SELECT *
  INTO TABLE it_scarr[]
  FROM scarr
  FOR ALL ENTRIES IN it_spfli
  WHERE carrid = it_spfli-carrid.
ENDFORM.                    "get_spfli
*&---------------------------------------------------------------------*
*&      Form  fill_fieldcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM fill_fieldcat .
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_internal_tabname = 'IT_SCARR'
      i_structure_name   = 'SCARR'
    CHANGING
      ct_fieldcat        = gt_fieldcat[].
  IF sy-subrc EQ 0.
  ENDIF.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_internal_tabname = 'IT_SPFLI'
      i_structure_name   = 'SPFLI'
    CHANGING
      ct_fieldcat        = gt_fieldcat[].
  IF sy-subrc EQ 0.
  ENDIF.
ENDFORM.                    "fill_fieldcat

0 Kudos

Hi Abhishek,

Thank you so much for your code. I need to log on to server to try it out. So, please tell me what is wrong in my code. I will get back once i try it.

Thanks again.