03-13-2007 10:30 AM
Hello !
I want to create an alv grid via fieldcatalog.
I use an fieldcatalog generator known as "REUSE_ALV_FIELDCATALOG_MERGE".
But I've got several problems with using this function.
The MAIN problem is, that function needs as output table, this table type: "SLIS_T_FIELDCAT_ALV".
But grid control needs an fieldcatalog table of this type: "LVC_T_FCAT".
If I use the output table from the function, within the grid control method, I get an error.
Next problem: the function does create an empty fieldcatalog.
my top include
*&---------------------------------------------------------------------*
*& Include Z_SN_LISTVIEWERTEST_TOP Module pool Z_SN_LISTVIEWERTEST
*&
*&---------------------------------------------------------------------*
PROGRAM z_sn_listviewertest.
DATA: ok_code LIKE sy-ucomm.
DATA: BEGIN OF gs_sflight,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-fldate,
price LIKE sflight-price,
currency LIKE sflight-currency,
planetype LIKE sflight-planetype,
seatsmax LIKE sflight-seatsmax,
seatsocc LIKE sflight-seatsocc,
paymentsum LIKE sflight-paymentsum,
seatsmax_b LIKE sflight-seatsmax_b,
seatsocc_b LIKE sflight-seatsocc_b,
seatsmax_f LIKE sflight-seatsmax_f,
seatsocc_f LIKE sflight-seatsocc_f,
END OF gs_sflight.
DATA: gt_sflight LIKE TABLE OF gs_sflight.
TABLES: sflight.
important part of main module
CREATE OBJECT LOBJ_MAINCCONT
EXPORTING
* PARENT =
CONTAINER_NAME = 'FRM_CC_1'
* STYLE =
* LIFETIME = lifetime_default
* REPID =
* DYNNR =
* NO_AUTODEF_PROGID_DYNNR =
* EXCEPTIONS
* CNTL_ERROR = 1
* CNTL_SYSTEM_ERROR = 2
* CREATE_ERROR = 3
* LIFETIME_ERROR = 4
* LIFETIME_DYNPRO_DYNPRO_LINK = 5
* others = 6
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT LOBJ_ALVLISTE
EXPORTING
* I_SHELLSTYLE = 0
* I_LIFETIME =
I_PARENT = LOBJ_MAINCCONT
* I_APPL_EVENTS = space
* I_PARENTDBG =
* I_APPLOGPARENT =
* I_GRAPHICSPARENT =
* I_NAME =
* I_FCAT_COMPLETE = SPACE
* EXCEPTIONS
* ERROR_CNTL_CREATE = 1
* ERROR_CNTL_INIT = 2
* ERROR_CNTL_LINK = 3
* ERROR_DP_CREATE = 4
* others = 5
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DATA: lt_myalvfcat2 TYPE SLIS_T_FIELDCAT_ALV.
DATA: lt_myalvfcat TYPE LVC_T_FCAT.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = sy-repid
I_INTERNAL_TABNAME = 'GT_SFLIGHT'
* I_STRUCTURE_NAME = 'GS_SFLIGHT'
* I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = sy-repid
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = lt_myalvfcat2
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 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.
Break-Point.
CALL METHOD LOBJ_ALVLISTE->SET_TABLE_FOR_FIRST_DISPLAY
* EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME = 'SFLIGHT'
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
* IS_LAYOUT =
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = gt_sflight
IT_FIELDCATALOG = lt_myalvfcat
* IT_SORT =
* IT_FILTER =
* EXCEPTIONS
* INVALID_PARAMETER_COMBINATION = 1
* PROGRAM_ERROR = 2
* TOO_MANY_LINES = 3
* others = 4
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
hope, you guys can help me.
best regards,
Sven
03-13-2007 10:39 AM
03-13-2007 11:34 AM
hi,
i have done a similar program,go thru it and let me know if u have any
further concerns
**code
type-pools:slis.
DATA:BEGIN OF ITAB1 OCCURS 0,
MATNR LIKE MARA-MATNR,
MTART LIKE MARA-MTART,
END OF ITAB1.
DATA:BEGIN OF ITAB2 OCCURS 0,
MATNR LIKE MARA-MATNR,
WERKS LIKE MARD-WERKS,
END OF ITAB2.
TYPES:BEGIN OF TY_IT_FINAL,
MATNR LIKE MARA-MATNR,
MTART LIKE MARA-MTART,
WERKS LIKE MARD-WERKS,
END OF TY_IT_FINAL.
DATA:IT_FINAL TYPE TABLE OF TY_IT_FINAL WITH HEADER LINE.
data:x_fcat type SLIS_FIELDCAT_ALV,
t_fcat type SLIS_T_FIELDCAT_ALV.
define build_fieldcat.
clear x_fcat.
x_fcat-fieldname = &1.
x_fcat-seltext_l = &2.
x_fcat-col_pos = &3.
x_fcat-outputlen = &4.
append x_fcat to t_fcat.
end-of-definition.
START-OF-SELECTION.
SELECT MATNR MTART FROM MARA
INTO TABLE ITAB1.
SELECT MATNR WERKS FROM MARD
INTO TABLE ITAB2
FOR ALL ENTRIES IN ITAB1
WHERE MATNR = ITAB1-MATNR.
LOOP AT ITAB1.
IT_FINAL-MATNR = ITAB1-MATNR.
IT_FINAL-MTART = ITAB1-MTART.
READ TABLE ITAB2 WITH KEY MATNR = ITAB1-MATNR.
IT_FINAL-WERKS = ITAB2-WERKS.
APPEND IT_FINAL.
ENDLOOP.
build_fieldcat:
'MATNR' 'Material No.' '1' '20',
'MTART' 'Material type' '2' '20',
'WERKS' 'Plant' '3' '10'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
IT_FIELDCAT = t_fcat
TABLES
T_OUTTAB = it_final.
i am displaying data from more than one table, your scenario is more simpler since you are fetching data from single table.
Regards
03-13-2007 11:44 AM
hi,
in the above post, i have given normal ALV report,
Go thru the below OO ALV code,u just have to change the table and fields as of ur requirement.i did with mara table.
data:g_cont1 type ref to cl_gui_custom_container,
g_grid1 type ref to cl_gui_alv_grid,
itab1 type standard table of mara,
ok_code like sy-ucomm,
fcat type LVC_T_FCAT,
w_fcat type LVC_S_FCAT.
start-of-selection.
set screen 100.
SELECT MATNR MTART FROM MARA
INTO corresponding fields of TABLE ITAB1.
w_fcat-COL_POS = 1.
w_fcat-FIELDNAME = 'MATNR'.
w_fcat-TABNAME = 'MARA'.
w_fcat-COLTEXT = 'Material No.'.
*w_fcat-OUTPUTLEN = 3.
append w_fcat to fcat.
w_fcat-COL_POS = 2.
w_fcat-FIELDNAME = 'MTART'.
w_fcat-TABNAME = 'MARA'.
w_fcat-COLTEXT = 'Material Type'.
*w_fcat-OUTPUTLEN = 4.
append w_fcat to fcat.
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PF1'.
if g_cont1 is initial.
CREATE OBJECT g_cont1
EXPORTING
container_name = 'CONTAINER1'.
CREATE OBJECT g_grid1
EXPORTING
i_parent = g_cont1.
*CALL METHOD g_grid1->set_table_for_first_display
EXPORTING
I_STRUCTURE_NAME = 'SFLIGHT'
CHANGING
it_outtab = it_sflight.
CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_OUTTAB = itab1
IT_FIELDCATALOG = fcat
.
endif.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE USER_COMMAND_0100 INPUT.
CALL METHOD cl_gui_cfw=>dispatch.
ok_code = sy-ucomm.
case ok_code.
when 'BACK'.
leave program.
endcase.
clear ok_code.
ENDMODULE. " USER_COMMAND_0100 INPUT
Regards,
do award points for helpful answers
03-13-2007 1:00 PM
when I execute the program, I get an "fieldkatalog empty" message from the LVC_FIELDCATALOG_MERGE function.
DATA: lt_myalvfcat TYPE LVC_T_FCAT.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
* I_STRUCTURE_NAME =
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
I_INTERNAL_TABNAME = 'GT_SFLIGHT'
CHANGING
ct_fieldcat = lt_myalvfcat
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 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.
03-13-2007 2:38 PM
hi,
check whether you have populated ur fieldcatalog <b>lt_myalvfcat</b>
before calling the function reues_alv_fieldcatalog_merge.
Regards,
03-14-2007 9:13 AM
Hey,
thanx for your tip.
But what do you mean with "check if I pupulated my fieldcatalog"?
I created the fieldcatalog with:
DATA: lt_myalvfcat TYPE LVC_T_FCAT.
best regards,
Sven
Message was edited by:
Sven Nickel