10-11-2007 5:41 AM
I want to display sales order items that show various fields and have other fields ready for input.The user can expand or collapse the sales order header lines to decide if they want to review the line item data. Fields are ready for input at both the header and item level :
How can I achieve this in ALV?
10-11-2007 5:53 AM
Hi,
Check this sample for hierarchical ALV to display the sales order details..
TYPE-POOLS: slis.
DATA: BEGIN OF itab OCCURS 0,
vbeln TYPE vbeln,
expand,
END OF itab.
DATA: BEGIN OF itab1 OCCURS 0,
vbeln TYPE vbeln,
posnr TYPE posnr,
matnr TYPE matnr,
netpr TYPE netpr,
END OF itab1.
DATA: t_fieldcatalog TYPE slis_t_fieldcat_alv.
DATA: s_fieldcatalog TYPE slis_fieldcat_alv.
s_fieldcatalog-col_pos = '1'.
s_fieldcatalog-fieldname = 'VBELN'.
s_fieldcatalog-tabname = 'ITAB'.
s_fieldcatalog-rollname = 'VBELN'.
s_fieldcatalog-outputlen = '12'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
s_fieldcatalog-col_pos = '1'.
s_fieldcatalog-fieldname = 'VBELN'.
s_fieldcatalog-tabname = 'ITAB1'.
s_fieldcatalog-rollname = 'VBELN'.
s_fieldcatalog-outputlen = '12'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
s_fieldcatalog-col_pos = '2'.
s_fieldcatalog-fieldname = 'POSNR'.
s_fieldcatalog-tabname = 'ITAB1'.
s_fieldcatalog-rollname = 'POSNR'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
s_fieldcatalog-col_pos = '3'.
s_fieldcatalog-fieldname = 'MATNR'.
s_fieldcatalog-tabname = 'ITAB1'.
s_fieldcatalog-rollname = 'MATNR'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
s_fieldcatalog-col_pos = '4'.
s_fieldcatalog-fieldname = 'NETPR'.
s_fieldcatalog-tabname = 'ITAB1'.
s_fieldcatalog-rollname = 'NETPR'.
s_fieldcatalog-do_sum = 'X'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
DATA: s_layout TYPE slis_layout_alv.
s_layout-subtotals_text = 'SUBTOTAL TEXT'.
s_layout-key_hotspot = 'X'.
s_layout-expand_fieldname = 'EXPAND'.
SELECT vbeln UP TO 100 ROWS
FROM
vbak
INTO TABLE itab.
IF NOT itab[] IS INITIAL.
SELECT vbeln posnr matnr netpr
FROM vbap
INTO TABLE itab1
FOR ALL ENTRIES IN itab
WHERE vbeln = itab-vbeln.
ENDIF.
DATA: v_repid TYPE syrepid.
v_repid = sy-repid.
DATA: s_keyinfo TYPE slis_keyinfo_alv.
s_keyinfo-header01 = 'VBELN'.
s_keyinfo-item01 = 'VBELN'.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = v_repid
is_layout = s_layout
it_fieldcat = t_fieldcatalog
i_tabname_header = 'ITAB'
i_tabname_item = 'ITAB1'
is_keyinfo = s_keyinfo
TABLES
t_outtab_header = itab
t_outtab_item = itab1
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.
Thanks
Naren
10-11-2007 5:50 AM
go for HIERSEQUENTIAL REPORTs.
here i am attaching some sample code go through that one.
TYPE-POOLS: slis.
TABLES: ekko.
SELECT-OPTIONS: s_ebeln FOR ekko-ebeln.
DATA: BEGIN OF i_ekko OCCURS 0,
ebeln LIKE ekko-ebeln,
ernam LIKE ekko-ernam,
bsart LIKE ekko-bsart,
var1,
END OF i_ekko.
DATA: BEGIN OF i_ekpo OCCURS 0,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
matnr LIKE ekpo-matnr,
aedat LIKE ekpo-aedat,
END OF i_ekpo.
DATA: fldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
layout TYPE slis_layout_alv,
key TYPE slis_keyinfo_alv,
events TYPE slis_t_event.
PERFORM get_data.
PERFORM append_data.
layout-expand_fieldname = 'VAR1'.
layout-zebra = 'X'.
key-header01 = 'EBELN'.
key-item01 = 'EBELN'.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
i_callback_program = sy-cprog
* 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_EKKO'
i_tabname_item = 'I_EKPO'
* I_STRUCTURE_NAME_HEADER =
* I_STRUCTURE_NAME_ITEM =
is_keyinfo = key
* 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 = i_ekko
t_outtab_item = i_ekpo
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Getting Data into Internal Tables
*----------------------------------------------------------------------*
FORM get_data.
SELECT ebeln
ernam
bsart
FROM ekko
INTO TABLE i_ekko
WHERE ebeln IN s_ebeln.
SELECT ebeln
ebelp
matnr
aedat
INTO TABLE i_ekpo
FROM ekpo
FOR ALL ENTRIES IN i_ekko
WHERE ebeln EQ i_ekko-ebeln.
ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form append_data
*&---------------------------------------------------------------------*
* Getting Data into Field Catalog
*----------------------------------------------------------------------*
FORM append_data.
fldcat-col_pos = 1.
fldcat-fieldname = 'EBELN'.
fldcat-tabname = 'I_EKKO'.
fldcat-ref_fieldname = 'EBELN'.
fldcat-ref_tabname = 'EKKO'.
fldcat-key = 'X'.
APPEND fldcat.
CLEAR fldcat.
fldcat-col_pos = 2.
fldcat-fieldname = 'ERNAM'.
fldcat-tabname = 'I_EKKO'.
fldcat-ref_fieldname = 'ERNAM'.
fldcat-ref_tabname = 'EKKO'.
APPEND fldcat.
CLEAR fldcat.
fldcat-col_pos = 3.
fldcat-fieldname = 'BSART'.
fldcat-tabname = 'I_EKKO'.
fldcat-ref_fieldname = 'BSART'.
fldcat-ref_tabname = 'EKKO'.
APPEND fldcat.
CLEAR fldcat.
fldcat-col_pos = 4.
fldcat-fieldname = 'EBELP'.
fldcat-tabname = 'I_EKPO'.
fldcat-ref_fieldname = 'EBELP'.
fldcat-ref_tabname = 'EKPO'.
fldcat-key = 'X'.
APPEND fldcat.
CLEAR fldcat.
fldcat-col_pos = 5.
fldcat-fieldname = 'MATNR'.
fldcat-tabname = 'I_EKPO'.
fldcat-ref_fieldname = 'MATNR'.
fldcat-ref_tabname = 'EKPO'.
APPEND fldcat.
CLEAR fldcat.
fldcat-col_pos = 6.
fldcat-fieldname = 'AEDAT'.
fldcat-tabname = 'I_EKPO'.
fldcat-ref_fieldname = 'AEDAT'.
fldcat-ref_tabname = 'EKPO'.
APPEND fldcat.
CLEAR fldcat.
ENDFORM. " append_data
<b>reward some points if helpful.</b>
10-11-2007 5:51 AM
Hi
by useing heirachical ALV report you can do this
<b>Reward if usefull</b>
10-11-2007 5:53 AM
Hi,
Check this sample for hierarchical ALV to display the sales order details..
TYPE-POOLS: slis.
DATA: BEGIN OF itab OCCURS 0,
vbeln TYPE vbeln,
expand,
END OF itab.
DATA: BEGIN OF itab1 OCCURS 0,
vbeln TYPE vbeln,
posnr TYPE posnr,
matnr TYPE matnr,
netpr TYPE netpr,
END OF itab1.
DATA: t_fieldcatalog TYPE slis_t_fieldcat_alv.
DATA: s_fieldcatalog TYPE slis_fieldcat_alv.
s_fieldcatalog-col_pos = '1'.
s_fieldcatalog-fieldname = 'VBELN'.
s_fieldcatalog-tabname = 'ITAB'.
s_fieldcatalog-rollname = 'VBELN'.
s_fieldcatalog-outputlen = '12'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
s_fieldcatalog-col_pos = '1'.
s_fieldcatalog-fieldname = 'VBELN'.
s_fieldcatalog-tabname = 'ITAB1'.
s_fieldcatalog-rollname = 'VBELN'.
s_fieldcatalog-outputlen = '12'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
s_fieldcatalog-col_pos = '2'.
s_fieldcatalog-fieldname = 'POSNR'.
s_fieldcatalog-tabname = 'ITAB1'.
s_fieldcatalog-rollname = 'POSNR'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
s_fieldcatalog-col_pos = '3'.
s_fieldcatalog-fieldname = 'MATNR'.
s_fieldcatalog-tabname = 'ITAB1'.
s_fieldcatalog-rollname = 'MATNR'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
s_fieldcatalog-col_pos = '4'.
s_fieldcatalog-fieldname = 'NETPR'.
s_fieldcatalog-tabname = 'ITAB1'.
s_fieldcatalog-rollname = 'NETPR'.
s_fieldcatalog-do_sum = 'X'.
APPEND s_fieldcatalog TO t_fieldcatalog.
CLEAR: s_fieldcatalog.
DATA: s_layout TYPE slis_layout_alv.
s_layout-subtotals_text = 'SUBTOTAL TEXT'.
s_layout-key_hotspot = 'X'.
s_layout-expand_fieldname = 'EXPAND'.
SELECT vbeln UP TO 100 ROWS
FROM
vbak
INTO TABLE itab.
IF NOT itab[] IS INITIAL.
SELECT vbeln posnr matnr netpr
FROM vbap
INTO TABLE itab1
FOR ALL ENTRIES IN itab
WHERE vbeln = itab-vbeln.
ENDIF.
DATA: v_repid TYPE syrepid.
v_repid = sy-repid.
DATA: s_keyinfo TYPE slis_keyinfo_alv.
s_keyinfo-header01 = 'VBELN'.
s_keyinfo-item01 = 'VBELN'.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = v_repid
is_layout = s_layout
it_fieldcat = t_fieldcatalog
i_tabname_header = 'ITAB'
i_tabname_item = 'ITAB1'
is_keyinfo = s_keyinfo
TABLES
t_outtab_header = itab
t_outtab_item = itab1
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.
Thanks
Naren
10-11-2007 5:56 AM
Hi
sample code here
REPORT Z_HIER_ALV_TEST.
TYPE-POOLS: slis.
DATA: BEGIN OF t_scarr OCCURS 0.
INCLUDE STRUCTURE scarr.
DATA: expand.
DATA: END OF t_scarr.
DATA: BEGIN OF t_spfli OCCURS 0.
INCLUDE STRUCTURE spfli.
DATA: expand.
DATA: END OF t_spfli.
DATA: BEGIN OF t_sflight OCCURS 0.
INCLUDE STRUCTURE spfli.
DATA: END OF t_sflight.
data: w_scarr type scarr,
w_spfli type spfli,
w_sflight type sflight.
tables scarr.
select-options: s_carrid for scarr-carrid.
select * from scarr into table t_scarr where carrid in s_carrid.
select * from spfli into table t_spfli for all entries in t_scarr
where carrid = t_scarr-carrid.
DATA: gs_keyinfo TYPE slis_keyinfo_alv ,
g_expandname TYPE slis_fieldname VALUE 'EXPAND',
gs_layout TYPE slis_layout_alv,
g_tabname_header TYPE slis_tabname,
g_tabname_item TYPE slis_tabname,
g_tabname_item1 type slis_tabname..
DATA: t_fcat TYPE TABLE OF slis_fieldcat_alv,
w_fcat TYPE slis_fieldcat_alv.
data: ls_fieldcat type slis_fieldcat_alv.
gs_keyinfo-header01 = 'CARRID'.
gs_keyinfo-item01 = 'CARRID'.
gs_keyinfo-item02 = 'CARRID'.
g_tabname_header = 'T_SCARR'.
g_tabname_item = 'T_SPFLI'.
g_tabname_item1 = 'T_SLIGHT'.
gs_layout-expand_fieldname = g_expandname.
CLEAR w_fcat.
w_fcat-fieldname = 'ADD1'.
w_fcat-tabname = g_tabname_header.
w_fcat-no_out = 'X'.
w_fcat-input = 'X'.
w_fcat-sp_group = 'A'.
APPEND w_fcat TO t_fcat.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_internal_tabname = g_tabname_header
i_structure_name = 'SCARR'
CHANGING
ct_fieldcat = t_fcat[].
loop at t_fcat into ls_fieldcat.
case ls_fieldcat-fieldname.
when 'CARRID'.
ls_fieldcat-no_out = 'X'.
when 'CARRNAME'.
ls_fieldcat-no_out = 'X'.
when 'CURRCODE'.
ls_fieldcat-NO_OUT = 'X'.
endcase.
MODIFY t_fcat[] FROM ls_fieldcat.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_internal_tabname = g_tabname_item
i_structure_name = 'SPFLI'
CHANGING
ct_fieldcat = t_fcat[].
*CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_internal_tabname = g_tabname_item1
i_structure_name = 'SFLIGHT'
CHANGING
ct_fieldcat = t_fcat[].
*
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
t_INTERFACE_CHECK = ' '
i_CALLBACK_PROGRAM = sy-repid
t_CALLBACK_PF_STATUS_SET = ' '
t_CALLBACK_USER_COMMAND = ' '
IS_LAYOUT = gs_layout
IT_FIELDCAT = t_fcat[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
t_SCREEN_START_COLUMN = 0
t_SCREEN_START_LINE = 0
t_SCREEN_END_COLUMN = 0
t_SCREEN_END_LINE = 0
t_DEFAULT = 'X'
t_SAVE = ' '
IS_VARIANT =
IT_EVENTS =
IT_EVENT_EXIT =
i_TABNAME_HEADER = g_tabname_header
i_TABNAME_ITEM = g_tabname_item
t_STRUCTURE_NAME_HEADER =
t_STRUCTURE_NAME_ITEM =
IS_KEYINFO = gs_keyinfo
IS_PRINT =
IS_REPREP_ID =
t_BYPASSING_BUFFER =
t_BUFFER_ACTIVE =
IR_SALV_HIERSEQ_ADAPTER =
IT_EXCEPT_QINFO =
t_SUPPRESS_EMPTY_DATA = ABAP_FALSE
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB_HEADER = t_SCARR
T_OUTTAB_ITEM = t_SPFLI
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.
<b>reward if usefull</b>
10-11-2007 6:13 AM
how to make output fields as input enabled, displayed in the hierarchical list?
i.e. to make them as editable?Is it possible in list display?