DevHyun

FastReport5 Stacked Chart 사용하여 보고서 출력물 만들기 본문

Delphi

FastReport5 Stacked Chart 사용하여 보고서 출력물 만들기

D3V3L0P3R 2025. 5. 23. 17:53

 

 

- FastReport5를 사용하여 위와 같은 보고서 출력물 만들기

 

1. FrxPreview 컴포넌트를 사용하여 출력전에, 미리 프로그램 화면에 뿌려서 출력물을 확인 할 수 있도록 설계

 

2. Delphi에서 다음과 같이 써주면 frxReport1의 내용이 frxPreview1에 뿌려짐

frxReport1.PrepareReport(True);


3. report 폼에서 Report>dataset에서 해당 폼의 dataset 선택

 

4. report 폼에 MasterData 추가 및 dataset 연결

 

5. GroupHeader 추가

: 쿼리 결과의 ROW가 여러개일 경우 원하는 FIELD명으로 GROUPING 해주는 역할

: Drill-Down의 경우 GroupHeader까지 보여주고, DetailData나 GroupFooter는 숨겨지고 Report 화면에서 GroupHeader를 클릭하면 보여주는 형식의 옵션

 

6. DetailData 추가 및 Dataset 연결

: Filter기능도 있지만 사용방법은 더 확인해봐야 할듯([RDBM."COLOR"] <> 'BK' << 작동안함)

 

 

7. TFrmMemoView를 사용하여 내용들을 표현하였으며, Dataset의 컬럼을 사용하려면 [RDBM."COLOR"] 와 같이 입력해주어야 함.

 

8. MemoView의 Frame 추가하는 방법은 ObjectInspector에서 Frame 더블클릭 후 지정

 

9. 이미지는 이렇게 연결하였으나, 작동안하는것으로 보아서는 확인이 더 필요함(컬럼값이 BLOB 이 아니라서 그럴 수도있고, 연동이 잘못되었을수도 있으나 아직 파악 못함)

 

10. 차트 추가

 

11. 차트와 Dataset 연결
: 나의 경우는 현업 요구사항을 표현하기 위해 stack chart를 쓰고 BottomAxis를 수동으로 바꾸고 최소 최대값, 그리고 차이 값을 넣어서 stack 100% 처럼 사용했음

 



var
  FrxChart: TChart;
  Chart: TfrxChartView;
  
  begin
	Chart := frxReport1.FindObject('Chart1') as TfrxChartView;
	FrxChart := TChart(Chart.Chart); // 앞의 chart는 var에서 선언한 chart이고 뒤에 chart는 frxreport의 chart
    FrxChart.BottomAxis.Automatic := False;
    FrxChart.BottomAxis.Minimum   := 0;
    FrxChart.BottomAxis.Maximum   := 100;
    FrxChart.BottomAxis.Increment := 10;
  end;

 

 

 


13. 사용한 properties(series별 설정)

: Label 은 Y축에 표현되는 값(ex.색상정보)

: Y축은 실제로 그 색상정보에 해당하는 컬럼

: 쿼리는 이런식으로 횡으로 펼처서 select


: Marks = stacked 그래프를 기준으로 막대에 Label을 표현해주는데 visible false시 숨길 수 있음

: Sort order는 값을 표현할때 정렬 순서

: MultiBar는 그래프의 bar 스타일인데, 나처럼 bar위에 bar가 쌓이는 형식을 쓰려면 mbStacked로 설정

 

12. 사용한 properties(차트별 설정)

: Legend는 범례이고 Alignment로 위치를 선택 가능(나의 경우 bottom)

: 차트 만들때 3D를 체크해제 했는데도 조금 3D기가 있어서 View3D 체크 해제해서 완전 Flat한 Chart로 만듦

 

: Delphi에서 코딩으로 Legend의 font크기와 fotn에 있는 음영 제거(Plain)

FrxChart.Legend.TextStyle := ltsPlain;
FrxChart.Legend.Font.Size := 5;


13. 끝

 



14. 추가로 공부 해야 할 사항

: GroupHeader에서 Grouping을 했으나, 쿼리의 총 row의 수가 6개면 Chart의 Y축에 6개의 색상이 보이는 현상

: 내 생각엔 master가 1개, detail3개 master 1개 detail 3개 chart도 2개면, chart의 y축은 (3컬러 / 3컬러) 나눠서 보여야 하지 않을까?

: 해당 report를 6분할로 한장에 찍을수 있는 방법

Comments