셀렉션스크린에 입력 된 값에 따라서 또는 어떤 조건에 따라서 등등의 이유로 출력되는 컬럼이 달라져야 하는 경우가 있다.
이 때 필드심볼을 사용하면 된다.
아래는 셀렉션스크린에서 입력 된 월(month) 값에 따라서 필드카탈로그 인터널테이블의 컬럼을 동적으로 구성하고, ALV를 동적으로 출력 하는 경우이다.
<예>
** '01월' 입력 시 -> 컬럼 01월만 출력.
** '07 ~ 12월' 입력 시 -> 컬럼 07월, 08월, 09월, 10월, 11월, 12월 출력.
<소스코드>
*"동적 필드카탈로그 구성
CLEAR: GT_FIELDCAT.
CLEAR: S_MONTH.
READ TABLE S_MONTH INDEX 1.
IF S_MONTH-LOW IS NOT INITIAL AND S_MONTH-HIGH IS NOT INITIAL.
LV_TIMES = S_MONTH-HIGH - S_MONTH-LOW + 1.
LV_MONTH = S_MONTH-LOW.
DO LV_TIMES TIMES.
CLEAR LS_FCAT.
LS_FCAT-COLTEXT = |{ LV_MONTH }월|. "컬럼텍스트
LS_FCAT-FIELDNAME = |M{ LV_MONTH }|. "컬럼명(임의)
LS_FCAT-COL_POS = SY-INDEX.
APPEND LS_FCAT TO GT_FIELDCAT.
LV_MONTH = LV_MONTH + 1.
ENDDO.
ELSEIF S_MONTH-LOW IS NOT INITIAL AND S_MONTH-HIGH IS INITIAL.
CLEAR LS_FCAT.
LS_FCAT-COLTEXT = |{ S_MONTH-LOW }월|. "컬럼텍스트
LS_FCAT-FIELDNAME = |M{ S_MONTH-LOW }|. "컬럼명(임의)
LS_FCAT-COL_POS = 1.
APPEND LS_FCAT TO GT_FIELDCAT.
ENDIF.
*"동적 인터널테이블 생성
CLEAR: L_DREF.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
I_STYLE_TABLE = ' '
IT_FIELDCATALOG = GT_FIELDCAT
IMPORTING
EP_TABLE = L_DREF
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2.
IF SY-SUBRC = 0.
ASSIGN L_DREF->* TO <GT_DISP>.
CREATE DATA L_DREF LIKE LINE OF <GT_DISP>. "동적 인터널테이블
ASSIGN L_DREF->* TO <GS_DISP>.
ENDIF.
이후 ALV 출력 시 위의 변수를 사용한다.
CALL METHOD GO_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_BUFFER_ACTIVE = 'X'
I_BYPASSING_BUFFER = 'X'
I_SAVE = 'A'
I_DEFAULT = 'X'
IS_LAYOUT = GS_LAYOUT
IS_VARIANT = GS_VARIANT
IT_TOOLBAR_EXCLUDING = GT_TOOLBAR_EXCLUDE
CHANGING
IT_OUTTAB = <GT_DISP>
IT_FIELDCATALOG = GT_FIELDCAT
IT_SORT = GT_SORT
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
OTHERS = 3.
추가로, 동적 인터널테이블에 데이터를 담기 위해서는
ASSIGN COMPONENT <컬럼명> OF STRUCTURE <GS_DISP> TO <담을 값>. 구문을 이용하면 된다.
<끝>
'★ SAP 이야기 > ABAP' 카테고리의 다른 글
[ABAP] VF11 User-Exit 생성하기(RV60AFZC, RV60AFZZ) (0) | 2024.12.03 |
---|---|
[ABAP] ALV 필드 너비 최적화하기('X'와 'A'의 차이) (0) | 2024.07.30 |
[ABAP] Module Pool 프로그램에서 Selection Screen 만들기 (0) | 2024.03.20 |
[ABAP] 해상도에 맞게 ALV Grid 크기 자동 조절하는 방법 (0) | 2024.03.12 |
[ABAP] 셀렉션스크린 필수 필드로 화면 안넘어갈 때 조정하기 (1) | 2024.02.13 |