순서를 지정하는 cbo 테이블이 필요함
컬럼은 필드명으로, 데이터에는 순서가 들어있으면 됨
아래는 필드카탈로그설정을 완료 후 cbo에서 순서를 찾아와 변형하는 로직임.
FORM CHANGE_DISPLAY_SEQ .
DATA : L_COL LIKE GO_FIELDCAT_S-COL_POS,
L_COL_MAX LIKE GO_FIELDCAT_S-COL_POS.
DATA : BEGIN OF LT_SEQ OCCURS 0,
FIELDNAME LIKE GO_FIELDCAT_S-FIELDNAME,
COL_POS LIKE GO_FIELDCAT_S-COL_POS,
END OF LT_SEQ.
DATA : L_FIELD(30).
FIELD-SYMBOLS <LF719>.
CHECK GT_ITAB[] IS NOT INITIAL.
* 시작 위치를 찾음.
CLEAR GO_FIELDCAT_S.
READ TABLE GO_FIELDCAT_T WITH KEY FIELDNAME = 'ZRANK'
INTO GO_FIELDCAT_S.
CHECK SY-SUBRC = 0.
L_COL = GO_FIELDCAT_S-COL_POS.
* 해당 STRUCTURE를 읽음.
READ TABLE GT_ZSDT719 WITH KEY HLGUB = P_HLGUB ZYTGN = P_ZYTGN.
* 순서를 찾음.
CLEAR GO_FIELDCAT_S.
LOOP AT GO_FIELDCAT_T INTO GO_FIELDCAT_S
WHERE NO_OUT = SPACE
AND COL_POS > L_COL
AND FIELDNAME NE 'ZBIGO'. "비고는 제일 뒤에 나오도록 제거함.
CLEAR : L_FIELD.
CONCATENATE 'GT_ZSDT719-' GO_FIELDCAT_S-FIELDNAME INTO L_FIELD.
ASSIGN (L_FIELD) TO <LF719>.
LT_SEQ-FIELDNAME = GO_FIELDCAT_S-FIELDNAME.
LT_SEQ-COL_POS = <LF719>.
IF L_COL_MAX < LT_SEQ-COL_POS.
L_COL_MAX = LT_SEQ-COL_POS.
ENDIF.
APPEND LT_SEQ.
ENDLOOP.
* 순서가 없는항목은 제일 뒤로 이동함 (0인 값)
L_COL_MAX = L_COL_MAX + 1.
LOOP AT LT_SEQ WHERE COL_POS = 0.
LT_SEQ-COL_POS = L_COL_MAX.
MODIFY LT_SEQ.
ENDLOOP.
* 순서대로 정렬함.
SORT LT_SEQ BY COL_POS.
* 신규순서를 지정함.
LOOP AT LT_SEQ.
L_COL = L_COL + 1.
CLEAR : GO_FIELDCAT_S.
READ TABLE GO_FIELDCAT_T WITH KEY FIELDNAME = LT_SEQ-FIELDNAME
INTO GO_FIELDCAT_S.
IF SY-SUBRC = 0.
GO_FIELDCAT_S-COL_POS = L_COL.
MODIFY GO_FIELDCAT_T FROM GO_FIELDCAT_S INDEX SY-TABIX.
ENDIF.
ENDLOOP.
ENDFORM. " CHANGE_DISPLAY_SEQ
컬럼은 필드명으로, 데이터에는 순서가 들어있으면 됨
아래는 필드카탈로그설정을 완료 후 cbo에서 순서를 찾아와 변형하는 로직임.
FORM CHANGE_DISPLAY_SEQ .
DATA : L_COL LIKE GO_FIELDCAT_S-COL_POS,
L_COL_MAX LIKE GO_FIELDCAT_S-COL_POS.
DATA : BEGIN OF LT_SEQ OCCURS 0,
FIELDNAME LIKE GO_FIELDCAT_S-FIELDNAME,
COL_POS LIKE GO_FIELDCAT_S-COL_POS,
END OF LT_SEQ.
DATA : L_FIELD(30).
FIELD-SYMBOLS <LF719>.
CHECK GT_ITAB[] IS NOT INITIAL.
* 시작 위치를 찾음.
CLEAR GO_FIELDCAT_S.
READ TABLE GO_FIELDCAT_T WITH KEY FIELDNAME = 'ZRANK'
INTO GO_FIELDCAT_S.
CHECK SY-SUBRC = 0.
L_COL = GO_FIELDCAT_S-COL_POS.
* 해당 STRUCTURE를 읽음.
READ TABLE GT_ZSDT719 WITH KEY HLGUB = P_HLGUB ZYTGN = P_ZYTGN.
* 순서를 찾음.
CLEAR GO_FIELDCAT_S.
LOOP AT GO_FIELDCAT_T INTO GO_FIELDCAT_S
WHERE NO_OUT = SPACE
AND COL_POS > L_COL
AND FIELDNAME NE 'ZBIGO'. "비고는 제일 뒤에 나오도록 제거함.
CLEAR : L_FIELD.
CONCATENATE 'GT_ZSDT719-' GO_FIELDCAT_S-FIELDNAME INTO L_FIELD.
ASSIGN (L_FIELD) TO <LF719>.
LT_SEQ-FIELDNAME = GO_FIELDCAT_S-FIELDNAME.
LT_SEQ-COL_POS = <LF719>.
IF L_COL_MAX < LT_SEQ-COL_POS.
L_COL_MAX = LT_SEQ-COL_POS.
ENDIF.
APPEND LT_SEQ.
ENDLOOP.
* 순서가 없는항목은 제일 뒤로 이동함 (0인 값)
L_COL_MAX = L_COL_MAX + 1.
LOOP AT LT_SEQ WHERE COL_POS = 0.
LT_SEQ-COL_POS = L_COL_MAX.
MODIFY LT_SEQ.
ENDLOOP.
* 순서대로 정렬함.
SORT LT_SEQ BY COL_POS.
* 신규순서를 지정함.
LOOP AT LT_SEQ.
L_COL = L_COL + 1.
CLEAR : GO_FIELDCAT_S.
READ TABLE GO_FIELDCAT_T WITH KEY FIELDNAME = LT_SEQ-FIELDNAME
INTO GO_FIELDCAT_S.
IF SY-SUBRC = 0.
GO_FIELDCAT_S-COL_POS = L_COL.
MODIFY GO_FIELDCAT_T FROM GO_FIELDCAT_S INDEX SY-TABIX.
ENDIF.
ENDLOOP.
ENDFORM. " CHANGE_DISPLAY_SEQ
'ABAP 물타기 > ALV' 카테고리의 다른 글
CL_ALV_CHANGED_DATA_PROTOCOL (0) | 2011.07.04 |
---|---|
ALV : SELECTED_ROWS (0) | 2011.05.19 |
function alv f4 (커스터마이징) (0) | 2011.01.26 |
ALV : Popup ALV (0) | 2011.01.04 |
ALV : Function ALV Tip (0) | 2011.01.04 |