필드카탈로그 머지할때
FORM lvc_fieldcatalog_merge TABLES pt_fcat_alv TYPE lvc_t_fcat
pt_table
USING p_itab_name.
DATA : lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA : lt_alv_cat TYPE TABLE OF lvc_s_fcat.
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[].
ENDFORM. " lvc_fieldcatalog_merge
항상 이렇게 사용하는데 틀이여서 신경안쓰고 사용하고 있다가,
요즘 좀 한가해져서 공부중에 궁금중이 생겼습니다.
여기서, LVC_TRANSFER_FROM_SLIS와 LVC_FIELDCAT_COMPLETE의 용도가 궁금합니다.
조언 부탁드립니다.^^
프로그램이 좀 짬뽕(?)인것 같습니다.
혹시 프로그램이 class를 사용해서 만드신 것인가요?.. 함수를 이용해서 만드셨다면
LVC_TRANSFER_FROM_SLIS와 LVC_FIELDCAT_COMPLETE는 없어도 ALV는 잘 실행 될겁니다.
보통 alv를 만들때 함수를 사용하는 방법(REUSE_ALV 로 시작하는 함수 사용)과 class를 사용하는 방법으로 alv를 생성합니다.
Fieldcatalog의 생성시 함수로 생성할때는 'REUSE_ALV_FIELDCATALOG_MERGE',
class는 'LVC_FIELDCATALOG_MERGE' 를 사용합니다.
혹시 alv를 표시하는 마지막이 어떻게 되어 있는지 궁금합니다.(그때 사용되는 필드카탈로그 테이블이 어느것인지...확인만 되면
필요없는 소스는 지워도 될것 같습니다.)
class 일 경우는
CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_FIELDCATALOG = GT_FCAT ==> 사용되는 필드카탈로그 인터널테이블
IT_OUTTAB = IT_DISP[].
함수일 경우는 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BYPASSING_BUFFER = 'X'
I_CALLBACK_PROGRAM = LV_REPID
IT_EVENTS = GT_EVENTS[]
IT_FIELDCAT = GT_FIELDCAT[] ==> 필드카탈로그
IS_LAYOUT = GS_LAYOUT
IT_SORT = GT_SORT[]
TABLES
T_OUTTAB = IT_TAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
즐밥하세요...