안녕하세요. 제가 알고 있는 방법을 설명하겠습니다.
도움이 되면 좋은데....
OnBeforePrint는 퀵리포터에서 대부분의 출력 오브젝이 가지고 있는 이벤트입니다.
중복되는 자료의 출력을 제한하려면 아마도 디테일밴드의 OnBeforeEvent를 이용하시면
될 겁니다. 예를 들어 주문내용을 출력하려는데 고객코드가 같은 것은 출력하지 않는다고
가정하면 아래와 같을 겁니다.
일단 폼선언부에서 변수로
BeforeCustomCo : string;이라고 선언해 둡니다. 그리고
디폴트값을 폼 OnShow이벤트에서 정의합니다.
BeforeCustomCo := '';
그리고 테이블명은 aTable이라고 가정하고 고객코드 필드명은
CustomCo라고 가정합니다.
그리고 아래의 디테일 OnBeforePrint를 정의합니다.
procedure TRepFm.DetailBandBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
if aTable.FieldByName('CustomCo').AsString = BeforeCustomCo then
PrintBand := False; // False이면 현재 레코드는 출력하지 않음.
end;
위의 예는 아예 중복되는 레코드자체를 아예 출력하지 않는 경우이고, 다음과 같은
가정도 할 수 있습니다. 즉 중복되는 레코드를 출력을 하기는 하는데, CustomCo와
같이 중복되는 필드의 정보는 연속해서 찍을 필요가 없는 경우지요.
즉 주문내역 목록을 아래와 같이 출력할 경우입니다.
----------------------------------------
고객코드 고객성명 제품명 수량 단가 금액
----------------------------------------
001 홍길동 라디오 10 100 1000
홍길동 TV 1 1000 1000
002 춘향이 비디오 1 100 100
춘향이 라디오 6 100 600
위와 같이 고객코드는 중복해서 출력할 필요가 없는 경우에는 디테일 밴드의
OnBeforeEvent를 이용하는 것이 아니라 고객코드를 출력하기 위한 TQRDBText의
OnPrint이벤트를 이용합니다.
예를 들어 고객코드를 출력하기 위한 TQRDBText의 이름을 TxtCustomCo라고
정의 했다면 아래와 같이 이벤트가 생성됩니다.
procedure TRepFm.TxtCustomCoPrint(sender: TObject; var Value: string);
begin
if aTable.FieldByName('CustomCo').AsString = BeforeCustomCo then
Value := ''; // Value 값이 출력될 문자열입니다.
end;
그럼 좋은 하루 되세요....
|