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 Grid & Fieldcatalog

Former Member
0 Kudos

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

6 REPLIES 6

Former Member
0 Kudos

use this FM LVC_FIELDCATALOG_MERGE to build the fieldcatalog

Former Member
0 Kudos

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

Former Member
0 Kudos

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

Former Member
0 Kudos

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.



Former Member
0 Kudos

hi,

check whether you have populated ur fieldcatalog <b>lt_myalvfcat</b>

before calling the function reues_alv_fieldcatalog_merge.

Regards,

0 Kudos

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