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;
|