SAP/ABAP

ABAP Class ALV Cell 별 색상 넣기

그녀는애교쟁이 2014. 12. 10. 09:30
반응형

ABAP 개발을 하다 보면 제일 많이 하는게 ALV  리스트 개발을 하는 것일 것이다. ALV 가 워낙 강력한 기능들이 많은데 잘 사용하지 못할 때가 너무 많다. 필요한 그리드의 기능을 다 가지고 있어서 잘 세팅하는 법만 알아도 사용자가 요구하는 조건을 충족 시킬 수가 있다. ( 사용자는 기능을 잘 모르기 때문에 개발자가 잘 가이드를 해야 한다. )


오늘은 Class ALV 의 Cell 별로 색상을 넣는 방법을 포스팅 하려고 한다. ALV 의 필드 카탈로그에서 한 컬럼씩 색상을 줄 수도 있지만 각 셀 별로 색상을 주는 것도 가틍하다. 한 컬럼씩 색상을 넣게 되면 가로의 Row 의 색상을 줄 수가 없는데 Cell 별로 색상을 넣어주면 Row 의 색상을 넣는 것도 가능하다.





위의 레포트에서 보면 가장 아래줄에 녹색으로 색상이 들어 간 것을 확인 할 수 있다. 필드 카탈로그에서 색상을 넣는다면 컬럼으로만 넣을 수 있고 위와 같이 가로로 넣을 수는 없을 것이다. 그리고 예를 들면 특정 값 일 때 색상을 다르게 할 수 도 있는데  필드 카탈로그의 설정만으로는 부족한 부분이 있다.



	" 1. CELL 색상을 위한 변수 설정 변수 추가	      	  
	                      
	DATA : BEGIN OF GT_DATA OCCURS 0,
	        MATNR LIKE MARA-MATNR,
	        MFRPN LIKE MARA-MFRPN,
	        CODE(2),
	        CODE_TEXT(10),
					"....	      
	        CTAB  TYPE LVC_T_SCOL, " CELL 색상 변수
	       END OF GT_DATA.	     
	
	
	" 2. ALV GRID LAYOUT 에 COLOR 필드 설정

	FORM GRID_SET_LAYO  CHANGING CS_LAYO TYPE LVC_S_LAYO.
	
	  CS_LAYO-CWIDTH_OPT  = 'X'.
	  CS_LAYO-SEL_MODE    = ''.
	  CS_LAYO-ZEBRA       = 'X'.
	* CS_LAYO-BOX_FNAME   = 'SELX'.
	  CS_LAYO-CTAB_FNAME  = 'CTAB'. " 이부분을 추가한다.
	  CS_LAYO-STYLEFNAME  = 'STYLE'.
	
	ENDFORM.                    " GRID_SET_LAYO	


	" 3. SET ALV 에서 FIELD COLOR 부분 추가	

	DATA : LT_FCAT      TYPE LVC_T_FCAT.
	
	PERFORM GRID_SET_FIELD_COLOR  TABLES GT_DATA
	                              USING  LT_FCAT.	

	
	" 4. SET FIELD COLOR PERFORM 문 추가	            
                  
	*&---------------------------------------------------------------------*
	*&      Form  GRID_SET_FIELD_COLOR
	*&---------------------------------------------------------------------*
	*       text
	*----------------------------------------------------------------------*
	*      -->P_GT_DATA  text
	*----------------------------------------------------------------------*
	FORM GRID_SET_FIELD_COLOR  TABLES   PT_DATA STRUCTURE GT_DATA
	                           USING    PT_LVC_FCAT TYPE LVC_T_FCAT.
	
	  DATA: L_CTAB    TYPE LVC_S_SCOL,
	        LS_FCAT   TYPE LVC_S_FCAT,
	        LV_TABIX  TYPE SY-TABIX.
	
	  LOOP AT PT_DATA WHERE CODE = 'D'. " 4번째 줄의 CODE 가 D
	
	    LV_TABIX = SY-TABIX.
	
	    LOOP AT PT_LVC_FCAT INTO LS_FCAT WHERE FIELDNAME NE 'MATNR'.
	      CLEAR : L_CTAB.
	      L_CTAB-FNAME = LS_FCAT-FIELDNAME. " 색상을 추가할 CELL FIELD NAME
	      L_CTAB-COLOR-COL = 5.	" 색상은 녹색
	      L_CTAB-COLOR-INT = 1.
	      L_CTAB-COLOR-INV = 0.
	      APPEND L_CTAB TO PT_DATA-CTAB.
	    ENDLOOP.
	
	    MODIFY PT_DATA INDEX LV_TABIX.
	
	  ENDLOOP.
	
	ENDFORM.                    " GRID_SET_FIELD_COLOR
	
	

위의 코드는 일부만 발췌한 부분인다. 또한 GT_DATA 부분에 CTAB 이라는 COLOR 를 설정할 수 있는 FIELD 를 추가와 LAYOUT 에 COLOR를 설정하는 필드가 CTAB 이라고  추가를 해야 정상적으로 ALV 에서 해당 필드에 색상이 추가된다.