Q&A

  • 퀵레포트에서 이중 그룹 형태로 출력을 하려는데 어떻게..
안녕하십니까?

벌써 5일째이군요. 퀵레포트를 이용하여 그룹별 출력을 하려고 하는데
제가 아직 무지한탓에 처리 하지 못하고 있읍니다.

제발 도움좀 부탁 드릴께요.

먼저 두개의 디비에서 하나는 청구 내역을 가지고 있고 하나는 수금 내역을
가지고 있는 화일 입니다.
이두개의 디비를 이용하여 청구 내역에 대한 수금 현황을 출력하려고 합니다.

----------------------------------------------------------
거래처    청구일자     청구금액       수금일자      수금액
----------------------------------------------------------
강아지
         2002-09-01  2,000,000
         2002-09-05    500,000
                                      2002-09-07    150,000
                                      2002-09-08    800,000
-----------------------------------------------------------
소 계                2,500,000                      950,000
-----------------------------------------------------------            
하나로
         2002-09-04  1,000,000
         2002-09-05    500,000
                                      2002-09-05    250,000
                                      2002-09-06    840,000
-----------------------------------------------------------
소 계                1,500,000                    1,090,000
-----------------------------------------------------------            

위의 형태로 출력을 하려고 하는데 도저히 되지를 않아요
어떻게 해야 하나요
이제는 울음만 나올려고 해요.

아시는분 제발 부탁 릘께요...
1  COMMENTS
  • Profile
    별볼일없는 2002.09.12 19:59

    두가지 방법이 있는데
    첫번째는
      컬럼 헤드
      그룹 헤드
      디테일
      그룹 푸드
    벤드를 이렇게 만듬니다

    여기서 중요한 점은 QuickRep date set 에 하나의 쿼리가 선택되어져있어야 하고 그 쿼리로 위와 같은 형태의 모양으로 정렬이 되었어야 합니다.
    즉 order by 가 이름으로 정렬이 되야 되겠죠

    그리고 그룹에는 라벨 또는 dbtext 를 두고 쿼리의 이름 필드를 연결하고
    그룹 속성중에 expression 에 그룹 조건을 만들어 줍니다. 당연히 이름이 되겠죠 이때 쿼리는 퀵리포트에 두는 것이 작업하기 편합니다. 아닌경우 코딩상으로 프로뷰하시기 전에 코디해야 합니다(쿼리는 action = true 하심 필드를 모두볼수 있습니다.)
    그리고 디테일은 평소 하시는데로 하심 될것이고
    마지막에 그룹푸드에 소개를 구하는데 소개는 디테일 beforprint 이벤트에 쿼리
    가 읽을때 마다 "+" 하심 될겁니다.


    두번째는
    스트링 그리드에 모든 값을 정의합니다.
    그리고 퀵리포트에 needdate 이벤트가 있슴다.
    needdate는 MoreData 가 False 일때 까지 출력하게 됩니다.
    procedure Tkj_print_Form.QuickRep1NeedData(Sender: TObject;
      var MoreData: Boolean);

    begin
       if kunjuk_Form.StringAlignGrid1.RowCount  <= rowcount then  //strgird와 rowcount 가 같거나 커지면 출력을 그만둔다.
        MoreData := false
       else
        MoreData := true ;
       if MoreData = true then  
        begin
         if (kunjuk_Form.StringAlignGrid1.cells[10,RowCount] <> '') and (kunjuk_Form.StringAlignGrid1.cells[10,RowCount] <> '#') then
           QRLabel_des.Font := QRLabel11.Font
         else
           QRLabel_des.Font := QRLabel_no.Font ;
         QRLabel_no.Caption      := kunjuk_Form.StringAlignGrid1.cells[0,RowCount];
         QRLabel_code.Caption    := kunjuk_Form.StringAlignGrid1.cells[2,RowCount];
         QRLabel_des.Caption     := kunjuk_Form.StringAlignGrid1.cells[1,RowCount];
         QRLabel_unit.Caption    := kunjuk_Form.StringAlignGrid1.cells[4,RowCount];
         QRLabel_div.Caption     := kunjuk_Form.StringAlignGrid1.cells[9,RowCount];

         if head_print_form.Cbb_mon_danui.Text = '₩' then
           begin
             QRLabel_price.Caption   := kunjuk_Form.StringAlignGrid1.cells[5,RowCount];
             QRLabel_amount.Caption  := kunjuk_Form.StringAlignGrid1.cells[7,RowCount];
           end
         else
           begin
             QRLabel_price.Caption   := kunjuk_Form.StringAlignGrid1.cells[6,RowCount];
             QRLabel_amount.Caption  := kunjuk_Form.StringAlignGrid1.cells[8,RowCount];
           end ;
         if (kunjuk_Form.StringAlignGrid1.cells[3,RowCount] = 'T O T A L =') or
            (kunjuk_Form.StringAlignGrid1.cells[3,RowCount] = 'SUB TOTAL =') or
            ((kunjuk_Form.StringAlignGrid1.cells[10,RowCount] <> '-') and
             (kunjuk_Form.StringAlignGrid1.cells[10,RowCount] <> '')) then
            begin
              QRLabel_subtitle.Caption := kunjuk_Form.StringAlignGrid1.cells[3,RowCount];
              QRLabel_qty.Caption      := '' ;
            end
         else
           begin
             QRLabel_qty.Caption      := kunjuk_Form.StringAlignGrid1.cells[3,RowCount];
             QRLabel_subtitle.Caption := '' ;
           end ;
         if (kunjuk_Form.StringAlignGrid1.cells[3,RowCount] = 'T O T A L =') or
            (kunjuk_Form.StringAlignGrid1.cells[3,RowCount] = 'SUB TOTAL =') then
            begin
              QRShape1.Width := 334 ;
              QRShape1.Pen.Width := 2 ;
              QRLabel_amount.Caption   := head_print_form.Cbb_mon_danui.Text + '' + QRLabel_amount.Caption ;          
            end
         else
           begin
             QRShape1.width := 0 ;
             QRShape1.Pen.Width := 0 ;
           end ;
        end;
        rowcount := rowcount + 1;

    위에 내용은 좀 복잡한 겁니다. 참고 하심 도움이 될겁니다.
    필요한 벤드는 디테일만 있음 됩니다. 라벨을 사용해야 하구염
    전역 번수로rowcount를 사용해야 하고 퀵리포트 beforprint에 변수값 초기화 해야 합니다. 안그러면 미리보기 할때와 출력할때 값이 틀려집니다.



    기타 자세한 사항은 내용이 넘 길어서 줄입니다.
    도움이 될란지 머리만 더 혼란하게 한건 아닌지..
    별 볼일 없는 넘이~~ 즐코