미리보기 후 출력하면... 미리보기에서 실행되었던 코드가 다시한번 돌아갑니다...
그래서 출력하면 사용된변수라던지.. 레코드가 마지막으로 되어 있어서 마지막 페이지가 찍힐 수 있습니다.
이걸 체크해보세요..
초보빌더 님이 쓰신 글 :
: DB의 데이터를 읽어 여러페이지의 출력물을 미리보기로 만들었습니다.
: 그리고 미리보기 상태에서 출력 버튼을 클릭하면 여러페이지 중 가장 마지막 페이지가 출력됩니다.
:
: qrreport.preview 하면 미리보기에 출력이 다 나오고 여기서 출력누르면 마지막 페이지 인쇄가 인쇄되네요.
:
: qrreport.print하면 모든 출력물 정상적으로 인쇄
: 됩니다. 델파이 6버전 사용하고 있고요.
:
:
: 출력 관련 소스입니다.
:
: procedure TfrmPrt_Receipt.qrReceiptNeedData(Sender: TObject;
: var MoreData: Boolean);
: begin
: //출력 데이터가 게속 있는지 확인.
: if (endPrint) then
: begin
: MoreData := true; //계속 출력
: qrReceipt.NewPage;
: end
: else
: begin
: MoreData := false; //출력 종료
: end;
: end;
:
: procedure TfrmPrt_Receipt.qrReceiptBeforePrint(Sender: TCustomQuickRep;
: var PrintReport: Boolean);
: begin
: endPrint := true; // 출력 데이터가 있는 것으로 초기화
: end;
:
: procedure TfrmPrt_Receipt.detailReceiptBeforePrint(Sender: TQRCustomBand;
: var PrintBand: Boolean);
: begin
: //초기화
: datCast1.Caption := ''; //방송
: datDate1.Caption := ''; //사용일자
: datUsed1.Caption := ''; //사용항목
: datPaper1.Caption := ''; //영수증금액
: datMoney1.Caption := ''; //사용금액
: datMans1.Lines.Clear; //참가자
: datSplite1.Caption := ''; //분할여부
: datReceipt1.Caption := ''; //영수증코드
: datUsedMan1.Caption := ''; //입금자
:
: datCast2.Caption := ''; //방송
: datDate2.Caption := ''; //사용일자
: datUsed2.Caption := ''; //사용항목
: datPaper2.Caption := ''; //영수증금액
: datMoney2.Caption := ''; //사용금액
: datMans2.Lines.Clear; //참가자
: datSplite2.Caption := ''; //분할여부
: datReceipt2.Caption := ''; //영수증코드
: datUsedMan2.Caption := ''; //입금자
:
: // #1 좌측 데이터 저장 =====================================================
: datCast1.Caption := Trim(copy(Trim(frmExpnMang.cboCast.Text), 1, Length(Trim( frmExpnMang.cboCast.Text)) - 18)); //방송
: datDate1.Caption := frmMain.dateEncode(Trim(frmDb.ADOSubQuery.FieldByName('used_date').AsString)); //사용일자
: datUsed1.Caption := Trim(frmDb.ADOSubQuery.FieldByName('gubn_name').AsString); //사용항목
: datPaper1.Caption := frmMain.moneyEncode(Trim(frmDb.ADOSubQuery.FieldByName('rece_payx').AsString)); //영수증금액
: datMoney1.Caption := frmMain.moneyEncode(Trim(frmDb.ADOSubQuery.FieldByName('used_mony').AsString)); //사용금액
: datUsedMan1.Caption := Trim(frmDb.ADOSubQuery.FieldByName('user_name').AsString); //입력자
: datMans1.Lines.Add(Trim(frmDb.ADOSubQuery.FieldByName('used_mans').AsString)); //참가자
: datReceipt1.Caption := Trim(frmDb.ADOSubQuery.FieldByName('rece_code').AsString); //영수증코드
: if (frmDb.ADOSubQuery.FieldByName('asSplite').AsInteger > 1) then
: datSplite1.Caption := '[분할 영수증]다른 부착용지를 확인하십시오' //분할여부
: else
: datSplite1.Caption := '';
: updateRecePutx(Trim(frmDb.ADOSubQuery.FieldByName('expn_code').AsString)); //인쇄플레그 저장
: // #1 좌측 데이터 저장 =====================================================
:
:
:
: //동일한 항목이면 우측 출력물 위치에 출력하고 항목이 다르면 페이지를 넘겨 출력한다.
: //기존항목 저장
: tmpGubn := Trim(frmDb.ADOSubQuery.fieldByName('gubn_code').AsString);
: //새로운 출력데이터 로드
: frmDb.ADOSubQuery.Next;
: //기존항목 = 새로운 출력데이터를 비교한다.
: if (tmpGubn = Trim(frmDb.ADOSubQuery.fieldByName('gubn_code').AsString)) then
: begin
: //같은 항목일 경우 데이터가 끝났으면 신규데이터가 아니므로 우측 출력물에 빈칸을 저장한다.
: if frmDb.ADOSubQuery.Eof then
: begin
: //더이상 출력할 출력물이 없다.
: endPrint := false;
: end
: else
: begin
: // #2 우측 데이터 저장 =============================================
: datCast2.Caption := Trim(copy(Trim(frmExpnMang.cboCast.Text), 1, Length(Trim( frmExpnMang.cboCast.Text)) - 18)); //방송
: datDate2.Caption := frmMain.dateEncode(Trim(frmDb.ADOSubQuery.FieldByName('used_date').AsString)); //사용일자
: datUsed2.Caption := Trim(frmDb.ADOSubQuery.FieldByName('gubn_name').AsString); //사용항목
: datPaper2.Caption := frmMain.moneyEncode(Trim(frmDb.ADOSubQuery.FieldByName('rece_payx').AsString)); //영수증금액
: datMoney2.Caption := frmMain.moneyEncode(Trim(frmDb.ADOSubQuery.FieldByName('used_mony').AsString)); //사용금액
: datUsedMan2.Caption := Trim(frmDb.ADOSubQuery.FieldByName('user_name').AsString); //입력자
: datMans2.Lines.Add(Trim(frmDb.ADOSubQuery.FieldByName('used_mans').AsString)); //참가자
: datReceipt2.Caption := Trim(frmDb.ADOSubQuery.FieldByName('rece_code').AsString); //영수증코드
: if (frmDb.ADOSubQuery.FieldByName('asSplite').AsInteger > 1) then
: datSplite2.Caption := '[분할 영수증]다른 부착용지를 확인하십시오' //분할여부
: else
: datSplite2.Caption := '';
: updateRecePutx(Trim(frmDb.ADOSubQuery.FieldByName('expn_code').AsString)); //인쇄플레그 저장
: // #2 우측 데이터 저장 =============================================
:
: frmDb.ADOSubQuery.Next;
:
: //해당건이 마지막이면 출력의 마지막이라고 선언한다.
: if frmDb.ADOSubQuery.Eof then
: endPrint := false;
: end;
: end
: else
: begin
: if frmDb.ADOSubQuery.Eof then
: endPrint := false;
: end;
: end;
|