2012 May 08 7:23 AM
Here i get error when FM REUSE_ALV_BLOCK_LIST_DISPLAY comes.
Field symbol has not yet been assigned.
Here is my code
TABLES: T001, KNB1.
TYPE-POOLS: SLIS.
DATA: IT_T001 LIKE TABLE OF T001,
IT_KNB1 LIKE TABLE OF KNB1,
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
WA_EVENT TYPE SLIS_ALV_EVENT,
IT_EVENT TYPE SLIS_T_EVENT.
START-OF-SELECTION.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
END-OF-SELECTION.
PERFORM READ_DATA.
PERFORM BLOCK_INIT.
PERFORM FIELD_CATALOG USING 'T001' 'IT_T001'.
PERFORM APPEND_BLOCK USING 'IT_T001' IT_T001.
PERFORM FIELD_CATALOG USING 'KNB1' 'IT_KNB1'.
PERFORM APPEND_BLOCK USING 'IT_KNB1' IT_KNB1.
PERFORM DISPLAY_DATA.
FORM READ_DATA.
SELECT MANDT BUKRS BUTXT ORT01 FROM T001 INTO TABLE IT_T001 UP TO 15 ROWS.
IF NOT IT_T001 IS INITIAL.
SELECT MANDT KUNNR BUKRS PERNR FROM KNB1 INTO TABLE IT_KNB1 UP TO 15 ROWS FOR ALL ENTRIES IN
IT_T001 WHERE BUKRS = IT_T001-BUKRS.
ENDIF.
ENDFORM.
FORM BLOCK_INIT.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
.
ENDFORM.
FORM FIELD_CATALOG USING FP_STRUCTURE TYPE C
FP_TNAM TYPE C.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = FP_TNAM
I_STRUCTURE_NAME = FP_STRUCTURE
CHANGING
CT_FIELDCAT = IT_FIELDCAT.
ENDFORM.
FORM APPEND_BLOCK USING FP_ITAB TYPE C
FP_DATA TYPE STANDARD TABLE.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
I_TABNAME = FP_ITAB
IT_EVENTS = IT_EVENT
TABLES
T_OUTTAB = FP_DATA.
ENDFORM.
FORM DISPLAY_DATA.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
.
ENDFORM.
2012 May 08 7:41 AM
Please check the following example:
TYPE-POOLS SLIS.
DATA: BEGIN OF ITAB OCCURS 0,
BELNR LIKE BSEG-BELNR,
GJAHR TYPE I,
WRBTR TYPE I,
WAERS LIKE BKPF-WAERS,
TOTAL TYPE P,
AUGDT type BSEG-AUGDT,
END OF ITAB.
DATA: LAYOUT TYPE SLIS_LAYOUT_ALV,
IT_EVENTS TYPE SLIS_T_EVENT,
FCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
REC_FCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
START-OF-SELECTION.
FCAT-COL_POS = 1.
FCAT-FIELDNAME = 'BELNR'.
FCAT-TABNAME = 'ITAB'.
FCAT-REF_FIELDNAME = 'BELNR'.
FCAT-REF_TABNAME = 'BSEG'.
APPEND FCAT.
FCAT-COL_POS = 2.
FCAT-FIELDNAME = 'GJAHR'.
FCAT-TABNAME = 'ITAB'.
FCAT-REF_FIELDNAME = 'GJAHR'.
FCAT-DATATYPE = 'INT4'.
FCAT-INTTYPE = 'I'.
FCAT-DO_SUM = 'X'.
APPEND FCAT.
FCAT-COL_POS = 3.
FCAT-FIELDNAME = 'WRBTR'.
FCAT-TABNAME = 'ITAB'.
FCAT-DATATYPE = 'INT4'.
FCAT-INTTYPE = 'I'.
FCAT-DO_SUM = 'X'.
APPEND FCAT.
FCAT-COL_POS = 4.
FCAT-FIELDNAME = 'TOTAL'.
FCAT-TABNAME = 'ITAB'.
* FCAT-DATATYPE = 'INT4'.
FCAT-INTTYPE = 'P'.
FCAT-DO_SUM = 'X'.
APPEND FCAT.
FCAT-COL_POS = 5.
FCAT-FIELDNAME = 'AUGDT'.
FCAT-TABNAME = 'ITAB'.
FCAT-REF_FIELDNAME = 'AUGDT'.
FCAT-REF_TABNAME = 'BSEG'.
APPEND FCAT.
BREAK DEVELOPER.
DO 100 TIMES.
ITAB-WRBTR = SY-INDEX.
ITAB-GJAHR = SY-INDEX + 1.
ITAB-TOTAL = ITAB-WRBTR / ITAB-GJAHR.
itab-AUGDT = sy-datum.
APPEND ITAB.
ENDDO.
*CALLING ALV
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = 'Z_TOT_ALV'.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FCAT[]
I_TABNAME = 'ITAB'
IT_EVENTS = IT_EVENTS[]
TABLES
T_OUTTAB = ITAB[].
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'.
Here i get error when FM REUSE_ALV_BLOCK_LIST_DISPLAY comes.
Field symbol has not yet been assigned.
Here is my code
TABLES: T001, KNB1.
TYPE-POOLS: SLIS.
DATA: IT_T001 LIKE TABLE OF T001,
IT_KNB1 LIKE TABLE OF KNB1,
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
WA_EVENT TYPE SLIS_ALV_EVENT,
IT_EVENT TYPE SLIS_T_EVENT.
START-OF-SELECTION.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
END-OF-SELECTION.
PERFORM READ_DATA.
PERFORM BLOCK_INIT.
PERFORM FIELD_CATALOG USING 'T001' 'IT_T001'.
PERFORM APPEND_BLOCK USING 'IT_T001' IT_T001.
PERFORM FIELD_CATALOG USING 'KNB1' 'IT_KNB1'.
PERFORM APPEND_BLOCK USING 'IT_KNB1' IT_KNB1.
PERFORM DISPLAY_DATA.
FORM READ_DATA.
SELECT MANDT BUKRS BUTXT ORT01 FROM T001 INTO TABLE IT_T001 UP TO 15 ROWS.
IF NOT IT_T001 IS INITIAL.
SELECT MANDT KUNNR BUKRS PERNR FROM KNB1 INTO TABLE IT_KNB1 UP TO 15 ROWS FOR ALL ENTRIES IN
IT_T001 WHERE BUKRS = IT_T001-BUKRS.
ENDIF.
ENDFORM.
FORM BLOCK_INIT.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
.
ENDFORM.
FORM FIELD_CATALOG USING FP_STRUCTURE TYPE C
FP_TNAM TYPE C.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = FP_TNAM
I_STRUCTURE_NAME = FP_STRUCTURE
CHANGING
CT_FIELDCAT = IT_FIELDCAT.
ENDFORM.
FORM APPEND_BLOCK USING FP_ITAB TYPE C
FP_DATA TYPE STANDARD TABLE.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
I_TABNAME = FP_ITAB
IT_EVENTS = IT_EVENT
TABLES
T_OUTTAB = FP_DATA.
ENDFORM.
FORM DISPLAY_DATA.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
.
ENDFORM.
2012 May 08 7:41 AM
Please check the following example:
TYPE-POOLS SLIS.
DATA: BEGIN OF ITAB OCCURS 0,
BELNR LIKE BSEG-BELNR,
GJAHR TYPE I,
WRBTR TYPE I,
WAERS LIKE BKPF-WAERS,
TOTAL TYPE P,
AUGDT type BSEG-AUGDT,
END OF ITAB.
DATA: LAYOUT TYPE SLIS_LAYOUT_ALV,
IT_EVENTS TYPE SLIS_T_EVENT,
FCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
REC_FCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
START-OF-SELECTION.
FCAT-COL_POS = 1.
FCAT-FIELDNAME = 'BELNR'.
FCAT-TABNAME = 'ITAB'.
FCAT-REF_FIELDNAME = 'BELNR'.
FCAT-REF_TABNAME = 'BSEG'.
APPEND FCAT.
FCAT-COL_POS = 2.
FCAT-FIELDNAME = 'GJAHR'.
FCAT-TABNAME = 'ITAB'.
FCAT-REF_FIELDNAME = 'GJAHR'.
FCAT-DATATYPE = 'INT4'.
FCAT-INTTYPE = 'I'.
FCAT-DO_SUM = 'X'.
APPEND FCAT.
FCAT-COL_POS = 3.
FCAT-FIELDNAME = 'WRBTR'.
FCAT-TABNAME = 'ITAB'.
FCAT-DATATYPE = 'INT4'.
FCAT-INTTYPE = 'I'.
FCAT-DO_SUM = 'X'.
APPEND FCAT.
FCAT-COL_POS = 4.
FCAT-FIELDNAME = 'TOTAL'.
FCAT-TABNAME = 'ITAB'.
* FCAT-DATATYPE = 'INT4'.
FCAT-INTTYPE = 'P'.
FCAT-DO_SUM = 'X'.
APPEND FCAT.
FCAT-COL_POS = 5.
FCAT-FIELDNAME = 'AUGDT'.
FCAT-TABNAME = 'ITAB'.
FCAT-REF_FIELDNAME = 'AUGDT'.
FCAT-REF_TABNAME = 'BSEG'.
APPEND FCAT.
BREAK DEVELOPER.
DO 100 TIMES.
ITAB-WRBTR = SY-INDEX.
ITAB-GJAHR = SY-INDEX + 1.
ITAB-TOTAL = ITAB-WRBTR / ITAB-GJAHR.
itab-AUGDT = sy-datum.
APPEND ITAB.
ENDDO.
*CALLING ALV
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = 'Z_TOT_ALV'.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FCAT[]
I_TABNAME = 'ITAB'
IT_EVENTS = IT_EVENTS[]
TABLES
T_OUTTAB = ITAB[].
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'.
2012 May 08 7:51 AM
Hi,
Thanks for your time.
My issue is to display two list without writing multiple times 'REUSE_ALV_BLOCK_LIST_APPEND' using SUBROUTINES. Now the program you sent will display only one block.
It could help full if you solve in my way.
2012 May 08 8:11 AM
Hello ,
The issue was that you were trying to use same fields catalog for all the blocks.
Check the corrected code below :
REPORT ZTEST1 .
TABLES: T001, KNB1.
TYPE-POOLS: SLIS.
DATA: V_REPID TYPE SY-REPID.
DATA: IT_T001 LIKE TABLE OF T001,
IT_KNB1 LIKE TABLE OF KNB1,
IT_FIELDCAT1 TYPE SLIS_T_FIELDCAT_ALV,
IT_FIELDCAT2 TYPE SLIS_T_FIELDCAT_ALV,
WA_LAYOUT TYPE SLIS_LAYOUT_ALV,
WA_EVENT TYPE SLIS_ALV_EVENT,
IT_EVENT TYPE SLIS_T_EVENT.
START-OF-SELECTION.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
V_REPID = SY-REPID.
END-OF-SELECTION.
PERFORM READ_DATA.
PERFORM BLOCK_INIT.
PERFORM FIELD_CATALOG USING 'T001' 'IT_T001' IT_FIELDCAT1.
PERFORM APPEND_BLOCK USING 'IT_T001' IT_T001 IT_FIELDCAT1.
PERFORM FIELD_CATALOG USING 'KNB1' 'IT_KNB1' IT_FIELDCAT2.
PERFORM APPEND_BLOCK USING 'IT_KNB1' IT_KNB1 IT_FIELDCAT2.
PERFORM DISPLAY_DATA.
FORM READ_DATA.
SELECT MANDT BUKRS BUTXT ORT01 FROM T001 INTO TABLE IT_T001 UP TO 15 ROWS.
IF NOT IT_T001 IS INITIAL.
SELECT MANDT KUNNR BUKRS PERNR FROM KNB1 INTO TABLE IT_KNB1 UP TO 15 ROWS FOR ALL ENTRIES IN
IT_T001 WHERE BUKRS = IT_T001-BUKRS.
ENDIF.
ENDFORM.
FORM BLOCK_INIT.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
.
ENDFORM.
FORM FIELD_CATALOG USING FP_STRUCTURE TYPE C
FP_TNAM TYPE C
FP_FIELDCAT TYPE STANDARD TABLE.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = FP_TNAM
I_STRUCTURE_NAME = FP_STRUCTURE
CHANGING
CT_FIELDCAT = FP_FIELDCAT.
ENDFORM.
FORM APPEND_BLOCK USING FP_ITAB TYPE C
FP_DATA TYPE STANDARD TABLE
fp_field TYPE STANDARD TABLE .
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = fp_field
I_TABNAME = FP_ITAB
IT_EVENTS = IT_EVENT
TABLES
T_OUTTAB = FP_DATA.
ENDFORM.
FORM DISPLAY_DATA.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
.
ENDFORM.
2012 May 08 8:13 AM
REPORT zr_and_d.
TYPE-POOLS:slis.
DATA:x_layout TYPE slis_layout_alv,
t_field TYPE slis_t_fieldcat_alv,
x_fldcat LIKE LINE OF t_field,
t_events TYPE slis_t_event,
x_events TYPE slis_alv_event,
t_sort TYPE slis_t_sortinfo_alv,
x_sort LIKE LINE OF t_sort ,
x_print_layout TYPE slis_print_alv.
DEFINE add_catalog.
clear x_fldcat.
x_fldcat-fieldname = &1.
x_fldcat-seltext_m = &2.
x_fldcat-outputlen = &3.
x_fldcat-tech = &4.
x_fldcat-col_pos = &5.
x_fldcat-no_zero = 'X'.
x_fldcat-ddictxt = 'M'.
x_fldcat-datatype = &6.
x_fldcat-ddic_outputlen = &7.
if &6 = 'N'.
x_fldcat-lzero = 'X'.
endif.
append x_fldcat to t_field.
END-OF-DEFINITION.
data: v_repid like sy-repid.
data: begin of itab occurs 0,
matnr like mara-matnr,
ernam like mara-ernam,
meins like mara-meins,
end of itab.
data: begin of jtab occurs 0,
matnr like makt-matnr,
maktx like makt-maktx,
end of jtab.
select matnr ernam meins
up to 20 rows
from mara
into table itab.
select matnr maktx
up to 20 rows
from makt
into table jtab.
v_repid = sy-repid.
call function 'REUSE_ALV_BLOCK_LIST_INIT'
exporting
i_callback_program = v_repid.
*Block 1:
refresh t_field. clear t_field.
refresh t_events.
add_catalog:
'MATNR' 'Material' '18' '' '1' 'C' '18',
'ERNAM' 'Created By' '12' '' '2' 'C' '12',
'MEINS' 'Unit' '5' '' '3' 'C' '3'.
x_events-form = 'TOP_OF_LIST1'.
x_events-name = slis_ev_top_of_list.
append x_events to t_events.
call function 'REUSE_ALV_BLOCK_LIST_APPEND'
exporting
is_layout = x_layout
it_fieldcat = t_field
i_tabname = 'ITAB'
it_events = t_events
it_sort = t_sort
tables
t_outtab = itab
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.
*--BLOCK 2(SUMMARY REPORT)
*INITIALIZE
refresh t_field. clear t_field.
refresh t_events.
add_catalog:
'MATNR' 'Material' '20' '' '1' 'C' '18',
'MAKTX' 'Description' '40' '' '2' 'C' '40'.
*--build table for events.
x_events-form = 'TOP_OF_LIST2'.
x_events-name = slis_ev_top_of_list.
append x_events to t_events.
call function 'REUSE_ALV_BLOCK_LIST_APPEND'
exporting
is_layout = x_layout
it_fieldcat = t_field
i_tabname = 'JTAB'
it_events = t_events
tables
t_outtab = jtab
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'
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 top_of_list1.
skip 1.
write: 10 'List 1',
/5 '----'.
skip 1.
format reset.
endform.
form top_of_list2.
skip 1.
write: 10 'List 2',
/5 '----'.
skip 1.
format reset.
endform.
2012 May 08 8:14 AM
Hi,
You to use two REUSE_ALV_BLOCK_LIST_APPEND function modules.One for t001 and another one for knb1.
While you are passing through subroutines the interface parameters type should be match with type of function module interface parameters.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = WA_LAYOUT1
IT_FIELDCAT = IT_FCAT1
I_TABNAME = 'IT_T001'
IT_EVENTS = IT_EVENT1
TABLES
T_OUTTAB = IT_T001.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = WA_LAYOUT2
IT_FIELDCAT = IT_FCAT2
I_TABNAME = 'IT_KNB1'
IT_EVENTS = IT_EVENT2
TABLES
T_OUTTAB = IT_KNB1.
2012 May 08 8:22 AM
2012 May 08 8:04 AM
Hi, I have checked your code and observed that same fieldcat table IT_FIELDCAT is used for different table types.
try to use different fieldcat tables for differnt internal tables. This will resolve your issue.
Regards,
Vijaymadhur.