Q&A

  • QReport출력시 레코드 수 구하기!
스트링그리드를 레포트출력하려고 합니다.

그런데 페이지당 25개의 레코드가 출력하면 맨 마지막줄에 합계를 구하고 다음페이지로 넘길려고 합니다. 어떻게해야하나요?

1  COMMENTS
  • Profile
    이재식 1999.12.20 05:04
    이재민 wrote:

    > 스트링그리드를 레포트출력하려고 합니다.

    > 그런데 페이지당 25개의 레코드가 출력하면 맨 마지막줄에 합계를 구하고 다음페이지로 넘길려고 합니다. 어떻게해야하나요?



    이재식 Wrote :

    안녕하세요?

    스트링그리드에 있는 내용을 출력하신다면

    onNeedData이벤트를 쓰셨을 거라고 생각됩니다.

    맞나요?

    이것역시 사람마다 여러 방법이 있겠습니다만,

    저는 여기서 그냥 제 나름대로의 편리한(?)방법 한개 말씀드릴께요.

    우선 레코드 합계를 맨 마지막에 출력을 하신다고 했습니다.

    즉, 25건의 레코드가 출력이 되고 그에대한 합계가 바로 밑에

    출력이 되는 것이 아니라 맨 마지막, 즉 한 페이지의 아래쪽 여백 바로위쯤이

    되겠죠. 맞죠?

    그럼, 디자인시에 합계를 위한 QRLabel컴포넌트를 레포트 아래쪽에

    놓으세요.

    그래서 onNeedData이벤트안에서 25건이 출력이 되었다면

    그에대한 합계역시 그전에 구했을 것입니다. 누적연산을 해서 말이죠.

    그 결과값을 어떤 변수가 가지고 있을 것입니다.

    그래서 25건이 출력되었다면

    아까 얘기한 합계 출력을 위한 컴포넌트에 출력을 하는 것이죠.

    그런다음 QuickRep1.QRPrinter.NewPage or QuickRep1.QRPrinter.NewColumn 두 개중

    한개를 쓰면 페이지 스킵이 일어납니다.

    NewPage매소드는 페이지 스킵을 하되 칼럼헤더를 찍지 않습니다.

    NewColumn역시 페이지 스킵을 하되 이것은 칼럼헤더를 찍습니다.

    이런 차이가 있습니다.

    대충 정리를 하면 다음과 같습니다.

    1. 디자인시 합계 출력을 위한 컴포넌트를 미리 올려놓는다.

    (예를 들어 QRLabel1이라고 합시다)

    2. OnNeedData이벤트에 25건이 되었는지를 판단한다.

    3. 그래서 이렇게 한다.

    if DataNum = 25 then

    begin

    QRLabel1.Caption := IntToStr(DataHap) ;

    QuickRep1.QRPrinter.NewColumn(or NewPage)

    DataNum := 0 ;

    DataHap := 0 ;

    end ;

    여기서 DataNum은 한 DetailBand가 출력되었을 시즘에서 누적을 해서

    구하는 것이고요, DataHap역시 출력되는 시점에서 누적을 해서 구하는 것이죠.

    그런다음 다음을 위해서 다시 초기화 작업을 해야 겠죠.

    도움이 되었으면 하는 마음입니다.