본문 바로가기
ERP-SAP/ABAP

<ABAP> reuse alv Fieldcat 구성시 주의할 점

by 행복한워니의 기록 2013. 1. 21.
728x90
반응형

1. merge 펑션을 사용할 때, alv 화면에서 필드가 나타나지 않을 때.      

 

PERFORM lvc_fieldcatalog_merge  TABLES gt_lvc_fcat  " Field Cat.
                                         gt_dt     <-- 이 부분을 보자
                                  USING  'GT_DT'.

  *&---------------------------------------------------------------------*
*&      Form  lvc_fieldcatalog_merge
*&---------------------------------------------------------------------*
*       해당 Dictionary 또는 Internal Table로부터 Field catalog를 가져옴
*----------------------------------------------------------------------*
*      -->pt_fcat_alv  Field Catalog for List Viewer Control
*      -->pt_table     Internal Table
*      -->p_itab_name  Internal Table 명
*----------------------------------------------------------------------*
FORM lvc_fieldcatalog_merge  TABLES  pt_fcat_alv TYPE lvc_t_fcat
                                     pt_table
                              USING  p_itab_name  TYPE  any.

  DATA  lt_fieldcat  TYPE  slis_t_fieldcat_alv.
  DATA  lt_alv_cat   TYPE TABLE OF lvc_s_fcat.
*----------------------------------------------------------------------*
*Create field catalog from dictionary structure or internal table
*----------------------------------------------------------------------*
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name     sy-repid
      i_internal_tabname p_itab_name
      i_inclname         sy-repid
    CHANGING
      ct_fieldcat        lt_fieldcat[].

  CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
    EXPORTING
      it_fieldcat_alv lt_fieldcat
    IMPORTING
      et_fieldcat_lvc lt_alv_cat
    TABLES
      it_data         pt_table.

  CALL FUNCTION 'LVC_FIELDCAT_COMPLETE'
    CHANGING
      ct_fieldcat lt_alv_cat.

  REFRESH pt_fcat_alv .
  pt_fcat_alv[] lt_alv_cat[].

*  LOOP AT pt_fcat_alv INTO gs_lvc_fcat.
*    CASE gs_lvc_fcat-fieldname.
*      WHEN 'CHECK' OR
*           'OBJ_KEY' OR
*           'OBJ_SEQ'.
*        gs_lvc_fcat-no_out = 'X'.
*        MODIFY pt_fcat_alv FROM gs_lvc_fcat.
*    ENDCASE.
*  ENDLOOP.

ENDFORM.                    " lvc_fieldcatalog_merge

 

 

선언부에서 include 스트럭쳐를 하고, 아래쪽에다 type 으로 선언하면,

 

alv 에서는 display 를 하지 못한다...

 

like 로 선언한 후에, 새 세션을 열고 테스트를 하면 Fieldcat merge 펑션에서

 

display 할 수 있다.

 

하단에

 

zprjnm type zcoht601-zprjnm 한다면. 해당 필드는 display 되지 않는다!!!!!!

 

      DATA BEGIN OF gt_dt OCCURS 0,
             flag(1).
            INCLUDE STRUCTURE  zcohs038.
    DATA zprjnm     like zcoht601-zprjnm,
               zcust       like  zcoht601-zcust,
               zcust_name  like  kna1-name1,
               zeusr      like   zcoht601-zeusr,
               zeusr_name   like  kna1-name1,
               zeusrcntr  like  zcoht601-zeusrcntr,
               landx        like  t005t-landx,
               zrepeat     like   zcoht601-zrepeat,   "반복자재유무
              f_col    TYPE lvc_t_scol  ,
             celltab  TYPE lvc_t_styl  .
    DATA END OF gt_dt.

 

 

 

아래 Function을 사용하여 Internal Table에 참조된 Field Catalog를 가져오지 못하는 경우가 있습니다.

이때는  아래 순서로 점검 해보세요.

1. 해당 프로그램의 Internal Table이 있는지 확인

2. 해당 Internal Table에 참조된 필드들이 Like로 참조되고 있는지 확인(타입을 바로 참조하는경우는 TYPE으로 선언)

3. 해당 Internal Table에 OCCURS 구문을 사용하여 생성되었는지 확인

 

  call function 'REUSE_ALV_FIELDCATALOG_MERGE'
    exporting
      i_program_name     sy-repid
      i_internal_tabname PV_TABNAME
      i_inclname         sy-repid
    changing
      ct_fieldcat        LT_FIELDCATS.

 

728x90
반응형