*&---------------------------------------------------------------------*
*& Report ZGS_ALV_HIERSEQUENTIAL_BLOCK
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZGS_ALV_HIERSEQUENTIAL_BLOCK.
TYPE-POOLS: slis.
TABLES: ekko, vbak.
SELECT-OPTIONS: s_ebeln FOR ekko-ebeln,
s_vbeln FOR vbak-vbeln.
DATA: fcat1 TYPE slis_t_fieldcat_alv WITH HEADER LINE,
fcat2 TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA events TYPE slis_t_event WITH HEADER LINE.
DATA: layout1 TYPE slis_layout_alv,
layout2 TYPE slis_layout_alv.
DATA: key1 TYPE slis_keyinfo_alv,
key2 TYPE slis_keyinfo_alv.
DATA: BEGIN OF it_ekko OCCURS 0,
ebeln LIKE ekko-ebeln,
bukrs LIKE ekko-bukrs,
lifnr LIKE ekko-lifnr,
one,
END OF it_ekko.
DATA : BEGIN OF it_ekpo OCCURS 0,
ebeln LIKE ekko-ebeln,
ebelp LIKE ekpo-ebelp,
matnr LIKE ekpo-matnr,
END OF it_ekpo.
DATA : BEGIN OF it_vbak OCCURS 0,
vbeln LIKE vbak-vbeln,
erdat LIKE vbak-erdat,
ernam LIKE vbak-ernam,
two,
END OF it_vbak.
DATA : BEGIN OF it_vbap OCCURS 0,
vbeln LIKE vbap-vbeln,
posnr LIKE vbap-posnr,
matnr LIKE mara-matnr,
END OF it_vbap.
START-OF-SELECTION.
SELECT ebeln
bukrs
lifnr
FROM ekko
INTO TABLE it_ekko
WHERE ebeln IN s_ebeln.
IF it_ekko[] IS NOT INITIAL.
SELECT ebeln
ebelp
matnr
FROM ekpo
INTO TABLE it_ekpo
FOR ALL ENTRIES IN it_ekko
WHERE ebeln EQ it_ekko-ebeln.
ENDIF.
SELECT vbeln
erdat
ernam
FROM vbak
INTO TABLE it_vbak
WHERE vbeln IN s_vbeln.
IF it_vbak[] IS NOT INITIAL.
SELECT vbeln
posnr
matnr
FROM vbap
INTO TABLE it_vbap
FOR ALL ENTRIES IN it_vbak
WHERE vbeln EQ it_vbak-vbeln.
ENDIF.
fcat1-fieldname = 'EBELN'.
fcat1-tabname = 'IT_EKKO'.
fcat1-ref_fieldname = 'EBELN'.
fcat1-ref_tabname = 'EKKO'.
APPEND fcat1.
CLEAR fcat1.
fcat1-fieldname = 'BUKRS'.
fcat1-tabname = 'IT_EKKO'.
fcat1-ref_fieldname = 'BUKRS'.
fcat1-ref_tabname = 'EKKO'.
APPEND fcat1.
CLEAR fcat1.
fcat1-fieldname = 'LIFNR'.
fcat1-tabname = 'IT_EKKO'.
fcat1-ref_fieldname = 'LIFNR'.
fcat1-ref_tabname = 'EKKO'.
APPEND fcat1.
CLEAR fcat1.
fcat1-fieldname = 'EBELP'.
fcat1-tabname = 'IT_EKPO'.
fcat1-ref_fieldname = 'EBELP'.
fcat1-ref_tabname = 'EKPO'.
APPEND fcat1.
CLEAR fcat1.
fcat1-fieldname = 'MATNR'.
fcat1-tabname = 'IT_EKPO'.
fcat1-ref_fieldname = 'MATNR'.
fcat1-ref_tabname = 'EKPO'.
APPEND fcat1.
CLEAR fcat1.
fcat2-fieldname = 'VBELN'.
fcat2-tabname = 'IT_VBAK'.
fcat2-ref_fieldname = 'VBELN'.
fcat2-ref_tabname = 'VBAK'.
APPEND fcat2.
CLEAR fcat2.
fcat2-fieldname = 'ERDAT'.
fcat2-tabname = 'IT_VBAK'.
fcat2-ref_fieldname = 'ERDAT'.
fcat2-ref_tabname = 'VBAK'.
APPEND fcat2.
CLEAR fcat2.
fcat2-fieldname = 'ERNAM'.
fcat2-tabname = 'IT_VBAK'.
fcat2-ref_fieldname = 'ERNAM'.
fcat2-ref_tabname = 'VBAK'.
APPEND fcat2.
CLEAR fcat2.
fcat2-fieldname = 'POSNR'.
fcat2-tabname = 'IT_VBAP'.
fcat2-ref_fieldname = 'POSNR'.
fcat2-ref_tabname = 'VBAP'.
APPEND fcat2.
CLEAR fcat2.
fcat2-fieldname = 'MATNR'.
fcat2-tabname = 'IT_VBAP'.
fcat2-ref_fieldname = 'MATNR'.
fcat2-ref_tabname = 'VBAP'.
APPEND fcat2.
CLEAR fcat2.
key1-header01 = 'EBELN'.
key1-item01 = 'EBELN'.
layout1-expand_fieldname = 'ONE'.
key2-header01 = 'VBELN'.
key2-item01 = 'VBELN'.
layout2-expand_fieldname = 'TWO'.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = sy-cprog.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_HS_APPEND'
EXPORTING
is_layout = layout1
it_fieldcat = fcat1[]
is_keyinfo = key1
i_header_tabname = 'IT_EKKO'
i_item_tabname = 'IT_EKPO'
it_events = events[]
* IT_SORT =
* I_TEXT = ' '
TABLES
t_outtab_header = it_ekko
t_outtab_item = it_ekpo
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_HS_APPEND'
EXPORTING
is_layout = layout2
it_fieldcat = fcat2[]
is_keyinfo = key2
i_header_tabname = 'IT_VBAK'
i_item_tabname = 'IT_VBAP'
it_events = events[]
* IT_SORT =
* I_TEXT = ' '
TABLES
t_outtab_header = it_vbak
t_outtab_item = it_vbap
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'.